Bad results for failing standalone expectations on compound data
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.