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

Skip to content

Commit 0fcfe74

Browse files
committed
Now reporters can decide what and how to display.
Removed formatting of assert message from the assertions. Added to_string conversion functions to convert asserted to it's string representation. Added unit tests for new utility functions. Enriched to ut_assert_result with fields: -expected/actual type -expected/actual value string -added propagation of name to the ut_assert_result (to identify assertion type)
1 parent 97cb870 commit 0fcfe74

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)