Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 91ba637

Browse files
committed
Fixed a bug, where empty cursor compared with null cursor was giving success.
Added test for empty vs null cursor.
1 parent 72261e1 commit 91ba637

3 files changed

Lines changed: 60 additions & 65 deletions

File tree

source/expectations/data_values/ut_data_value_refcursor.tpb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ create or replace type body ut_data_value_refcursor as
150150
l_xpath := coalesce(self.exclude_xpath, l_other.exclude_xpath);
151151
if a_other is of (ut_data_value_refcursor) then
152152
l_other := treat(a_other as ut_data_value_refcursor);
153-
154153
-- Find differences
155154
execute immediate 'insert into ' || l_ut_owner || '.ut_cursor_data_diff ( row_no )
156155
select nvl(exp.row_no, act.row_no)
@@ -164,10 +163,11 @@ create or replace type body ut_data_value_refcursor as
164163
where nvl(dbms_lob.compare(xmlserialize( content exp.row_data no indent), xmlserialize( content act.row_data no indent)),1) != 0'
165164
using in l_xpath, l_xpath, self.DATA_VALUE, l_xpath, l_xpath, l_other.DATA_VALUE;
166165

167-
if ( sql%rowcount > 0 ) then
168-
l_result := 1;
169-
else
166+
--result is OK only if both are same
167+
if sql%rowcount = 0 and self.row_count = l_other.row_count then
170168
l_result := 0;
169+
else
170+
l_result := 1;
171171
end if;
172172
else
173173
raise value_error;
Lines changed: 42 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
create or replace package body test_expectations_cursor is
22

3+
procedure cleanup_expectations is
4+
begin
5+
ut3.ut_expectation_processor.clear_expectations();
6+
end;
7+
38
procedure setup_temp_table_test
49
as
510
pragma autonomous_transaction;
@@ -17,147 +22,127 @@ create or replace package body test_expectations_cursor is
1722
execute immediate 'drop table gtt_test_table';
1823
end;
1924

20-
procedure test_cursor_w_temp_table
25+
procedure with_temp_table
2126
as
2227
pragma autonomous_transaction;
2328
l_expected sys_refcursor;
2429
l_actual sys_refcursor;
2530
begin
26-
2731
-- Arrange
2832
execute immediate 'insert into gtt_test_table ( value ) values ( ''Test-entry'' )';
29-
3033
open l_expected for select 'Test-entry' as value from dual;
3134
open l_actual for 'select * from gtt_test_table';
32-
3335
--Act - execute the expectation on cursor opened on GTT
3436
ut3.ut.expect( l_actual ).to_equal( l_expected );
35-
3637
--Assert - check that expectation was executed successfully
3738
ut.expect(ut3.ut_expectation_processor.get_status()).to_equal(ut3.ut_utils.tr_success);
38-
39-
--Cleanup
40-
ut3.ut_expectation_processor.clear_expectations();
41-
4239
rollback;
4340
end;
4441

4542

46-
procedure test_cursor_success
43+
procedure success_on_same_data
4744
as
4845
l_expected sys_refcursor;
4946
l_actual sys_refcursor;
5047
begin
51-
5248
-- Arrange
5349
open l_expected for
54-
select 1 as my_num,
55-
'This is my test string' as my_string,
56-
to_clob('This is an even longer test clob') as my_clob,
57-
to_date('1984-09-05', 'YYYY-MM-DD') as my_date
58-
from dual;
59-
50+
select 1 as my_num,
51+
'This is my test string' as my_string,
52+
to_clob('This is an even longer test clob') as my_clob,
53+
to_date('1984-09-05', 'YYYY-MM-DD') as my_date
54+
from dual;
6055
open l_actual for
61-
select 1 as my_num,
62-
'This is my test string' as my_string,
63-
to_clob('This is an even longer test clob') as my_clob,
64-
to_date('1984-09-05', 'YYYY-MM-DD') as my_date
65-
from dual;
66-
56+
select 1 as my_num,
57+
'This is my test string' as my_string,
58+
to_clob('This is an even longer test clob') as my_clob,
59+
to_date('1984-09-05', 'YYYY-MM-DD') as my_date
60+
from dual;
6761
--Act - execute the expectation on cursor opened on GTT
6862
ut3.ut.expect( l_actual ).to_equal( l_expected );
69-
7063
--Assert - check that expectation was executed successfully
7164
ut.expect(ut3.ut_expectation_processor.get_status()).to_equal(ut3.ut_utils.tr_success);
72-
73-
--Cleanup
74-
ut3.ut_expectation_processor.clear_expectations();
75-
7665
end;
7766

78-
procedure test_cursor_success_on_empty
67+
procedure success_on_empty
7968
as
8069
l_expected sys_refcursor;
8170
l_actual sys_refcursor;
8271
begin
83-
8472
-- Arrange
8573
open l_expected for select * from dual where 1=0;
8674
open l_actual for select * from dual where 1=0;
87-
8875
--Act - execute the expectation on cursor opened on GTT
8976
ut3.ut.expect( l_actual ).to_equal( l_expected );
90-
9177
--Assert - check that expectation was executed successfully
9278
ut.expect(ut3.ut_expectation_processor.get_status()).to_equal(ut3.ut_utils.tr_success);
79+
end;
9380

94-
--Cleanup
95-
ut3.ut_expectation_processor.clear_expectations();
81+
procedure success_on_null
82+
as
83+
l_expected sys_refcursor;
84+
l_actual sys_refcursor;
85+
begin
86+
--Act - execute the expectation on cursor opened on GTT
87+
ut3.ut.expect( l_actual ).to_equal( l_expected );
88+
--Assert - check that expectation was executed successfully
89+
ut.expect(ut3.ut_expectation_processor.get_status()).to_equal(ut3.ut_utils.tr_success);
90+
end;
9691

92+
procedure fail_null_vs_empty
93+
as
94+
l_expected sys_refcursor;
95+
l_actual sys_refcursor;
96+
begin
97+
-- Arrange
98+
open l_expected for select * from dual where 1=0;
99+
--Act - execute the expectation on cursor opened on GTT
100+
ut3.ut.expect( l_actual ).to_equal( l_expected );
101+
--Assert - check that expectation was executed successfully
102+
ut.expect(ut3.ut_expectation_processor.get_status()).to_equal(ut3.ut_utils.tr_failure);
97103
end;
98104

99-
--%test(Test cursor comparison fails on different content)
100-
procedure test_cursor_fail_on_difference
105+
procedure fail_on_difference
101106
as
102107
l_expected sys_refcursor;
103108
l_actual sys_refcursor;
104109
begin
105-
106110
-- Arrange
107111
open l_expected for select to_clob('This is an even longer test clob') as my_clob from dual;
108112
open l_actual for select to_clob('Another totally different story') as my_clob from dual;
109-
110113
--Act - execute the expectation on cursor opened on GTT
111114
ut3.ut.expect( l_actual ).to_equal( l_expected );
112-
113115
--Assert - check that expectation was executed successfully
114116
ut.expect(ut3.ut_expectation_processor.get_status()).to_equal(ut3.ut_utils.tr_failure);
115-
116-
--Cleanup
117-
ut3.ut_expectation_processor.clear_expectations();
118-
119117
end;
120118

121119
procedure fail_on_expected_missing
122120
as
123121
l_expected sys_refcursor;
124122
l_actual sys_refcursor;
125123
begin
126-
127124
-- Arrange
128125
open l_expected for select 1 as my_num from dual;
129126
open l_actual for select 1 as my_num from dual union all select 1 as my_num from dual;
130-
131127
--Act - execute the expectation on cursor opened on GTT
132128
ut3.ut.expect( l_actual ).to_equal( l_expected );
133-
134129
--Assert - check that expectation was executed successfully
135130
ut.expect(ut3.ut_expectation_processor.get_status()).to_equal(ut3.ut_utils.tr_failure);
136-
137-
--Cleanup
138-
ut3.ut_expectation_processor.clear_expectations();
139-
140131
end;
141132

142133
procedure fail_on_actual_missing
143134
as
144135
l_expected sys_refcursor;
145136
l_actual sys_refcursor;
146137
begin
147-
148138
-- Arrange
149139
open l_expected for select 1 as my_num from dual union all select 1 as my_num from dual;
150140
open l_actual for select 1 as my_num from dual;
151-
152141
--Act - execute the expectation on cursor opened on GTT
153142
ut3.ut.expect( l_actual ).to_equal( l_expected );
154-
155143
--Assert - check that expectation was executed successfully
156144
ut.expect(ut3.ut_expectation_processor.get_status()).to_equal(ut3.ut_utils.tr_failure);
157-
158-
--Cleanup
159-
ut3.ut_expectation_processor.clear_expectations();
160-
161145
end;
146+
162147
end;
163148
/

test/core/expectations/test_expectations_cursor.pks

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,37 @@ create or replace package test_expectations_cursor is
33
--%suite(expectations - cursor)
44
--%suitepath(utplsql.core.expectations.cursor)
55

6+
--%aftereach
7+
procedure cleanup_expectations;
8+
69
procedure setup_temp_table_test;
710
procedure cleanup_temp_table_test;
811

912
--%test(Compares data from cursor on temporary table)
1013
--%beforetest(setup_temp_table_test)
1114
--%aftertest(cleanup_temp_table_test)
12-
procedure test_cursor_w_temp_table;
15+
procedure with_temp_table;
1316

1417
--%test(Returns success for identical data)
15-
procedure test_cursor_success;
18+
procedure success_on_same_data;
1619

1720
--%test(Returns success when both cursors are empty)
18-
procedure test_cursor_success_on_empty;
21+
procedure success_on_empty;
22+
23+
--%test(Returns success when both cursors are null)
24+
procedure success_on_null;
25+
26+
--%test(Returns failure when one cursor is empty and another is null)
27+
procedure fail_null_vs_empty;
1928

2029
--%test(Returns failure when different data present in one of rows)
21-
procedure test_cursor_fail_on_difference;
30+
procedure fail_on_difference;
2231

2332
--%test(Returns failure when more rows exist in actual)
2433
procedure fail_on_expected_missing;
2534

2635
--%test(Returns failure when more rows exist in expected)
2736
procedure fail_on_actual_missing;
37+
2838
end;
2939
/

0 commit comments

Comments
 (0)