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

Skip to content

Commit 11006d4

Browse files
author
Pablo Roldán Ruíz
committed
Adds interval support to be_between matcher
1 parent 96e0e23 commit 11006d4

11 files changed

Lines changed: 214 additions & 0 deletions

source/expectations/matchers/be_between.tpb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,20 @@ create or replace type body be_between is
4444
init(ut_data_value_timestamp_ltz(a_lower_bound), ut_data_value_timestamp_ltz(a_upper_bound));
4545
return;
4646
end;
47+
48+
constructor function be_between(self in out nocopy be_between, a_lower_bound yminterval_unconstrained, a_upper_bound yminterval_unconstrained)
49+
return self as result is
50+
begin
51+
init(ut_data_value_yminterval(a_lower_bound), ut_data_value_yminterval(a_upper_bound));
52+
return;
53+
end;
54+
55+
constructor function be_between(self in out nocopy be_between, a_lower_bound dsinterval_unconstrained, a_upper_bound dsinterval_unconstrained)
56+
return self as result is
57+
begin
58+
init(ut_data_value_dsinterval(a_lower_bound), ut_data_value_dsinterval(a_upper_bound));
59+
return;
60+
end;
4761

4862
overriding member function run_matcher(self in out nocopy be_between, a_actual ut_data_value) return boolean is
4963
l_result boolean;
@@ -96,6 +110,22 @@ create or replace type body be_between is
96110
begin
97111
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
98112
end;
113+
elsif self.lower_bound is of(ut_data_value_yminterval) and self.upper_bound is of(ut_data_value_yminterval) and a_actual is of(ut_data_value_yminterval) then
114+
declare
115+
l_lower ut_data_value_yminterval := treat(self.lower_bound as ut_data_value_yminterval);
116+
l_upper ut_data_value_yminterval := treat(self.upper_bound as ut_data_value_yminterval);
117+
l_actual ut_data_value_yminterval := treat(a_actual as ut_data_value_yminterval);
118+
begin
119+
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
120+
end;
121+
elsif self.lower_bound is of(ut_data_value_dsinterval) and self.upper_bound is of(ut_data_value_dsinterval) and a_actual is of(ut_data_value_dsinterval) then
122+
declare
123+
l_lower ut_data_value_dsinterval := treat(self.lower_bound as ut_data_value_dsinterval);
124+
l_upper ut_data_value_dsinterval := treat(self.upper_bound as ut_data_value_dsinterval);
125+
l_actual ut_data_value_dsinterval := treat(a_actual as ut_data_value_dsinterval);
126+
begin
127+
l_result := l_actual.datavalue between l_lower.datavalue and l_upper.datavalue;
128+
end;
99129
else
100130
l_result := (self as ut_matcher).run_matcher(a_actual);
101131
end if;

source/expectations/matchers/be_between.tps

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ create or replace type be_between under ut_matcher
1717
return self as result,
1818
constructor function be_between(self in out nocopy be_between, a_lower_bound timestamp_ltz_unconstrained, a_upper_bound timestamp_ltz_unconstrained)
1919
return self as result,
20+
constructor function be_between(self in out nocopy be_between, a_lower_bound yminterval_unconstrained, a_upper_bound yminterval_unconstrained)
21+
return self as result,
22+
constructor function be_between(self in out nocopy be_between, a_lower_bound dsinterval_unconstrained, a_upper_bound dsinterval_unconstrained)
23+
return self as result,
2024

2125
overriding member function run_matcher(self in out nocopy be_between, a_actual ut_data_value) return boolean
2226
)

tests/RunAll.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,13 @@ create table ut$test_table (val varchar2(1));
190190
@@lib/RunTest.sql ut_expectations/greater_than.sql
191191
@@lib/RunTest.sql ut_expectations/less_or_equal.sql
192192
@@lib/RunTest.sql ut_expectations/less_than.sql
193+
@@lib/RunTest.sql ut_expectations/be_between.sql
194+
@@lib/RunTest.sql ut_expectations/timestamp_between.sql
195+
@@lib/RunTest.sql ut_expectations/timestamp_ltz_between.sql
196+
@@lib/RunTest.sql ut_expectations/timestamp_ltz_not_between.sql
197+
@@lib/RunTest.sql ut_expectations/timestamp_not_between.sql
198+
@@lib/RunTest.sql ut_expectations/timestamp_tz_between.sql
199+
@@lib/RunTest.sql ut_expectations/timestamp_tz_not_between.sql
193200

194201
--Global cleanup
195202
drop package ut_example_tests;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
PROMPT Be between
2+
3+
@@ut_expectations/common/ut.expect.common.be_between.sql 'date' 'sysdate' 'sysdate-2' 'sysdate-1' 'ut_utils.tr_failure'
4+
@@ut_expectations/common/ut.expect.common.be_between.sql 'number' '2.0' '1.99' '1.999' 'ut_utils.tr_failure'
5+
@@ut_expectations/common/ut.expect.common.be_between.sql 'varchar2(1)' '''c''' '''a''' '''b''' 'ut_utils.tr_failure'
6+
@@ut_expectations/common/ut.expect.common.be_between.sql 'interval year to month' '''2-2''' '''2-0''' '''2-1''' 'ut_utils.tr_failure'
7+
@@ut_expectations/common/ut.expect.common.be_between.sql 'interval day to second' '''2 01:00:00''' '''2 00:59:58''' '''2 00:59:59''' 'ut_utils.tr_failure'
8+
9+
@@ut_expectations/common/ut.expect.common.be_between.sql 'date' 'sysdate' 'sysdate-1' 'sysdate+1' 'ut_utils.tr_success'
10+
@@ut_expectations/common/ut.expect.common.be_between.sql 'number' '2.0' '1.99' '2.01' 'ut_utils.tr_success'
11+
@@ut_expectations/common/ut.expect.common.be_between.sql 'varchar2(1)' '''b''' '''a''' '''c''' 'ut_utils.tr_success'
12+
@@ut_expectations/common/ut.expect.common.be_between.sql 'interval year to month' '''2-1''' '''2-0''' '''2-2''' 'ut_utils.tr_success'
13+
@@ut_expectations/common/ut.expect.common.be_between.sql 'interval day to second' '''2 01:00:00''' '''2 00:59:58''' '''2 01:00:01''' 'ut_utils.tr_success'
14+
15+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--Arrange
2+
declare
3+
l_value1 &&1 := &&2;
4+
l_value_lower &&1 := &&3;
5+
l_value_upper &&1 := &&4;
6+
l_result integer;
7+
l_asserts_results ut_objects_list;
8+
begin
9+
--Act
10+
ut.expect(l_value1).to_(be_between(l_value_lower,l_value_upper));
11+
l_asserts_results := ut_assert_processor.get_asserts_results();
12+
l_result := l_asserts_results(l_asserts_results.last).result;
13+
--Assert
14+
if l_result = &&5 then
15+
:test_result := ut_utils.tr_success;
16+
else
17+
:test_result := ut_utils.tr_failure;
18+
dbms_output.put_line('expected: '''||&&5||''', got: '''||l_result||'''' );
19+
end if;
20+
end;
21+
/
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--Arrange
2+
declare
3+
l_value timestamp := to_timestamp('1997-01-31 09:26:50.13','YYYY-MM-DD HH24.MI.SSXFF');
4+
l_value_lower timestamp := to_timestamp('1997-01-31 09:26:50.11','YYYY-MM-DD HH24.MI.SSXFF');
5+
l_value_upper timestamp := to_timestamp('1997-01-31 09:26:50.14','YYYY-MM-DD HH24.MI.SSXFF');
6+
7+
l_result integer;
8+
l_asserts_results ut_objects_list;
9+
begin
10+
--Act
11+
ut.expect(l_value).to_(be_between(l_value_lower,l_value_upper));
12+
l_asserts_results := ut_assert_processor.get_asserts_results();
13+
l_result := l_asserts_results(l_asserts_results.last).result;
14+
--Assert
15+
if l_result = ut_utils.tr_success then
16+
:test_result := ut_utils.tr_success;
17+
else
18+
:test_result := ut_utils.tr_failure;
19+
dbms_output.put_line('expected: '''||ut_utils.tr_success||''', got: '''||l_result||'''' );
20+
end if;
21+
end;
22+
/
23+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--Arrange
2+
declare
3+
l_value timestamp with local time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +02:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
4+
l_value_lower timestamp with local time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +03:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
5+
l_value_upper timestamp with local time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +01:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
6+
7+
l_result integer;
8+
l_asserts_results ut_objects_list;
9+
begin
10+
--Act
11+
ut.expect(l_value).to_(be_between(l_value_lower,l_value_upper));
12+
l_asserts_results := ut_assert_processor.get_asserts_results();
13+
l_result := l_asserts_results(l_asserts_results.last).result;
14+
--Assert
15+
if l_result = ut_utils.tr_success then
16+
:test_result := ut_utils.tr_success;
17+
else
18+
:test_result := ut_utils.tr_failure;
19+
dbms_output.put_line('expected: '''||ut_utils.tr_success||''', got: '''||l_result||'''' );
20+
end if;
21+
end;
22+
/
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--Arrange
2+
declare
3+
l_value_tlz timestamp with local time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +01:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
4+
l_value_lower_tlz timestamp with local time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +02:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
5+
l_value_upper_tlz timestamp with local time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +03:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
6+
7+
l_result integer;
8+
l_asserts_results ut_objects_list;
9+
begin
10+
--Act
11+
ut.expect(l_value_tlz).to_(be_between(l_value_lower_tlz,l_value_upper_tlz));
12+
l_asserts_results := ut_assert_processor.get_asserts_results();
13+
l_result := l_asserts_results(l_asserts_results.last).result;
14+
--Assert
15+
if l_result = ut_utils.tr_failure then
16+
:test_result := ut_utils.tr_success;
17+
else
18+
:test_result := ut_utils.tr_failure;
19+
dbms_output.put_line('expected: '''||ut_utils.tr_failure||''', got: '''||l_result||'''' );
20+
end if;
21+
end;
22+
/
23+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--Arrange
2+
declare
3+
l_value timestamp := to_timestamp('1997-01-31 09:26:50.13','YYYY-MM-DD HH24.MI.SSXFF');
4+
l_value_lower timestamp := to_timestamp('1997-01-31 09:26:50.11','YYYY-MM-DD HH24.MI.SSXFF');
5+
l_value_upper timestamp := to_timestamp('1997-01-31 09:26:50.12','YYYY-MM-DD HH24.MI.SSXFF');
6+
7+
l_result integer;
8+
l_asserts_results ut_objects_list;
9+
begin
10+
--Act
11+
ut.expect(l_value).to_(be_between(l_value_lower,l_value_upper));
12+
l_asserts_results := ut_assert_processor.get_asserts_results();
13+
l_result := l_asserts_results(l_asserts_results.last).result;
14+
--Assert
15+
if l_result = ut_utils.tr_failure then
16+
:test_result := ut_utils.tr_success;
17+
else
18+
:test_result := ut_utils.tr_failure;
19+
dbms_output.put_line('expected: '''||ut_utils.tr_failure||''', got: '''||l_result||'''' );
20+
end if;
21+
end;
22+
/
23+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--Arrange
2+
declare
3+
l_value timestamp with time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +02:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
4+
l_value_lower timestamp with time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +03:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
5+
l_value_upper timestamp with time zone := to_timestamp_tz('1997-01-31 09:26:50.12 +01:00','YYYY-MM-DD HH24.MI.SSXFF TZR');
6+
7+
l_result integer;
8+
l_asserts_results ut_objects_list;
9+
begin
10+
--Act
11+
ut.expect(l_value).to_(be_between(l_value_lower,l_value_upper));
12+
l_asserts_results := ut_assert_processor.get_asserts_results();
13+
l_result := l_asserts_results(l_asserts_results.last).result;
14+
--Assert
15+
if l_result = ut_utils.tr_success then
16+
:test_result := ut_utils.tr_success;
17+
else
18+
:test_result := ut_utils.tr_failure;
19+
dbms_output.put_line('expected: '''||ut_utils.tr_success||''', got: '''||l_result||'''' );
20+
end if;
21+
end;
22+
/
23+

0 commit comments

Comments
 (0)