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

Skip to content

Commit 955dcc5

Browse files
committed
ut_reporters_list added for ut_composite_reporter
ut_test_call_params splitted into three independent for setup/test/teardown to be used in suites for suite setup/teardown added promts before execution of RunAllExamples.sql to separate one from another in the output
1 parent 9a514bf commit 955dcc5

13 files changed

Lines changed: 150 additions & 72 deletions

examples/RunAllExamples.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
Clear Screen
22
set echo off
33
set feedback off
4+
prompt RunExampleComplexSuiteWithCustomDBMSOutputReporter
45
@@RunExampleComplexSuiteWithCustomDBMSOutputReporter.sql
6+
prompt RunExampleTestSuite
57
@@RunExampleTestSuite.sql
8+
prompt RunExampleTestSuiteWithCustomDBMSOutputReporter
69
@@RunExampleTestSuiteWithCustomDBMSOutputReporter.sql
10+
prompt RunExampleTestSuiteWithDBMSOutputReporter
711
@@RunExampleTestSuiteWithDBMSOutputReporter.sql
12+
prompt RunExampleTestThroughBaseClass
813
@@RunExampleTestThroughBaseClass.sql

examples/RunExampleTestSuite.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ begin
3636
for test_idx in suite.items.first .. suite.items.last loop
3737
test_item := treat(suite.items(test_idx) as ut_test);
3838
dbms_output.put_line('---------------------------------------------------');
39-
dbms_output.put_line('Test:' || test_item.call_params.object_name || '.' || test_item.call_params.test_procedure);
39+
dbms_output.put_line('Test:' || test_item.test.form_name);
4040
dbms_output.put_line('Result: ' || test_item.execution_result.result_to_char);
4141
dbms_output.put_line('Assert Results:');
4242
for i in test_item.assert_results.first .. test_item.assert_results.last loop

source/install.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
@@ut_assert.pks
66
@@types/ut_execution_result.tps
77
@@types/ut_suite_reporter.tps
8+
@@types/ut_reporters_list.tps
9+
@@types/ut_composite_reporter.tps
810
@@types/ut_test_object.tps
911
@@types/ut_test_objects_list.tps
1012
@@types/ut_test.tps
@@ -18,6 +20,7 @@
1820
@@types/ut_test.tpb
1921
@@types/ut_test_suite.tpb
2022
@@types/ut_test_call_params.tpb
23+
@@types/ut_composite_reporter.tpb
2124
@@types/ut_reporter_decorator.tpb
2225
@@types/ut_dbms_output_suite_reporter.tpb
2326
@@ut_metadata.pkb
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
create or replace type body ut_composite_reporter is
2+
3+
constructor function ut_composite_reporter(the_reporters ut_reporters_list default ut_reporters_list())
4+
return self as result is
5+
begin
6+
self.name := $$plsql_unit;
7+
return;
8+
end;
9+
10+
member procedure add_reporter(self in out nocopy ut_composite_reporter, a_reporter ut_suite_reporter) is
11+
begin
12+
self.reporters.extend(1);
13+
self.reporters(self.reporters.last) := a_reporter;
14+
end;
15+
member procedure remove_reporter(self in out nocopy ut_composite_reporter, an_index pls_integer) is
16+
begin
17+
for i in an_index + 1 .. self.reporters.last loop
18+
self.reporters(i - 1) := self.reporters(i);
19+
end loop;
20+
21+
self.reporters.delete(self.reporters.last);
22+
23+
end;
24+
25+
overriding member procedure begin_suite(self in out nocopy ut_composite_reporter, a_suite_name in varchar2) is
26+
begin
27+
for i in 1 .. self.reporters.count loop
28+
self.reporters(i).begin_suite(a_suite_name => a_suite_name);
29+
end loop;
30+
end;
31+
overriding member procedure begin_test(self in out nocopy ut_composite_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params) is
32+
begin
33+
for i in 1 .. self.reporters.count loop
34+
self.reporters(i).begin_test(a_test_name => a_test_name, a_test_call_params => a_test_call_params);
35+
end loop;
36+
end;
37+
overriding member procedure end_test(self in out nocopy ut_composite_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params, a_execution_result in ut_execution_result, a_assert_list in ut_assert_list) is
38+
begin
39+
for i in 1 .. self.reporters.count loop
40+
self.reporters(i).end_test(a_test_name => a_test_name
41+
,a_test_call_params => a_test_call_params
42+
,a_execution_result => a_execution_result
43+
,a_assert_list => a_assert_list);
44+
end loop;
45+
end;
46+
overriding member procedure end_suite(self in out nocopy ut_composite_reporter, a_suite_name in varchar2, a_suite_execution_result in ut_execution_result) is
47+
begin
48+
for i in 1 .. self.reporters.count loop
49+
self.reporters(i).end_suite(a_suite_name => a_suite_name, a_suite_execution_result => a_suite_execution_result);
50+
end loop;
51+
end;
52+
53+
end;
54+
/
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
create or replace type ut_composite_reporter under ut_suite_reporter
2+
(
3+
reporters ut_reporters_list,
4+
5+
constructor function ut_composite_reporter(the_reporters ut_reporters_list default ut_reporters_list())
6+
return self as result,
7+
member procedure add_reporter(self in out nocopy ut_composite_reporter, a_reporter ut_suite_reporter),
8+
member procedure remove_reporter(self in out nocopy ut_composite_reporter, an_index pls_integer),
9+
10+
overriding member procedure begin_suite(self in out nocopy ut_composite_reporter, a_suite_name in varchar2),
11+
overriding member procedure begin_test(self in out nocopy ut_composite_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params),
12+
overriding member procedure end_test(self in out nocopy ut_composite_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params, a_execution_result in ut_execution_result, a_assert_list in ut_assert_list),
13+
overriding member procedure end_suite(self in out nocopy ut_composite_reporter, a_suite_name in varchar2, a_suite_execution_result in ut_execution_result)
14+
15+
)
16+
not final
17+
/

source/types/ut_dbms_output_suite_reporter.tpb

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,9 @@ create or replace type body ut_dbms_output_suite_reporter is
3434
begin
3535
print(ut_dbms_output_suite_reporter.c_dashed_line);
3636
if a_test_name is not null then
37-
print('test ' || a_test_name || ' (' ||
38-
ut_metadata.form_name(a_test_call_params.owner_name
39-
,a_test_call_params.object_name
40-
,a_test_call_params.test_procedure) || ')');
37+
print('test ' || a_test_name || ' (' ||a_test_call_params.form_name || ')');
4138
else
42-
print('test ' || ut_metadata.form_name(a_test_call_params.owner_name
43-
,a_test_call_params.object_name
44-
,a_test_call_params.test_procedure));
39+
print('test ' || a_test_call_params.form_name);
4540
end if;
4641
end;
4742

source/types/ut_reporters_list.tps

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
create or replace type ut_reporters_list as table of ut_suite_reporter;
2+
/

source/types/ut_test.tpb

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,32 @@ create or replace type body ut_test is
33
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)
44
return self as result is
55
begin
6-
self.name := a_test_name;
7-
self.call_params := ut_test_call_params(object_name => trim(a_object_name)
8-
,test_procedure => trim(a_test_procedure)
9-
,owner_name => trim(a_owner_name)
10-
,setup_procedure => trim(a_setup_procedure)
11-
,teardown_procedure => trim(a_teardown_procedure));
6+
self.name := a_test_name;
7+
self.test := ut_test_call_params(object_name => trim(a_object_name)
8+
,procedure_name => trim(a_test_procedure)
9+
,owner_name => trim(a_owner_name));
10+
11+
if a_setup_procedure is not null then
12+
self.setup := ut_test_call_params(object_name => trim(a_object_name)
13+
,procedure_name => trim(a_setup_procedure)
14+
,owner_name => trim(a_owner_name));
15+
end if;
16+
17+
if a_teardown_procedure is not null then
18+
self.teardown := ut_test_call_params(object_name => trim(a_object_name)
19+
,procedure_name => trim(a_teardown_procedure)
20+
,owner_name => trim(a_owner_name));
21+
end if;
1222
return;
1323
end ut_test;
1424

1525
member function is_valid(self in ut_test) return boolean is
26+
v_is_valid boolean;
1627
begin
17-
return call_params.test_procedure is not null and ut_metadata.resolvable(call_params.owner_name, call_params.object_name, call_params.test_procedure) and (call_params.setup_procedure is null OR ut_metadata.resolvable(call_params.owner_name, call_params.object_name, call_params.setup_procedure)) and (call_params.teardown_procedure is null OR ut_metadata.resolvable(call_params.owner_name, call_params.object_name, call_params.teardown_procedure));
28+
v_is_valid := test.validate_params('test') and setup is null or setup.validate_params('setup') and teardown is null or
29+
teardown.validate_params('teardown');
30+
31+
return v_is_valid;
1832
end is_valid;
1933

2034
overriding member procedure execute(self in out nocopy ut_test, a_reporter ut_suite_reporter) is
@@ -26,7 +40,7 @@ create or replace type body ut_test is
2640
reporter ut_suite_reporter := a_reporter;
2741
begin
2842
if reporter is not null then
29-
reporter.begin_test(a_test_name => self.name, a_test_call_params => self.call_params);
43+
reporter.begin_test(a_test_name => self.name, a_test_call_params => self.test);
3044
end if;
3145

3246
begin
@@ -35,11 +49,11 @@ create or replace type body ut_test is
3549
$end
3650

3751
self.execution_result := ut_execution_result();
38-
39-
if self.call_params.validate_params() then
40-
self.call_params.setup;
52+
53+
if self.is_valid() then
54+
self.setup.execute;
4155
begin
42-
self.call_params.run_test;
56+
self.test.execute;
4357
exception
4458
when others then
4559
-- dbms_utility.format_error_backtrace is 10g or later
@@ -51,7 +65,7 @@ create or replace type body ut_test is
5165
$end
5266
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
5367
end;
54-
self.call_params.teardown;
68+
self.teardown.execute;
5569
end if;
5670

5771
self.execution_result.end_time := current_timestamp;
@@ -77,15 +91,15 @@ create or replace type body ut_test is
7791

7892
if reporter is not null then
7993
reporter.end_test(a_test_name => self.name
80-
,a_test_call_params => self.call_params
94+
,a_test_call_params => self.test
8195
,a_execution_result => self.execution_result
8296
,a_assert_list => self.assert_results);
8397
end if;
8498
return reporter;
8599
end;
86100

87101
overriding member procedure execute(self in out nocopy ut_test) is
88-
v_null_reporter ut_suite_reporter;
102+
v_null_reporter ut_suite_reporter;
89103
begin
90104
self.execute(v_null_reporter);
91105
end execute;

source/types/ut_test.tps

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
create or replace type ut_test force under ut_test_object
22
(
3-
4-
call_params ut_test_call_params,
3+
setup ut_test_call_params,
4+
test ut_test_call_params,
5+
teardown ut_test_call_params,
56
assert_results ut_assert_list,
67

78
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)

source/types/ut_test_call_params.tpb

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -56,67 +56,46 @@ create or replace type body ut_test_call_params is
5656
end is_valid;
5757
*/
5858

59-
member function validate_params(self in ut_test_call_params) return boolean is
59+
member function validate_params(a_proc_type varchar2) return boolean is
6060
a_result boolean := true;
6161
begin
6262

6363
if self.object_name is null then
6464
a_result := false;
65-
ut_assert.report_error('Test is not invalid: test package is not defined');
65+
ut_assert.report_error('Call params for ' || a_proc_type || ' are not valid: package is not defined');
6666
end if;
6767

68-
if self.test_procedure is null then
68+
if self.procedure_name is null then
6969
a_result := false;
70-
ut_assert.report_error('Test is not invalid: test procedure is not defined');
70+
ut_assert.report_error('Call params for ' || a_proc_type || ' are not valid: procedure is not defined');
7171
end if;
7272

7373
if a_result and not ut_metadata.package_valid(self.owner_name, self.object_name) then
7474
a_result := false;
75-
ut_assert.report_error('package does not exist or is invalid: ' ||
75+
ut_assert.report_error('Call params for ' || a_proc_type ||
76+
' are not valid: package does not exist or is invalid: ' ||
7677
nvl(self.object_name, '<missing package name>'));
7778
end if;
7879

79-
if a_result then
80-
if not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.test_procedure) then
81-
ut_assert.report_error('package missing test method ' || self.object_name || '.' ||
82-
nvl(self.test_procedure, '<missing procedure name>'));
83-
end if;
84-
85-
if self.setup_procedure is not null and
86-
not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.setup_procedure) then
87-
ut_assert.report_error('package missing setup method ' || self.object_name || '.' ||
88-
nvl(self.setup_procedure, '<missing procedure name>'));
89-
end if;
90-
91-
if self.teardown_procedure is not null and
92-
not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.teardown_procedure) then
93-
ut_assert.report_error('package missing teardown method ' || self.object_name || '.' ||
94-
nvl(self.teardown_procedure, '<missing procedure name>'));
95-
end if;
80+
if a_result and not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.procedure_name) then
81+
a_result := false;
82+
ut_assert.report_error('Call params for ' || a_proc_type || ' are not valid: package missing ' || a_proc_type ||
83+
' procedure ' || self.object_name || '.' ||
84+
nvl(self.procedure_name, '<missing procedure name>'));
9685
end if;
86+
9787
return a_result;
9888
end validate_params;
9989

100-
member procedure setup(self in ut_test_call_params) is
90+
member function form_name return varchar2 is
10191
begin
102-
if self.setup_procedure is not null and self.object_name is not null then
103-
ut_test_call_params.execute_call(self.owner_name, self.object_name, self.setup_procedure);
104-
end if;
105-
end setup;
106-
107-
member procedure run_test(self in ut_test_call_params) is
108-
begin
109-
if self.test_procedure is not null and self.object_name is not null then
110-
ut_test_call_params.execute_call(self.owner_name, self.object_name, self.test_procedure);
111-
end if;
92+
return ut_metadata.form_name(owner_name, object_name, procedure_name);
11293
end;
11394

114-
member procedure teardown(self in ut_test_call_params) is
95+
member procedure execute(self in ut_test_call_params) is
11596
begin
116-
if self.teardown_procedure is not null and self.object_name is not null then
117-
ut_test_call_params.execute_call(self.owner_name, self.object_name, self.teardown_procedure);
118-
end if;
119-
end;
97+
ut_test_call_params.execute_call(self.owner_name, self.object_name, self.procedure_name);
98+
end execute;
12099

121100
end;
122101
/

0 commit comments

Comments
 (0)