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

Skip to content

Commit e41d087

Browse files
authored
Merge pull request #102 from Pazus/feature/be_between
Be_between matcher
2 parents ec2bb11 + 2369b50 commit e41d087

28 files changed

Lines changed: 383 additions & 12 deletions
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
create or replace type body be_between is
2+
3+
member procedure init(self in out nocopy be_between, a_lower_bound ut_data_value, a_upper_bound ut_data_value) is
4+
begin
5+
self.name := lower($$plsql_unit);
6+
self.lower_bound := a_lower_bound;
7+
self.upper_bound := a_upper_bound;
8+
self.additional_info := 'between ' || a_lower_bound.to_string || ' and ' || a_upper_bound.to_string;
9+
end;
10+
11+
constructor function be_between(self in out nocopy be_between, a_lower_bound date, a_upper_bound date)
12+
return self as result is
13+
begin
14+
init(ut_data_value_date(a_lower_bound), ut_data_value_date(a_upper_bound));
15+
return;
16+
end;
17+
constructor function be_between(self in out nocopy be_between, a_lower_bound number, a_upper_bound number)
18+
return self as result is
19+
begin
20+
init(ut_data_value_number(a_lower_bound), ut_data_value_number(a_upper_bound));
21+
return;
22+
end;
23+
constructor function be_between(self in out nocopy be_between, a_lower_bound varchar2, a_upper_bound varchar2)
24+
return self as result is
25+
begin
26+
init(ut_data_value_varchar2(a_lower_bound), ut_data_value_varchar2(a_upper_bound));
27+
return;
28+
end;
29+
constructor function be_between(self in out nocopy be_between, a_lower_bound timestamp_unconstrained, a_upper_bound timestamp_unconstrained)
30+
return self as result is
31+
begin
32+
init(ut_data_value_timestamp(a_lower_bound), ut_data_value_timestamp(a_upper_bound));
33+
return;
34+
end;
35+
constructor function be_between(self in out nocopy be_between, a_lower_bound timestamp_tz_unconstrained, a_upper_bound timestamp_tz_unconstrained)
36+
return self as result is
37+
begin
38+
init(ut_data_value_timestamp_tz(a_lower_bound), ut_data_value_timestamp_tz(a_upper_bound));
39+
return;
40+
end;
41+
constructor function be_between(self in out nocopy be_between, a_lower_bound timestamp_ltz_unconstrained, a_upper_bound timestamp_ltz_unconstrained)
42+
return self as result is
43+
begin
44+
init(ut_data_value_timestamp_ltz(a_lower_bound), ut_data_value_timestamp_ltz(a_upper_bound));
45+
return;
46+
end;
47+
48+
overriding member function run_matcher(self in out nocopy be_between, a_actual ut_data_value) return boolean is
49+
l_result boolean;
50+
begin
51+
if self.lower_bound is of(ut_data_value_date) and self.upper_bound is of(ut_data_value_date) and a_actual is of(ut_data_value_date) then
52+
declare
53+
l_lower ut_data_value_date := treat(self.lower_bound as ut_data_value_date);
54+
l_upper ut_data_value_date := treat(self.upper_bound as ut_data_value_date);
55+
l_actual ut_data_value_date := treat(a_actual as ut_data_value_date);
56+
begin
57+
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
58+
end;
59+
elsif self.lower_bound is of(ut_data_value_number) and self.upper_bound is of(ut_data_value_number) and a_actual is of(ut_data_value_number) then
60+
declare
61+
l_lower ut_data_value_number := treat(self.lower_bound as ut_data_value_number);
62+
l_upper ut_data_value_number := treat(self.upper_bound as ut_data_value_number);
63+
l_actual ut_data_value_number := treat(a_actual as ut_data_value_number);
64+
begin
65+
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
66+
end;
67+
elsif self.lower_bound is of(ut_data_value_varchar2) and self.upper_bound is of(ut_data_value_varchar2) and a_actual is of(ut_data_value_varchar2) then
68+
declare
69+
l_lower ut_data_value_varchar2 := treat(self.lower_bound as ut_data_value_varchar2);
70+
l_upper ut_data_value_varchar2 := treat(self.upper_bound as ut_data_value_varchar2);
71+
l_actual ut_data_value_varchar2 := treat(a_actual as ut_data_value_varchar2);
72+
begin
73+
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
74+
end;
75+
elsif self.lower_bound is of(ut_data_value_timestamp) and self.upper_bound is of(ut_data_value_timestamp) and a_actual is of(ut_data_value_timestamp) then
76+
declare
77+
l_lower ut_data_value_timestamp := treat(self.lower_bound as ut_data_value_timestamp);
78+
l_upper ut_data_value_timestamp := treat(self.upper_bound as ut_data_value_timestamp);
79+
l_actual ut_data_value_timestamp := treat(a_actual as ut_data_value_timestamp);
80+
begin
81+
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
82+
end;
83+
elsif self.lower_bound is of(ut_data_value_timestamp_tz) and self.upper_bound is of(ut_data_value_timestamp_tz) and a_actual is of(ut_data_value_timestamp_tz) then
84+
declare
85+
l_lower ut_data_value_timestamp_tz := treat(self.lower_bound as ut_data_value_timestamp_tz);
86+
l_upper ut_data_value_timestamp_tz := treat(self.upper_bound as ut_data_value_timestamp_tz);
87+
l_actual ut_data_value_timestamp_tz := treat(a_actual as ut_data_value_timestamp_tz);
88+
begin
89+
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
90+
end;
91+
elsif self.lower_bound is of(ut_data_value_timestamp_ltz) and self.upper_bound is of(ut_data_value_timestamp_ltz) and a_actual is of(ut_data_value_timestamp_ltz) then
92+
declare
93+
l_lower ut_data_value_timestamp_ltz := treat(self.lower_bound as ut_data_value_timestamp_ltz);
94+
l_upper ut_data_value_timestamp_ltz := treat(self.upper_bound as ut_data_value_timestamp_ltz);
95+
l_actual ut_data_value_timestamp_ltz := treat(a_actual as ut_data_value_timestamp_ltz);
96+
begin
97+
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
98+
end;
99+
else
100+
l_result := (self as ut_matcher).run_matcher(a_actual);
101+
end if;
102+
return l_result;
103+
end;
104+
105+
end;
106+
/
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
create or replace type be_between under ut_matcher
2+
(
3+
lower_bound ut_data_value,
4+
upper_bound ut_data_value,
5+
6+
member procedure init(self in out nocopy be_between, a_lower_bound ut_data_value, a_upper_bound ut_data_value),
7+
8+
constructor function be_between(self in out nocopy be_between, a_lower_bound date, a_upper_bound date)
9+
return self as result,
10+
constructor function be_between(self in out nocopy be_between, a_lower_bound number, a_upper_bound number)
11+
return self as result,
12+
constructor function be_between(self in out nocopy be_between, a_lower_bound varchar2, a_upper_bound varchar2)
13+
return self as result,
14+
constructor function be_between(self in out nocopy be_between, a_lower_bound timestamp_unconstrained, a_upper_bound timestamp_unconstrained)
15+
return self as result,
16+
constructor function be_between(self in out nocopy be_between, a_lower_bound timestamp_tz_unconstrained, a_upper_bound timestamp_tz_unconstrained)
17+
return self as result,
18+
constructor function be_between(self in out nocopy be_between, a_lower_bound timestamp_ltz_unconstrained, a_upper_bound timestamp_ltz_unconstrained)
19+
return self as result,
20+
21+
overriding member function run_matcher(self in out nocopy be_between, a_actual ut_data_value) return boolean
22+
)
23+
/

source/expectations/ut_expectation.tps

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ create or replace type ut_expectation as object
44
message varchar2(4000 char),
55
final member procedure add_assert_result( self in ut_expectation, a_assert_result boolean, a_assert_name varchar2,
66
a_assert_info varchar2, a_error_message varchar2, a_expected_value_string in varchar2 := null, a_expected_data_type varchar2 := null),
7+
final member procedure to_(self in ut_expectation, a_matcher ut_matcher),
8+
final member procedure not_to(self in ut_expectation, a_matcher ut_matcher),
9+
final member procedure to_be_null(self in ut_expectation),
10+
final member procedure to_be_not_null(self in ut_expectation),
11+
12+
-- this is done to provide strong type comparison. other comporators should be implemented in the type-specific classes
713
member procedure to_equal(self in ut_expectation, a_expected anydata, a_nulls_are_equal boolean := null),
814
member procedure to_equal(self in ut_expectation, a_expected blob, a_nulls_are_equal boolean := null),
915
member procedure to_equal(self in ut_expectation, a_expected boolean, a_nulls_are_equal boolean := null),
@@ -14,11 +20,7 @@ create or replace type ut_expectation as object
1420
member procedure to_equal(self in ut_expectation, a_expected timestamp_unconstrained, a_nulls_are_equal boolean := null),
1521
member procedure to_equal(self in ut_expectation, a_expected timestamp_ltz_unconstrained, a_nulls_are_equal boolean := null),
1622
member procedure to_equal(self in ut_expectation, a_expected timestamp_tz_unconstrained, a_nulls_are_equal boolean := null),
17-
member procedure to_equal(self in ut_expectation, a_expected varchar2, a_nulls_are_equal boolean := null),
18-
final member procedure to_(self in ut_expectation, a_matcher ut_matcher),
19-
final member procedure not_to(self in ut_expectation, a_matcher ut_matcher),
20-
final member procedure to_be_null(self in ut_expectation),
21-
final member procedure to_be_not_null(self in ut_expectation)
23+
member procedure to_equal(self in ut_expectation, a_expected varchar2, a_nulls_are_equal boolean := null)
2224
)
2325
not final not instantiable
2426
/

source/expectations/ut_expectation_date.tpb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ create or replace type body ut_expectation_date as
55
ut_utils.debug_log('ut_expectation_date.to_equal(self in ut_expectation, a_expected date, a_nulls_are_equal boolean := null)');
66
self.to_( equal(a_expected, a_nulls_are_equal) );
77
end;
8+
9+
member procedure to_be_between(self in ut_expectation_date, a_lower_bound date, a_upper_bound date) is
10+
begin
11+
ut_utils.debug_log('ut_expectation_date.to_be_between(self in ut_expectation_date, a_lower_bound date, a_upper_bound date)');
12+
self.to_( be_between(a_lower_bound,a_upper_bound) );
13+
end;
814

915
end;
1016
/
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
create or replace type ut_expectation_date under ut_expectation
22
(
3-
overriding member procedure to_equal(self in ut_expectation_date, a_expected date, a_nulls_are_equal boolean := null)
3+
overriding member procedure to_equal(self in ut_expectation_date, a_expected date, a_nulls_are_equal boolean := null),
4+
member procedure to_be_between(self in ut_expectation_date, a_lower_bound date, a_upper_bound date)
45
)
56
/

source/expectations/ut_expectation_number.tpb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ create or replace type body ut_expectation_number as
55
ut_utils.debug_log('ut_expectation_number.to_equal(self in ut_expectation, a_expected number, a_nulls_are_equal boolean := null)');
66
self.to_( equal(a_expected, a_nulls_are_equal) );
77
end;
8+
9+
member procedure to_be_between(self in ut_expectation_number, a_lower_bound number, a_upper_bound number) is
10+
begin
11+
ut_utils.debug_log('ut_expectation_number.to_be_between(self in ut_expectation_date, a_lower_bound number, a_upper_bound number)');
12+
self.to_( be_between(a_lower_bound,a_upper_bound) );
13+
end;
814

915
end;
1016
/
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
create or replace type ut_expectation_number under ut_expectation
22
(
3-
overriding member procedure to_equal(self in ut_expectation_number, a_expected number, a_nulls_are_equal boolean := null)
3+
overriding member procedure to_equal(self in ut_expectation_number, a_expected number, a_nulls_are_equal boolean := null),
4+
member procedure to_be_between(self in ut_expectation_number, a_lower_bound number, a_upper_bound number)
45
)
56
/

source/expectations/ut_expectation_timestamp.tpb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ create or replace type body ut_expectation_timestamp as
55
ut_utils.debug_log('ut_expectation_timestamp.to_equal(self in ut_expectation, a_expected timestamp_unconstrained, a_nulls_are_equal boolean := null)');
66
self.to_( equal(a_expected, a_nulls_are_equal) );
77
end;
8+
9+
member procedure to_be_between(self in ut_expectation_timestamp, a_lower_bound timestamp_unconstrained, a_upper_bound timestamp_unconstrained) is
10+
begin
11+
ut_utils.debug_log('ut_expectation_timestamp.to_be_between(self in ut_expectation_timestamp, a_lower_bound timestamp_unconstrained, a_upper_bound timestamp_unconstrained)');
12+
self.to_( be_between(a_lower_bound, a_upper_bound) );
13+
end;
814

915
end;
1016
/
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
create or replace type ut_expectation_timestamp under ut_expectation
22
(
3-
overriding member procedure to_equal(self in ut_expectation_timestamp, a_expected timestamp_unconstrained, a_nulls_are_equal boolean := null)
3+
overriding member procedure to_equal(self in ut_expectation_timestamp, a_expected timestamp_unconstrained, a_nulls_are_equal boolean := null),
4+
member procedure to_be_between(self in ut_expectation_timestamp, a_lower_bound timestamp_unconstrained, a_upper_bound timestamp_unconstrained)
45
)
56
/

source/expectations/ut_expectation_timestamp_ltz.tpb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ create or replace type body ut_expectation_timestamp_ltz as
55
ut_utils.debug_log('ut_expectation_timestamp_ltz.to_equal(self in ut_expectation, a_expected timestamp_ltz_unconstrained, a_nulls_are_equal boolean := null)');
66
self.to_( equal(a_expected, a_nulls_are_equal) );
77
end;
8+
9+
member procedure to_be_between(self in ut_expectation_timestamp_ltz, a_lower_bound timestamp_ltz_unconstrained, a_upper_bound timestamp_ltz_unconstrained) is
10+
begin
11+
ut_utils.debug_log('ut_expectation_timestamp_ltz.to_be_between(self in ut_expectation_timestamp_ltz, a_lower_bound timestamp_ltz_unconstrained, a_upper_bound timestamp_ltz_unconstrained)');
12+
self.to_( be_between(a_lower_bound, a_upper_bound) );
13+
end;
814

915
end;
1016
/

0 commit comments

Comments
 (0)