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

Skip to content

Commit 9c58a50

Browse files
author
Pavel Kaplya
committed
Fixed custom reporter in the example after naming convention fixes
Moved Add item to the ut_composite_object type Added object_name attribute to the ut_test_object type to save the procedure/package name for test/suite, for the suites primary to construct "suitepath" in the annotation approach Added search procedure to find an index of the item with defined object_name in the array of ut_composite_object Added separate setup and teardown procedures to the suite which run at the beginning of the whole suite and at the end. Currently invalidation of the all nested object is not developed All the examples and tests do pass.
1 parent f6e931c commit 9c58a50

10 files changed

Lines changed: 115 additions & 45 deletions

examples/RunExampleComplexSuiteWithCustomDBMSOutputReporter.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ begin
4343
end;
4444
/
4545

46-
--drop type ut_custom_reporter;
46+
drop type ut_custom_reporter;
4747
drop package ut_exampletest;
4848
drop package ut_exampletest2;

examples/ut_custom_reporter.tpb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ create or replace type body ut_custom_reporter is
3232
lvl := lvl + 1;
3333
end;
3434

35-
overriding member procedure on_assert(self in out nocopy ut_custom_reporter, an_assert ut_object) is
35+
overriding member procedure on_assert(self in out nocopy ut_custom_reporter, a_assert ut_object) is
3636
begin
3737
lvl := lvl + 1;
38-
(self as ut_dbms_output_suite_reporter).on_assert(an_assert);
38+
(self as ut_dbms_output_suite_reporter).on_assert(a_assert);
3939
lvl := lvl - 1;
4040
end;
4141

examples/ut_custom_reporter.tps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ create or replace type ut_custom_reporter under ut_dbms_output_suite_reporter
99
overriding member procedure print(msg varchar2),
1010
overriding member procedure begin_suite(self in out nocopy ut_custom_reporter, a_suite ut_object),
1111
overriding member procedure begin_test(self in out nocopy ut_custom_reporter, a_test ut_object),
12-
overriding member procedure on_assert(self in out nocopy ut_custom_reporter, an_assert ut_object),
12+
overriding member procedure on_assert(self in out nocopy ut_custom_reporter, a_assert ut_object),
1313
overriding member procedure end_test(self in out nocopy ut_custom_reporter, a_test ut_object),
1414
overriding member procedure end_suite(self in out nocopy ut_custom_reporter, a_suite ut_object)
1515
)

source/types/ut_composite_object.tpb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
create or replace type body ut_composite_object is
2+
23
member procedure calc_execution_result(self in out nocopy ut_composite_object) is
34
l_result integer(1) := ut_utils.tr_success;
45
begin
@@ -9,5 +10,28 @@ create or replace type body ut_composite_object is
910
self.result := l_result;
1011
end;
1112

13+
-- Member procedures and functions
14+
member function item_index(a_object_name varchar2) return pls_integer is
15+
l_item_index pls_integer := self.items.first;
16+
c_lowered_obj_name constant varchar2(4000 char) := lower(trim(a_object_name));
17+
l_result pls_integer;
18+
begin
19+
while l_item_index is not null loop
20+
if self.items(l_item_index) is of(ut_test_object) and treat(self.items(l_item_index) as ut_test_object)
21+
.object_name = c_lowered_obj_name then
22+
l_result := l_item_index;
23+
exit;
24+
end if;
25+
l_item_index := self.items.next(l_item_index);
26+
end loop;
27+
return l_result;
28+
end item_index;
29+
30+
member procedure add_item(self in out nocopy ut_composite_object, a_item ut_object) is
31+
begin
32+
self.items.extend;
33+
self.items(self.items.last) := a_item;
34+
end add_item;
35+
1236
end;
1337
/

source/types/ut_composite_object.tps

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ create or replace type ut_composite_object force under ut_object
22
(
33
items ut_objects_list,
44

5-
member procedure calc_execution_result(self in out nocopy ut_composite_object)
5+
member procedure calc_execution_result(self in out nocopy ut_composite_object),
6+
member function item_index(a_object_name varchar2) return pls_integer,
7+
member procedure add_item(self in out nocopy ut_composite_object, a_item ut_object)
68
) not final not instantiable
79
/

source/types/ut_test.tpb

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,29 @@ create or replace type body ut_test is
55
begin
66
self.name := a_test_name;
77
self.object_type := 1;
8+
self.object_name := lower(trim(a_test_procedure));
89
self.test := ut_executable(object_name => trim(a_object_name)
9-
,procedure_name => trim(a_test_procedure)
10-
,owner_name => trim(a_owner_name));
10+
,procedure_name => trim(a_test_procedure)
11+
,owner_name => trim(a_owner_name));
1112

1213
if a_setup_procedure is not null then
1314
self.setup := ut_executable(object_name => trim(a_object_name)
14-
,procedure_name => trim(a_setup_procedure)
15-
,owner_name => trim(a_owner_name));
15+
,procedure_name => trim(a_setup_procedure)
16+
,owner_name => trim(a_owner_name));
1617
end if;
1718

1819
if a_teardown_procedure is not null then
1920
self.teardown := ut_executable(object_name => trim(a_object_name)
20-
,procedure_name => trim(a_teardown_procedure)
21-
,owner_name => trim(a_owner_name));
21+
,procedure_name => trim(a_teardown_procedure)
22+
,owner_name => trim(a_owner_name));
2223
end if;
2324
return;
2425
end ut_test;
2526

26-
member function is_valid(self in ut_test) return boolean is
27+
member function is_valid return boolean is
2728
begin
28-
return test.is_valid('test') and (setup is null or setup.is_valid('setup')) and
29-
(teardown is null or teardown.is_valid('teardown'));
29+
return test.is_valid('test') and(setup is null or setup.is_valid('setup')) and(teardown is null or
30+
teardown.is_valid('teardown'));
3031
end is_valid;
3132

3233
overriding member procedure execute(self in out nocopy ut_test, a_reporter ut_suite_reporter) is
@@ -66,7 +67,7 @@ create or replace type body ut_test is
6667
$end
6768
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
6869
end;
69-
70+
7071
if self.teardown is not null then
7172
self.teardown.execute;
7273
end if;

source/types/ut_test.tps

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
create or replace type ut_test force under ut_test_object
22
(
3-
setup ut_executable,
4-
test ut_executable,
5-
teardown ut_executable,
3+
setup ut_executable,
4+
test ut_executable,
5+
teardown ut_executable,
66

77
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)
88
return self as result,
99

10-
member function is_valid(self in ut_test) return boolean,
10+
member function is_valid return boolean,
1111

1212
overriding member procedure execute(self in out nocopy ut_test, a_reporter ut_suite_reporter),
1313
overriding member function execute(self in out nocopy ut_test, a_reporter ut_suite_reporter) return ut_suite_reporter,

source/types/ut_test_object.tps

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
create or replace type ut_test_object force under ut_composite_object
22
(
3-
start_time timestamp with time zone,
4-
end_time timestamp with time zone,
5-
not instantiable member procedure execute(self in out nocopy ut_test_object, a_reporter ut_suite_reporter),
6-
not instantiable member function execute(self in out nocopy ut_test_object, a_reporter ut_suite_reporter) return ut_suite_reporter,
7-
not instantiable member procedure execute(self in out nocopy ut_test_object)
3+
start_time timestamp with time zone,
4+
end_time timestamp with time zone,
5+
object_name varchar2(32),
6+
not instantiable member procedure execute(self in out nocopy ut_test_object, a_reporter ut_suite_reporter),
7+
not instantiable member function execute(self in out nocopy ut_test_object, a_reporter ut_suite_reporter)
8+
return ut_suite_reporter,
9+
not instantiable member procedure execute(self in out nocopy ut_test_object)
810
)
911
not instantiable not final
1012
/

source/types/ut_test_suite.tpb

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,47 @@
11
create or replace type body ut_test_suite is
22

3-
constructor function ut_test_suite(a_suite_name varchar2, 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())
44
return self as result is
55
begin
6-
self.name := a_suite_name;
7-
self.object_type := 2;
8-
self.items := a_items;
6+
self.name := a_suite_name;
7+
self.object_type := 2;
8+
self.items := a_items;
9+
self.object_name := lower(trim(a_object_name));
910
return;
1011
end ut_test_suite;
1112

12-
member procedure add_item(self in out nocopy ut_test_suite, a_item ut_test_object) is
13+
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) is
1314
begin
14-
self.items.extend;
15-
self.items(self.items.last) := a_item;
16-
end add_item;
15+
self.setup := ut_executable(object_name => trim(a_object_name)
16+
,procedure_name => trim(a_proc_name)
17+
,owner_name => trim(a_owner_name));
18+
end;
19+
20+
member procedure set_suite_teardown(self in out nocopy ut_test_suite, a_object_name in varchar2, a_proc_name in varchar2, a_owner_name varchar2 default null) is
21+
begin
22+
self.teardown := ut_executable(object_name => trim(a_object_name)
23+
,procedure_name => trim(a_proc_name)
24+
,owner_name => trim(a_owner_name));
25+
end;
26+
27+
member function is_valid return boolean is
28+
l_is_valid boolean;
29+
begin
30+
l_is_valid := (setup is null or setup.is_valid('suitesetup')) and
31+
(teardown is null or teardown.is_valid('suiteteardown'));
32+
33+
return l_is_valid;
34+
end is_valid;
1735

1836
overriding member procedure execute(self in out nocopy ut_test_suite, a_reporter ut_suite_reporter) is
1937
l_reporter ut_suite_reporter := a_reporter;
2038
begin
2139
l_reporter := execute(l_reporter);
2240
end;
2341

24-
overriding member function execute(self in out nocopy ut_test_suite, a_reporter ut_suite_reporter) return ut_suite_reporter is
25-
l_reporter ut_suite_reporter := a_reporter;
42+
overriding member function execute(self in out nocopy ut_test_suite, a_reporter ut_suite_reporter)
43+
return ut_suite_reporter is
44+
l_reporter ut_suite_reporter := a_reporter;
2645
l_test_object ut_test_object;
2746
begin
2847
if l_reporter is not null then
@@ -35,15 +54,28 @@ create or replace type body ut_test_suite is
3554

3655
self.start_time := current_timestamp;
3756

38-
for i in self.items.first .. self.items.last loop
39-
l_test_object := treat(self.items(i) as ut_test_object);
40-
l_reporter := l_test_object.execute(a_reporter => l_reporter);
41-
self.items(i) := l_test_object;
42-
end loop;
57+
if self.is_valid() then
58+
59+
if self.setup is not null then
60+
self.setup.execute;
61+
end if;
62+
63+
for i in self.items.first .. self.items.last loop
64+
l_test_object := treat(self.items(i) as ut_test_object);
65+
l_reporter := l_test_object.execute(a_reporter => l_reporter);
66+
self.items(i) := l_test_object;
67+
end loop;
68+
69+
if self.setup is not null then
70+
self.teardown.execute;
71+
end if;
72+
73+
self.calc_execution_result;
74+
else
75+
self.result := ut_utils.tr_error;
76+
end if;
4377

4478
self.end_time := current_timestamp;
45-
46-
self.calc_execution_result;
4779

4880
if l_reporter is not null then
4981
l_reporter.end_suite(self);
@@ -52,7 +84,7 @@ create or replace type body ut_test_suite is
5284
end;
5385

5486
overriding member procedure execute(self in out nocopy ut_test_suite) is
55-
l_null_reporter ut_suite_reporter;
87+
l_null_reporter ut_suite_reporter;
5688
begin
5789
self.execute(l_null_reporter);
5890
end;

source/types/ut_test_suite.tps

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
create or replace type ut_test_suite force under ut_test_object
22
(
33

4-
constructor function ut_test_suite(a_suite_name varchar2, a_items ut_objects_list default ut_objects_list()) return self as result,
5-
member procedure add_item(self in out nocopy ut_test_suite, a_item ut_test_object),
4+
setup ut_executable,
5+
teardown ut_executable,
6+
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())
8+
return self as result,
9+
10+
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),
11+
12+
member procedure set_suite_teardown(self in out nocopy ut_test_suite, a_object_name in varchar2, a_proc_name in varchar2, a_owner_name varchar2 default null),
13+
member function is_valid return boolean,
614

715
overriding member procedure execute(self in out nocopy ut_test_suite, a_reporter ut_suite_reporter),
8-
overriding member function execute(self in out nocopy ut_test_suite, a_reporter ut_suite_reporter) return ut_suite_reporter,
16+
overriding member function execute(self in out nocopy ut_test_suite, a_reporter ut_suite_reporter)
17+
return ut_suite_reporter,
918
overriding member procedure execute(self in out nocopy ut_test_suite)
1019
)
1120
not final

0 commit comments

Comments
 (0)