Skip to content

Bad results for failing standalone expectations on compound data  #998

Closed
@jgebal

Description

@jgebal

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions