@@ -23,6 +23,9 @@ create or replace package body ut_suite_manager is
2323 l_owner_name varchar2(32 char);
2424 l_object_name varchar2(32 char);
2525 l_suite ut_test_suite;
26+
27+ l_suite_rollback integer;
28+ l_suite_rollback_annotation varchar2(4000);
2629
2730 begin
2831 l_owner_name := a_owner_name;
@@ -41,8 +44,24 @@ create or replace package body ut_suite_manager is
4144 else
4245 l_suite_package := lower(l_object_name);
4346 end if;
47+
48+ if l_annotation_data.package_annotations.exists('rollback') then
49+ l_suite_rollback_annotation := ut_annotations.get_annotation_param(l_annotation_data.package_annotations('rollback'), 1);
50+ l_suite_rollback := case lower(l_suite_rollback_annotation)
51+ when 'manual' then
52+ ut_utils.gc_rollback_manual
53+ when 'auto' then
54+ ut_utils.gc_rollback_auto
55+ --when 'on-error' then
56+ -- ut_utils.gc_rollback_on_error
57+ else
58+ ut_utils.gc_rollback_auto
59+ end;
60+ else
61+ l_suite_rollback := ut_utils.gc_rollback_auto;
62+ end if;
4463
45- l_suite := ut_test_suite(l_suite_name, l_suite_package);
64+ l_suite := ut_test_suite(l_suite_name, l_suite_package, a_rollback_type => l_suite_rollback );
4665
4766 l_proc_name := l_annotation_data.procedure_annotations.first;
4867 while (l_default_setup_proc is null or l_default_teardown_proc is null or l_suite_setup_proc is null or
@@ -76,32 +95,49 @@ create or replace package body ut_suite_manager is
7695
7796 l_proc_name := l_annotation_data.procedure_annotations.first;
7897 while l_proc_name is not null loop
79- declare
80- l_setup_procedure varchar2(30 char);
81- l_teardown_procedure varchar2(30 char);
82- begin
83- l_proc_annotations := l_annotation_data.procedure_annotations(l_proc_name);
84-
85- if l_proc_annotations.exists('test') then
98+
99+ l_proc_annotations := l_annotation_data.procedure_annotations(l_proc_name);
100+ if l_proc_annotations.exists('test') then
101+ declare
102+ l_setup_procedure varchar2(30 char);
103+ l_teardown_procedure varchar2(30 char);
104+ l_rollback_annotation varchar2(4000);
105+ l_rollback_type integer := ut_utils.gc_rollback_auto;
106+ begin
86107 if l_proc_annotations.exists('testsetup') then
87108 l_setup_procedure := ut_annotations.get_annotation_param(l_proc_annotations('testsetup'), 1);
88109 end if;
89110
90111 if l_proc_annotations.exists('testteardown') then
91112 l_teardown_procedure := ut_annotations.get_annotation_param(l_proc_annotations('testteardown'), 1);
92113 end if;
114+
115+ if l_proc_annotations.exists('rollback') then
116+ l_rollback_annotation := ut_annotations.get_annotation_param(l_proc_annotations('rollback'), 1);
117+ l_rollback_type := case lower(l_rollback_annotation)
118+ when 'manual' then
119+ ut_utils.gc_rollback_manual
120+ when 'auto' then
121+ ut_utils.gc_rollback_auto
122+ --when 'on-error' then
123+ -- ut_utils.gc_rollback_on_error
124+ else
125+ l_suite_rollback
126+ end;
127+ end if;
93128
94129 l_test := ut_test(a_object_name => l_object_name
95130 ,a_test_procedure => l_proc_name
96131 ,a_test_name => ut_annotations.get_annotation_param(l_proc_annotations('test'), 1)
97132 ,a_owner_name => l_owner_name
98133 ,a_setup_procedure => nvl(l_setup_procedure, l_default_setup_proc)
99- ,a_teardown_procedure => nvl(l_teardown_procedure, l_default_teardown_proc));
134+ ,a_teardown_procedure => nvl(l_teardown_procedure, l_default_teardown_proc)
135+ ,a_rollback_type => l_rollback_type);
100136
101137 l_suite.add_item(l_test);
102- end if ;
103-
104- end;
138+ end;
139+ end if;
140+
105141 l_proc_name := l_annotation_data.procedure_annotations.next(l_proc_name);
106142 end loop;
107143 end if;
0 commit comments