Closed
Description
Describe the bug
When running standalone expectations in a single session and having more than one failing expectation, the results returned by report are wrong.
This is probably also observable in regular run,when running more than one cursor/object comparison in single test.
Provide version info
utPLSQL v3.1.8
To Reproduce
clear screen
set serverout on
declare
l_actual sys_refcursor;
l_expected sys_refcursor;
begin
open l_actual for select rownum rn from dual connect by level < 5;
open l_expected for select rownum rn from dual connect by level = 1;
ut.expect(l_actual).to_equal(l_expected);
open l_actual for select rownum rn from dual connect by level < 3;
open l_expected for select * from (select rownum rn from dual connect by level < 3) order by 1 desc;
ut.expect(l_actual).to_equal(l_expected);
end;
/
rollback;
This produces output:
FAILURE
Actual: refcursor [ count = 4 ] was expected to equal: refcursor [ count = 1 ]
Diff:
Rows: [ 3 differences ]
Row No. 2 - Extra: <RN>2</RN>
Row No. 3 - Extra: <RN>3</RN>
Row No. 4 - Extra: <RN>4</RN>
at "anonymous block", line 7
FAILURE
Actual: refcursor [ count = 2 ] was expected to equal: refcursor [ count = 2 ]
Diff:
Rows: [ 2 differences ]
Row No. 1 - Actual: <RN>1</RN>
Row No. 1 - Expected: <RN>2</RN>
Row No. 2 - Actual: <RN>2</RN>
Row No. 2 - Expected: <RN>1</RN>
Row No. 2 - Extra: <RN>2</RN>
Row No. 3 - Extra: <RN>3</RN>
Row No. 4 - Extra: <RN>4</RN>
at "anonymous block", line 10
However adding a commit or rollback in between expectations fixes the issue.
clear screen
set serverout on
declare
l_actual sys_refcursor;
l_expected sys_refcursor;
begin
open l_actual for select rownum rn from dual connect by level < 5;
open l_expected for select rownum rn from dual connect by level = 1;
ut.expect(l_actual).to_equal(l_expected);
rollback;
open l_actual for select rownum rn from dual connect by level < 3;
open l_expected for select * from (select rownum rn from dual connect by level < 3) order by 1 desc;
ut.expect(l_actual).to_equal(l_expected);
end;
/
rollback;
FAILURE
Actual: refcursor [ count = 4 ] was expected to equal: refcursor [ count = 1 ]
Diff:
Rows: [ 3 differences ]
Row No. 2 - Extra: <RN>2</RN>
Row No. 3 - Extra: <RN>3</RN>
Row No. 4 - Extra: <RN>4</RN>
at "anonymous block", line 7
FAILURE
Actual: refcursor [ count = 2 ] was expected to equal: refcursor [ count = 2 ]
Diff:
Rows: [ 2 differences ]
Row No. 1 - Actual: <RN>1</RN>
Row No. 1 - Expected: <RN>2</RN>
Row No. 2 - Actual: <RN>2</RN>
Row No. 2 - Expected: <RN>1</RN>
at "anonymous block", line 11
Expected behavior
Diff reports should always provide valid outputs.
To fix this, we can delete the diff table as part of diff cleanup.