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

Skip to content

Commit c787e47

Browse files
committed
Added support for multiple occurrences of before and after blocks.
Refactored suite_builder to be ready for context.
1 parent 6e95077 commit c787e47

20 files changed

Lines changed: 681 additions & 430 deletions
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
create or replace type ut_executables as
2+
/*
3+
utPLSQL - Version 3
4+
Copyright 2016 - 2017 utPLSQL Project
5+
6+
Licensed under the Apache License, Version 2.0 (the "License"):
7+
you may not use this file except in compliance with the License.
8+
You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing, software
13+
distributed under the License is distributed on an "AS IS" BASIS,
14+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
See the License for the specific language governing permissions and
16+
limitations under the License.
17+
*/
18+
table of ut_executable
19+
/

source/core/types/ut_logical_suite.tpb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ create or replace type body ut_logical_suite as
1717
*/
1818

1919
constructor function ut_logical_suite(
20-
self in out nocopy ut_logical_suite,a_object_owner varchar2, a_object_name varchar2, a_name varchar2, a_description varchar2 := null, a_path varchar2
20+
self in out nocopy ut_logical_suite,a_object_owner varchar2, a_object_name varchar2, a_name varchar2, a_path varchar2
2121
) return self as result is
2222
begin
2323
self.self_type := $$plsql_unit;
24-
self.init(a_object_owner, a_object_name, a_name, a_description, a_path, ut_utils.gc_rollback_auto, false);
24+
self.init(a_object_owner, a_object_name, a_name);
25+
self.path := a_path;
26+
self.disabled_flag := ut_utils.boolean_to_int(false);
2527
self.items := ut_suite_items();
2628
return;
2729
end;
@@ -49,6 +51,14 @@ create or replace type body ut_logical_suite as
4951
self.calc_execution_result();
5052
end;
5153

54+
overriding member procedure set_default_rollback_type(self in out nocopy ut_logical_suite, a_rollback_type integer) is
55+
begin
56+
self.rollback_type := coalesce(self.rollback_type, a_rollback_type);
57+
for i in 1 .. self.items.count loop
58+
self.items(i).set_default_rollback_type(a_rollback_type);
59+
end loop;
60+
end;
61+
5262
overriding member function do_execute(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base) return boolean is
5363
l_suite_savepoint varchar2(30);
5464
l_item_savepoint varchar2(30);

source/core/types/ut_logical_suite.tps

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ create or replace type ut_logical_suite under ut_suite_item (
2222
items ut_suite_items,
2323

2424
constructor function ut_logical_suite(
25-
self in out nocopy ut_logical_suite,a_object_owner varchar2, a_object_name varchar2, a_name varchar2, a_description varchar2 := null, a_path varchar2
25+
self in out nocopy ut_logical_suite, a_object_owner varchar2, a_object_name varchar2, a_name varchar2, a_path varchar2
2626
) return self as result,
2727
member function is_valid(self in out nocopy ut_logical_suite) return boolean,
2828
member procedure add_item(self in out nocopy ut_logical_suite, a_item ut_suite_item),
2929
overriding member procedure mark_as_skipped(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base),
30+
overriding member procedure set_default_rollback_type(self in out nocopy ut_logical_suite, a_rollback_type integer),
3031
overriding member function do_execute(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base) return boolean,
3132
overriding member procedure calc_execution_result(self in out nocopy ut_logical_suite),
3233
overriding member procedure mark_as_errored(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base, a_error_stack_trace varchar2),

source/core/types/ut_suite.tpb

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,31 @@ create or replace type body ut_suite as
1616
limitations under the License.
1717
*/
1818

19-
constructor function ut_suite (
20-
self in out nocopy ut_suite , a_object_owner varchar2 := null, a_object_name varchar2, a_name varchar2, a_path varchar2, a_description varchar2 := null,
21-
a_rollback_type integer := null, a_disabled_flag boolean := false, a_before_all_proc_name varchar2 := null,
22-
a_after_all_proc_name varchar2 := null
23-
) return self as result is
19+
constructor function ut_suite (self in out nocopy ut_suite , a_object_owner varchar2, a_object_name varchar2) return self as result is
2420
begin
2521
self.self_type := $$plsql_unit;
26-
self.init(a_object_owner, a_object_name, a_name, a_description, a_path, a_rollback_type, a_disabled_flag);
27-
self.before_all := ut_executable(self, a_before_all_proc_name, ut_utils.gc_before_all);
22+
self.init(a_object_owner, a_object_name, a_object_name);
2823
self.items := ut_suite_items();
29-
self.after_all := ut_executable(self, a_after_all_proc_name, ut_utils.gc_after_all);
24+
before_all_list := ut_executables();
25+
after_all_list := ut_executables();
3026
return;
3127
end;
3228

3329
overriding member function is_valid(self in out nocopy ut_suite) return boolean is
34-
l_is_valid boolean;
30+
l_is_valid boolean := true;
3531
begin
36-
l_is_valid :=
37-
( not self.before_all.is_defined() or self.before_all.is_valid() ) and
38-
( not self.after_all.is_defined() or self.after_all.is_valid() );
32+
for i in 1 .. before_all_list.count loop
33+
l_is_valid := self.before_all_list(i).is_valid() and l_is_valid;
34+
end loop;
35+
for i in 1 .. after_all_list.count loop
36+
l_is_valid := self.after_all_list(i).is_valid() and l_is_valid;
37+
end loop;
3938
return l_is_valid;
4039
end;
4140

4241
overriding member function do_execute(self in out nocopy ut_suite, a_listener in out nocopy ut_event_listener_base) return boolean is
4342
l_suite_savepoint varchar2(30);
44-
l_suite_step_without_errors boolean;
43+
l_no_errors boolean;
4544

4645
procedure propagate_error(a_error_stack_trace varchar2) is
4746
begin
@@ -64,20 +63,27 @@ create or replace type body ut_suite as
6463
l_suite_savepoint := self.create_savepoint_if_needed();
6564

6665
--includes listener calls for before and after actions
67-
l_suite_step_without_errors := self.before_all.do_execute(self, a_listener);
68-
69-
if l_suite_step_without_errors then
66+
l_no_errors := true;
67+
for i in 1 .. self.before_all_list.count loop
68+
l_no_errors := self.before_all_list(i).do_execute(self, a_listener);
69+
if not l_no_errors then
70+
propagate_error(self.before_all_list(i).get_error_stack_trace());
71+
exit;
72+
end if;
73+
end loop;
74+
75+
if l_no_errors then
7076
for i in 1 .. self.items.count loop
7177
self.items(i).do_execute(a_listener);
7278
end loop;
73-
else
74-
propagate_error(self.before_all.get_error_stack_trace());
7579
end if;
7680

77-
l_suite_step_without_errors := self.after_all.do_execute(self, a_listener);
78-
if not l_suite_step_without_errors then
79-
self.put_warning(self.after_all.get_error_stack_trace());
80-
end if;
81+
for i in 1 .. after_all_list.count loop
82+
l_no_errors := self.after_all_list(i).do_execute(self, a_listener);
83+
if not l_no_errors then
84+
self.put_warning(self.after_all_list(i).get_error_stack_trace());
85+
end if;
86+
end loop;
8187

8288
self.rollback_to_savepoint(l_suite_savepoint);
8389

@@ -91,22 +97,30 @@ create or replace type body ut_suite as
9197

9298
ut_utils.set_action(null);
9399

94-
return l_suite_step_without_errors;
100+
return l_no_errors;
95101
end;
96102

97103
overriding member function get_error_stack_traces(self ut_suite) return ut_varchar2_list is
98104
l_stack_traces ut_varchar2_list := ut_varchar2_list();
99105
begin
100-
ut_utils.append_to_list(l_stack_traces, self.before_all.get_error_stack_trace());
101-
ut_utils.append_to_list(l_stack_traces, self.after_all.get_error_stack_trace());
106+
for i in 1 .. before_all_list.count loop
107+
ut_utils.append_to_list(l_stack_traces, self.before_all_list(i).get_error_stack_trace());
108+
end loop;
109+
for i in 1 .. after_all_list.count loop
110+
ut_utils.append_to_list(l_stack_traces, self.after_all_list(i).get_error_stack_trace());
111+
end loop;
102112
return l_stack_traces;
103113
end;
104114

105115
overriding member function get_serveroutputs return clob is
106116
l_outputs clob;
107117
begin
108-
ut_utils.append_to_clob(l_outputs, self.before_all.serveroutput );
109-
ut_utils.append_to_clob(l_outputs, self.after_all.serveroutput );
118+
for i in 1 .. before_all_list.count loop
119+
ut_utils.append_to_clob(l_outputs, self.before_all_list(i).serveroutput);
120+
end loop;
121+
for i in 1 .. after_all_list.count loop
122+
ut_utils.append_to_clob(l_outputs, self.after_all_list(i).serveroutput);
123+
end loop;
110124
return l_outputs;
111125
end;
112126

source/core/types/ut_suite.tps

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,14 @@ create or replace type ut_suite under ut_logical_suite (
1919
* The procedure to be invoked before all of the items of the suite (executed once)
2020
* Procedure exists within the package of the suite
2121
*/
22-
before_all ut_executable,
22+
before_all_list ut_executables,
2323

2424
/**
2525
* The procedure to be invoked after all of the items of the suite (executed once)
2626
* Procedure exists within the package of the suite
2727
*/
28-
after_all ut_executable,
29-
constructor function ut_suite (
30-
self in out nocopy ut_suite , a_object_owner varchar2 := null, a_object_name varchar2, a_name varchar2, a_path varchar2, a_description varchar2 := null,
31-
a_rollback_type integer := null, a_disabled_flag boolean := false, a_before_all_proc_name varchar2 := null,
32-
a_after_all_proc_name varchar2 := null
33-
) return self as result,
28+
after_all_list ut_executables,
29+
constructor function ut_suite (self in out nocopy ut_suite , a_object_owner varchar2, a_object_name varchar2) return self as result,
3430
overriding member function is_valid(self in out nocopy ut_suite) return boolean,
3531
overriding member function do_execute(self in out nocopy ut_suite , a_listener in out nocopy ut_event_listener_base) return boolean,
3632
overriding member function get_error_stack_traces(self ut_suite) return ut_varchar2_list,

source/core/types/ut_suite_item.tpb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,15 @@ create or replace type body ut_suite_item as
1616
limitations under the License.
1717
*/
1818

19-
member procedure init(self in out nocopy ut_suite_item, a_object_owner varchar2, a_object_name varchar2, a_name varchar2, a_description varchar2, a_path varchar2, a_rollback_type integer, a_disabled_flag boolean) is
19+
member procedure init(self in out nocopy ut_suite_item, a_object_owner varchar2, a_object_name varchar2, a_name varchar2) is
2020
begin
2121
self.object_owner := a_object_owner;
2222
self.object_name := lower(trim(a_object_name));
2323
self.name := lower(trim(a_name));
24-
self.description := a_description;
25-
self.path := nvl(lower(trim(a_path)), self.object_name);
26-
self.rollback_type := a_rollback_type;
27-
self.disabled_flag := ut_utils.boolean_to_int(a_disabled_flag);
2824
self.results_count := ut_results_counter();
2925
self.warnings := ut_varchar2_list();
3026
self.transaction_invalidators := ut_varchar2_list();
27+
self.disabled_flag := ut_utils.boolean_to_int(false);
3128
end;
3229

3330
member procedure set_disabled_flag(self in out nocopy ut_suite_item, a_disabled_flag boolean) is
@@ -40,6 +37,11 @@ create or replace type body ut_suite_item as
4037
return ut_utils.int_to_boolean(self.disabled_flag);
4138
end;
4239

40+
member procedure set_default_rollback_type(self in out nocopy ut_suite_item, a_rollback_type integer) is
41+
begin
42+
self.rollback_type := coalesce(self.rollback_type, a_rollback_type);
43+
end;
44+
4345
final member procedure do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) is
4446
l_completed_without_errors boolean;
4547
begin

source/core/types/ut_suite_item.tps

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@ create or replace type ut_suite_item force under ut_suite_item_base (
1818

1919
results_count ut_results_counter,
2020
transaction_invalidators ut_varchar2_list,
21-
member procedure init(
22-
self in out nocopy ut_suite_item, a_object_owner varchar2, a_object_name varchar2, a_name varchar2,
23-
a_description varchar2, a_path varchar2, a_rollback_type integer, a_disabled_flag boolean),
21+
member procedure init(self in out nocopy ut_suite_item, a_object_owner varchar2, a_object_name varchar2, a_name varchar2),
2422
member procedure set_disabled_flag(self in out nocopy ut_suite_item, a_disabled_flag boolean),
2523
member function get_disabled_flag return boolean,
2624
not instantiable member procedure mark_as_skipped(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base),
25+
member procedure set_default_rollback_type(self in out nocopy ut_suite_item, a_rollback_type integer),
2726
member function create_savepoint_if_needed return varchar2,
2827
member procedure rollback_to_savepoint(self in out nocopy ut_suite_item, a_savepoint varchar2),
2928
member function get_transaction_invalidators return ut_varchar2_list,

0 commit comments

Comments
 (0)