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

Skip to content

Commit d82bb61

Browse files
authored
Merge pull request #49 from jgebal/feature/rework_asserts
Now reporters can decide what and how to display from the assert
2 parents aee90c2 + 0fcfe74 commit d82bb61

14 files changed

Lines changed: 201 additions & 48 deletions

source/install.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ prompt Installing utplsql framework
77
@@types/ut_composite_object.tps
88
@@types/ut_executable.tps
99
@@types/ut_assert_result.tps
10+
@@types/ut_assert_list.tps
1011
@@ut_assert.pks
1112
@@types/ut_reporter.tps
1213
@@types/ut_reporters_list.tps

source/types/ut_assert_result.tpb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
create or replace type body ut_assert_result is
22

3-
constructor function ut_assert_result(a_result varchar2, a_message varchar2, a_name varchar2 default null)
3+
constructor function ut_assert_result(a_result integer, a_message varchar2, a_name varchar2 default null)
44
return self as result is
55
begin
66
self.name := a_name;
@@ -10,5 +10,20 @@ create or replace type body ut_assert_result is
1010
return;
1111
end ut_assert_result;
1212

13+
constructor function ut_assert_result(a_name varchar2, a_result integer, a_expected_type varchar2, a_actual_type varchar2,
14+
a_expected_value_string varchar2, a_actual_value_string varchar2, a_message varchar2 default null)
15+
return self as result is
16+
begin
17+
self.name := a_name;
18+
self.object_type := 0;
19+
self.result := a_result;
20+
self.message := a_message;
21+
self.expected_type := a_expected_type;
22+
self.actual_type := a_actual_type;
23+
self.expected_value_string := a_expected_value_string;
24+
self.actual_value_string := a_actual_value_string;
25+
return;
26+
end ut_assert_result;
27+
1328
end;
1429
/

source/types/ut_assert_result.tps

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
create or replace type ut_assert_result force under ut_object
22
(
3-
message varchar2(4000 char),
4-
5-
constructor function ut_assert_result(a_result varchar2, a_message varchar2, a_name varchar2 default null)
3+
message varchar2(4000 char),
4+
expected_type varchar2(250 char),
5+
actual_type varchar2(250 char),
6+
expected_value_string varchar2(4000 char),
7+
actual_value_string varchar2(4000 char),
8+
constructor function ut_assert_result(a_result integer, a_message varchar2, a_name varchar2 default null)
9+
return self as result,
10+
constructor function ut_assert_result(a_name varchar2, a_result integer, a_expected_type varchar2, a_actual_type varchar2,
11+
a_expected_value_string varchar2, a_actual_value_string varchar2, a_message varchar2 default null)
612
return self as result
713
)
814
not final

source/types/ut_object.tps

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ create or replace type ut_object as object
22
(
33
name varchar2(250 char),
44
--execution_result ut_execution_result,
5-
result integer(1),
5+
result integer(1),
66
object_type integer(1), --0 - assert, 1 -- test, 2 -- suite
7-
8-
member function result_to_char return varchar2
7+
8+
member function result_to_char return varchar2
99
) not final not instantiable
1010
/

source/uninstall.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ drop type ut_reporters_list;
2222

2323
drop type ut_reporter force;
2424

25+
drop type ut_assert_list;
26+
2527
drop type ut_assert_result;
2628

2729
drop type ut_executable;

source/ut_assert.pkb

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
create or replace package body ut_assert is
22

3-
g_asserts_called ut_objects_list := ut_objects_list();
3+
g_asserts_called ut_assert_list := ut_assert_list();
44

55
function get_aggregate_asserts_result return integer is
66
l_result integer := ut_utils.tr_success;
77
begin
88
ut_utils.debug_log('ut_assert.get_aggregate_asserts_result');
99

1010
for i in 1 .. g_asserts_called.count loop
11-
l_result := greatest(l_result, treat(g_asserts_called(i) as ut_assert_result).result);
11+
l_result := greatest(l_result, g_asserts_called(i).result);
1212
exit when l_result = ut_utils.tr_error;
1313
end loop;
1414
return l_result;
@@ -22,11 +22,16 @@ create or replace package body ut_assert is
2222
end;
2323

2424
function get_asserts_results return ut_objects_list is
25-
l_asserts_results ut_objects_list;
25+
l_asserts_results ut_objects_list := ut_objects_list();
2626
begin
2727
ut_utils.debug_log('ut_assert.get_asserts_results');
28-
l_asserts_results := g_asserts_called;
29-
clear_asserts();
28+
if g_asserts_called is not null and g_asserts_called.count > 0 then
29+
l_asserts_results.extend(g_asserts_called.count);
30+
for i in 1 .. g_asserts_called.count loop
31+
l_asserts_results(i) := g_asserts_called(i);
32+
end loop;
33+
clear_asserts();
34+
end if;
3035
return l_asserts_results;
3136
end get_asserts_results;
3237

@@ -39,17 +44,21 @@ create or replace package body ut_assert is
3944
function build_message(a_message varchar2, a_expected in varchar2, a_actual in varchar2) return varchar2 is
4045
c_max_value_len constant integer := 1800;
4146
begin
42-
return a_message || ', expected: ' || case when length(a_expected) > c_max_value_len then substr(a_expected
43-
,1
44-
,c_max_value_len - 3) || '...' else a_expected end || ', actual: ' || case when length(a_actual) > c_max_value_len then substr(a_actual
45-
,1
46-
,c_max_value_len - 3) || '...' else a_actual end;
47+
return a_message || ', expected: ' || ut_utils.to_string(a_expected)|| ', actual: ' || ut_utils.to_string(a_actual);
4748
end;
4849

49-
procedure build_assert_result(a_test boolean, a_expected in varchar2, a_actual in varchar2, a_message varchar2) is
50+
procedure build_assert_result(
51+
a_assert_result boolean, a_assert_name varchar2, a_expected_type in varchar2, a_actual_type in varchar2,
52+
a_expected_value_string in varchar2, a_actual_value_string in varchar2, a_message varchar2
53+
) is
5054
begin
51-
ut_utils.debug_log('ut_assert.build_assert_result :' || ut_utils.to_test_result(a_test) || ':' || a_message);
52-
add_assert_result(ut_assert_result(ut_utils.to_test_result(a_test), build_message(a_message, a_expected, a_actual)));
55+
ut_utils.debug_log('ut_assert.build_assert_result :' || ut_utils.to_test_result(a_assert_result) || ':' || a_message);
56+
add_assert_result(
57+
ut_assert_result(
58+
a_assert_name, ut_utils.to_test_result(a_assert_result),
59+
a_expected_type, a_actual_type, a_expected_value_string, a_actual_value_string, a_message
60+
)
61+
);
5362
end;
5463

5564
procedure report_error(a_message in varchar2) is
@@ -61,47 +70,47 @@ create or replace package body ut_assert is
6170
--assertions
6271
procedure are_equal(a_expected in number, a_actual in number) is
6372
begin
64-
are_equal('Equality test', a_expected, a_actual);
73+
are_equal(null, a_expected, a_actual);
6574
end;
6675

6776
procedure are_equal(a_msg in varchar2, a_expected in number, a_actual in number) is
6877
begin
69-
build_assert_result((a_expected = a_actual), a_expected, a_actual, a_msg);
78+
build_assert_result((a_expected = a_actual), 'are_equal', 'number', 'number', ut_utils.to_string(a_expected), ut_utils.to_string(a_actual), ut_utils.to_string(a_msg));
7079
end;
7180

7281
procedure are_equal(a_expected in varchar2, a_actual in varchar2) is
7382
begin
74-
are_equal('Equality test', a_expected, a_actual);
83+
are_equal(null, a_expected, a_actual);
7584
end;
7685

7786
procedure are_equal(a_msg in varchar2, a_expected in varchar2, a_actual in varchar2) is
7887
begin
79-
build_assert_result((a_expected = a_actual), a_expected, a_actual, a_msg);
88+
build_assert_result((a_expected = a_actual), 'are_equal', 'varchar2', 'varchar2', ut_utils.to_string(a_expected), ut_utils.to_string(a_actual), ut_utils.to_string(a_msg));
8089
end;
8190

8291
procedure are_equal(a_expected in date, a_actual in date) is
8392
begin
84-
are_equal('Equality test', a_expected, a_actual);
93+
are_equal(null, a_expected, a_actual);
8594
end;
8695

8796
procedure are_equal(a_msg in varchar2, a_expected in date, a_actual in date) is
8897
begin
89-
build_assert_result((a_expected = a_actual), a_expected, a_actual, a_msg);
98+
build_assert_result((a_expected = a_actual), 'are_equal', 'date', 'date', ut_utils.to_string(a_expected), ut_utils.to_string(a_actual), ut_utils.to_string(a_msg));
9099
end;
91100

92101
procedure are_equal(a_expected in timestamp_unconstrained, a_actual in timestamp_unconstrained) is
93102
begin
94-
are_equal('Equality test', a_expected, a_actual);
103+
are_equal(null, a_expected, a_actual);
95104
end;
96105

97106
procedure are_equal(a_msg in varchar2, a_expected in timestamp_unconstrained, a_actual in timestamp_unconstrained) is
98107
begin
99-
build_assert_result((a_expected = a_actual), a_expected, a_actual, a_msg);
108+
build_assert_result((a_expected = a_actual), 'are_equal', 'timestamp', 'timestamp', ut_utils.to_string(a_expected), ut_utils.to_string(a_actual), ut_utils.to_string(a_msg));
100109
end;
101110

102111
procedure are_equal(a_expected in anydata, a_actual in anydata) is
103112
begin
104-
are_equal('Equality test', a_expected, a_actual);
113+
are_equal(null, a_expected, a_actual);
105114
end;
106115

107116
procedure are_equal(a_msg in varchar2, a_expected in anydata, a_actual in anydata) is
@@ -110,12 +119,12 @@ create or replace package body ut_assert is
110119
begin
111120
l_expected := any_data_builder.build(a_expected);
112121
l_actual := any_data_builder.build(a_actual);
113-
build_assert_result((l_expected.eq(l_actual)), l_expected.to_string(), l_actual.to_string(), a_msg);
122+
build_assert_result( l_expected.eq(l_actual), 'are_equal', l_expected.type_name, l_actual.type_name, ut_utils.to_string(l_expected.to_string()), ut_utils.to_string(l_actual.to_string()), ut_utils.to_string(a_msg));
114123
end;
115124

116125
procedure are_equal(a_expected in sys_refcursor, a_actual in sys_refcursor) is
117126
begin
118-
are_equal('Equality test', a_expected, a_actual);
127+
are_equal(null, a_expected, a_actual);
119128
end;
120129

121130
procedure are_equal(a_msg in varchar2, a_expected in sys_refcursor, a_actual in sys_refcursor) is
@@ -124,19 +133,17 @@ create or replace package body ut_assert is
124133
begin
125134
l_expected := any_data_builder.build(a_expected);
126135
l_actual := any_data_builder.build(a_actual);
127-
build_assert_result((l_expected.eq(l_actual)), l_expected.to_string(), l_actual.to_string(), a_msg);
136+
build_assert_result( l_expected.eq(l_actual), 'are_equal', l_expected.type_name, l_actual.type_name, ut_utils.to_string(l_expected.to_string()), ut_utils.to_string(l_actual.to_string()), ut_utils.to_string(a_msg));
128137
end;
129138

130139
procedure this(a_condition in boolean) is
131140
begin
132141
this('Simple assert', a_condition);
133142
end;
143+
134144
procedure this(a_msg in varchar2, a_condition in boolean) is
135145
begin
136-
build_assert_result(a_condition
137-
,'TRUE'
138-
,case a_condition when true then 'TRUE' when false then 'FALSE' else 'NULL' end
139-
,a_msg);
146+
build_assert_result(a_condition, 'this', 'boolean', 'boolean', ut_utils.to_string(true), ut_utils.to_string(a_condition), ut_utils.to_string(a_msg));
140147
end;
141148

142149
end ut_assert;

source/ut_utils.pkb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,34 @@ create or replace package body ut_utils is
2828
$end
2929
end;
3030

31+
32+
function to_string(a_value varchar2) return varchar2 is
33+
begin
34+
return case
35+
when length(a_value) <= gc_max_sring_length then a_value
36+
else substr(a_value,1,gc_overflow_substr_len) || gc_more_data_string
37+
end;
38+
end;
39+
40+
function to_string(a_value boolean) return varchar2 is
41+
begin
42+
return case a_value when true then 'TRUE' when false then 'FALSE' else 'NULL' end;
43+
end;
44+
45+
function to_string(a_value number) return varchar2 is
46+
begin
47+
return to_char(a_value,gc_number_format);
48+
end;
49+
50+
function to_string(a_value date) return varchar2 is
51+
begin
52+
return to_char(a_value,gc_date_format);
53+
end;
54+
55+
function to_string(a_value timestamp_unconstrained) return varchar2 is
56+
begin
57+
return to_char(a_value,gc_timestamp_format);
58+
end;
59+
3160
end ut_utils;
3261
/

source/ut_utils.pks

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,20 @@ create or replace package ut_utils is
1111
tr_failure - one or more asserts failed
1212
tr_error - exception was raised
1313
*/
14-
tr_success constant number(1) := 1; -- test passed
15-
tr_failure constant number(1) := 2; -- one or more asserts failed
16-
tr_error constant number(1) := 3; -- exception was raised
14+
tr_success constant number(1) := 1; -- test passed
15+
tr_failure constant number(1) := 2; -- one or more asserts failed
16+
tr_error constant number(1) := 3; -- exception was raised
1717

18-
tr_success_char constant varchar2(7) := 'Success'; -- test passed
19-
tr_failure_char constant varchar2(7) := 'Failure'; -- one or more asserts failed
20-
tr_error_char constant varchar2(5) := 'Error'; -- exception was raised
18+
tr_success_char constant varchar2(7) := 'Success'; -- test passed
19+
tr_failure_char constant varchar2(7) := 'Failure'; -- one or more asserts failed
20+
tr_error_char constant varchar2(5) := 'Error'; -- exception was raised
21+
22+
gc_max_sring_length constant integer := 4000;
23+
gc_more_data_string constant varchar2(5) := '[...]';
24+
gc_overflow_substr_len constant integer := gc_max_sring_length - length(gc_more_data_string);
25+
gc_number_format constant varchar2(100) := 'TM9';
26+
gc_date_format constant varchar2(100) := 'yyyy-mm-dd hh24:mi:ss';
27+
gc_timestamp_format constant varchar2(100) := 'yyyy-mm-dd hh24:mi:ssxff';
2128
/*
2229
Function: test_result_to_char
2330
returns a string representation of a test_result.
@@ -35,5 +42,15 @@ create or replace package ut_utils is
3542

3643
procedure debug_log(a_message varchar2);
3744

45+
function to_string(a_value varchar2) return varchar2;
46+
47+
function to_string(a_value boolean) return varchar2;
48+
49+
function to_string(a_value number) return varchar2;
50+
51+
function to_string(a_value date) return varchar2;
52+
53+
function to_string(a_value timestamp_unconstrained) return varchar2;
54+
3855
end ut_utils;
3956
/

tests/RunAll.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ set serveroutput on size unlimited format truncated
4040

4141
@@lib/RunTest.sql ut_assert/ut_assert.are_equal.anydata.GivesSuccessWhenComparingTheSameData.sql
4242
@@lib/RunTest.sql ut_assert/ut_assert.are_equal.anydata.GivesFailureWhenComparingDifferentData.sql
43-
@@lib/RunTest.sql ut_assert/ut_assert.are_equal.anydata.PutsObjectStrucureIntoMessage.sql
43+
@@lib/RunTest.sql ut_assert/ut_assert.are_equal.anydata.PutsObjectStrucureIntoAssert.sql
4444
@@lib/RunTest.sql ut_assert/ut_assert.are_equal.cursor.GivesFailureWhenComparingDifferentResultSets.sql
4545
@@lib/RunTest.sql ut_assert/ut_assert.are_equal.cursor.GivesSuccessWhenComparingIdenticalResultSets.sql
4646

@@ -71,6 +71,10 @@ set serveroutput on size unlimited format truncated
7171

7272
@@lib/RunTest.sql ut_assert/ut_assert.are_equal.scalar.FailsToExecuteWhenNullsPassedAsParameters.sql
7373

74+
@@lib/RunTest.sql ut_utils/ut_utils.to_string.verySmallNumber.sql
75+
@@lib/RunTest.sql ut_utils/ut_utils.to_string.veryBigNumber.sql
76+
@@lib/RunTest.sql ut_utils/ut_utils.to_string.Date.sql
77+
@@lib/RunTest.sql ut_utils/ut_utils.to_string.Timestamp.sql
7478
--Global cleanup
7579
drop package ut_example_tests;
7680

tests/ut_assert/ut_assert.are_equal.anydata.PutsObjectStrucureIntoMessage.sql renamed to tests/ut_assert/ut_assert.are_equal.anydata.PutsObjectStrucureIntoAssert.sql

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
PROMPT Gives a success when comparing equal oracle objects
1+
PROMPT Puts Object structure as string into the Assert
22
--Arrange
33
create or replace type department as object(
44
dept_name varchar2(30)
@@ -9,16 +9,16 @@ declare
99
l_expected department := department('HR');
1010
l_actual department := department('IT');
1111
l_result integer;
12-
assert_result ut_assert_result;
12+
l_assert_result ut_assert_result;
1313
begin
1414
--Act
1515
ut_assert.are_equal( anydata.convertObject(l_expected), anydata.convertObject(l_actual) );
1616

17-
assert_result := treat(ut_assert.get_asserts_results()(1) as ut_assert_result);
17+
l_assert_result := treat(ut_assert.get_asserts_results()(1) as ut_assert_result);
1818

1919
--Assert
20-
if assert_result.message like q'[%department(%dept_name => 'HR'%)%]'
21-
and assert_result.message like q'[%department(%dept_name => 'IT'%)%]'
20+
if l_assert_result.expected_value_string like q'[%department(%dept_name => 'HR'%)%]'
21+
and l_assert_result.actual_value_string like q'[%department(%dept_name => 'IT'%)%]'
2222
then
2323
:test_result := ut_utils.tr_success;
2424
else

0 commit comments

Comments
 (0)