Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Bad results for failing standalone expectations on compound data  #998

Copy link
Copy link
Closed
@jgebal

Description

@jgebal
Issue body actions

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

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.