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

Skip to content

Commit 46add3e

Browse files
author
Pablo Roldán Ruíz
committed
This commit fixes #78 issue.
1 parent 2a18482 commit 46add3e

34 files changed

Lines changed: 848 additions & 14 deletions

source/core/ut_utils.pkb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,16 @@ create or replace package body ut_utils is
114114
begin
115115
return coalesce(to_char(a_value,gc_timestamp_format), gc_null_string);
116116
end;
117+
118+
function to_string(a_value yminterval_unconstrained) return VARCHAR2 IS
119+
begin
120+
return coalesce(to_char(a_value), gc_null_string);
121+
end;
122+
123+
function to_string(a_value dsinterval_unconstrained) return VARCHAR2 IS
124+
begin
125+
return coalesce(to_char(a_value), gc_null_string);
126+
end;
117127

118128

119129
function boolean_to_int(a_value boolean) return integer is

source/core/ut_utils.pks

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,21 @@ create or replace package ut_utils authid definer is
1111
tr_failure - one or more asserts failed
1212
tr_error - exception was raised
1313
*/
14-
tr_ignore constant number(1) := 0; -- test/suite was ignored
15-
tr_success constant number(1) := 1; -- test passed
16-
tr_failure constant number(1) := 2; -- one or more asserts failed
17-
tr_error constant number(1) := 3; -- exception was raised
14+
tr_ignore constant number(1) := 0; -- test/suite was ignored
15+
tr_success constant number(1) := 1; -- test passed
16+
tr_failure constant number(1) := 2; -- one or more asserts failed
17+
tr_error constant number(1) := 3; -- exception was raised
1818

19-
tr_ignore_char constant varchar2(6) := 'Ignore'; -- test/suite was ignored
20-
tr_success_char constant varchar2(7) := 'Success'; -- test passed
21-
tr_failure_char constant varchar2(7) := 'Failure'; -- one or more asserts failed
22-
tr_error_char constant varchar2(5) := 'Error'; -- exception was raised
19+
tr_ignore_char constant varchar2(6) := 'Ignore'; -- test/suite was ignored
20+
tr_success_char constant varchar2(7) := 'Success'; -- test passed
21+
tr_failure_char constant varchar2(7) := 'Failure'; -- one or more asserts failed
22+
tr_error_char constant varchar2(5) := 'Error'; -- exception was raised
2323

2424
/*
2525
Constants: Rollback type for ut_test_object
2626
*/
27-
gc_rollback_auto constant number(1) := 0; -- rollback after each test and suite
28-
gc_rollback_manual constant number(1) := 1; -- leave transaction control manual
27+
gc_rollback_auto constant number(1) := 0; -- rollback after each test and suite
28+
gc_rollback_manual constant number(1) := 1; -- leave transaction control manual
2929
--gc_rollback_on_error constant number(1) := 2; -- rollback tests only on error
3030

3131
ex_unsopported_rollback_type exception;
@@ -77,13 +77,17 @@ create or replace package ut_utils authid definer is
7777

7878
function to_string(a_value timestamp_ltz_unconstrained) return varchar2;
7979

80+
function to_string(a_value yminterval_unconstrained) return varchar2;
81+
82+
function to_string(a_value dsinterval_unconstrained) return varchar2;
83+
8084
function boolean_to_int(a_value boolean) return integer;
8185

8286
function int_to_boolean(a_value integer) return boolean;
8387

8488
/*
8589
Procedure: validate_rollback_type
86-
90+
8791
Validates passed value against supported rollback types
8892
*/
8993
procedure validate_rollback_type(a_rollback_type number);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
create or replace type body ut_data_value_dsinterval as
2+
3+
constructor function ut_data_value_dsinterval(self in out nocopy ut_data_value_dsinterval, a_value dsinterval_unconstrained) return self as result is
4+
begin
5+
self.datavalue := a_value;
6+
self.datatype := 'day to second interval';
7+
return;
8+
end;
9+
10+
overriding member function is_null return boolean is
11+
begin
12+
return (self.datavalue is null);
13+
end;
14+
15+
overriding member function to_string return varchar2 is
16+
begin
17+
return ut_utils.to_string(self.datavalue);
18+
end;
19+
20+
end;
21+
/
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
create or replace type ut_data_value_dsinterval under ut_data_value(
2+
datavalue dsinterval_unconstrained,
3+
constructor function ut_data_value_dsinterval(self in out nocopy ut_data_value_dsinterval, a_value dsinterval_unconstrained) return self as result,
4+
overriding member function is_null return boolean,
5+
overriding member function to_string return varchar2
6+
)
7+
/
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
create or replace type body ut_data_value_yminterval as
2+
3+
constructor function ut_data_value_yminterval(self in out nocopy ut_data_value_yminterval, a_value yminterval_unconstrained) return self as result is
4+
begin
5+
self.datavalue := a_value;
6+
self.datatype := 'year to month interval';
7+
return;
8+
end;
9+
10+
overriding member function is_null return boolean is
11+
begin
12+
return (self.datavalue is null);
13+
end;
14+
15+
overriding member function to_string return varchar2 is
16+
begin
17+
return ut_utils.to_string(self.datavalue);
18+
end;
19+
20+
end;
21+
/
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
create or replace type ut_data_value_yminterval under ut_data_value(
2+
datavalue yminterval_unconstrained,
3+
constructor function ut_data_value_yminterval(self in out nocopy ut_data_value_yminterval, a_value yminterval_unconstrained) return self as result,
4+
overriding member function is_null return boolean,
5+
overriding member function to_string return varchar2
6+
)
7+
/
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
create or replace type body be_greater_or_equal AS
2+
3+
member procedure init(self in out nocopy be_greater_or_equal, a_expected ut_data_value) is
4+
begin
5+
self.name := lower($$plsql_unit);
6+
self.expected := a_expected;
7+
end;
8+
9+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected date) return self as result is
10+
begin
11+
init(ut_data_value_date(a_expected));
12+
return;
13+
end;
14+
15+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected NUMBER) return self as result is
16+
begin
17+
init(ut_data_value_number(a_expected));
18+
return;
19+
end;
20+
21+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_unconstrained) return self as result is
22+
begin
23+
init(ut_data_value_timestamp(a_expected));
24+
return;
25+
end;
26+
27+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_tz_unconstrained) return self as result is
28+
begin
29+
init(ut_data_value_timestamp_tz(a_expected));
30+
return;
31+
end;
32+
33+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_ltz_unconstrained) return self as result is
34+
begin
35+
init(ut_data_value_timestamp_ltz(a_expected));
36+
return;
37+
end;
38+
39+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected yminterval_unconstrained) return self as RESULT IS
40+
begin
41+
init(ut_data_value_yminterval(a_expected));
42+
return;
43+
end;
44+
45+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected dsinterval_unconstrained) return self as RESULT IS
46+
begin
47+
init(ut_data_value_dsinterval(a_expected));
48+
return;
49+
end;
50+
51+
overriding member function run_matcher(self in out nocopy be_greater_or_equal, a_actual ut_data_value) return boolean is
52+
l_result boolean;
53+
begin
54+
if self.expected is of (ut_data_value_date) and a_actual is of (ut_data_value_date) then
55+
declare
56+
l_expected ut_data_value_date := treat(self.expected as ut_data_value_date);
57+
l_actual ut_data_value_date := treat(a_actual as ut_data_value_date);
58+
begin
59+
l_result := l_actual.datavalue >= l_expected.datavalue;
60+
end;
61+
elsif self.expected is of (ut_data_value_number) and a_actual is of (ut_data_value_number) then
62+
declare
63+
l_expected ut_data_value_number := treat(self.expected as ut_data_value_number);
64+
l_actual ut_data_value_number := treat(a_actual as ut_data_value_number);
65+
begin
66+
l_result := l_actual.datavalue >= l_expected.datavalue;
67+
end;
68+
elsif self.expected is of (ut_data_value_timestamp) and a_actual is of (ut_data_value_timestamp) then
69+
declare
70+
l_expected ut_data_value_timestamp := treat(self.expected as ut_data_value_timestamp);
71+
l_actual ut_data_value_timestamp := treat(a_actual as ut_data_value_timestamp);
72+
begin
73+
l_result := l_actual.datavalue >= l_expected.datavalue;
74+
end;
75+
elsif self.expected is of (ut_data_value_timestamp_ltz) and a_actual is of (ut_data_value_timestamp_ltz) then
76+
declare
77+
l_expected ut_data_value_timestamp_ltz := treat(self.expected as ut_data_value_timestamp_ltz);
78+
l_actual ut_data_value_timestamp_ltz := treat(a_actual as ut_data_value_timestamp_ltz);
79+
begin
80+
l_result := l_actual.datavalue >= l_expected.datavalue;
81+
end;
82+
elsif self.expected is of (ut_data_value_timestamp_tz) and a_actual is of (ut_data_value_timestamp_tz) then
83+
declare
84+
l_expected ut_data_value_timestamp_tz := treat(self.expected as ut_data_value_timestamp_tz);
85+
l_actual ut_data_value_timestamp_tz := treat(a_actual as ut_data_value_timestamp_tz);
86+
begin
87+
l_result := l_actual.datavalue >= l_expected.datavalue;
88+
end;
89+
elsif self.expected is of (ut_data_value_yminterval) and a_actual is of (ut_data_value_yminterval) then
90+
declare
91+
l_expected ut_data_value_yminterval := treat(self.expected as ut_data_value_yminterval);
92+
l_actual ut_data_value_yminterval := treat(a_actual as ut_data_value_yminterval);
93+
begin
94+
l_result := l_actual.datavalue >= l_expected.datavalue;
95+
end;
96+
elsif self.expected is of (ut_data_value_dsinterval) and a_actual is of (ut_data_value_dsinterval) then
97+
declare
98+
l_expected ut_data_value_dsinterval := treat(self.expected as ut_data_value_dsinterval);
99+
l_actual ut_data_value_dsinterval := treat(a_actual as ut_data_value_dsinterval);
100+
begin
101+
l_result := l_actual.datavalue >= l_expected.datavalue;
102+
end;
103+
else
104+
l_result := (self as ut_matcher).run_matcher(a_actual);
105+
end if;
106+
return l_result;
107+
end;
108+
109+
END;
110+
/
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
create or replace type be_greater_or_equal under ut_matcher(
2+
member procedure init(self in out nocopy be_greater_or_equal, a_expected ut_data_value),
3+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected date) return self as result,
4+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected number) return self as result,
5+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_unconstrained) return self as result,
6+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_tz_unconstrained) return self as result,
7+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_ltz_unconstrained) return self as result,
8+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected yminterval_unconstrained) return self as result,
9+
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected dsinterval_unconstrained) return self as result,
10+
overriding member function run_matcher(self in out nocopy be_greater_or_equal, a_actual ut_data_value) return boolean
11+
)
12+
/
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
create or replace type body be_greater_than AS
2+
3+
member procedure init(self in out nocopy be_greater_than, a_expected ut_data_value) is
4+
begin
5+
self.name := lower($$plsql_unit);
6+
self.expected := a_expected;
7+
end;
8+
9+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected date) return self as result is
10+
begin
11+
init(ut_data_value_date(a_expected));
12+
return;
13+
end;
14+
15+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected NUMBER) return self as result is
16+
begin
17+
init(ut_data_value_number(a_expected));
18+
return;
19+
end;
20+
21+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_unconstrained) return self as result is
22+
begin
23+
init(ut_data_value_timestamp(a_expected));
24+
return;
25+
end;
26+
27+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_tz_unconstrained) return self as result is
28+
begin
29+
init(ut_data_value_timestamp_tz(a_expected));
30+
return;
31+
end;
32+
33+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_ltz_unconstrained) return self as result is
34+
begin
35+
init(ut_data_value_timestamp_ltz(a_expected));
36+
return;
37+
end;
38+
39+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected yminterval_unconstrained) return self as RESULT IS
40+
begin
41+
init(ut_data_value_yminterval(a_expected));
42+
return;
43+
end;
44+
45+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected dsinterval_unconstrained) return self as RESULT IS
46+
begin
47+
init(ut_data_value_dsinterval(a_expected));
48+
return;
49+
end;
50+
51+
overriding member function run_matcher(self in out nocopy be_greater_than, a_actual ut_data_value) return boolean is
52+
l_result boolean;
53+
begin
54+
if self.expected is of (ut_data_value_date) and a_actual is of (ut_data_value_date) then
55+
declare
56+
l_expected ut_data_value_date := treat(self.expected as ut_data_value_date);
57+
l_actual ut_data_value_date := treat(a_actual as ut_data_value_date);
58+
begin
59+
l_result := l_actual.datavalue > l_expected.datavalue;
60+
end;
61+
elsif self.expected is of (ut_data_value_number) and a_actual is of (ut_data_value_number) then
62+
declare
63+
l_expected ut_data_value_number := treat(self.expected as ut_data_value_number);
64+
l_actual ut_data_value_number := treat(a_actual as ut_data_value_number);
65+
begin
66+
l_result := l_actual.datavalue > l_expected.datavalue;
67+
end;
68+
elsif self.expected is of (ut_data_value_timestamp) and a_actual is of (ut_data_value_timestamp) then
69+
declare
70+
l_expected ut_data_value_timestamp := treat(self.expected as ut_data_value_timestamp);
71+
l_actual ut_data_value_timestamp := treat(a_actual as ut_data_value_timestamp);
72+
begin
73+
l_result := l_actual.datavalue > l_expected.datavalue;
74+
end;
75+
elsif self.expected is of (ut_data_value_timestamp_ltz) and a_actual is of (ut_data_value_timestamp_ltz) then
76+
declare
77+
l_expected ut_data_value_timestamp_ltz := treat(self.expected as ut_data_value_timestamp_ltz);
78+
l_actual ut_data_value_timestamp_ltz := treat(a_actual as ut_data_value_timestamp_ltz);
79+
begin
80+
l_result := l_actual.datavalue > l_expected.datavalue;
81+
end;
82+
elsif self.expected is of (ut_data_value_timestamp_tz) and a_actual is of (ut_data_value_timestamp_tz) then
83+
declare
84+
l_expected ut_data_value_timestamp_tz := treat(self.expected as ut_data_value_timestamp_tz);
85+
l_actual ut_data_value_timestamp_tz := treat(a_actual as ut_data_value_timestamp_tz);
86+
begin
87+
l_result := l_actual.datavalue > l_expected.datavalue;
88+
end;
89+
elsif self.expected is of (ut_data_value_yminterval) and a_actual is of (ut_data_value_yminterval) then
90+
declare
91+
l_expected ut_data_value_yminterval := treat(self.expected as ut_data_value_yminterval);
92+
l_actual ut_data_value_yminterval := treat(a_actual as ut_data_value_yminterval);
93+
begin
94+
l_result := l_actual.datavalue > l_expected.datavalue;
95+
end;
96+
elsif self.expected is of (ut_data_value_dsinterval) and a_actual is of (ut_data_value_dsinterval) then
97+
declare
98+
l_expected ut_data_value_dsinterval := treat(self.expected as ut_data_value_dsinterval);
99+
l_actual ut_data_value_dsinterval := treat(a_actual as ut_data_value_dsinterval);
100+
begin
101+
l_result := l_actual.datavalue > l_expected.datavalue;
102+
end;
103+
else
104+
l_result := (self as ut_matcher).run_matcher(a_actual);
105+
end if;
106+
return l_result;
107+
end;
108+
109+
END;
110+
/
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
create or replace type be_greater_than under ut_matcher(
2+
member procedure init(self in out nocopy be_greater_than, a_expected ut_data_value),
3+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected date) return self as result,
4+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected number) return self as result,
5+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_unconstrained) return self as result,
6+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_tz_unconstrained) return self as result,
7+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_ltz_unconstrained) return self as result,
8+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected yminterval_unconstrained) return self as result,
9+
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected dsinterval_unconstrained) return self as result,
10+
overriding member function run_matcher(self in out nocopy be_greater_than, a_actual ut_data_value) return boolean
11+
)
12+
/

0 commit comments

Comments
 (0)