Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion source/core/types/ut_event_listener.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ create or replace type body ut_event_listener is
end if;
end loop;

end;
end fire_event;

end;
/
32 changes: 21 additions & 11 deletions source/core/types/ut_logical_suite.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -52,39 +52,35 @@ create or replace type body ut_logical_suite as
self.items(self.items.last) := a_item;
end;

overriding member procedure do_execute(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base) is
l_completed_without_errors boolean;
begin
l_completed_without_errors := self.do_execute(a_listener);
end;

overriding member function do_execute(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base) return boolean is
l_suite_savepoint varchar2(30);
l_item_savepoint varchar2(30);
l_completed_without_errors boolean;
begin
ut_utils.debug_log('ut_logical_suite.execute');

a_listener.fire_before_event(ut_utils.gc_suite,self);
self.start_time := current_timestamp;

if self.get_ignore_flag() then
self.result := ut_utils.tr_ignore;
self.end_time := self.start_time;
ut_utils.debug_log('ut_logical_suite.execute - ignored');
else
a_listener.fire_before_event(ut_utils.gc_suite,self);

self.start_time := current_timestamp;

for i in 1 .. self.items.count loop
-- execute the item (test or suite)
self.items(i).do_execute(a_listener);

end loop;

self.calc_execution_result();

self.end_time := current_timestamp;

a_listener.fire_after_event(ut_utils.gc_suite,self);
end if;

a_listener.fire_after_event(ut_utils.gc_suite,self);

return l_completed_without_errors;
end;
Expand All @@ -103,7 +99,21 @@ create or replace type body ut_logical_suite as
end if;

self.result := l_result;
end;
end;

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
begin
ut_utils.debug_log('ut_logical_suite.fail');
a_listener.fire_before_event(ut_utils.gc_suite, self);
self.start_time := current_timestamp;
for i in 1 .. self.items.count loop
-- execute the item (test or suite)
self.items(i).fail(a_listener,a_failure_msg);
end loop;
self.calc_execution_result();
self.end_time := self.start_time;
a_listener.fire_after_event(ut_utils.gc_suite, self);
end;

end;
/
6 changes: 3 additions & 3 deletions source/core/types/ut_logical_suite.tps
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
create or replace type ut_logical_suite force under ut_suite_item (
create or replace type ut_logical_suite under ut_suite_item (
/*
utPLSQL - Version X.X.X.X
Copyright 2016 - 2017 utPLSQL Project
Expand Down Expand Up @@ -31,7 +31,7 @@ create or replace type ut_logical_suite force under ut_suite_item (
member function item_index(a_name varchar2) return pls_integer,
member procedure add_item(self in out nocopy ut_logical_suite, a_item ut_suite_item),
overriding member function do_execute(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base) return boolean,
overriding member procedure do_execute(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base),
overriding member procedure calc_execution_result(self in out nocopy ut_logical_suite)
overriding member procedure calc_execution_result(self in out nocopy ut_logical_suite),
overriding member procedure fail(self in out nocopy ut_logical_suite, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2)
) not final
/
1 change: 1 addition & 0 deletions source/core/types/ut_reporter_base.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -131,5 +131,6 @@ create or replace type body ut_reporter_base is
begin
ut_output_buffer.close(self);
end;

end;
/
2 changes: 1 addition & 1 deletion source/core/types/ut_reporter_base.tps
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
create or replace type ut_reporter_base force authid current_user as object(
create or replace type ut_reporter_base authid current_user as object(
/*
utPLSQL - Version X.X.X.X
Copyright 2016 - 2017 utPLSQL Project
Expand Down
16 changes: 12 additions & 4 deletions source/core/types/ut_results_counter.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ create or replace type body ut_results_counter as
*/
constructor function ut_results_counter(self in out nocopy ut_results_counter) return self as result is
begin
self.ignored_count := 0;
self.success_count := 0;
self.failure_count := 0;
self.errored_count := 0;
self.ignored_count := 0;
self.success_count := 0;
self.failure_count := 0;
self.errored_count := 0;
self.warnings_count := 0;
return;
end;

Expand All @@ -39,10 +40,17 @@ create or replace type body ut_results_counter as
self.success_count := self.success_count + a_item.success_count;
self.failure_count := self.failure_count + a_item.failure_count;
self.errored_count := self.errored_count + a_item.errored_count;
self.warnings_count := self.warnings_count + a_item.warnings_count;
end;

member procedure increase_warning_count(self in out nocopy ut_results_counter) is
begin
self.warnings_count := self.warnings_count + 1;
end;

member function total_count return integer is
begin
--skip warnings here
return self.ignored_count + self.success_count + self.failure_count + self.errored_count;
end;

Expand Down
2 changes: 2 additions & 0 deletions source/core/types/ut_results_counter.tps
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ create or replace type ut_results_counter as object(
success_count integer,
failure_count integer,
errored_count integer,
warnings_count integer,
constructor function ut_results_counter(self in out nocopy ut_results_counter) return self as result,
constructor function ut_results_counter(self in out nocopy ut_results_counter, a_status integer) return self as result,
member procedure sum_counter_values(self in out nocopy ut_results_counter, a_item ut_results_counter),
member procedure increase_warning_count(self in out nocopy ut_results_counter),
member function total_count return integer,
member function result_status return integer
)
Expand Down
26 changes: 20 additions & 6 deletions source/core/types/ut_run.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,6 @@ create or replace type body ut_run as
return;
end;

overriding member procedure do_execute(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base) is
l_completed_without_errors boolean;
begin
l_completed_without_errors := self.do_execute(a_listener);
end;

overriding member function do_execute(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base) return boolean is
l_completed_without_errors boolean;
begin
Expand All @@ -38,6 +32,9 @@ create or replace type body ut_run as
a_listener.fire_before_event(ut_utils.gc_run, self);

self.start_time := current_timestamp;

-- clear anything that might stay in the session's cache
ut_assert_processor.clear_asserts;

for i in 1 .. self.items.count loop
l_completed_without_errors := self.items(i).do_execute(a_listener);
Expand Down Expand Up @@ -67,6 +64,23 @@ create or replace type body ut_run as

self.result := l_result;
end;

overriding member procedure fail(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2) is
begin
ut_utils.debug_log('ut_run.fail');

a_listener.fire_before_event(ut_utils.gc_run, self);
self.start_time := current_timestamp;

for i in 1 .. self.items.count loop
self.items(i).fail(a_listener, a_failure_msg);
end loop;

self.calc_execution_result();
self.end_time := self.start_time;

a_listener.fire_after_event(ut_utils.gc_run, self);
end;

end;
/
6 changes: 3 additions & 3 deletions source/core/types/ut_run.tps
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
create or replace type ut_run authid current_user under ut_suite_item (
create or replace type ut_run under ut_suite_item (
/*
utPLSQL - Version X.X.X.X
Copyright 2016 - 2017 utPLSQL Project
Expand All @@ -21,7 +21,7 @@ create or replace type ut_run authid current_user under ut_suite_item (
items ut_suite_items,
constructor function ut_run( self in out nocopy ut_run, a_items ut_suite_items ) return self as result,
overriding member function do_execute(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base) return boolean,
overriding member procedure do_execute(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base),
overriding member procedure calc_execution_result(self in out nocopy ut_run)
overriding member procedure calc_execution_result(self in out nocopy ut_run),
overriding member procedure fail(self in out nocopy ut_run, a_listener in out nocopy ut_event_listener_base, a_failure_msg varchar2)
)
/
93 changes: 57 additions & 36 deletions source/core/types/ut_suite.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -43,67 +43,88 @@ create or replace type body ut_suite as
return l_is_valid;
end;

overriding member function do_execute(self in out nocopy ut_suite , a_listener in out nocopy ut_event_listener_base) return boolean is
overriding member function do_execute(self in out nocopy ut_suite, a_listener in out nocopy ut_event_listener_base) return boolean is
l_suite_savepoint varchar2(30);
l_item_savepoint varchar2(30);
l_completed_without_errors boolean;
l_suite_step_without_errors boolean;

procedure do_fail(a_prefix varchar2) is
l_results ut_assert_results := ut_assert_processor.get_asserts_results();
begin
for i in 1..self.items.count loop
self.items(i).fail(a_listener, a_prefix||l_results(1).error_message);
end loop;
end;
begin
ut_utils.debug_log('ut_suite .execute');
ut_utils.debug_log('ut_suite.execute');
a_listener.fire_before_event(ut_utils.gc_suite,self);

self.start_time := current_timestamp;

if self.get_ignore_flag() then
self.result := ut_utils.tr_ignore;
self.end_time := self.start_time;
ut_utils.debug_log('ut_suite .execute - ignored');
else
a_listener.fire_before_event(ut_utils.gc_suite,self);

if self.is_valid() then

self.start_time := current_timestamp;
l_suite_savepoint := self.create_savepoint_if_needed();

l_suite_savepoint := self.create_savepoint_if_needed();
--includes listener calls for before and after actions
l_suite_step_without_errors := self.before_all.do_execute(self, a_listener);

--includes listener calls for before and after actions
l_completed_without_errors := self.before_all.do_execute(self, a_listener);
if l_suite_step_without_errors then
for i in 1 .. self.items.count loop
l_completed_without_errors := true;

if l_completed_without_errors then
for i in 1 .. self.items.count loop
l_completed_without_errors := true;

--savepoint
l_item_savepoint := self.items(i).create_savepoint_if_needed();
--before each
if l_completed_without_errors then
--savepoint
l_item_savepoint := self.items(i).create_savepoint_if_needed();

--before each
--includes listener calls for before and after actions
l_completed_without_errors := self.before_each.do_execute(self, a_listener);
end if;

-- execute the item (test or suite)
if l_completed_without_errors then
l_completed_without_errors := self.items(i).do_execute(a_listener);
end if;

--after each
if l_completed_without_errors then
-- execute the item (test or suite)
if l_completed_without_errors then
l_completed_without_errors := self.items(i).do_execute(a_listener);
else
self.items(i).fail(a_listener, 'Beforeach procedure failed:'||chr(10)||ut_assert_processor.get_asserts_results()(1).error_message);
end if;

--after each
--includes listener calls for before and after actions
--run afteeach even if a test raised an exception
l_completed_without_errors := self.after_each.do_execute(self, a_listener);
if not l_completed_without_errors then
self.put_warning('Aftereach procedure failed:'||chr(10)||ut_assert_processor.get_asserts_results()(1).error_message);
end if;

--rollback to savepoint
self.items(i).rollback_to_savepoint(l_item_savepoint);

end loop;

l_suite_step_without_errors := self.after_all.do_execute(self, a_listener);
if not l_suite_step_without_errors then
self.put_warning('Afterall procedure failed: '||chr(10)||ut_assert_processor.get_asserts_results()(1).error_message);
end if;
--rollback to savepoint
self.items(i).rollback_to_savepoint(l_item_savepoint);

-- exit when not l_completed_without_errors;
end loop;
end if;

if l_completed_without_errors then
l_completed_without_errors := self.after_all.do_execute(self, a_listener);
else
do_fail('Beforeall procedure failed: '||chr(10));
end if;

self.rollback_to_savepoint(l_suite_savepoint);

else
do_fail(null);
end if;

self.calc_execution_result();

self.rollback_to_savepoint(l_suite_savepoint);

self.end_time := current_timestamp;

a_listener.fire_after_event(ut_utils.gc_suite,self);
end if;
a_listener.fire_after_event(ut_utils.gc_suite,self);

return l_completed_without_errors;
end;
Expand Down
14 changes: 14 additions & 0 deletions source/core/types/ut_suite_item.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ create or replace type body ut_suite_item as
self.rollback_type := a_rollback_type;
self.ignore_flag := ut_utils.boolean_to_int(a_ignore_flag);
self.results_count := ut_results_counter();
self.warnings := ut_varchar2_list();
end;

member procedure set_ignore_flag(self in out nocopy ut_suite_item, a_ignore_flag boolean) is
Expand All @@ -40,6 +41,12 @@ create or replace type body ut_suite_item as
begin
return ut_utils.int_to_boolean(self.ignore_flag);
end;

final member procedure do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) is
l_completed_without_errors boolean;
begin
l_completed_without_errors := self.do_execute(a_listener);
end;

member function create_savepoint_if_needed return varchar2 is
l_savepoint varchar2(30);
Expand Down Expand Up @@ -67,6 +74,13 @@ create or replace type body ut_suite_item as
begin
return ut_utils.time_diff(start_time, end_time);
end;

member procedure put_warning(self in out nocopy ut_suite_item, a_message varchar2) is
begin
self.warnings.extend;
self.warnings(self.warnings.last) := a_message;
self.results_count.increase_warning_count;
end;

end;
/
8 changes: 5 additions & 3 deletions source/core/types/ut_suite_item.tps
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
create or replace type ut_suite_item under ut_suite_item_base (
create or replace type ut_suite_item force under ut_suite_item_base (
/*
utPLSQL - Version X.X.X.X
Copyright 2016 - 2017 utPLSQL Project
Expand Down Expand Up @@ -27,8 +27,10 @@ create or replace type ut_suite_item under ut_suite_item_base (
member function execution_time return number,

not instantiable member function do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean,
not instantiable member procedure do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base),
not instantiable member procedure calc_execution_result(self in out nocopy ut_suite_item)
final member procedure do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base),
not instantiable member procedure calc_execution_result(self in out nocopy ut_suite_item),
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),
member procedure put_warning(self in out nocopy ut_suite_item, a_message varchar2)

)
not final not instantiable
Expand Down
Loading