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

Skip to content

Commit dc3c3ef

Browse files
Pazusjgebal
authored andcommitted
Feature/additional asserts (#55)
* Fixed tests failing due to NLS setting * Added prompt to the first line of the installer so PL/SQL Developer treats the installer file as command window. * Added two new assertions: str_like and regexp_like * Reordered declaration of the assertion procedures to enforce users to use implementation with assert description provided * Added tests for the new asserts * Changes according to @jgebal comments Added tests for regexp_like added failure tests
1 parent 36a7871 commit dc3c3ef

16 files changed

Lines changed: 197 additions & 14 deletions

source/install.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
prompt Installing utplsql framework
2+
13
whenever sqlerror exit failure rollback
24
whenever oserror exit failure rollback
35

4-
prompt Installing utplsql framework
56
@@types/ut_object.tps
67
@@types/ut_objects_list.tps
78
@@types/ut_composite_object.tps

source/ut_assert.pkb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,37 @@ create or replace package body ut_assert is
145145
begin
146146
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));
147147
end;
148+
149+
-- Strings assertions
150+
procedure is_like(a_msg in varchar2, a_checking_string in varchar2, a_mask in varchar, a_escape_char in varchar2) is
151+
l_condition boolean;
152+
begin
153+
if a_escape_char is not null then
154+
l_condition := a_checking_string like a_mask escape a_escape_char;
155+
else
156+
l_condition := a_checking_string like a_mask;
157+
end if;
158+
build_assert_result(l_condition, 'is_like', 'varchar2', 'varchar2', ut_utils.to_string('like ' || a_mask), ut_utils.to_string(l_condition), a_msg);
159+
end;
160+
procedure is_like(a_msg in varchar2, a_checking_string in varchar2, a_mask in varchar) is
161+
begin
162+
is_like(a_msg, a_checking_string, a_mask, null);
163+
end;
164+
procedure is_like(a_checking_string in varchar2, a_mask in varchar2) is
165+
begin
166+
is_like(a_msg => null, a_checking_string => a_checking_string, a_mask => a_mask);
167+
end;
168+
169+
procedure is_matching(a_msg in varchar2, a_checking_string in varchar2, a_pattern in varchar2, a_modifier in varchar2 default null) is
170+
l_condition boolean := sys.standard.regexp_like(a_checking_string, a_pattern, a_modifier);
171+
begin
172+
build_assert_result(l_condition, 'is_matching', 'varchar2', 'varchar2', ut_utils.to_string('pattern ' || a_pattern), ut_utils.to_string(l_condition), a_msg);
173+
end;
174+
175+
procedure is_matching(a_checking_string in varchar2, a_pattern in varchar2, a_modifier in varchar2 default null) is
176+
begin
177+
is_matching(null, a_checking_string, a_pattern, a_modifier);
178+
end;
148179

149180
procedure is_null(a_actual in number) is
150181
begin

source/ut_assert.pks

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,36 @@ create or replace package ut_assert authid current_user as
55
procedure report_error(a_message in varchar2);
66
function get_asserts_results return ut_objects_list;
77

8-
/* Just need something to play with for now */
9-
procedure are_equal(a_expected in number, a_actual in number);
8+
-- General assertion
9+
procedure this(a_msg in varchar2, a_condition in boolean);
10+
procedure this(a_condition in boolean);
11+
12+
-- Equality assertions
1013
procedure are_equal(a_msg in varchar2, a_expected in number, a_actual in number);
14+
procedure are_equal(a_expected in number, a_actual in number);
1115

12-
procedure are_equal(a_expected in varchar2, a_actual in varchar2);
1316
procedure are_equal(a_msg in varchar2, a_expected in varchar2, a_actual in varchar2);
17+
procedure are_equal(a_expected in varchar2, a_actual in varchar2);
1418

15-
procedure are_equal(a_expected in date, a_actual in date);
1619
procedure are_equal(a_msg in varchar2, a_expected in date, a_actual in date);
20+
procedure are_equal(a_expected in date, a_actual in date);
1721

18-
procedure are_equal(a_expected in timestamp_unconstrained, a_actual in timestamp_unconstrained);
1922
procedure are_equal(a_msg in varchar2, a_expected in timestamp_unconstrained, a_actual in timestamp_unconstrained);
23+
procedure are_equal(a_expected in timestamp_unconstrained, a_actual in timestamp_unconstrained);
2024

21-
procedure are_equal(a_expected in anydata, a_actual in anydata);
2225
procedure are_equal(a_msg in varchar2, a_expected in anydata, a_actual in anydata);
26+
procedure are_equal(a_expected in anydata, a_actual in anydata);
2327

24-
procedure are_equal(a_expected in sys_refcursor, a_actual in sys_refcursor);
2528
procedure are_equal(a_msg in varchar2, a_expected in sys_refcursor, a_actual in sys_refcursor);
29+
procedure are_equal(a_expected in sys_refcursor, a_actual in sys_refcursor);
2630

27-
procedure this(a_condition in boolean);
28-
procedure this(a_msg in varchar2, a_condition in boolean);
31+
-- Pattern matching assertions
32+
procedure is_like(a_msg in varchar2, a_checking_string in varchar2, a_mask in varchar, a_escape_char in varchar2);
33+
procedure is_like(a_msg in varchar2, a_checking_string in varchar2, a_mask in varchar);
34+
procedure is_like(a_checking_string in varchar2, a_mask in varchar2);
35+
36+
procedure is_matching(a_msg in varchar2, a_checking_string in varchar2,a_pattern in varchar2, a_modifier in varchar2 default null);
37+
procedure is_matching(a_checking_string in varchar2,a_pattern in varchar2, a_modifier in varchar2 default null);
2938

3039
procedure is_null(a_actual in number);
3140
procedure is_null(a_msg in varchar2, a_actual in number);

tests/RunAll.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ set serveroutput on size unlimited format truncated
8080
@@lib/RunTest.sql ut_assert/ut_assert.is_null.date.GivesFailureForNotNullValue.sql
8181
@@lib/RunTest.sql ut_assert/ut_assert.is_null.date.GivesSuccessForNullValue.sql
8282

83+
@@lib/RunTest.sql ut_assert/ut_assert.is_like.GivesSuccessForLikeString.sql
84+
@@lib/RunTest.sql ut_assert/ut_assert.is_like.GivesSuccessForLikeStringWithEscape.sql
85+
@@lib/RunTest.sql ut_assert/ut_assert.is_like.GivesFailureForLikeString.sql
86+
@@lib/RunTest.sql ut_assert/ut_assert.is_like.GivesFailureForLikeStringWithEscape.sql
87+
@@lib/RunTest.sql ut_assert/ut_assert.is_matching.GivesSuccessForMatchingString.sql
88+
@@lib/RunTest.sql ut_assert/ut_assert.is_matching.GivesSuccessForMatchingStringWithModifier.sql
89+
@@lib/RunTest.sql ut_assert/ut_assert.is_matching.GivesFailureForMatchingString.sql
90+
8391
@@lib/RunTest.sql ut_utils/ut_utils.to_string.verySmallNumber.sql
8492
@@lib/RunTest.sql ut_utils/ut_utils.to_string.veryBigNumber.sql
8593
@@lib/RunTest.sql ut_utils/ut_utils.to_string.Date.sql

tests/ut_assert/ut_assert.are_equal.scalar.FailsToExecuteWhenNullsPassedAsParameters.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ begin
44
dbms_output.put_line('expected an exception but nothing was raised' );
55
exception
66
when others then
7-
if sqlerrm like '%PLS-00307: too many declarations of ''ARE_EQUAL'' match this call%' then
7+
if sqlerrm like '%PLS-00307: % ''ARE_EQUAL'' %' then
88
:test_result := ut_utils.tr_success;
99
else
1010
dbms_output.put_line( sqlerrm );
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
PROMPT Gives a failure when comparing different timestamp datatypes
22

3-
@@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'
3+
@@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'
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
PROMPT Gives a success when comparing equal timestamp datatypes
22

3-
@@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'
3+
@@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'
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--Arrange
2+
declare
3+
l_mask varchar2(10) := 'a%b';
4+
l_string varchar2(50) := 'asdfsdfsdfc';
5+
l_result integer;
6+
begin
7+
--Act
8+
ut_assert.is_like(l_string, l_mask);
9+
l_result := ut_assert.get_aggregate_asserts_result();
10+
--Assert
11+
if l_result = ut_utils.tr_failure then
12+
:test_result := ut_utils.tr_success;
13+
else
14+
dbms_output.put_line('expected: string like'''||l_mask||''', got: '''||l_result||'''' );
15+
end if;
16+
end;
17+
/
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--Arrange
2+
declare
3+
l_mask varchar2(10) := 'a%\_b';
4+
l_string varchar2(50) := 'asdfsdfsdf_b';
5+
l_result integer;
6+
begin
7+
--Act
8+
ut_assert.is_like('', l_string, l_mask, '/');
9+
l_result := ut_assert.get_aggregate_asserts_result();
10+
--Assert
11+
if l_result = ut_utils.tr_failure then
12+
:test_result := ut_utils.tr_success;
13+
else
14+
dbms_output.put_line('expected: string like'''||l_mask||''' with escape ''/'', got: '''||l_result||'''' );
15+
end if;
16+
end;
17+
/
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--Arrange
2+
declare
3+
l_mask varchar2(10) := 'a%b';
4+
l_string varchar2(50) := 'asdfsdfsdfb';
5+
l_result integer;
6+
begin
7+
--Act
8+
ut_assert.is_like(l_string, l_mask);
9+
l_result := ut_assert.get_aggregate_asserts_result();
10+
--Assert
11+
if l_result = ut_utils.tr_success then
12+
:test_result := ut_utils.tr_success;
13+
else
14+
dbms_output.put_line('expected: string like'''||l_mask||''', got: '''||l_result||'''' );
15+
end if;
16+
end;
17+
/

0 commit comments

Comments
 (0)