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

Skip to content

Commit 40a9b44

Browse files
committed
implemented fail procedure at ut_test_item level to push failures to child items
1 parent 7840258 commit 40a9b44

9 files changed

Lines changed: 90 additions & 28 deletions

File tree

source/core/types/ut_logical_suite.tpb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,21 @@ create or replace type body ut_logical_suite as
9999
end if;
100100

101101
self.result := l_result;
102-
end;
102+
end;
103+
104+
overriding member procedure fail(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2) is
105+
begin
106+
ut_utils.debug_log('ut_logical_suite.fail');
107+
a_listener.fire_before_event(ut_utils.gc_suite, self);
108+
self.start_time := current_timestamp;
109+
for i in 1 .. self.items.count loop
110+
-- execute the item (test or suite)
111+
self.items(i).fail(a_listener,a_failure_msg);
112+
end loop;
113+
self.calc_execution_result();
114+
self.end_time := self.start_time;
115+
a_listener.fire_after_event(ut_utils.gc_suite, self);
116+
end;
103117

104118
end;
105119
/

source/core/types/ut_logical_suite.tps

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
create or replace type ut_logical_suite force under ut_suite_item (
1+
create or replace type ut_logical_suite under ut_suite_item (
22
/*
33
utPLSQL - Version X.X.X.X
44
Copyright 2016 - 2017 utPLSQL Project
@@ -31,6 +31,7 @@ create or replace type ut_logical_suite force under ut_suite_item (
3131
member function item_index(a_name varchar2) return pls_integer,
3232
member procedure add_item(self in out nocopy ut_logical_suite, a_item ut_suite_item),
3333
overriding member function do_execute(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base) return boolean,
34-
overriding member procedure calc_execution_result(self in out nocopy ut_logical_suite)
34+
overriding member procedure calc_execution_result(self in out nocopy ut_logical_suite),
35+
overriding member procedure fail(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2)
3536
) not final
3637
/

source/core/types/ut_run.tpb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,23 @@ create or replace type body ut_run as
6464

6565
self.result := l_result;
6666
end;
67+
68+
overriding member procedure fail(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2) is
69+
begin
70+
ut_utils.debug_log('ut_run.fail');
71+
72+
a_listener.fire_before_event(ut_utils.gc_run, self);
73+
self.start_time := current_timestamp;
74+
75+
for i in 1 .. self.items.count loop
76+
self.items(i).fail(a_listener, a_failure_msg);
77+
end loop;
78+
79+
self.calc_execution_result();
80+
self.end_time := self.start_time;
81+
82+
a_listener.fire_after_event(ut_utils.gc_run, self);
83+
end;
6784

6885
end;
6986
/

source/core/types/ut_run.tps

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
create or replace type ut_run authid current_user under ut_suite_item (
1+
create or replace type ut_run under ut_suite_item (
22
/*
33
utPLSQL - Version X.X.X.X
44
Copyright 2016 - 2017 utPLSQL Project
@@ -21,6 +21,7 @@ create or replace type ut_run authid current_user under ut_suite_item (
2121
items ut_suite_items,
2222
constructor function ut_run( self in out nocopy ut_run, a_items ut_suite_items ) return self as result,
2323
overriding member function do_execute(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base) return boolean,
24-
overriding member procedure calc_execution_result(self in out nocopy ut_run)
24+
overriding member procedure calc_execution_result(self in out nocopy ut_run),
25+
overriding member procedure fail(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2)
2526
)
2627
/

source/core/types/ut_suite.tpb

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,21 @@ create or replace type body ut_suite as
4343
return l_is_valid;
4444
end;
4545

46-
overriding member function do_execute(self in out nocopy ut_suite , a_listener in out nocopy ut_event_listener_base) return boolean is
46+
overriding member function do_execute(self in out nocopy ut_suite, a_listener in out nocopy ut_event_listener_base) return boolean is
4747
l_suite_savepoint varchar2(30);
4848
l_item_savepoint varchar2(30);
4949
l_completed_without_errors boolean;
50+
l_suite_step_without_errors boolean;
51+
52+
procedure do_fail(a_prefix varchar2) is
53+
l_results ut_assert_results := ut_assert_processor.get_asserts_results();
54+
begin
55+
for i in 1..self.items.count loop
56+
self.items(i).fail(a_listener, a_prefix||l_results(1).error_message);
57+
end loop;
58+
end;
5059
begin
51-
ut_utils.debug_log('ut_suite .execute');
60+
ut_utils.debug_log('ut_suite.execute');
5261
a_listener.fire_before_event(ut_utils.gc_suite,self);
5362

5463
self.start_time := current_timestamp;
@@ -64,48 +73,53 @@ create or replace type body ut_suite as
6473
l_suite_savepoint := self.create_savepoint_if_needed();
6574

6675
--includes listener calls for before and after actions
67-
l_completed_without_errors := self.before_all.do_execute(self, a_listener);
76+
l_suite_step_without_errors := self.before_all.do_execute(self, a_listener);
6877

69-
if l_completed_without_errors then
78+
if l_suite_step_without_errors then
7079
for i in 1 .. self.items.count loop
7180
l_completed_without_errors := true;
7281

7382
--savepoint
7483
l_item_savepoint := self.items(i).create_savepoint_if_needed();
7584
--before each
76-
if l_completed_without_errors then
77-
--includes listener calls for before and after actions
78-
l_completed_without_errors := self.before_each.do_execute(self, a_listener);
79-
end if;
85+
--includes listener calls for before and after actions
86+
l_completed_without_errors := self.before_each.do_execute(self, a_listener);
8087

8188
-- execute the item (test or suite)
8289
if l_completed_without_errors then
8390
l_completed_without_errors := self.items(i).do_execute(a_listener);
84-
end if;
85-
86-
--after each
87-
if l_completed_without_errors then
91+
92+
--after each
8893
--includes listener calls for before and after actions
94+
-- run afteeach even if a test raised an exception
8995
l_completed_without_errors := self.after_each.do_execute(self, a_listener);
96+
97+
if not l_completed_without_errors then
98+
self.items(i).fail(a_listener, 'Aftereach procedure failed:'||chr(10)||ut_assert_processor.get_asserts_results()(1).error_message);
99+
end if;
100+
101+
else
102+
self.items(i).fail(a_listener, 'Beforeach procedure failed:'||chr(10)||ut_assert_processor.get_asserts_results()(1).error_message);
90103
end if;
104+
91105
--rollback to savepoint
92106
self.items(i).rollback_to_savepoint(l_item_savepoint);
93107

94108
-- exit when not l_completed_without_errors;
95109
end loop;
96-
end if;
97-
98-
if l_completed_without_errors then
99-
l_completed_without_errors := self.after_all.do_execute(self, a_listener);
110+
111+
l_suite_step_without_errors := self.after_all.do_execute(self, a_listener);
112+
if not l_suite_step_without_errors then
113+
do_fail('Afterall procedure failed: '||chr(10));
114+
end if;
115+
else
116+
do_fail('Beforeall procedure failed: '||chr(10));
100117
end if;
101118

102119
self.rollback_to_savepoint(l_suite_savepoint);
120+
103121
else
104-
for i in 1..self.items.count loop
105-
if self.items(i) is of(ut_test) then
106-
l_completed_without_errors := self.items(i).do_execute(a_listener);
107-
end if;
108-
end loop;
122+
do_fail(null);
109123
end if;
110124

111125
self.calc_execution_result();

source/core/types/ut_suite_item.tps

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ create or replace type ut_suite_item under ut_suite_item_base (
2828

2929
not instantiable member function do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean,
3030
final member procedure do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base),
31-
not instantiable member procedure calc_execution_result(self in out nocopy ut_suite_item)
31+
not instantiable member procedure calc_execution_result(self in out nocopy ut_suite_item),
32+
not instantiable member procedure fail(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2)
3233

3334
)
3435
not final not instantiable

source/core/types/ut_test.tpb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,18 @@ create or replace type body ut_test as
8787
self.results := ut_assert_processor.get_asserts_results();
8888
self.results_count := ut_results_counter(self.result);
8989
end;
90+
91+
overriding member procedure fail(self in out nocopy ut_test, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2) is
92+
begin
93+
ut_utils.debug_log('ut_test.fail');
94+
a_listener.fire_before_event(ut_utils.gc_test, self);
95+
self.start_time := current_timestamp;
96+
ut_assert_processor.report_error(a_failure_msg);
97+
self.calc_execution_result();
98+
self.end_time := self.start_time;
99+
a_listener.fire_after_event(ut_utils.gc_test, self);
100+
end;
101+
90102

91103
end;
92104
/

source/core/types/ut_test.tps

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ create or replace type ut_test under ut_suite_item (
4040
) return self as result,
4141
member function is_valid return boolean,
4242
overriding member function do_execute(self in out nocopy ut_test, a_listener in out nocopy ut_event_listener_base) return boolean,
43-
overriding member procedure calc_execution_result(self in out nocopy ut_test)
43+
overriding member procedure calc_execution_result(self in out nocopy ut_test),
44+
overriding member procedure fail(self in out nocopy ut_test, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2)
4445
)
4546
/

source/core/ut_suite_manager.pkb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ create or replace package body ut_suite_manager is
274274
,t.object_name
275275
from all_objects t
276276
where t.owner = a_owner_name
277+
and t.status = 'VALID' -- scan only valid specifications
277278
and t.object_type in ('PACKAGE')) loop
278279
-- parse the source of the package
279280
l_suite := config_package(rec.owner, rec.object_name);

0 commit comments

Comments
 (0)