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

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
This commit fixes #78 issue.
  • Loading branch information
Pablo Roldán Ruíz committed Dec 16, 2016
commit 46add3eb95ff239f406421ffac7e280ebbf85fe7
10 changes: 10 additions & 0 deletions source/core/ut_utils.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,16 @@ create or replace package body ut_utils is
begin
return coalesce(to_char(a_value,gc_timestamp_format), gc_null_string);
end;

function to_string(a_value yminterval_unconstrained) return VARCHAR2 IS
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

according to the naming convention we dont use uppercased keywords

begin
return coalesce(to_char(a_value), gc_null_string);
end;

function to_string(a_value dsinterval_unconstrained) return VARCHAR2 IS
begin
return coalesce(to_char(a_value), gc_null_string);
end;


function boolean_to_int(a_value boolean) return integer is
Expand Down
26 changes: 15 additions & 11 deletions source/core/ut_utils.pks
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@ create or replace package ut_utils authid definer is
tr_failure - one or more asserts failed
tr_error - exception was raised
*/
tr_ignore constant number(1) := 0; -- test/suite was ignored
tr_success constant number(1) := 1; -- test passed
tr_failure constant number(1) := 2; -- one or more asserts failed
tr_error constant number(1) := 3; -- exception was raised
tr_ignore constant number(1) := 0; -- test/suite was ignored
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those changes are not needed.

tr_success constant number(1) := 1; -- test passed
tr_failure constant number(1) := 2; -- one or more asserts failed
tr_error constant number(1) := 3; -- exception was raised

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

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

ex_unsopported_rollback_type exception;
Expand Down Expand Up @@ -77,13 +77,17 @@ create or replace package ut_utils authid definer is

function to_string(a_value timestamp_ltz_unconstrained) return varchar2;

function to_string(a_value yminterval_unconstrained) return varchar2;

function to_string(a_value dsinterval_unconstrained) return varchar2;

function boolean_to_int(a_value boolean) return integer;

function int_to_boolean(a_value integer) return boolean;

/*
Procedure: validate_rollback_type

Validates passed value against supported rollback types
*/
procedure validate_rollback_type(a_rollback_type number);
Expand Down
21 changes: 21 additions & 0 deletions source/expectations/data_values/ut_data_value_dsinterval.tpb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
create or replace type body ut_data_value_dsinterval as

constructor function ut_data_value_dsinterval(self in out nocopy ut_data_value_dsinterval, a_value dsinterval_unconstrained) return self as result is
begin
self.datavalue := a_value;
self.datatype := 'day to second interval';
return;
end;

overriding member function is_null return boolean is
begin
return (self.datavalue is null);
end;

overriding member function to_string return varchar2 is
begin
return ut_utils.to_string(self.datavalue);
end;

end;
/
7 changes: 7 additions & 0 deletions source/expectations/data_values/ut_data_value_dsinterval.tps
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
create or replace type ut_data_value_dsinterval under ut_data_value(
datavalue dsinterval_unconstrained,
constructor function ut_data_value_dsinterval(self in out nocopy ut_data_value_dsinterval, a_value dsinterval_unconstrained) return self as result,
overriding member function is_null return boolean,
overriding member function to_string return varchar2
)
/
21 changes: 21 additions & 0 deletions source/expectations/data_values/ut_data_value_yminterval.tpb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
create or replace type body ut_data_value_yminterval as

constructor function ut_data_value_yminterval(self in out nocopy ut_data_value_yminterval, a_value yminterval_unconstrained) return self as result is
begin
self.datavalue := a_value;
self.datatype := 'year to month interval';
return;
end;

overriding member function is_null return boolean is
begin
return (self.datavalue is null);
end;

overriding member function to_string return varchar2 is
begin
return ut_utils.to_string(self.datavalue);
end;

end;
/
7 changes: 7 additions & 0 deletions source/expectations/data_values/ut_data_value_yminterval.tps
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
create or replace type ut_data_value_yminterval under ut_data_value(
datavalue yminterval_unconstrained,
constructor function ut_data_value_yminterval(self in out nocopy ut_data_value_yminterval, a_value yminterval_unconstrained) return self as result,
overriding member function is_null return boolean,
overriding member function to_string return varchar2
)
/
110 changes: 110 additions & 0 deletions source/expectations/matchers/be_greater_or_equal.tpb
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
create or replace type body be_greater_or_equal AS

member procedure init(self in out nocopy be_greater_or_equal, a_expected ut_data_value) is
begin
self.name := lower($$plsql_unit);
self.expected := a_expected;
end;

constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected date) return self as result is
begin
init(ut_data_value_date(a_expected));
return;
end;

constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected NUMBER) return self as result is
begin
init(ut_data_value_number(a_expected));
return;
end;

constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_unconstrained) return self as result is
begin
init(ut_data_value_timestamp(a_expected));
return;
end;

constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_tz_unconstrained) return self as result is
begin
init(ut_data_value_timestamp_tz(a_expected));
return;
end;

constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_ltz_unconstrained) return self as result is
begin
init(ut_data_value_timestamp_ltz(a_expected));
return;
end;

constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected yminterval_unconstrained) return self as RESULT IS
begin
init(ut_data_value_yminterval(a_expected));
return;
end;

constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected dsinterval_unconstrained) return self as RESULT IS
begin
init(ut_data_value_dsinterval(a_expected));
return;
end;

overriding member function run_matcher(self in out nocopy be_greater_or_equal, a_actual ut_data_value) return boolean is
l_result boolean;
begin
if self.expected is of (ut_data_value_date) and a_actual is of (ut_data_value_date) then
declare
l_expected ut_data_value_date := treat(self.expected as ut_data_value_date);
l_actual ut_data_value_date := treat(a_actual as ut_data_value_date);
begin
l_result := l_actual.datavalue >= l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_number) and a_actual is of (ut_data_value_number) then
declare
l_expected ut_data_value_number := treat(self.expected as ut_data_value_number);
l_actual ut_data_value_number := treat(a_actual as ut_data_value_number);
begin
l_result := l_actual.datavalue >= l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_timestamp) and a_actual is of (ut_data_value_timestamp) then
declare
l_expected ut_data_value_timestamp := treat(self.expected as ut_data_value_timestamp);
l_actual ut_data_value_timestamp := treat(a_actual as ut_data_value_timestamp);
begin
l_result := l_actual.datavalue >= l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_timestamp_ltz) and a_actual is of (ut_data_value_timestamp_ltz) then
declare
l_expected ut_data_value_timestamp_ltz := treat(self.expected as ut_data_value_timestamp_ltz);
l_actual ut_data_value_timestamp_ltz := treat(a_actual as ut_data_value_timestamp_ltz);
begin
l_result := l_actual.datavalue >= l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_timestamp_tz) and a_actual is of (ut_data_value_timestamp_tz) then
declare
l_expected ut_data_value_timestamp_tz := treat(self.expected as ut_data_value_timestamp_tz);
l_actual ut_data_value_timestamp_tz := treat(a_actual as ut_data_value_timestamp_tz);
begin
l_result := l_actual.datavalue >= l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_yminterval) and a_actual is of (ut_data_value_yminterval) then
declare
l_expected ut_data_value_yminterval := treat(self.expected as ut_data_value_yminterval);
l_actual ut_data_value_yminterval := treat(a_actual as ut_data_value_yminterval);
begin
l_result := l_actual.datavalue >= l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_dsinterval) and a_actual is of (ut_data_value_dsinterval) then
declare
l_expected ut_data_value_dsinterval := treat(self.expected as ut_data_value_dsinterval);
l_actual ut_data_value_dsinterval := treat(a_actual as ut_data_value_dsinterval);
begin
l_result := l_actual.datavalue >= l_expected.datavalue;
end;
else
l_result := (self as ut_matcher).run_matcher(a_actual);
end if;
return l_result;
end;

END;
/
12 changes: 12 additions & 0 deletions source/expectations/matchers/be_greater_or_equal.tps
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
create or replace type be_greater_or_equal under ut_matcher(
member procedure init(self in out nocopy be_greater_or_equal, a_expected ut_data_value),
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected date) return self as result,
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected number) return self as result,
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_unconstrained) return self as result,
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_tz_unconstrained) return self as result,
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected timestamp_ltz_unconstrained) return self as result,
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected yminterval_unconstrained) return self as result,
constructor function be_greater_or_equal(self in out nocopy be_greater_or_equal, a_expected dsinterval_unconstrained) return self as result,
overriding member function run_matcher(self in out nocopy be_greater_or_equal, a_actual ut_data_value) return boolean
)
/
110 changes: 110 additions & 0 deletions source/expectations/matchers/be_greater_than.tpb
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
create or replace type body be_greater_than AS

member procedure init(self in out nocopy be_greater_than, a_expected ut_data_value) is
begin
self.name := lower($$plsql_unit);
self.expected := a_expected;
end;

constructor function be_greater_than(self in out nocopy be_greater_than, a_expected date) return self as result is
begin
init(ut_data_value_date(a_expected));
return;
end;

constructor function be_greater_than(self in out nocopy be_greater_than, a_expected NUMBER) return self as result is
begin
init(ut_data_value_number(a_expected));
return;
end;

constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_unconstrained) return self as result is
begin
init(ut_data_value_timestamp(a_expected));
return;
end;

constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_tz_unconstrained) return self as result is
begin
init(ut_data_value_timestamp_tz(a_expected));
return;
end;

constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_ltz_unconstrained) return self as result is
begin
init(ut_data_value_timestamp_ltz(a_expected));
return;
end;

constructor function be_greater_than(self in out nocopy be_greater_than, a_expected yminterval_unconstrained) return self as RESULT IS
begin
init(ut_data_value_yminterval(a_expected));
return;
end;

constructor function be_greater_than(self in out nocopy be_greater_than, a_expected dsinterval_unconstrained) return self as RESULT IS
begin
init(ut_data_value_dsinterval(a_expected));
return;
end;

overriding member function run_matcher(self in out nocopy be_greater_than, a_actual ut_data_value) return boolean is
l_result boolean;
begin
if self.expected is of (ut_data_value_date) and a_actual is of (ut_data_value_date) then
declare
l_expected ut_data_value_date := treat(self.expected as ut_data_value_date);
l_actual ut_data_value_date := treat(a_actual as ut_data_value_date);
begin
l_result := l_actual.datavalue > l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_number) and a_actual is of (ut_data_value_number) then
declare
l_expected ut_data_value_number := treat(self.expected as ut_data_value_number);
l_actual ut_data_value_number := treat(a_actual as ut_data_value_number);
begin
l_result := l_actual.datavalue > l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_timestamp) and a_actual is of (ut_data_value_timestamp) then
declare
l_expected ut_data_value_timestamp := treat(self.expected as ut_data_value_timestamp);
l_actual ut_data_value_timestamp := treat(a_actual as ut_data_value_timestamp);
begin
l_result := l_actual.datavalue > l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_timestamp_ltz) and a_actual is of (ut_data_value_timestamp_ltz) then
declare
l_expected ut_data_value_timestamp_ltz := treat(self.expected as ut_data_value_timestamp_ltz);
l_actual ut_data_value_timestamp_ltz := treat(a_actual as ut_data_value_timestamp_ltz);
begin
l_result := l_actual.datavalue > l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_timestamp_tz) and a_actual is of (ut_data_value_timestamp_tz) then
declare
l_expected ut_data_value_timestamp_tz := treat(self.expected as ut_data_value_timestamp_tz);
l_actual ut_data_value_timestamp_tz := treat(a_actual as ut_data_value_timestamp_tz);
begin
l_result := l_actual.datavalue > l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_yminterval) and a_actual is of (ut_data_value_yminterval) then
declare
l_expected ut_data_value_yminterval := treat(self.expected as ut_data_value_yminterval);
l_actual ut_data_value_yminterval := treat(a_actual as ut_data_value_yminterval);
begin
l_result := l_actual.datavalue > l_expected.datavalue;
end;
elsif self.expected is of (ut_data_value_dsinterval) and a_actual is of (ut_data_value_dsinterval) then
declare
l_expected ut_data_value_dsinterval := treat(self.expected as ut_data_value_dsinterval);
l_actual ut_data_value_dsinterval := treat(a_actual as ut_data_value_dsinterval);
begin
l_result := l_actual.datavalue > l_expected.datavalue;
end;
else
l_result := (self as ut_matcher).run_matcher(a_actual);
end if;
return l_result;
end;

END;
/
12 changes: 12 additions & 0 deletions source/expectations/matchers/be_greater_than.tps
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
create or replace type be_greater_than under ut_matcher(
member procedure init(self in out nocopy be_greater_than, a_expected ut_data_value),
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected date) return self as result,
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected number) return self as result,
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_unconstrained) return self as result,
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_tz_unconstrained) return self as result,
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected timestamp_ltz_unconstrained) return self as result,
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected yminterval_unconstrained) return self as result,
constructor function be_greater_than(self in out nocopy be_greater_than, a_expected dsinterval_unconstrained) return self as result,
overriding member function run_matcher(self in out nocopy be_greater_than, a_actual ut_data_value) return boolean
)
/
Loading