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

Skip to content

Commit 2cdafc7

Browse files
committed
Added 'to_' assertion.
Added 'equal' expectation. Added generic types.
1 parent ab87852 commit 2cdafc7

19 files changed

Lines changed: 212 additions & 48 deletions

examples/demo_expectations.pck

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
drop package demo_expectations;
2+
13
create or replace package demo_expectations is
24

35
-- %suite(Demoing asserts)
@@ -51,6 +53,8 @@ create or replace package demo_expectations is
5153
-- %test(failure of blob with clob)
5254
procedure test16;
5355

56+
-- %test(expectation using ut.expect('value').to_(equal('value'));)
57+
procedure test17;
5458
end;
5559
/
5660

@@ -174,6 +178,11 @@ create or replace package body demo_expectations is
174178
ut.expect(a).to_equal(b);
175179
end;
176180

181+
-- %test(expectation using ut.expect('value').to_(equal('value'));)
182+
procedure test17 is
183+
begin
184+
ut.expect('value').to_(equal('value'));
185+
end;
177186

178187
end;
179188
/

source/assertions/ut_assertion.tpb

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ create or replace type body ut_assertion as
66
ut_assert_processor.add_assert_result(
77
ut_assert_result(
88
a_assert_name, ut_utils.to_test_result(a_assert_result),
9-
coalesce(a_expected_data_type, self.data_type), self.data_type, a_expected_value_string, self.actual_value_string, self.message
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
1010
)
1111
);
1212
end;
@@ -35,16 +35,32 @@ create or replace type body ut_assertion as
3535
self.build_assert_result( false, 'to equal', ut_utils.to_string(a_expected), 'blob');
3636
end;
3737

38+
member procedure to_(self in ut_assertion, a_expectation ut_expectation) is
39+
l_assert_result ut_assert_result;
40+
begin
41+
ut_utils.debug_log('ut_assertion.to_(self in ut_assertion, a_expectation ut_expectation)');
42+
l_assert_result :=
43+
case
44+
when self.actual_data is of (ut_data_value_varchar2) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_varchar2) )
45+
when self.actual_data is of (ut_data_value_number) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_number) )
46+
when self.actual_data is of (ut_data_value_blob) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_blob) )
47+
when self.actual_data is of (ut_data_value_clob) then a_expectation.run_expectation( treat(self.actual_data as ut_data_value_clob) )
48+
end;
49+
l_assert_result.message := self.message;
50+
l_assert_result.name := 'to '||l_assert_result.name;
51+
ut_assert_processor.add_assert_result( l_assert_result );
52+
end;
53+
3854
final member procedure to_be_null is
3955
begin
4056
ut_utils.debug_log('ut_assertion.to_be_null');
41-
self.build_assert_result(ut_utils.int_to_boolean(self.is_null), 'to_be_null', null, ut_utils.to_string(to_char(null)));
57+
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)));
4258
end;
4359

4460
final member procedure to_be_not_null is
4561
begin
4662
ut_utils.debug_log('ut_assertion.to_be_not_null');
47-
self.build_assert_result(not ut_utils.int_to_boolean(self.is_null), 'to_be_not_null', null, ut_utils.to_string(to_char(null)));
63+
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)));
4864
end;
4965

5066
end;

source/assertions/ut_assertion.tps

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
create or replace type ut_assertion as object
22
(
3-
data_type varchar2(250 char),
4-
is_null number(1,0),
5-
actual_value_string varchar2(4000 char),
3+
actual_data ut_data_value,
64
message varchar2(4000 char),
75
final member procedure build_assert_result( self in ut_assertion, a_assert_result boolean, a_assert_name varchar2,
86
a_expected_value_string in varchar2, a_expected_data_type varchar2 := null),
97
member procedure to_equal(self in ut_assertion, a_expected varchar2, a_nulls_are_equal boolean := null),
108
member procedure to_equal(self in ut_assertion, a_expected number, a_nulls_are_equal boolean := null),
119
member procedure to_equal(self in ut_assertion, a_expected clob, a_nulls_are_equal boolean := null),
1210
member procedure to_equal(self in ut_assertion, a_expected blob, a_nulls_are_equal boolean := null),
11+
member procedure to_(self in ut_assertion, a_expectation ut_expectation),
1312
final member procedure to_be_null,
1413
final member procedure to_be_not_null
1514
)

source/assertions/ut_assertion_blob.tpb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,15 @@ create or replace type body ut_assertion_blob as
22

33
constructor function ut_assertion_blob(self in out nocopy ut_assertion_blob, a_actual blob, a_message varchar2 default null) return self as result is
44
begin
5-
self.data_type := 'blob';
65
self.message := a_message;
7-
self.actual := a_actual;
8-
self.actual_value_string := ut_utils.to_string(a_actual);
9-
self.is_null := ut_utils.boolean_to_int( (a_actual is null) );
6+
self.actual_data := ut_data_value_blob('blob', ut_utils.boolean_to_int( (a_actual is null) ), ut_utils.to_string(a_actual), a_actual);
107
return;
118
end;
129

1310
overriding member procedure to_equal(self in ut_assertion_blob, a_expected blob, a_nulls_are_equal boolean := null) is
1411
begin
1512
ut_utils.debug_log('ut_assertion_blob.to_equal(self in ut_assertion, a_expected blob)');
16-
self.build_assert_result(
17-
( (a_expected is null and self.actual is null and coalesce(a_nulls_are_equal, ut_assert_processor.nulls_are_equal()))
18-
or (dbms_lob.compare( a_expected, self.actual ) = 0)), 'to equal', ut_utils.to_string(a_expected)
19-
);
13+
self.to_( equal(a_expected, a_nulls_are_equal) );
2014
end;
2115

2216
end;

source/assertions/ut_assertion_clob.tpb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,15 @@ create or replace type body ut_assertion_clob as
22

33
constructor function ut_assertion_clob(self in out nocopy ut_assertion_clob, a_actual clob, a_message varchar2 default null) return self as result is
44
begin
5-
self.data_type := 'clob';
65
self.message := a_message;
7-
self.actual := a_actual;
8-
self.actual_value_string := ut_utils.to_string(a_actual);
9-
self.is_null := ut_utils.boolean_to_int( (a_actual is null) );
6+
self.actual_data := ut_data_value_clob('clob', ut_utils.boolean_to_int( (a_actual is null) ), ut_utils.to_string(a_actual), a_actual);
107
return;
118
end;
129

1310
overriding member procedure to_equal(self in ut_assertion_clob, a_expected clob, a_nulls_are_equal boolean := null) is
1411
begin
1512
ut_utils.debug_log('ut_assertion_clob.to_equal(self in ut_assertion, a_expected clob)');
16-
self.build_assert_result(
17-
( (a_expected is null and self.actual is null and coalesce(a_nulls_are_equal, ut_assert_processor.nulls_are_equal()))
18-
or (a_expected = self.actual)), 'to equal', ut_utils.to_string(a_expected)
19-
);
13+
self.to_( equal(a_expected, a_nulls_are_equal) );
2014
end;
2115

2216
member procedure to_be_like(self in ut_assertion_clob, a_mask in varchar2, a_escape_char in varchar2 := null) is

source/assertions/ut_assertion_number.tpb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,15 @@ create or replace type body ut_assertion_number as
22

33
constructor function ut_assertion_number(self in out nocopy ut_assertion_number, a_actual number, a_message varchar2 default null) return self as result is
44
begin
5-
self.data_type := 'number';
65
self.message := a_message;
7-
self.actual := a_actual;
8-
self.actual_value_string := ut_utils.to_string(a_actual);
9-
self.is_null := ut_utils.boolean_to_int( (a_actual is null) );
6+
self.actual_data := ut_data_value_number('number', ut_utils.boolean_to_int( (a_actual is null) ), ut_utils.to_string(a_actual), a_actual);
107
return;
118
end;
129

1310
overriding member procedure to_equal(self in ut_assertion_number, a_expected number, a_nulls_are_equal boolean := null) is
1411
begin
1512
ut_utils.debug_log('ut_assertion_number.to_equal(self in ut_assertion, a_expected number, a_nulls_are_equal boolean := null)');
16-
self.build_assert_result(
17-
( (a_expected is null and self.actual is null and coalesce(a_nulls_are_equal, ut_assert_processor.nulls_are_equal()))
18-
or (a_expected = self.actual)) , 'to equal', ut_utils.to_string(a_expected)
19-
);
13+
self.to_( equal(a_expected, a_nulls_are_equal) );
2014
end;
2115

2216
end;

source/assertions/ut_assertion_varchar2.tpb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,15 @@ create or replace type body ut_assertion_varchar2 as
22

33
constructor function ut_assertion_varchar2(self in out nocopy ut_assertion_varchar2, a_actual varchar2, a_message varchar2 default null) return self as result is
44
begin
5-
self.data_type := 'varchar2';
65
self.message := a_message;
7-
self.actual := a_actual;
8-
self.actual_value_string := ut_utils.to_string(a_actual);
9-
self.is_null := ut_utils.boolean_to_int( (a_actual is null) );
6+
self.actual_data := ut_data_value_varchar2('varchar2', ut_utils.boolean_to_int( (a_actual is null) ), ut_utils.to_string(a_actual), a_actual);
107
return;
118
end;
129

1310
overriding member procedure to_equal(self in ut_assertion_varchar2, a_expected varchar2, a_nulls_are_equal boolean := null) is
1411
begin
1512
ut_utils.debug_log('ut_assertion_varchar2.to_equal(self in ut_assertion, a_expected varchar2)');
16-
self.build_assert_result(
17-
( (a_expected is null and self.actual is null and coalesce(a_nulls_are_equal, ut_assert_processor.nulls_are_equal()))
18-
or (a_expected = self.actual)), 'to equal', ut_utils.to_string(a_expected)
19-
);
13+
self.to_( equal(a_expected, a_nulls_are_equal) );
2014
end;
2115

2216
member procedure to_be_like(self in ut_assertion_varchar2, a_mask in varchar2, a_escape_char in varchar2 := null) is

source/expectations/equal.tpb

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
create or replace type body equal as
2+
constructor function equal(self in out nocopy equal, a_expected varchar2, a_nulls_are_equal boolean := null) return self as result is
3+
begin
4+
self.nulls_are_equal := ut_utils.boolean_to_int( coalesce(a_nulls_are_equal, ut_assert_processor.nulls_are_equal()) );
5+
self.assert_name := lower($$plsql_unit);
6+
self.expected := ut_data_value_varchar2('varchar2', ut_utils.boolean_to_int(a_expected is null), ut_utils.to_string(a_expected), a_expected);
7+
return;
8+
end;
9+
10+
constructor function equal(self in out nocopy equal, a_expected number, a_nulls_are_equal boolean := null) return self as result is
11+
begin
12+
self.nulls_are_equal := ut_utils.boolean_to_int( coalesce(a_nulls_are_equal, ut_assert_processor.nulls_are_equal()) );
13+
self.assert_name := lower($$plsql_unit);
14+
self.expected := ut_data_value_number('number', ut_utils.boolean_to_int(a_expected is null), ut_utils.to_string(a_expected), a_expected);
15+
return;
16+
end;
17+
18+
constructor function equal(self in out nocopy equal, a_expected clob, a_nulls_are_equal boolean := null) return self as result is
19+
begin
20+
self.nulls_are_equal := ut_utils.boolean_to_int( coalesce(a_nulls_are_equal, ut_assert_processor.nulls_are_equal()) );
21+
self.assert_name := lower($$plsql_unit);
22+
self.expected := ut_data_value_clob('clob', ut_utils.boolean_to_int(a_expected is null), ut_utils.to_string(a_expected), a_expected);
23+
return;
24+
end;
25+
26+
constructor function equal(self in out nocopy equal, a_expected blob, a_nulls_are_equal boolean := null) return self as result is
27+
begin
28+
self.nulls_are_equal := ut_utils.boolean_to_int( coalesce(a_nulls_are_equal, ut_assert_processor.nulls_are_equal()) );
29+
self.assert_name := lower($$plsql_unit);
30+
self.expected := ut_data_value_blob('blob', ut_utils.boolean_to_int(a_expected is null), ut_utils.to_string(a_expected), a_expected);
31+
return;
32+
end;
33+
34+
overriding member function run_expectation(self in equal, a_actual ut_data_value_varchar2) return ut_assert_result is
35+
l_expected varchar2(32767 char);
36+
begin
37+
l_expected :=
38+
case
39+
when self.expected is of (ut_data_value_varchar2) then treat(self.expected as ut_data_value_varchar2).value
40+
end;
41+
return
42+
self.build_assert_result(
43+
((l_expected = a_actual.value) or (a_actual.value is null and l_expected is null and ut_utils.int_to_boolean(self.nulls_are_equal)))
44+
, a_actual
45+
);
46+
end;
47+
48+
overriding member function run_expectation(self in equal, a_actual ut_data_value_number) return ut_assert_result is
49+
l_expected number;
50+
begin
51+
l_expected :=
52+
case
53+
when self.expected is of (ut_data_value_number) then treat(self.expected as ut_data_value_number).value
54+
end;
55+
return
56+
self.build_assert_result(
57+
((l_expected = a_actual.value) or (a_actual.value is null and l_expected is null and ut_utils.int_to_boolean(self.nulls_are_equal)) )
58+
, a_actual
59+
);
60+
end;
61+
62+
overriding member function run_expectation(self in equal, a_actual ut_data_value_clob) return ut_assert_result is
63+
l_expected clob;
64+
begin
65+
l_expected :=
66+
case
67+
when self.expected is of (ut_data_value_clob) then treat(self.expected as ut_data_value_clob).value
68+
end;
69+
return
70+
self.build_assert_result(
71+
((l_expected = a_actual.value) or (a_actual.value is null and l_expected is null and ut_utils.int_to_boolean(self.nulls_are_equal)) )
72+
, a_actual
73+
);
74+
end;
75+
76+
overriding member function run_expectation(self in equal, a_actual ut_data_value_blob) return ut_assert_result is
77+
l_expected blob;
78+
begin
79+
l_expected :=
80+
case
81+
when self.expected is of (ut_data_value_blob) then treat(self.expected as ut_data_value_blob).value
82+
end;
83+
return
84+
self.build_assert_result(
85+
(dbms_lob.compare( l_expected, a_actual.value ) = 0 or (a_actual.value is null and l_expected is null and ut_utils.int_to_boolean(self.nulls_are_equal)) )
86+
, a_actual
87+
);
88+
end;
89+
90+
end;
91+
/

source/expectations/equal.tps

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
create or replace type equal under ut_expectation(
2+
nulls_are_equal number(1,0),
3+
constructor function equal(self in out nocopy equal, a_expected varchar2, a_nulls_are_equal boolean := null) return self as result,
4+
constructor function equal(self in out nocopy equal, a_expected number, a_nulls_are_equal boolean := null) return self as result,
5+
constructor function equal(self in out nocopy equal, a_expected clob, a_nulls_are_equal boolean := null) return self as result,
6+
constructor function equal(self in out nocopy equal, a_expected blob, a_nulls_are_equal boolean := null) return self as result,
7+
overriding member function run_expectation(self in equal, a_actual ut_data_value_varchar2) return ut_assert_result,
8+
overriding member function run_expectation(self in equal, a_actual ut_data_value_number) return ut_assert_result,
9+
overriding member function run_expectation(self in equal, a_actual ut_data_value_clob) return ut_assert_result,
10+
overriding member function run_expectation(self in equal, a_actual ut_data_value_blob) return ut_assert_result
11+
)
12+
/
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
create or replace type ut_data_value as object(
2+
type varchar2(250 char),
3+
is_null number(1,0),
4+
value_string varchar2(32767 char)
5+
) not final not instantiable
6+
/

0 commit comments

Comments
 (0)