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

Skip to content

Commit b865d4b

Browse files
committed
RunExampleTestSuiteWithDBMSOutputReporter now functional. attempt to validate reporter before use.
1 parent 3bf698c commit b865d4b

6 files changed

Lines changed: 155 additions & 47 deletions

File tree

examples/RunExampleTestSuiteWithDBMSOutputReporter.sql

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,36 @@
11
--Shows how to create a test suite with the default reporter which is dbms_output
22
--No tables are used for this.
33
--Suite Management packages are when developed will make this easier.
4-
DECLARE
5-
TestToExecute ut3Types.SingleTest;
6-
Suite UT3TYPES.TestSuite;
7-
TestResults ut3types.TestSuiteResults;
8-
BEGIN
9-
Suite.SuiteName := 'Test Suite Name';
10-
Suite.Tests := ut3Types.TestList();
4+
Clear Screen
5+
Set Serveroutput On Size Unlimited
6+
Declare
7+
testtoexecute ut_types.single_test;
8+
Suite Ut_Types.Test_Suite;
9+
Testresults Ut_Types.Test_Suite_Results;
10+
reporter ut_types.test_suite_reporter;
1111

12-
TestToExecute.TypeOfTest := ut3Types.TT_Package;
13-
TestToExecute.ObjectName := 'ut_exampletest';
14-
TestToExecute.SetupMethod := 'Setup';
15-
TestToExecute.TearDownMethod := 'TearDown';
16-
TestToExecute.TestMethod := 'ut_exampletest';
12+
Begin
13+
Suite.Suite_name := 'Test Suite Name';
14+
Suite.Tests := ut_Types.Test_List();
15+
16+
Testtoexecute.object_name := 'ut_exampletest';
17+
Testtoexecute.setup_procedure := 'Setup';
18+
TestToExecute.teardown_procedure := 'TearDown';
19+
TestToExecute.test_procedure := 'ut_exampletest';
1720

1821
Suite.Tests.Extend;
19-
Suite.Tests(Suite.Tests.LAST) := TestToExecute;
20-
21-
TestToExecute.TypeOfTest := ut3Types.TT_Package;
22-
TestToExecute.ObjectName := 'ut_exampletest2';
23-
TestToExecute.SetupMethod := 'Setup';
24-
TestToExecute.TearDownMethod := 'TearDown';
25-
TestToExecute.TestMethod := 'ut_exampletest';
22+
Suite.Tests(Suite.Tests.Last) := Testtoexecute;
23+
24+
Testtoexecute.object_name := 'ut_exampletest2';
25+
Testtoexecute.setup_procedure := 'Setup';
26+
TestToExecute.teardown_procedure := 'TearDown';
27+
TestToExecute.test_procedure := 'ut_exampletest';
2628

2729
Suite.Tests.Extend;
2830
Suite.Tests(Suite.Tests.LAST) := TestToExecute;
29-
30-
ut3TestRunner.ExecuteTests(Suite,TestResults);
31+
32+
33+
ut_Test_Runner.Execute_Tests(Suite,TestResults);
3134
END;
3235

3336

source/ut_metadata.pkb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ as
2626
a_procedure_name in varchar2) return boolean
2727
as
2828
v_cnt integer;
29-
begin
29+
Begin
30+
If A_Owner_Name Is Null Or A_Package_Name Is Null Or A_Procedure_Name Is Null Then
31+
Return False;
32+
end if;
3033
select
3134
count(*) into v_cnt
3235
from

source/ut_reporter_execution.pkb

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,36 @@ as
33

44
procedure begin_suite (a_reporter in ut_types.test_suite_reporter, a_suite in ut_types.test_suite)
55
as
6-
stmt varchar2(100);
7-
begin
8-
if ut_metadata.package_valid(a_reporter.owner_name,a_reporter.package_name) and ut_metadata.procedure_exists(a_reporter.owner_name,a_reporter.package_name,a_reporter.begin_suite_procedure) then
9-
stmt := 'begin ' || trim(a_reporter.package_name) || '.' || trim(a_reporter.begin_suite_procedure) || '(:suite); end;';
10-
execute immediate stmt using a_suite;
6+
Begin
7+
If Ut_Metadata.Package_Valid(A_Reporter.Owner_Name,A_Reporter.Package_Name) And Ut_Metadata.Procedure_Exists(A_Reporter.Owner_Name,A_Reporter.Package_Name,A_Reporter.Begin_Suite_Procedure) Then
8+
execute immediate 'begin ' || nvl(Ut_Types.test_suite_reporter_bs_stmt(A_Reporter),'NULL') ||'; end;' using a_suite;
119
end if;
1210
end;
1311

1412
procedure end_suite (a_reporter in ut_types.test_suite_reporter, a_suite in ut_types.test_suite, a_results in ut_types.test_suite_results)
1513
as
1614
stmt varchar2(100);
1715
begin
18-
if ut_metadata.package_valid(a_reporter.owner_name,a_reporter.package_name) and ut_metadata.procedure_exists(a_reporter.owner_name,a_reporter.package_name,a_reporter.end_suite_procedure) then
19-
stmt := 'begin ' || trim(a_reporter.package_name) || '.' || trim(a_reporter.end_suite_procedure) || '(:suite,:results); end;';
16+
If Ut_Metadata.Package_Valid(A_Reporter.Owner_Name,A_Reporter.Package_Name) And Ut_Metadata.Procedure_Exists(A_Reporter.Owner_Name,A_Reporter.Package_Name,A_Reporter.End_Suite_Procedure) Then
17+
stmt := 'begin ' || nvl(Ut_Types.test_suite_reporter_es_stmt(A_Reporter),'NULL') || '; end;';
2018
execute immediate stmt using a_suite,a_results;
2119
end if;
2220
end;
2321
procedure begin_test(a_reporter in ut_types.test_suite_reporter, a_test in ut_types.single_test,a_in_suite in boolean)
2422
as
2523
stmt varchar2(100);
2624
begin
27-
if ut_metadata.package_valid(a_reporter.owner_name,a_reporter.package_name) and ut_metadata.procedure_exists(a_reporter.owner_name,a_reporter.package_name,a_reporter.begin_test_procedure) then
28-
stmt := 'begin ' || trim(a_reporter.package_name) || '.' || trim(a_reporter.begin_test_procedure) || '(:test,:insuite); end;';
25+
If Ut_Metadata.Package_Valid(A_Reporter.Owner_Name,A_Reporter.Package_Name) And Ut_Metadata.Procedure_Exists(A_Reporter.Owner_Name,A_Reporter.Package_Name,A_Reporter.Begin_Test_Procedure) Then
26+
stmt := 'begin ' || nvl(Ut_Types.test_suite_reporter_bt_stmt(A_Reporter),'NULL') || '; end;';
2927
execute immediate stmt using a_test, a_in_suite;
3028
end if;
3129
end;
3230
procedure end_test(a_reporter in ut_types.test_suite_reporter, a_test in ut_types.single_test, a_result ut_types.test_execution_result,a_in_suite in boolean)
3331
as
3432
stmt varchar2(100);
3533
begin
36-
if ut_metadata.package_valid(a_reporter.owner_name,a_reporter.package_name) and ut_metadata.procedure_exists(a_reporter.owner_name,a_reporter.package_name,a_reporter.end_test_procedure) then
37-
stmt := 'begin ' || trim(a_reporter.package_name) || '.' || trim(a_reporter.end_test_procedure) || '(:test,:result,:insuite); end;';
34+
If Ut_Metadata.Package_Valid(A_Reporter.Owner_Name,A_Reporter.Package_Name) And Ut_Metadata.Procedure_Exists(A_Reporter.Owner_Name,A_Reporter.Package_Name,A_Reporter.End_Test_Procedure) Then
35+
stmt := 'begin ' || nvl(Ut_Types.test_suite_reporter_et_stmt(A_Reporter),'NULL')||'; end;';
3836
execute immediate stmt using a_test,a_result,a_in_suite;
3937
end if;
4038
end;

source/ut_test_runner.pkb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ begin
1212

1313
reporter.package_name := 'ut_dbms_output_reporter';
1414

15-
defaultreporters.extend;
16-
defaultreporters(defaultreporters.last) := reporter;
15+
if ut_types.test_suite_reporter_is_valid(reporter) then
16+
defaultreporters.extend;
17+
defaultreporters(defaultreporters.last) := reporter;
18+
end if;
1719
end if;
1820
end;
1921

source/ut_types.pkb

Lines changed: 102 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,8 @@ begin
5353

5454

5555
function single_test_is_valid(a_single_test IN OUT NOCOPY single_test) return boolean
56-
is
57-
NAME VARCHAR2(200);
58-
CONTEXT NUMBER;
59-
SCHEMA VARCHAR2(200);
60-
PART1 VARCHAR2(200);
61-
PART2 VARCHAR2(200);
62-
DBLINK VARCHAR2(200);
63-
PART1_TYPE NUMBER;
64-
OBJECT_NUMBER NUMBER;
65-
Begin
56+
is
57+
Begin
6658
If A_Single_Test.Test_Procedure Is Null Then Return False; End If;
6759

6860
if not do_resolve(a_single_test.owner_name,a_single_test.object_name, a_single_test.test_procedure) then return false; end if;
@@ -79,4 +71,104 @@ Begin
7971

8072
End Single_Test_Is_Valid;
8173

74+
function single_test_setup_stmt(a_single_test in single_test) return varchar2
75+
Is
76+
Begin
77+
If Trim(A_Single_Test.Setup_Procedure ) Is Null or Trim(A_Single_Test.object_name ) Is Null Then Return Null; End If;
78+
79+
If Trim(A_Single_Test.Owner_Name) Is Not Null Then
80+
Return Trim(A_Single_Test.Owner_Name)||'.'||A_Single_Test.Object_Name||'.'||A_Single_Test.Setup_Procedure;
81+
Else
82+
Return A_Single_Test.Object_Name||'.'||A_Single_Test.Setup_Procedure;
83+
End If;
84+
85+
end;
86+
87+
Function Single_Test_Teardown_Stmt(A_Single_Test In Single_Test) Return Varchar2
88+
Is
89+
Begin
90+
If Trim(A_Single_Test.teardown_procedure ) Is Null or Trim(A_Single_Test.object_name ) Is Null Then Return Null; End If;
91+
92+
If Trim(A_Single_Test.Owner_Name) Is Not Null Then
93+
Return Trim(A_Single_Test.Owner_Name)||'.'||A_Single_Test.Object_Name||'.'||A_Single_Test.teardown_procedure;
94+
Else
95+
Return A_Single_Test.Object_Name||'.'||A_Single_Test.teardown_procedure;
96+
End If;
97+
End;
98+
99+
100+
function single_test_test_stmt(a_single_test in single_test) return varchar2
101+
Is
102+
Begin
103+
If Trim(A_Single_Test.test_procedure ) Is Null or Trim(A_Single_Test.object_name ) Is Null Then Return Null; End If;
104+
105+
If Trim(A_Single_Test.Owner_Name) Is Not Null Then
106+
Return Trim(A_Single_Test.Owner_Name)||'.'||A_Single_Test.Object_Name||'.'||A_Single_Test.test_procedure;
107+
Else
108+
Return A_Single_Test.Object_Name||'.'||A_Single_Test.test_procedure;
109+
End If;
110+
end;
111+
112+
113+
114+
function test_suite_reporter_is_valid(a_test_suite_reporter IN OUT NOCOPY test_suite_reporter) return boolean
115+
is
116+
v_retval boolean := FALSE;
117+
begin
118+
if a_test_suite_reporter.package_name is null then return false; end if;
119+
120+
if do_resolve(a_test_suite_reporter.owner_name,a_test_suite_reporter.package_name, a_test_suite_reporter.begin_suite_procedure) then v_retval := true; end if;
121+
if do_resolve(a_test_suite_reporter.owner_name,a_test_suite_reporter.package_name, a_test_suite_reporter.end_suite_procedure) then v_retval := true; end if;
122+
if do_resolve(a_test_suite_reporter.owner_name,a_test_suite_reporter.package_name, a_test_suite_reporter.begin_test_procedure) then v_retval := true; end if;
123+
if do_resolve(a_test_suite_reporter.owner_name,a_test_suite_reporter.package_name, a_test_suite_reporter.end_test_procedure) then v_retval := true; end if;
124+
125+
return v_retval; --will be true if at least one of the procedures is valid
126+
end;
127+
128+
function test_suite_reporter_bs_stmt(a_test_suite_reporter in test_suite_reporter) return varchar2
129+
Is
130+
Begin
131+
If Trim(a_test_suite_reporter.begin_suite_procedure ) Is Null or Trim(a_test_suite_reporter.package_name ) Is Null Then Return Null; End If;
132+
133+
If Trim(A_Test_Suite_Reporter.Owner_Name) Is Not Null Then
134+
Return Trim(a_test_suite_reporter.Owner_Name)||'.'||a_test_suite_reporter.package_name||'.'||a_test_suite_reporter.begin_suite_procedure||'(:suite)';
135+
Else
136+
Return a_test_suite_reporter.package_name||'.'||a_test_suite_reporter.begin_suite_procedure||'(:suite)';
137+
End If;
138+
End;
139+
140+
function test_suite_reporter_es_stmt(a_test_suite_reporter in test_suite_reporter) return varchar2
141+
Is
142+
Begin
143+
If Trim(a_test_suite_reporter.end_suite_procedure ) Is Null or Trim(a_test_suite_reporter.package_name ) Is Null Then Return Null; End If;
144+
145+
If Trim(A_Test_Suite_Reporter.Owner_Name) Is Not Null Then
146+
Return Trim(a_test_suite_reporter.Owner_Name)||'.'||a_test_suite_reporter.package_name||'.'||a_test_suite_reporter.end_suite_procedure||'(:suite,:results)';
147+
Else
148+
Return a_test_suite_reporter.package_name||'.'||a_test_suite_reporter.end_suite_procedure||'(:suite,:results)';
149+
End If;
150+
End;
151+
Function Test_Suite_Reporter_Bt_Stmt(A_Test_Suite_Reporter In Test_Suite_Reporter) Return Varchar2
152+
Is
153+
Begin
154+
If Trim(a_test_suite_reporter.begin_test_procedure ) Is Null or Trim(a_test_suite_reporter.package_name ) Is Null Then Return Null; End If;
155+
156+
If Trim(A_Test_Suite_Reporter.Owner_Name) Is Not Null Then
157+
Return Trim(a_test_suite_reporter.Owner_Name)||'.'||a_test_suite_reporter.package_name||'.'||a_test_suite_reporter.begin_test_procedure|| '(:test,:insuite)';
158+
Else
159+
Return a_test_suite_reporter.package_name||'.'||a_test_suite_reporter.begin_test_procedure|| '(:test,:insuite)';
160+
End If;
161+
End;
162+
function test_suite_reporter_et_stmt(a_test_suite_reporter in test_suite_reporter) return varchar2
163+
Is
164+
Begin
165+
If Trim(a_test_suite_reporter.end_test_procedure ) Is Null or Trim(a_test_suite_reporter.package_name ) Is Null Then Return Null; End If;
166+
167+
If Trim(A_Test_Suite_Reporter.Owner_Name) Is Not Null Then
168+
Return Trim(a_test_suite_reporter.Owner_Name)||'.'||a_test_suite_reporter.package_name||'.'||a_test_suite_reporter.end_test_procedure|| '(:test,:result,:insuite)';
169+
Else
170+
Return a_test_suite_reporter.package_name||'.'||a_test_suite_reporter.end_test_procedure|| '(:test,:result,:insuite)';
171+
End If;
172+
End;
173+
82174
end ut_types;

source/ut_types.pks

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@ create or replace package ut_types as
2222

2323
type single_test is record
2424
(
25-
owner_name dbms_quoted_id,
25+
owner_name dbms_quoted_id,
2626
object_name dbms_quoted_id,
2727
setup_procedure dbms_quoted_id,
2828
teardown_procedure dbms_quoted_id,
2929
test_procedure dbms_quoted_id
3030
);
31-
function single_test_is_valid(a_single_test IN OUT NOCOPY single_test) return boolean;
31+
function single_test_is_valid(a_single_test in out nocopy single_test) return boolean;
32+
function single_test_setup_stmt(a_single_test in single_test) return varchar2;
33+
function single_test_teardown_stmt(a_single_test in single_test) return varchar2;
34+
function single_test_test_stmt(a_single_test in single_test) return varchar2;
3235

3336
type test_execution_result is record
3437
(
@@ -63,5 +66,12 @@ create or replace package ut_types as
6366
);
6467

6568
type test_suite_reporters is table of test_suite_reporter;
69+
70+
Function Test_Suite_Reporter_Is_Valid(A_Test_Suite_Reporter In Out Nocopy Test_Suite_Reporter) Return Boolean;
71+
function test_suite_reporter_bs_stmt(a_test_suite_reporter in test_suite_reporter) return varchar2;
72+
function test_suite_reporter_es_stmt(a_test_suite_reporter in test_suite_reporter) return varchar2;
73+
function test_suite_reporter_bt_stmt(a_test_suite_reporter in test_suite_reporter) return varchar2;
74+
function test_suite_reporter_et_stmt(a_test_suite_reporter in test_suite_reporter) return varchar2;
75+
6676

6777
end ut_types;

0 commit comments

Comments
 (0)