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

Skip to content

Commit 9d5b915

Browse files
ut_suite_builder modified to allow multi call to procedures in the befotest annotation
1 parent e7663b6 commit 9d5b915

4 files changed

Lines changed: 192 additions & 9 deletions

File tree

source/core/ut_suite_builder.pkb

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ create or replace package body ut_suite_builder is
6262
);
6363

6464
--holds a list of package and procedure level annotations indexed (order) by position.
65-
--procedure level annotations are grouped under procedure name
65+
--procedure level annotations are grouped under procedure name
6666
type tt_package_annotations is table of t_package_annotation index by t_annotation_position;
6767

6868
--holds all annotations for object
@@ -237,14 +237,39 @@ create or replace package body ut_suite_builder is
237237
a_annotation_texts tt_annotation_texts,
238238
a_event_name ut_utils.t_event_name
239239
) is
240+
l_string_buffer varchar2(32767);
240241
l_annotation_pos binary_integer;
241-
begin
242-
l_annotation_pos := a_annotation_texts.first;
243-
while l_annotation_pos is not null loop
244-
add_to_list(a_executables, a_owner, a_package_name, a_annotation_texts(l_annotation_pos), a_event_name );
245-
l_annotation_pos := a_annotation_texts.next( l_annotation_pos);
246-
end loop;
247-
end;
242+
l_procedures_list ut_varchar2_list;
243+
l_procedures_pos binary_integer;
244+
l_components_list ut_varchar2_list;
245+
begin
246+
l_annotation_pos := a_annotation_texts.first;
247+
while l_annotation_pos is not null loop
248+
l_string_buffer := l_string_buffer||','||a_annotation_texts(l_annotation_pos);
249+
l_annotation_pos := a_annotation_texts.next(l_annotation_pos);
250+
end loop;
251+
252+
l_procedures_list := ut_utils.trim_list_elements(ut_utils.string_to_table(l_string_buffer, ','));
253+
l_procedures_list := ut_utils.filter_list(l_procedures_list, '[[:alpha:]]+');
254+
255+
l_procedures_pos := l_procedures_list.first;
256+
while l_procedures_pos is not null loop
257+
l_components_list := ut_utils.string_to_table(l_procedures_list(l_procedures_pos), '.');
258+
259+
case(l_components_list.count())
260+
when 1 then
261+
add_to_list(a_executables, a_owner, a_package_name, l_components_list(1), a_event_name );
262+
when 2 then
263+
add_to_list(a_executables, a_owner, l_components_list(1), l_components_list(2), a_event_name );
264+
when 3 then
265+
add_to_list(a_executables, l_components_list(1), l_components_list(2), l_components_list(3), a_event_name );
266+
else
267+
null;
268+
end case;
269+
270+
l_procedures_pos := l_procedures_list.next(l_procedures_pos);
271+
end loop;
272+
end;
248273

249274
procedure warning_on_duplicate_annot(
250275
a_suite in out nocopy ut_suite_item,
@@ -399,7 +424,7 @@ create or replace package body ut_suite_builder is
399424
warning_on_duplicate_annot(a_suite, a_procedure_name, a_proc_annotations, gc_beforeeach);
400425
warning_on_duplicate_annot(a_suite, a_procedure_name, a_proc_annotations, gc_afterall);
401426
warning_on_duplicate_annot(a_suite, a_procedure_name, a_proc_annotations, gc_aftereach);
402-
427+
403428
if a_proc_annotations.exists(gc_test) then
404429
add_test( a_suite, a_procedure_name, a_proc_annotations);
405430

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
create or replace package body test_before_after_annotations is
2+
g_tests_results clob;
3+
4+
procedure create_tests_results is
5+
pragma autonomous_transaction;
6+
7+
l_test_package_spec varchar2(32737);
8+
l_test_package_body varchar2(32737);
9+
l_dummy_utility_pkg_spec varchar2(32737);
10+
l_dummy_utility_pkg_body varchar2(32737);
11+
l_test_results ut3.ut_varchar2_list;
12+
13+
procedure drop_package(a_package_name varchar2)
14+
is
15+
begin
16+
execute immediate 'drop package '||a_package_name;
17+
end;
18+
begin
19+
l_test_package_spec := '
20+
create or replace package dummy_before_after_test is
21+
--%suite(Package to test annotations beforetest and aftertest)
22+
23+
l_dummy_1 integer;
24+
l_dummy_2 integer;
25+
l_dummy_3 integer;
26+
27+
--%beforeeach
28+
procedure clean_global_variables;
29+
30+
--%test(Beforetest with call to procedure external to the test package)
31+
--%beforetest(dummy_utility_pkg_1.test1)
32+
procedure beforetest_one_ext_procedure;
33+
34+
35+
--%test(Beforetest with call to multi procedures external and interal to the test package)
36+
--%beforetest(dummy_utility_pkg_1.test1, test2, ut3_tester.dummy_utility_pkg_1.test3)
37+
procedure beforetest_multi_ext_procedure;
38+
39+
--%test(Beforetest with call to multi procedures where one does not exist)
40+
--%beforetest(dummy_utility_pkg_1.test1, non_existent_procedure, ut3_tester.dummy_utility_pkg_1.test3)
41+
procedure beforetest_one_err_procedure;
42+
43+
procedure test2;
44+
end;
45+
';
46+
47+
l_test_package_body := '
48+
create or replace package body dummy_before_after_test is
49+
procedure clean_global_variables is
50+
begin
51+
l_dummy_1 := null;
52+
l_dummy_2 := null;
53+
l_dummy_3 := null;
54+
end;
55+
56+
procedure beforetest_one_ext_procedure is
57+
begin
58+
ut3.ut.expect(l_dummy_1).to_equal(1);
59+
end;
60+
61+
procedure beforetest_multi_ext_procedure
62+
is
63+
begin
64+
ut3.ut.expect(l_dummy_1).to_equal(1);
65+
ut3.ut.expect(l_dummy_2).to_equal(2);
66+
ut3.ut.expect(l_dummy_3).to_equal(3);
67+
end;
68+
69+
procedure beforetest_one_err_procedure
70+
is
71+
begin
72+
null;
73+
end;
74+
75+
procedure test2 is
76+
begin
77+
l_dummy_2 := 2;
78+
end;
79+
end;
80+
';
81+
82+
l_dummy_utility_pkg_spec := '
83+
create or replace package dummy_utility_pkg_1 is
84+
procedure test1;
85+
86+
procedure test3;
87+
end;
88+
';
89+
90+
l_dummy_utility_pkg_body := '
91+
create or replace package body dummy_utility_pkg_1 is
92+
procedure test1 is
93+
begin
94+
dummy_before_after_test.l_dummy_1 := 1;
95+
end;
96+
97+
procedure test3 is
98+
begin
99+
dummy_before_after_test.l_dummy_3 := 3;
100+
end;
101+
end;
102+
';
103+
104+
execute immediate l_test_package_spec;
105+
execute immediate l_test_package_body;
106+
execute immediate l_dummy_utility_pkg_spec;
107+
execute immediate l_dummy_utility_pkg_body;
108+
109+
--Execute the tests and recolect the results
110+
select * bulk collect into l_test_results from table(ut3.ut.run(('dummy_before_after_test')));
111+
112+
drop_package('dummy_utility_pkg_1');
113+
drop_package('dummy_before_after_test');
114+
115+
g_tests_results := ut3.ut_utils.table_to_clob(l_test_results);
116+
end;
117+
118+
procedure beforetest_one_ext_procedure
119+
is
120+
begin
121+
ut.expect(g_tests_results).to_match('^\s*Beforetest with call to procedure external to the test package \[[\.0-9]+ sec\]\s*$','m');
122+
ut.expect(g_tests_results).not_to_match('beforetest_one_ext_procedure');
123+
end;
124+
125+
procedure beforetest_multi_ext_procedure
126+
is
127+
begin
128+
ut.expect(g_tests_results).to_match('^\s*Beforetest with call to multi procedures external and interal to the test package \[[\.0-9]+ sec\]\s*$','m');
129+
ut.expect(g_tests_results).not_to_match('beforetest_multi_ext_procedure');
130+
end;
131+
132+
procedure beforetest_one_err_procedure
133+
is
134+
begin
135+
ut.expect(g_tests_results).not_to_match('^\s*Beforetest with call to multi procedures where one does not exist \[[\.0-9]+ sec\]\s*$','m');
136+
ut.expect(g_tests_results).to_match('beforetest_one_err_procedure');
137+
end;
138+
end;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
create or replace package test_before_after_annotations is
2+
3+
--%suite(annotations - beforetest and aftertest)
4+
--%suitepath(utplsql.core.annotations)
5+
6+
--%beforeall
7+
procedure create_tests_results;
8+
9+
10+
--%test(Beforetest with call to procedure external to the test package)
11+
procedure beforetest_one_ext_procedure;
12+
13+
--%test(Beforetest with call to multi procedures external and interal to the test package)
14+
procedure beforetest_multi_ext_procedure;
15+
16+
--%test(Beforetest with call to multi procedure where one does not exist)
17+
procedure beforetest_one_err_procedure;
18+
end;

test/install_tests.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ whenever oserror exit failure rollback
2222
@@core/test_ut_test.pks
2323
@@core/annotations/test_annotation_parser.pks
2424
@@core/annotations/test_annotation_manager.pks
25+
@@core/annotations/test_before_after_test_annotation.pks
26+
@@core/annotations/test_before_after_test_annotation.pkb
2527
@@core/expectations/test_matchers.pks
2628
@@core/test_output_buffer.pks
2729
@@core/test_file_mapper.pks

0 commit comments

Comments
 (0)