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

Skip to content

Commit 0c83ead

Browse files
committed
Added ignore annotation to bypass tests and suites
1 parent d623e8a commit 0c83ead

12 files changed

Lines changed: 181 additions & 67 deletions

source/install.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ whenever oserror exit failure rollback
2828
@@types/ut_reporter.tpb
2929
@@types/ut_object.tpb
3030
@@types/ut_composite_object.tpb
31+
@@types/ut_test_object.tpb
3132
@@types/ut_test.tpb
3233
@@types/ut_test_suite.tpb
3334
@@types/ut_executable.tpb

source/types/ut_composite_object.tpb

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
create or replace type body ut_composite_object is
22

33
member procedure calc_execution_result(self in out nocopy ut_composite_object) is
4-
l_result integer(1) := ut_utils.tr_success;
4+
l_result integer(1);
55
begin
6-
for i in 1 .. self.items.count loop
7-
l_result := greatest(self.items(i).result, l_result);
8-
exit when l_result = ut_utils.tr_error;
9-
end loop;
6+
if self.items is not null and self.items.count > 0 then
7+
l_result := ut_utils.tr_ignore;
8+
for i in 1 .. self.items.count loop
9+
l_result := greatest(self.items(i).result, l_result);
10+
exit when l_result = ut_utils.tr_error;
11+
end loop;
12+
else
13+
l_result := ut_utils.tr_success;
14+
end if;
15+
1016
self.result := l_result;
1117
end;
1218

source/types/ut_test.tpb

Lines changed: 61 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -53,70 +53,76 @@ create or replace type body ut_test is
5353
execute immediate 'savepoint ' || l_savepoint;
5454
end if;
5555

56-
begin
57-
ut_utils.debug_log('ut_test.execute');
58-
59-
self.start_time := current_timestamp;
56+
ut_utils.debug_log('ut_test.execute');
57+
58+
self.start_time := current_timestamp;
6059

61-
if self.is_valid() then
62-
63-
if self.setup is not null then
64-
l_reporter.before_test_setup(self);
65-
self.setup.execute;
66-
l_reporter.after_test_setup(self);
60+
if nvl(self.ignore_flag,0) != 1 then
61+
begin
62+
63+
if self.is_valid() then
64+
65+
if self.setup is not null then
66+
l_reporter.before_test_setup(self);
67+
self.setup.execute;
68+
l_reporter.after_test_setup(self);
69+
end if;
70+
71+
l_reporter.before_test_execute(self);
72+
begin
73+
self.test.execute;
74+
exception
75+
when others then
76+
-- dbms_utility.format_error_backtrace is 10g or later
77+
-- utl_call_stack package may be better but it's 12c but still need to investigate
78+
-- article with details: http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html
79+
ut_utils.debug_log('testmethod failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
80+
81+
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
82+
end;
83+
l_reporter.after_test_execute(self);
84+
85+
if self.teardown is not null then
86+
l_reporter.before_test_teardown(self);
87+
self.teardown.execute;
88+
l_reporter.after_test_teardown(self);
89+
end if;
90+
6791
end if;
6892

69-
l_reporter.before_test_execute(self);
70-
begin
71-
self.test.execute;
72-
exception
73-
when others then
74-
-- dbms_utility.format_error_backtrace is 10g or later
75-
-- utl_call_stack package may be better but it's 12c but still need to investigate
76-
-- article with details: http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html
77-
ut_utils.debug_log('testmethod failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
78-
79-
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
80-
end;
81-
l_reporter.after_test_execute(self);
93+
exception
94+
when others then
95+
if sqlcode = -04068 then
96+
--raise on ORA-04068: existing state of packages has been discarded to avoid unrecoverable session exception
97+
raise;
98+
end if;
99+
ut_utils.debug_log('ut_test.execute failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
100+
-- most likely occured in setup or teardown if here.
101+
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_stack);
102+
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
103+
end;
82104

83-
if self.teardown is not null then
84-
l_reporter.before_test_teardown(self);
85-
self.teardown.execute;
86-
l_reporter.after_test_teardown(self);
87-
end if;
88-
105+
if self.rollback_type = ut_utils.gc_rollback_auto then
106+
execute immediate 'rollback to ' || l_savepoint;
89107
end if;
90108

91-
exception
92-
when others then
93-
if sqlcode = -04068 then
94-
--raise on ORA-04068: existing state of packages has been discarded to avoid unrecoverable session exception
95-
raise;
96-
end if;
97-
ut_utils.debug_log('ut_test.execute failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
98-
-- most likely occured in setup or teardown if here.
99-
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_stack);
100-
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
101-
end;
109+
self.end_time := current_timestamp;
102110

103-
if self.rollback_type = ut_utils.gc_rollback_auto then
104-
execute immediate 'rollback to ' || l_savepoint;
111+
l_reporter.before_asserts_process(self);
112+
self.items := ut_assert.get_asserts_results();
113+
114+
self.calc_execution_result;
115+
116+
for i in 1 .. self.items.count loop
117+
l_reporter.on_assert_process(treat(self.items(i) as ut_assert_result));
118+
end loop;
119+
120+
l_reporter.after_asserts_process(self);
121+
else
122+
self.end_time := current_timestamp;
123+
self.result := ut_utils.tr_ignore;
105124
end if;
106125

107-
self.end_time := current_timestamp;
108-
109-
l_reporter.before_asserts_process(self);
110-
self.items := ut_assert.get_asserts_results();
111-
112-
self.calc_execution_result;
113-
114-
for i in 1 .. self.items.count loop
115-
l_reporter.on_assert_process(treat(self.items(i) as ut_assert_result));
116-
end loop;
117-
118-
l_reporter.after_asserts_process(self);
119-
120126
l_reporter.after_test(self);
121127

122128
return l_reporter;

source/types/ut_test_object.tpb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
create or replace type body ut_test_object is
2+
3+
member procedure set_ignore_flag(self in out nocopy ut_test_object, a_ignore_flag boolean) is
4+
begin
5+
6+
self.ignore_flag := case a_ignore_flag when true then 1 else 0 end;
7+
end;
8+
member procedure set_rollback_type(self in out nocopy ut_test_object, a_rollback_type integer) is
9+
begin
10+
ut_utils.validate_rollback_type(a_rollback_type => a_rollback_type);
11+
12+
self.rollback_type := a_rollback_type;
13+
end;
14+
15+
end;
16+
/

source/types/ut_test_object.tps

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ create or replace type ut_test_object force under ut_composite_object
33
start_time timestamp with time zone,
44
end_time timestamp with time zone,
55
object_name varchar2(4000),
6-
rollback_type integer(1), -- ut_tils:gc_rollback_% constants
6+
rollback_type integer(1), -- ut_utils:gc_rollback_% constants
7+
ignore_flag integer(1),
8+
79
not instantiable member procedure execute(self in out nocopy ut_test_object, a_reporter ut_reporter),
810
not instantiable member function execute(self in out nocopy ut_test_object, a_reporter ut_reporter)
911
return ut_reporter,
10-
not instantiable member procedure execute(self in out nocopy ut_test_object)
12+
not instantiable member procedure execute(self in out nocopy ut_test_object),
13+
14+
member procedure set_ignore_flag(self in out nocopy ut_test_object, a_ignore_flag boolean),
15+
member procedure set_rollback_type(self in out nocopy ut_test_object, a_rollback_type integer)
1116
)
1217
not instantiable not final
1318
/

source/types/ut_test_suite.tpb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,10 @@ create or replace type body ut_test_suite is
5858
ut_utils.debug_log('ut_test_suite.execute');
5959

6060
self.start_time := current_timestamp;
61-
62-
if self.is_valid() then
61+
62+
if self.ignore_flag = 1 then
63+
self.result := ut_utils.tr_ignore;
64+
elsif self.is_valid() then
6365

6466
if self.rollback_type = ut_utils.gc_rollback_auto then
6567
l_savepoint := ut_utils.gen_savepoint_name;

source/ut_suite_manager.pkb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,18 @@ create or replace package body ut_suite_manager is
5252
ut_utils.gc_rollback_manual
5353
when 'auto' then
5454
ut_utils.gc_rollback_auto
55-
--when 'on-error' then
56-
-- ut_utils.gc_rollback_on_error
5755
else
5856
ut_utils.gc_rollback_auto
5957
end;
6058
else
6159
l_suite_rollback := ut_utils.gc_rollback_auto;
6260
end if;
63-
61+
6462
l_suite := ut_test_suite(l_suite_name, l_suite_package, a_rollback_type => l_suite_rollback);
63+
64+
if l_annotation_data.package_annotations.exists('ignore') then
65+
l_suite.set_ignore_flag(true);
66+
end if;
6567

6668
l_proc_name := l_annotation_data.procedure_annotations.first;
6769
while (l_default_setup_proc is null or l_default_teardown_proc is null or l_suite_setup_proc is null or
@@ -133,6 +135,10 @@ create or replace package body ut_suite_manager is
133135
,a_setup_procedure => nvl(l_setup_procedure, l_default_setup_proc)
134136
,a_teardown_procedure => nvl(l_teardown_procedure, l_default_teardown_proc)
135137
,a_rollback_type => l_rollback_type);
138+
139+
if l_proc_annotations.exists('ignore') then
140+
l_test.set_ignore_flag(true);
141+
end if;
136142

137143
l_suite.add_item(l_test);
138144
end;

source/ut_utils.pkb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ create or replace package body ut_utils is
66
when tr_success then tr_success_char
77
when tr_failure then tr_failure_char
88
when tr_error then tr_error_char
9+
when tr_ignore then tr_ignore_char
910
else 'Unknown(' || coalesce(to_char(a_test_result),'NULL') || ')'
1011
end;
1112
end test_result_to_char;

source/ut_utils.pks

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ create or replace package ut_utils is
1111
tr_failure - one or more asserts failed
1212
tr_error - exception was raised
1313
*/
14+
tr_ignore constant number(1) := 0; -- test/suite was ignored
1415
tr_success constant number(1) := 1; -- test passed
1516
tr_failure constant number(1) := 2; -- one or more asserts failed
1617
tr_error constant number(1) := 3; -- exception was raised
1718

19+
tr_ignore_char constant varchar2(6) := 'Ignore'; -- test/suite was ignored
1820
tr_success_char constant varchar2(7) := 'Success'; -- test passed
1921
tr_failure_char constant varchar2(7) := 'Failure'; -- one or more asserts failed
2022
tr_error_char constant varchar2(5) := 'Error'; -- exception was raised
23+
2124

2225
/*
2326
Constants: Rollback type for ut_test_object

tests/RunAll.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@ create table ut$test_table (val varchar2(1));
3535
@@lib/RunTest.sql ut_test/ut_test.Rollback_type.AutoOnFailure.sql
3636
@@lib/RunTest.sql ut_test/ut_test.Rollback_type.Manual.sql
3737
@@lib/RunTest.sql ut_test/ut_test.Rollback_type.ManualOnFailure.sql
38+
@@lib/RunTest.sql ut_test/ut_test.IgnoreFlagSkipTest.sql
3839

3940
@@lib/RunTest.sql ut_test_suite/ut_test_suite.Rollback_type.Auto.sql
4041
@@lib/RunTest.sql ut_test_suite/ut_test_suite.Rollback_type.AutoOnFailure.sql
4142
@@lib/RunTest.sql ut_test_suite/ut_test_suite.Rollback_type.Manual.sql
4243
@@lib/RunTest.sql ut_test_suite/ut_test_suite.Rollback_type.ManualOnFailure.sql
44+
@@lib/RunTest.sql ut_test_suite/ut_test_suite.IgnoreFlagSkipSuite.sql
4345

4446
@@lib/RunTest.sql ut_utils/ut_utils.test_result_to_char.RunsWithInvalidValues.sql
4547
@@lib/RunTest.sql ut_utils/ut_utils.test_result_to_char.RunsWithNullValue.sql

0 commit comments

Comments
 (0)