@@ -41,12 +41,27 @@ create or replace package body ut_suite_builder is
4141
4242 l_beforetest_procedure varchar2(250 char);
4343 l_aftertest_procedure varchar2(250 char);
44+
45+ l_expected_error_codes ut_varchar2_list;
46+
4447 l_rollback_type integer;
4548 l_displayname varchar2(4000);
4649 function is_last_annotation_for_proc(a_annotations ut_annotations, a_index binary_integer) return boolean is
4750 begin
4851 return a_index = a_annotations.count or a_annotations(a_index).subobject_name != nvl(a_annotations(a_index+1).subobject_name, ' ');
4952 end;
53+
54+ function exception_numbers_list(a_exception_numbers in varchar2) return ut_varchar2_list is
55+ l_exception_number_list ut_varchar2_list;
56+ l_regexp_for_excep_nums varchar2(30) := '^-?[[:digit:]]{1,5}$';
57+ begin
58+ /*the a_expected_error_codes is converted to a ut_varchar2_list after that is trimmed and filtered to left only valid exception numbers*/
59+ l_exception_number_list := ut_utils.string_to_table(a_exception_numbers, ',', 'Y');
60+ l_exception_number_list := ut_utils.trim_list_elements(l_exception_number_list);
61+ l_exception_number_list := ut_utils.filter_list(l_exception_number_list, l_regexp_for_excep_nums);
62+
63+ return l_exception_number_list;
64+ end;
5065 begin
5166 l_suite_rollback := ut_utils.gc_rollback_auto;
5267 for i in 1 .. a_object.annotations.count loop
@@ -71,7 +86,6 @@ create or replace package body ut_suite_builder is
7186 end if;
7287
7388 elsif l_is_suite then
74-
7589 l_proc_name := a_object.annotations(i).subobject_name;
7690
7791 if a_object.annotations(i).name = 'beforeeach' and l_default_setup_proc is null then
@@ -82,14 +96,14 @@ create or replace package body ut_suite_builder is
8296 l_suite_setup_proc := l_proc_name;
8397 elsif a_object.annotations(i).name = 'afterall' and l_suite_teardown_proc is null then
8498 l_suite_teardown_proc := l_proc_name;
85-
86-
8799 elsif a_object.annotations(i).name = 'disabled' then
88100 l_test_disabled := true;
89101 elsif a_object.annotations(i).name = 'beforetest' then
90102 l_beforetest_procedure := a_object.annotations(i).text;
91103 elsif a_object.annotations(i).name = 'aftertest' then
92104 l_aftertest_procedure := a_object.annotations(i).text;
105+ elsif a_object.annotations(i).name = 'throws' then
106+ l_expected_error_codes := exception_numbers_list(a_object.annotations(i).text);
93107 elsif a_object.annotations(i).name in ('displayname','test') then
94108 l_displayname := a_object.annotations(i).text;
95109 if a_object.annotations(i).name = 'test' then
@@ -113,13 +127,15 @@ create or replace package body ut_suite_builder is
113127 ,a_rollback_type => coalesce(l_rollback_type, l_suite_rollback)
114128 ,a_disabled_flag => l_test_disabled
115129 ,a_before_test_proc_name => l_beforetest_procedure
116- ,a_after_test_proc_name => l_aftertest_procedure);
130+ ,a_after_test_proc_name => l_aftertest_procedure
131+ ,a_expected_error_codes => l_expected_error_codes);
117132
118133 l_is_test := false;
119134 l_test_disabled := false;
120135 l_aftertest_procedure := null;
121136 l_beforetest_procedure := null;
122137 l_rollback_type := null;
138+ l_expected_error_codes := null;
123139 end if;
124140
125141 end if;
0 commit comments