diff --git a/source/install.sql b/source/install.sql index 0c9fa72c1..4edbfda3f 100644 --- a/source/install.sql +++ b/source/install.sql @@ -1,7 +1,8 @@ +prompt Installing utplsql framework + whenever sqlerror exit failure rollback whenever oserror exit failure rollback -prompt Installing utplsql framework @@types/ut_object.tps @@types/ut_objects_list.tps @@types/ut_composite_object.tps diff --git a/source/ut_assert.pkb b/source/ut_assert.pkb index 8bc3386f0..eac367b37 100644 --- a/source/ut_assert.pkb +++ b/source/ut_assert.pkb @@ -145,6 +145,37 @@ create or replace package body ut_assert is begin build_assert_result(a_condition, 'this', 'boolean', 'boolean', ut_utils.to_string(true), ut_utils.to_string(a_condition), ut_utils.to_string(a_msg)); end; + + -- Strings assertions + procedure is_like(a_msg in varchar2, a_checking_string in varchar2, a_mask in varchar, a_escape_char in varchar2) is + l_condition boolean; + begin + if a_escape_char is not null then + l_condition := a_checking_string like a_mask escape a_escape_char; + else + l_condition := a_checking_string like a_mask; + end if; + build_assert_result(l_condition, 'is_like', 'varchar2', 'varchar2', ut_utils.to_string('like ' || a_mask), ut_utils.to_string(l_condition), a_msg); + end; + procedure is_like(a_msg in varchar2, a_checking_string in varchar2, a_mask in varchar) is + begin + is_like(a_msg, a_checking_string, a_mask, null); + end; + procedure is_like(a_checking_string in varchar2, a_mask in varchar2) is + begin + is_like(a_msg => null, a_checking_string => a_checking_string, a_mask => a_mask); + end; + + procedure is_matching(a_msg in varchar2, a_checking_string in varchar2, a_pattern in varchar2, a_modifier in varchar2 default null) is + l_condition boolean := sys.standard.regexp_like(a_checking_string, a_pattern, a_modifier); + begin + build_assert_result(l_condition, 'is_matching', 'varchar2', 'varchar2', ut_utils.to_string('pattern ' || a_pattern), ut_utils.to_string(l_condition), a_msg); + end; + + procedure is_matching(a_checking_string in varchar2, a_pattern in varchar2, a_modifier in varchar2 default null) is + begin + is_matching(null, a_checking_string, a_pattern, a_modifier); + end; procedure is_null(a_actual in number) is begin diff --git a/source/ut_assert.pks b/source/ut_assert.pks index 9ab2cda18..e6a50ecb5 100644 --- a/source/ut_assert.pks +++ b/source/ut_assert.pks @@ -5,27 +5,36 @@ create or replace package ut_assert authid current_user as procedure report_error(a_message in varchar2); function get_asserts_results return ut_objects_list; - /* Just need something to play with for now */ - procedure are_equal(a_expected in number, a_actual in number); + -- General assertion + procedure this(a_msg in varchar2, a_condition in boolean); + procedure this(a_condition in boolean); + + -- Equality assertions procedure are_equal(a_msg in varchar2, a_expected in number, a_actual in number); + procedure are_equal(a_expected in number, a_actual in number); - procedure are_equal(a_expected in varchar2, a_actual in varchar2); procedure are_equal(a_msg in varchar2, a_expected in varchar2, a_actual in varchar2); + procedure are_equal(a_expected in varchar2, a_actual in varchar2); - procedure are_equal(a_expected in date, a_actual in date); procedure are_equal(a_msg in varchar2, a_expected in date, a_actual in date); + procedure are_equal(a_expected in date, a_actual in date); - procedure are_equal(a_expected in timestamp_unconstrained, a_actual in timestamp_unconstrained); procedure are_equal(a_msg in varchar2, a_expected in timestamp_unconstrained, a_actual in timestamp_unconstrained); + procedure are_equal(a_expected in timestamp_unconstrained, a_actual in timestamp_unconstrained); - procedure are_equal(a_expected in anydata, a_actual in anydata); procedure are_equal(a_msg in varchar2, a_expected in anydata, a_actual in anydata); + procedure are_equal(a_expected in anydata, a_actual in anydata); - procedure are_equal(a_expected in sys_refcursor, a_actual in sys_refcursor); procedure are_equal(a_msg in varchar2, a_expected in sys_refcursor, a_actual in sys_refcursor); + procedure are_equal(a_expected in sys_refcursor, a_actual in sys_refcursor); - procedure this(a_condition in boolean); - procedure this(a_msg in varchar2, a_condition in boolean); + -- Pattern matching assertions + procedure is_like(a_msg in varchar2, a_checking_string in varchar2, a_mask in varchar, a_escape_char in varchar2); + procedure is_like(a_msg in varchar2, a_checking_string in varchar2, a_mask in varchar); + procedure is_like(a_checking_string in varchar2, a_mask in varchar2); + + procedure is_matching(a_msg in varchar2, a_checking_string in varchar2,a_pattern in varchar2, a_modifier in varchar2 default null); + procedure is_matching(a_checking_string in varchar2,a_pattern in varchar2, a_modifier in varchar2 default null); procedure is_null(a_actual in number); procedure is_null(a_msg in varchar2, a_actual in number); diff --git a/tests/RunAll.sql b/tests/RunAll.sql index 12c6f53b0..135f30e04 100644 --- a/tests/RunAll.sql +++ b/tests/RunAll.sql @@ -80,6 +80,14 @@ set serveroutput on size unlimited format truncated @@lib/RunTest.sql ut_assert/ut_assert.is_null.date.GivesFailureForNotNullValue.sql @@lib/RunTest.sql ut_assert/ut_assert.is_null.date.GivesSuccessForNullValue.sql +@@lib/RunTest.sql ut_assert/ut_assert.is_like.GivesSuccessForLikeString.sql +@@lib/RunTest.sql ut_assert/ut_assert.is_like.GivesSuccessForLikeStringWithEscape.sql +@@lib/RunTest.sql ut_assert/ut_assert.is_like.GivesFailureForLikeString.sql +@@lib/RunTest.sql ut_assert/ut_assert.is_like.GivesFailureForLikeStringWithEscape.sql +@@lib/RunTest.sql ut_assert/ut_assert.is_matching.GivesSuccessForMatchingString.sql +@@lib/RunTest.sql ut_assert/ut_assert.is_matching.GivesSuccessForMatchingStringWithModifier.sql +@@lib/RunTest.sql ut_assert/ut_assert.is_matching.GivesFailureForMatchingString.sql + @@lib/RunTest.sql ut_utils/ut_utils.to_string.verySmallNumber.sql @@lib/RunTest.sql ut_utils/ut_utils.to_string.veryBigNumber.sql @@lib/RunTest.sql ut_utils/ut_utils.to_string.Date.sql diff --git a/tests/ut_assert/ut_assert.are_equal.scalar.FailsToExecuteWhenNullsPassedAsParameters.sql b/tests/ut_assert/ut_assert.are_equal.scalar.FailsToExecuteWhenNullsPassedAsParameters.sql index a1aedce76..689fcf2f6 100644 --- a/tests/ut_assert/ut_assert.are_equal.scalar.FailsToExecuteWhenNullsPassedAsParameters.sql +++ b/tests/ut_assert/ut_assert.are_equal.scalar.FailsToExecuteWhenNullsPassedAsParameters.sql @@ -4,7 +4,7 @@ begin dbms_output.put_line('expected an exception but nothing was raised' ); exception when others then - if sqlerrm like '%PLS-00307: too many declarations of ''ARE_EQUAL'' match this call%' then + if sqlerrm like '%PLS-00307: % ''ARE_EQUAL'' %' then :test_result := ut_utils.tr_success; else dbms_output.put_line( sqlerrm ); diff --git a/tests/ut_assert/ut_assert.are_equal.timestamp.GivesFailureForDifferentValues.sql b/tests/ut_assert/ut_assert.are_equal.timestamp.GivesFailureForDifferentValues.sql index c9ad6a2c5..98af66bc6 100644 --- a/tests/ut_assert/ut_assert.are_equal.timestamp.GivesFailureForDifferentValues.sql +++ b/tests/ut_assert/ut_assert.are_equal.timestamp.GivesFailureForDifferentValues.sql @@ -1,3 +1,3 @@ PROMPT Gives a failure when comparing different timestamp datatypes -@@ut_assert/common/ut_assert.are_equal.scalar.common.sql 'timestamp(9)' 'to_Timestamp(''2016-09-06 22:36:11.123456789'',''yyyy-mm-dd hh24:mi:ss.xff'')' 'to_Timestamp(''2016-09-06 22:36:11.123456788'',''yyyy-mm-dd hh24:mi:ss.xff'')' 'ut_utils.tr_failure' +@@ut_assert/common/ut_assert.are_equal.scalar.common.sql 'timestamp(9)' 'to_Timestamp(''2016-09-06 22:36:11.123456789'',''yyyy-mm-dd hh24:mi:ss.ff'')' 'to_Timestamp(''2016-09-06 22:36:11.123456788'',''yyyy-mm-dd hh24:mi:ss.ff'')' 'ut_utils.tr_failure' diff --git a/tests/ut_assert/ut_assert.are_equal.timestamp.GivesSuccessForEqualValues.sql b/tests/ut_assert/ut_assert.are_equal.timestamp.GivesSuccessForEqualValues.sql index db1b8cf0b..db87a9a42 100644 --- a/tests/ut_assert/ut_assert.are_equal.timestamp.GivesSuccessForEqualValues.sql +++ b/tests/ut_assert/ut_assert.are_equal.timestamp.GivesSuccessForEqualValues.sql @@ -1,3 +1,3 @@ PROMPT Gives a success when comparing equal timestamp datatypes -@@ut_assert/common/ut_assert.are_equal.scalar.common.sql 'timestamp(9)' 'to_Timestamp(''2016-09-06 22:36:11.123456789'',''yyyy-mm-dd hh24:mi:ss.xff'')' 'to_Timestamp(''2016-09-06 22:36:11.123456789'',''yyyy-mm-dd hh24:mi:ss.xff'')' 'ut_utils.tr_success' +@@ut_assert/common/ut_assert.are_equal.scalar.common.sql 'timestamp(9)' 'to_Timestamp(''2016-09-06 22:36:11.123456789'',''yyyy-mm-dd hh24:mi:ss.ff'')' 'to_Timestamp(''2016-09-06 22:36:11.123456789'',''yyyy-mm-dd hh24:mi:ss.ff'')' 'ut_utils.tr_success' diff --git a/tests/ut_assert/ut_assert.is_like.GivesFailureForLikeString.sql b/tests/ut_assert/ut_assert.is_like.GivesFailureForLikeString.sql new file mode 100644 index 000000000..e37051287 --- /dev/null +++ b/tests/ut_assert/ut_assert.is_like.GivesFailureForLikeString.sql @@ -0,0 +1,17 @@ +--Arrange +declare + l_mask varchar2(10) := 'a%b'; + l_string varchar2(50) := 'asdfsdfsdfc'; + l_result integer; +begin +--Act + ut_assert.is_like(l_string, l_mask); + l_result := ut_assert.get_aggregate_asserts_result(); +--Assert + if l_result = ut_utils.tr_failure then + :test_result := ut_utils.tr_success; + else + dbms_output.put_line('expected: string like'''||l_mask||''', got: '''||l_result||'''' ); + end if; +end; +/ diff --git a/tests/ut_assert/ut_assert.is_like.GivesFailureForLikeStringWithEscape.sql b/tests/ut_assert/ut_assert.is_like.GivesFailureForLikeStringWithEscape.sql new file mode 100644 index 000000000..95b3298be --- /dev/null +++ b/tests/ut_assert/ut_assert.is_like.GivesFailureForLikeStringWithEscape.sql @@ -0,0 +1,17 @@ +--Arrange +declare + l_mask varchar2(10) := 'a%\_b'; + l_string varchar2(50) := 'asdfsdfsdf_b'; + l_result integer; +begin +--Act + ut_assert.is_like('', l_string, l_mask, '/'); + l_result := ut_assert.get_aggregate_asserts_result(); +--Assert + if l_result = ut_utils.tr_failure then + :test_result := ut_utils.tr_success; + else + dbms_output.put_line('expected: string like'''||l_mask||''' with escape ''/'', got: '''||l_result||'''' ); + end if; +end; +/ diff --git a/tests/ut_assert/ut_assert.is_like.GivesSuccessForLikeString.sql b/tests/ut_assert/ut_assert.is_like.GivesSuccessForLikeString.sql new file mode 100644 index 000000000..40b75ad9d --- /dev/null +++ b/tests/ut_assert/ut_assert.is_like.GivesSuccessForLikeString.sql @@ -0,0 +1,17 @@ +--Arrange +declare + l_mask varchar2(10) := 'a%b'; + l_string varchar2(50) := 'asdfsdfsdfb'; + l_result integer; +begin +--Act + ut_assert.is_like(l_string, l_mask); + l_result := ut_assert.get_aggregate_asserts_result(); +--Assert + if l_result = ut_utils.tr_success then + :test_result := ut_utils.tr_success; + else + dbms_output.put_line('expected: string like'''||l_mask||''', got: '''||l_result||'''' ); + end if; +end; +/ diff --git a/tests/ut_assert/ut_assert.is_like.GivesSuccessForLikeStringWithEscape.sql b/tests/ut_assert/ut_assert.is_like.GivesSuccessForLikeStringWithEscape.sql new file mode 100644 index 000000000..c015f047b --- /dev/null +++ b/tests/ut_assert/ut_assert.is_like.GivesSuccessForLikeStringWithEscape.sql @@ -0,0 +1,17 @@ +--Arrange +declare + l_mask varchar2(10) := 'a%/_b'; + l_string varchar2(50) := 'asdfsdfsdf_b'; + l_result integer; +begin +--Act + ut_assert.is_like('', l_string, l_mask, '/'); + l_result := ut_assert.get_aggregate_asserts_result(); +--Assert + if l_result = ut_utils.tr_success then + :test_result := ut_utils.tr_success; + else + dbms_output.put_line('expected: string like'''||l_mask||''' with escape ''/'', got: '''||l_result||'''' ); + end if; +end; +/ diff --git a/tests/ut_assert/ut_assert.is_matching.GivesFailureForMatchingString.sql b/tests/ut_assert/ut_assert.is_matching.GivesFailureForMatchingString.sql new file mode 100644 index 000000000..86cdd0d16 --- /dev/null +++ b/tests/ut_assert/ut_assert.is_matching.GivesFailureForMatchingString.sql @@ -0,0 +1,24 @@ +PL/SQL Developer Test script 3.0 +17 +--Arrange +declare + l_mask varchar2(20) := '[a-z]+\d[a-z]+'; + l_string varchar2(50) := 'asd123asd'; + l_result integer; +begin +--Act + ut_assert.is_matching(l_string, l_mask); + l_result := ut_assert.get_aggregate_asserts_result(); +--Assert + if l_result = ut_utils.tr_failure then + :test_result := ut_utils.tr_success; + else + dbms_output.put_line('expected: string like'''||l_mask||''', got: '''||l_result||'''' ); + end if; +end; +--/ +1 +test_result +0 +5 +0 diff --git a/tests/ut_assert/ut_assert.is_matching.GivesSuccessForMatchingString.sql b/tests/ut_assert/ut_assert.is_matching.GivesSuccessForMatchingString.sql new file mode 100644 index 000000000..1cf0fc5ef --- /dev/null +++ b/tests/ut_assert/ut_assert.is_matching.GivesSuccessForMatchingString.sql @@ -0,0 +1,17 @@ +--Arrange +declare + l_mask varchar2(20) := '[a-z]+\d+[a-z]+'; + l_string varchar2(50) := 'asd123asd'; + l_result integer; +begin +--Act + ut_assert.is_matching(l_string, l_mask); + l_result := ut_assert.get_aggregate_asserts_result(); +--Assert + if l_result = ut_utils.tr_success then + :test_result := ut_utils.tr_success; + else + dbms_output.put_line('expected: string like'''||l_mask||''', got: '''||l_result||'''' ); + end if; +end; +/ diff --git a/tests/ut_assert/ut_assert.is_matching.GivesSuccessForMatchingStringWithModifier.sql b/tests/ut_assert/ut_assert.is_matching.GivesSuccessForMatchingStringWithModifier.sql new file mode 100644 index 000000000..1cf0fc5ef --- /dev/null +++ b/tests/ut_assert/ut_assert.is_matching.GivesSuccessForMatchingStringWithModifier.sql @@ -0,0 +1,17 @@ +--Arrange +declare + l_mask varchar2(20) := '[a-z]+\d+[a-z]+'; + l_string varchar2(50) := 'asd123asd'; + l_result integer; +begin +--Act + ut_assert.is_matching(l_string, l_mask); + l_result := ut_assert.get_aggregate_asserts_result(); +--Assert + if l_result = ut_utils.tr_success then + :test_result := ut_utils.tr_success; + else + dbms_output.put_line('expected: string like'''||l_mask||''', got: '''||l_result||'''' ); + end if; +end; +/ diff --git a/tests/ut_utils/ut_utils.to_string.Timestamp.sql b/tests/ut_utils/ut_utils.to_string.Timestamp.sql index 197b48d09..5629f74fc 100644 --- a/tests/ut_utils/ut_utils.to_string.Timestamp.sql +++ b/tests/ut_utils/ut_utils.to_string.Timestamp.sql @@ -3,9 +3,12 @@ PROMPT Returns a full string representation of a timestamp with maximum precissi --Arrange declare l_value timestamp(9) := to_timestamp('2016-12-31 23:59:59.123456789', 'yyyy-mm-dd hh24:mi:ss.ff'); - l_expected varchar2(100) := '2016-12-31 23:59:59.123456789'; + l_expected varchar2(100); l_result varchar2(100); + l_delimiter varchar2(1); begin + select substr(value, 1, 1) into l_delimiter from nls_session_parameters t where t.parameter = 'NLS_NUMERIC_CHARACTERS'; + l_expected := '2016-12-31 23:59:59'||l_delimiter||'123456789'; --Act l_result := ut_utils.to_String(l_value); --Assert diff --git a/tests/ut_utils/ut_utils.to_string.verySmallNumber.sql b/tests/ut_utils/ut_utils.to_string.verySmallNumber.sql index e1451013a..be50f5ce8 100644 --- a/tests/ut_utils/ut_utils.to_string.verySmallNumber.sql +++ b/tests/ut_utils/ut_utils.to_string.verySmallNumber.sql @@ -5,9 +5,14 @@ declare l_value number := 0.123456789012345678901234567890123456789; l_expected varchar2(100) := '.123456789012345678901234567890123456789'; l_result varchar2(100); + l_delimiter varchar2(1); begin --Act + select substr(value, 1, 1) into l_delimiter from nls_session_parameters t where t.parameter = 'NLS_NUMERIC_CHARACTERS'; + l_expected := l_delimiter||'123456789012345678901234567890123456789'; + l_result := ut_utils.to_String(l_value); + --Assert if l_result = l_expected then :test_result := ut_utils.tr_success;