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

Skip to content

Commit 0cd9e23

Browse files
authored
Merge pull request #72 from Pazus/feature/ignore_annotation
"Ignore" annotation
2 parents 7722f35 + 0c83ead commit 0cd9e23

29 files changed

Lines changed: 652 additions & 105 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: 77 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
create or replace type body ut_test is
22

3-
constructor function ut_test(a_object_name varchar2, a_test_procedure varchar2, a_test_name in varchar2 default null, a_owner_name varchar2 default null, a_setup_procedure varchar2 default null, a_teardown_procedure varchar2 default null)
3+
constructor function ut_test(a_object_name varchar2, a_test_procedure varchar2, a_test_name in varchar2 default null, a_owner_name varchar2 default null, a_setup_procedure varchar2 default null, a_teardown_procedure varchar2 default null, a_rollback_type integer default null)
44
return self as result is
55
begin
66
self.name := a_test_name;
@@ -21,6 +21,13 @@ create or replace type body ut_test is
2121
,procedure_name => trim(a_teardown_procedure)
2222
,owner_name => trim(a_owner_name));
2323
end if;
24+
25+
if a_rollback_type is not null then
26+
ut_utils.validate_rollback_type(a_rollback_type);
27+
self.rollback_type := a_rollback_type;
28+
else
29+
self.rollback_type := ut_utils.gc_rollback_auto;
30+
end if;
2431
return;
2532
end ut_test;
2633

@@ -37,67 +44,84 @@ create or replace type body ut_test is
3744
end;
3845
overriding member function execute(self in out nocopy ut_test, a_reporter ut_reporter) return ut_reporter is
3946
l_reporter ut_reporter := a_reporter;
47+
l_savepoint varchar2(30);
4048
begin
4149
l_reporter.before_test(self);
42-
43-
begin
44-
ut_utils.debug_log('ut_test.execute');
4550

46-
self.start_time := current_timestamp;
51+
if self.rollback_type = ut_utils.gc_rollback_auto then
52+
l_savepoint := ut_utils.gen_savepoint_name;
53+
execute immediate 'savepoint ' || l_savepoint;
54+
end if;
55+
56+
ut_utils.debug_log('ut_test.execute');
57+
58+
self.start_time := current_timestamp;
4759

48-
if self.is_valid() then
49-
if self.setup is not null then
50-
l_reporter.before_test_setup(self);
51-
self.setup.execute;
52-
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+
5391
end if;
5492

55-
l_reporter.before_test_execute(self);
56-
begin
57-
58-
self.test.execute;
59-
exception
60-
when others then
61-
-- dbms_utility.format_error_backtrace is 10g or later
62-
-- utl_call_stack package may be better but it's 12c but still need to investigate
63-
-- article with details: http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html
64-
ut_utils.debug_log('testmethod failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
65-
66-
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
67-
end;
68-
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;
69104

70-
if self.teardown is not null then
71-
l_reporter.before_test_teardown(self);
72-
self.teardown.execute;
73-
l_reporter.after_test_teardown(self);
74-
end if;
105+
if self.rollback_type = ut_utils.gc_rollback_auto then
106+
execute immediate 'rollback to ' || l_savepoint;
75107
end if;
76108

77-
exception
78-
when others then
79-
if sqlcode = -04068 then
80-
--raise on ORA-04068: existing state of packages has been discarded to avoid unrecoverable session exception
81-
raise;
82-
end if;
83-
ut_utils.debug_log('ut_test.execute failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
84-
-- most likely occured in setup or teardown if here.
85-
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_stack);
86-
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
87-
end;
88-
89-
self.end_time := current_timestamp;
90-
91-
l_reporter.before_asserts_process(self);
92-
self.items := ut_assert.get_asserts_results();
93-
94-
self.calc_execution_result;
95-
96-
for i in 1 .. self.items.count loop
97-
l_reporter.on_assert_process(treat(self.items(i) as ut_assert_result));
98-
end loop;
99-
100-
l_reporter.after_asserts_process(self);
109+
self.end_time := current_timestamp;
110+
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;
124+
end if;
101125

102126
l_reporter.after_test(self);
103127

source/types/ut_test.tps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ create or replace type ut_test force under ut_test_object
44
test ut_executable,
55
teardown ut_executable,
66

7-
constructor function ut_test(a_object_name varchar2, a_test_procedure varchar2, a_test_name in varchar2 default null, a_owner_name varchar2 default null, a_setup_procedure varchar2 default null, a_teardown_procedure varchar2 default null)
7+
constructor function ut_test(a_object_name varchar2, a_test_procedure varchar2, a_test_name in varchar2 default null, a_owner_name varchar2 default null, a_setup_procedure varchar2 default null, a_teardown_procedure varchar2 default null, a_rollback_type integer default null)
88
return self as result,
99

1010
member function is_valid return boolean,

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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +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_utils:gc_rollback_% constants
7+
ignore_flag integer(1),
8+
69
not instantiable member procedure execute(self in out nocopy ut_test_object, a_reporter ut_reporter),
710
not instantiable member function execute(self in out nocopy ut_test_object, a_reporter ut_reporter)
811
return ut_reporter,
9-
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)
1016
)
1117
not instantiable not final
1218
/

source/types/ut_test_suite.tpb

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
create or replace type body ut_test_suite is
22

3-
constructor function ut_test_suite(a_suite_name varchar2, a_object_name varchar2 default null, a_items ut_objects_list default ut_objects_list())
3+
constructor function ut_test_suite(a_suite_name varchar2, a_object_name varchar2 default null, a_items ut_objects_list default ut_objects_list(), a_rollback_type number default null)
44
return self as result is
55
begin
66
self.name := a_suite_name;
77
self.object_type := 2;
88
self.items := a_items;
99
self.object_name := lower(trim(a_object_name));
10+
11+
if a_rollback_type is not null then
12+
ut_utils.validate_rollback_type(a_rollback_type);
13+
self.rollback_type := a_rollback_type;
14+
else
15+
self.rollback_type := ut_utils.gc_rollback_auto;
16+
end if;
17+
1018
return;
1119
end ut_test_suite;
1220

@@ -43,14 +51,22 @@ create or replace type body ut_test_suite is
4351
return ut_reporter is
4452
l_reporter ut_reporter := a_reporter;
4553
l_test_object ut_test_object;
54+
l_savepoint varchar2(30);
4655
begin
4756
l_reporter.before_suite(self);
4857

4958
ut_utils.debug_log('ut_test_suite.execute');
5059

5160
self.start_time := current_timestamp;
52-
53-
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
65+
66+
if self.rollback_type = ut_utils.gc_rollback_auto then
67+
l_savepoint := ut_utils.gen_savepoint_name;
68+
execute immediate 'savepoint ' || l_savepoint;
69+
end if;
5470

5571
if self.setup is not null then
5672
l_reporter.before_suite_setup(self);
@@ -75,6 +91,10 @@ create or replace type body ut_test_suite is
7591
end if;
7692

7793
self.calc_execution_result;
94+
95+
if self.rollback_type = ut_utils.gc_rollback_auto then
96+
execute immediate 'rollback to ' || l_savepoint;
97+
end if;
7898
else
7999
self.result := ut_utils.tr_error;
80100
end if;

source/types/ut_test_suite.tps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ create or replace type ut_test_suite force under ut_test_object
44
setup ut_executable,
55
teardown ut_executable,
66

7-
constructor function ut_test_suite(a_suite_name varchar2, a_object_name varchar2 default null, a_items ut_objects_list default ut_objects_list())
7+
constructor function ut_test_suite(a_suite_name varchar2, a_object_name varchar2 default null, a_items ut_objects_list default ut_objects_list(), a_rollback_type number default null)
88
return self as result,
99

1010
member procedure set_suite_setup(self in out nocopy ut_test_suite, a_object_name in varchar2, a_proc_name in varchar2, a_owner_name varchar2 default null),

0 commit comments

Comments
 (0)