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

Skip to content

Commit 7080ac6

Browse files
committed
Added matchers:
-be_false -be_true -be_null -be_not_null Refactored assertions to make code more clean and flexible. Code is now ready for easy implementation of the "not_to" expectation.
1 parent 2716178 commit 7080ac6

68 files changed

Lines changed: 749 additions & 388 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

source/assertions/ut_assertion.tpb

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,108 @@
11
create or replace type body ut_assertion as
2-
final member procedure build_assert_result( self in ut_assertion, a_assert_result boolean, a_assert_name varchar2,
3-
a_expected_value_string in varchar2, a_expected_data_type varchar2 := null) is
2+
3+
final member procedure add_assert_result( self in ut_assertion, a_assert_result boolean, a_assert_name varchar2,
4+
a_expected_value_string in varchar2 := null, a_expected_data_type varchar2 := null) is
45
begin
5-
ut_utils.debug_log('ut_assertion.build_assert_result :' || ut_utils.to_test_result(a_assert_result) || ':' || message);
6+
ut_utils.debug_log('ut_assertion.add_assert_result :' || ut_utils.to_test_result(a_assert_result) || ':' || message);
67
ut_assert_processor.add_assert_result(
78
ut_assert_result(
89
a_assert_name, ut_utils.to_test_result(a_assert_result),
9-
coalesce(a_expected_data_type, self.actual_data.type), self.actual_data.type, a_expected_value_string, self.actual_data.value_string, self.message
10+
coalesce(a_expected_data_type, self.actual_data.type), self.actual_data.type, a_expected_value_string, self.actual_data.to_string(), self.message
1011
)
1112
);
1213
end;
1314

1415
member procedure to_equal(self in ut_assertion, a_expected anydata, a_nulls_are_equal boolean := null) is
1516
begin
1617
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected anydata, a_nulls_are_equal boolean := null)');
17-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(xmltype(a_expected).getclobval()), 'anydata');
18+
self.to_( equal(a_expected) );
1819
end;
1920

2021
member procedure to_equal(self in ut_assertion, a_expected blob, a_nulls_are_equal boolean := null) is
2122
begin
2223
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected blob, a_nulls_are_equal boolean := null)');
23-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'blob');
24+
self.to_( equal(a_expected) );
2425
end;
2526

2627
member procedure to_equal(self in ut_assertion, a_expected boolean, a_nulls_are_equal boolean := null) is
2728
begin
2829
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected boolean, a_nulls_are_equal boolean := null)');
29-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'boolean');
30+
self.to_( equal(a_expected) );
3031
end;
3132

3233
member procedure to_equal(self in ut_assertion, a_expected clob, a_nulls_are_equal boolean := null) is
3334
begin
3435
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected clob, a_nulls_are_equal boolean := null)');
35-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'clob');
36+
self.to_( equal(a_expected) );
3637
end;
3738

3839
member procedure to_equal(self in ut_assertion, a_expected date, a_nulls_are_equal boolean := null) is
3940
begin
4041
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected date, a_nulls_are_equal boolean := null)');
41-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'date');
42+
self.to_( equal(a_expected) );
4243
end;
4344

4445
member procedure to_equal(self in ut_assertion, a_expected number, a_nulls_are_equal boolean := null) is
4546
begin
4647
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected number, a_nulls_are_equal boolean := null)');
47-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'number');
48+
self.to_( equal(a_expected) );
4849
end;
4950

5051
member procedure to_equal(self in ut_assertion, a_expected sys_refcursor, a_nulls_are_equal boolean := null) is
5152
begin
5253
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected sys_refcursor, a_nulls_are_equal boolean := null)');
53-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(to_char(null)), 'refcursor');
54+
self.to_( equal(a_expected) );
5455
end;
5556

5657
member procedure to_equal(self in ut_assertion, a_expected timestamp_unconstrained, a_nulls_are_equal boolean := null) is
5758
begin
5859
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected timestamp_unconstrained, a_nulls_are_equal boolean := null)');
59-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'timestamp');
60+
self.to_( equal(a_expected) );
6061
end;
6162

6263
member procedure to_equal(self in ut_assertion, a_expected timestamp_ltz_unconstrained, a_nulls_are_equal boolean := null) is
6364
begin
6465
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected timestamp_ltz_unconstrained, a_nulls_are_equal boolean := null)');
65-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'timestamp with local time zone');
66+
self.to_( equal(a_expected) );
6667
end;
6768

6869
member procedure to_equal(self in ut_assertion, a_expected timestamp_tz_unconstrained, a_nulls_are_equal boolean := null) is
6970
begin
7071
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected timestamp_tz_unconstrained, a_nulls_are_equal boolean := null)');
71-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'timestamp with time zone');
72+
self.to_( equal(a_expected) );
7273
end;
7374

7475
member procedure to_equal(self in ut_assertion, a_expected varchar2, a_nulls_are_equal boolean := null) is
7576
begin
7677
ut_utils.debug_log('ut_assertion.to_equal(self in ut_assertion, a_expected varchar2, a_nulls_are_equal boolean := null)');
77-
self.build_assert_result( false, 'to_equal', ut_utils.to_string(a_expected), 'varchar2');
78+
self.to_( equal(a_expected) );
7879
end;
7980

8081
member procedure to_(self in ut_assertion, a_expectation ut_expectation) is
81-
l_assert_result ut_assert_result;
82+
l_assert_result boolean;
83+
l_assert_name varchar2(250);
8284
begin
8385
ut_utils.debug_log('ut_assertion.to_(self in ut_assertion, a_expectation ut_expectation)');
84-
l_assert_result :=
85-
case
86-
when self.actual_data is of (ut_data_value_anydata) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_anydata) )
87-
when self.actual_data is of (ut_data_value_blob) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_blob) )
88-
when self.actual_data is of (ut_data_value_boolean) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_boolean) )
89-
when self.actual_data is of (ut_data_value_clob) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_clob) )
90-
when self.actual_data is of (ut_data_value_date) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_date) )
91-
when self.actual_data is of (ut_data_value_number) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_number) )
92-
when self.actual_data is of (ut_data_value_refcursor) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_refcursor) )
93-
when self.actual_data is of (ut_data_value_timestamp) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_timestamp) )
94-
when self.actual_data is of (ut_data_value_timestamp_tz) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_timestamp_tz) )
95-
when self.actual_data is of (ut_data_value_timestamp_ltz) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_timestamp_ltz) )
96-
when self.actual_data is of (ut_data_value_varchar2) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_varchar2) )
97-
end;
98-
l_assert_result.message := self.message;
99-
l_assert_result.name := 'to '||l_assert_result.name;
100-
ut_assert_processor.add_assert_result( l_assert_result );
86+
87+
l_assert_result := a_expectation.run_expectation( self.actual_data );
88+
l_assert_name := 'to '||a_expectation.name;
89+
if a_expectation.expected is not null then
90+
add_assert_result( l_assert_result, l_assert_name, a_expectation.expected.to_string(), a_expectation.expected.type);
91+
else
92+
add_assert_result( l_assert_result, l_assert_name );
93+
end if;
10194
end;
10295

10396
final member procedure to_be_null(self in ut_assertion) is
10497
begin
10598
ut_utils.debug_log('ut_assertion.to_be_null');
106-
self.build_assert_result(ut_utils.int_to_boolean(self.actual_data.is_null), 'to_be_null', null, ut_utils.to_string(to_char(null)));
99+
self.to_( be_null() );
107100
end;
108101

109102
final member procedure to_be_not_null(self in ut_assertion) is
110103
begin
111104
ut_utils.debug_log('ut_assertion.to_be_not_null');
112-
self.build_assert_result(not ut_utils.int_to_boolean(self.actual_data.is_null), 'to_be_not_null', null, ut_utils.to_string(to_char(null)));
105+
self.to_( be_not_null() );
113106
end;
114107

115108
end;

source/assertions/ut_assertion.tps

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ create or replace type ut_assertion as object
22
(
33
actual_data ut_data_value,
44
message varchar2(4000 char),
5-
final member procedure build_assert_result( self in ut_assertion, a_assert_result boolean, a_assert_name varchar2,
6-
a_expected_value_string in varchar2, a_expected_data_type varchar2 := null),
5+
final member procedure add_assert_result( self in ut_assertion, a_assert_result boolean, a_assert_name varchar2,
6+
a_expected_value_string in varchar2 := null, a_expected_data_type varchar2 := null),
77
member procedure to_equal(self in ut_assertion, a_expected anydata, a_nulls_are_equal boolean := null),
88
member procedure to_equal(self in ut_assertion, a_expected blob, a_nulls_are_equal boolean := null),
99
member procedure to_equal(self in ut_assertion, a_expected boolean, a_nulls_are_equal boolean := null),

source/assertions/ut_assertion_boolean.tpb

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@ create or replace type body ut_assertion_boolean as
22

33
overriding member procedure to_equal(self in ut_assertion_boolean, a_expected boolean, a_nulls_are_equal boolean := null) is
44
begin
5-
ut_utils.debug_log('ut_assertion_boolean.to_equal(self in ut_assertion, a_expected boolean)');
5+
ut_utils.debug_log('ut_assertion_boolean.to_equal(self in ut_assertion_boolean, a_expected boolean, a_nulls_are_equal boolean := null)');
66
self.to_( equal(a_expected, a_nulls_are_equal) );
77
end;
88

99
member procedure to_be_true(self in ut_assertion_boolean) is
10-
l_result boolean;
1110
begin
12-
l_result :=
13-
case when self.actual_data is of (ut_data_value_boolean)
14-
then ut_utils.int_to_boolean(treat(self.actual_data as ut_data_value_boolean).value)
15-
else false
16-
end;
17-
self.build_assert_result(
18-
l_result
19-
, 'to_be_true', ut_utils.to_string(true), 'boolean');
11+
ut_utils.debug_log('ut_assertion_boolean.to_be_true(self in ut_assertion_boolean)');
12+
self.to_( be_true() );
13+
end;
14+
15+
member procedure to_be_false(self in ut_assertion_boolean) is
16+
begin
17+
ut_utils.debug_log('ut_assertion_boolean.to_be_false(self in ut_assertion_boolean)');
18+
self.to_( be_false() );
2019
end;
2120

2221
end;
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
create or replace type ut_assertion_boolean under ut_assertion
22
(
33
overriding member procedure to_equal(self in ut_assertion_boolean, a_expected boolean, a_nulls_are_equal boolean := null),
4-
member procedure to_be_true(self in ut_assertion_boolean)
4+
member procedure to_be_true(self in ut_assertion_boolean),
5+
member procedure to_be_false(self in ut_assertion_boolean)
56
)
67
/

source/assertions/ut_assertion_clob.tpb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ create or replace type body ut_assertion_clob as
1515
else
1616
l_condition := treat(self.actual_data as ut_data_value_clob).value like a_mask;
1717
end if;
18-
self.build_assert_result(l_condition, 'to be like', ut_utils.to_string(a_mask)||l_escape_msg);
18+
self.add_assert_result(l_condition, 'to be like', ut_utils.to_string(a_mask)||l_escape_msg);
1919
end;
2020

2121
member procedure to_match(self in ut_assertion_clob, a_pattern in varchar2, a_modifier in varchar2 default null) is
2222
l_modifiers_msg varchar2(100) := case when a_modifier is not null then ' using modifiers '''||a_modifier||'''' end;
2323
begin
24-
self.build_assert_result((regexp_like(treat(self.actual_data as ut_data_value_clob).value, a_pattern, a_modifier)), 'to match', ut_utils.to_string(a_pattern)||l_modifiers_msg);
24+
self.add_assert_result((regexp_like(treat(self.actual_data as ut_data_value_clob).value, a_pattern, a_modifier)), 'to match', ut_utils.to_string(a_pattern)||l_modifiers_msg);
2525
end;
2626

2727
end;

source/assertions/ut_assertion_varchar2.tpb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ create or replace type body ut_assertion_varchar2 as
1515
else
1616
l_condition := treat(self.actual_data as ut_data_value_varchar2).value like a_mask;
1717
end if;
18-
self.build_assert_result(l_condition, 'to be like', ut_utils.to_string(a_mask)||l_escape_msg);
18+
self.add_assert_result(l_condition, 'to be like', ut_utils.to_string(a_mask)||l_escape_msg);
1919
end;
2020

2121
member procedure to_match(self in ut_assertion_varchar2, a_pattern in varchar2, a_modifier in varchar2 default null) is
2222
l_modifiers_msg varchar2(100) := case when a_modifier is not null then ' using modifiers '''||a_modifier||'''' end;
2323
begin
24-
self.build_assert_result((regexp_like(treat(self.actual_data as ut_data_value_varchar2).value, a_pattern, a_modifier)), 'to match', ut_utils.to_string(a_pattern)||l_modifiers_msg);
24+
self.add_assert_result(
25+
(regexp_like(treat(self.actual_data as ut_data_value_varchar2).value, a_pattern, a_modifier))
26+
, 'to match', ut_utils.to_string(a_pattern)||l_modifiers_msg
27+
);
2528
end;
2629

2730
end;

source/expectation_data_values/ut_data_value.tpb

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
create or replace type ut_data_value as object(
22
type varchar2(250 char),
3-
is_null number(1,0),
4-
value_string varchar2(32767 char),
5-
final member procedure init(self in out nocopy ut_data_value, a_type varchar2, a_is_null number, a_value_string varchar2)
3+
not instantiable member function is_null return boolean,
4+
not instantiable member function to_string return varchar2
65
) not final not instantiable
76
/
Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,51 @@
11
create or replace type body ut_data_value_anydata as
2+
23
constructor function ut_data_value_anydata(self in out nocopy ut_data_value_anydata, a_value anydata) return self as result is
4+
begin
5+
self.value := a_value;
6+
self.type := 'anydata';
7+
return;
8+
end;
9+
10+
overriding member function is_null return boolean is
11+
l_is_null boolean;
312
l_data_is_null pls_integer;
413
l_type anytype;
514
l_anydata_accessor varchar2(30);
615
begin
16+
if self.value is null then
17+
l_is_null := true;
18+
elsif self.value.gettypename like '%.%' then
719
--XMLTYPE doesn't like the null beeing passed to ANYDATA so we need to check if anydata holds null Object/collection
8-
920
--check if typename is a schema based object
10-
if a_value.gettypename like '%.%' then
1121
l_anydata_accessor :=
12-
case when a_value.gettype(l_type) = dbms_types.typecode_object then 'getObject' else 'getCollection' end;
22+
case when self.value.gettype(l_type) = dbms_types.typecode_object then 'getObject' else 'getCollection' end;
1323
execute immediate '
1424
declare
15-
l_data '||a_value.gettypename()||';
25+
l_data '||self.value.gettypename()||';
1626
l_value anydata := :a_value;
1727
x integer;
1828
begin
1929
x := l_value.'||l_anydata_accessor||'(l_data);
2030
:l_data_is_null := ut_utils.boolean_to_int(l_data is null);
21-
end;' using in a_value, out l_data_is_null;
31+
end;' using in self.value, out l_data_is_null;
32+
33+
l_is_null := ut_utils.int_to_boolean(l_data_is_null);
2234
end if;
23-
self.value := a_value;
24-
self.init(
25-
'anydata',
26-
l_data_is_null,
35+
return l_is_null;
36+
end;
37+
38+
overriding member function to_string return varchar2 is
39+
begin
40+
return
2741
ut_utils.to_string(
28-
case when ut_utils.int_to_boolean(l_data_is_null) then to_clob(null)
29-
else xmltype(a_value).getclobval() end
30-
)
31-
);
32-
return;
42+
case
43+
when self.is_null() then to_clob(null)
44+
else xmltype(self.value).getclobval()
45+
end
46+
);
3347
end;
48+
49+
3450
end;
3551
/
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
create or replace type ut_data_value_anydata under ut_data_value(
22
value anydata,
3-
constructor function ut_data_value_anydata(self in out nocopy ut_data_value_anydata, a_value anydata) return self as result
3+
constructor function ut_data_value_anydata(self in out nocopy ut_data_value_anydata, a_value anydata) return self as result,
4+
overriding member function is_null return boolean,
5+
overriding member function to_string return varchar2
46
)
57
/

0 commit comments

Comments
 (0)