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

Skip to content

Commit f025540

Browse files
authored
Merge pull request #24 from Pazus/object-types-design
Object types design
2 parents 5b5767c + f50a4e9 commit f025540

48 files changed

Lines changed: 1184 additions & 919 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
--Shows how to create a test suite with the default reporter which is dbms_output
2+
--No tables are used for this.
3+
--Suite Management packages are when developed will make this easier.
4+
Clear Screen
5+
Set Serveroutput On Size Unlimited format truncated
6+
set echo off
7+
--install the example unit test packages
8+
@@ut_exampletest.pks
9+
@@ut_exampletest.pkb
10+
@@ut_exampletest2.pks
11+
@@ut_exampletest2.pkb
12+
@@ut_custom_reporter.tps
13+
@@ut_custom_reporter.tpb
14+
15+
declare
16+
suite1 ut_test_suite;
17+
suite2 ut_test_suite;
18+
suite_complex ut_test_suite;
19+
testtoexecute ut_test;
20+
begin
21+
suite1 := ut_test_suite(a_suite_name => 'Test Suite 1' /*,a_items => ut_test_objects_list()*/);
22+
23+
testtoexecute := ut_test(a_object_name => 'ut_exampletest'
24+
,a_test_procedure => 'ut_exAmpletest'
25+
,a_test_name => 'Example test1'
26+
,a_setup_procedure => 'Setup'
27+
,a_teardown_procedure => 'tEardown');
28+
29+
suite1.add_item(testtoexecute);
30+
31+
suite2 := ut_test_suite(a_suite_name => 'Test Suite 2' /*,a_items => ut_test_objects_list()*/);
32+
testtoexecute := ut_test(a_object_name => 'UT_EXAMPLETEST2'
33+
,a_test_procedure => 'UT_EXAMPLETEST'
34+
,a_setup_procedure => 'SETUP'
35+
,a_teardown_procedure => 'TEARDOWN');
36+
37+
suite2.add_item(testtoexecute);
38+
39+
suite_complex := ut_test_suite(a_suite_name => 'Complex Test Suite', a_items => ut_test_objects_list(suite1, suite2));
40+
41+
-- provide a reporter to process results
42+
suite_complex.execute(ut_custom_reporter(a_tab_size => 2));
43+
end;
44+
/
45+
46+
drop type ut_custom_reporter;

examples/RunExampleTestSuite.sql

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,48 @@
22
--No tables are used for this.
33
--Suite Management packages are when developed will make this easier.
44
Clear Screen
5-
Set Serveroutput On Size Unlimited
5+
Set Serveroutput On Size Unlimited format truncated
6+
set echo off
7+
--install the example unit test packages
8+
@@ut_exampletest.pks
9+
@@ut_exampletest.pkb
10+
@@ut_exampletest2.pks
11+
@@ut_exampletest2.pkb
612

7-
Declare
8-
testtoexecute ut_types.single_test;
9-
Suite Ut_Types.Test_Suite;
10-
testresults ut_types.test_suite_results;
11-
Begin
12-
Suite.Suite_name := 'Test Suite Name';
13-
Suite.Tests := ut_Types.Test_List();
14-
15-
Testtoexecute.object_name := 'ut_exampletest';
16-
Testtoexecute.setup_procedure := 'Setup';
17-
TestToExecute.teardown_procedure := 'TearDown';
18-
TestToExecute.test_procedure := 'ut_exampletest';
13+
declare
14+
suite ut_test_suite;
15+
testtoexecute ut_test;
16+
test_item ut_test;
17+
begin
18+
suite := ut_test_suite(a_suite_name => 'Test Suite Name' /*,a_items => ut_test_objects_list()*/);
1919

20-
Suite.Tests.Extend;
21-
Suite.Tests(Suite.Tests.Last) := Testtoexecute;
20+
testtoexecute := ut_test(a_object_name => 'ut_exampletest'
21+
,a_test_procedure => 'ut_exAmpletest'
22+
,a_setup_procedure => 'Setup'
23+
,a_teardown_procedure => 'tEardown');
2224

23-
Testtoexecute.object_name := 'ut_exampletest2';
24-
Testtoexecute.setup_procedure := 'Setup';
25-
TestToExecute.teardown_procedure := 'TearDown';
26-
TestToExecute.test_procedure := 'ut_exampletest';
27-
28-
Suite.Tests.Extend;
29-
Suite.Tests(Suite.Tests.LAST) := TestToExecute;
25+
suite.add_item(testtoexecute);
3026

31-
ut_Test_Runner.Execute_Tests(Suite,null,TestResults);
32-
33-
-- No reporter used in this example so outputing the results manually.
34-
FOR test_idx in TestResults.first .. TestResults.last
35-
LOOP
36-
Dbms_Output.Put_Line('---------------------------------------------------');
37-
Dbms_Output.Put_Line('Test:' || Testresults(Test_Idx).Test.Object_Name || '.' || Testresults(Test_Idx).Test.Test_Procedure );
38-
dbms_output.put_line('Result: ' || Ut_Types.Test_Result_To_Char(TestResults(test_idx).result) );
39-
Dbms_Output.Put_Line('Assert Results:');
40-
FOR I in TestResults(test_idx).Assert_Results.First .. TestResults(test_idx).Assert_Results.Last
41-
Loop
42-
Dbms_Output.Put_Line(I || ' - result: ' || Ut_Types.Test_Result_To_Char(Testresults(Test_Idx).Assert_Results(I).Result) );
43-
dbms_output.put_line(I || ' - Message: ' || TestResults(test_idx).Assert_Results(I).Message);
44-
END LOOP;
45-
END LOOP;
46-
dbms_output.put_line('---------------------------------------------------');
47-
End;
48-
/
27+
testtoexecute := ut_test(a_object_name => 'UT_EXAMPLETEST2'
28+
,a_test_procedure => 'UT_EXAMPLETEST'
29+
,a_setup_procedure => 'SETUP'
30+
,a_teardown_procedure => 'TEARDOWN');
31+
32+
suite.add_item(testtoexecute);
33+
suite.execute;
4934

35+
-- No reporter used in this example so outputing the results manually.
36+
for test_idx in suite.items.first .. suite.items.last loop
37+
test_item := treat(suite.items(test_idx) as ut_test);
38+
dbms_output.put_line('---------------------------------------------------');
39+
dbms_output.put_line('Test:' || test_item.call_params.object_name || '.' || test_item.call_params.test_procedure);
40+
dbms_output.put_line('Result: ' || test_item.execution_result.result_to_char);
41+
dbms_output.put_line('Assert Results:');
42+
for i in test_item.assert_results.first .. test_item.assert_results.last loop
43+
dbms_output.put_line(i || ' - result: ' || test_item.assert_results(i).result_to_char);
44+
dbms_output.put_line(i || ' - Message: ' || test_item.assert_results(i).message);
45+
end loop;
46+
end loop;
47+
dbms_output.put_line('---------------------------------------------------');
48+
end;
49+
/
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
--Shows how to create a test suite with the default reporter which is dbms_output
2+
--No tables are used for this.
3+
--Suite Management packages are when developed will make this easier.
4+
Clear Screen
5+
Set Serveroutput On Size Unlimited format truncated --http://stackoverflow.com/questions/2584492/how-to-prevent-dbms-output-put-line-from-trimming-leading-whitespace
6+
set echo off
7+
--install the example unit test packages
8+
@@ut_exampletest.pks
9+
@@ut_exampletest.pkb
10+
@@ut_exampletest2.pks
11+
@@ut_exampletest2.pkb
12+
@@ut_custom_reporter.tps
13+
@@ut_custom_reporter.tpb
14+
15+
declare
16+
suite ut_test_suite;
17+
testtoexecute ut_test;
18+
begin
19+
-- Install ut_custom_reporter first from example folder
20+
21+
suite := ut_test_suite(a_suite_name => 'Test Suite Name' /*,a_items => ut_test_objects_list()*/);
22+
23+
testtoexecute := ut_test(a_object_name => 'ut_exampletest'
24+
,a_test_procedure => 'ut_exAmpletest'
25+
,a_setup_procedure => 'Setup'
26+
,a_teardown_procedure => 'tEardown');
27+
28+
suite.add_item(testtoexecute);
29+
30+
testtoexecute := ut_test(a_object_name => 'UT_EXAMPLETEST2'
31+
,a_test_procedure => 'UT_EXAMPLETEST'
32+
,a_setup_procedure => 'SETUP'
33+
,a_teardown_procedure => 'TEARDOWN');
34+
35+
suite.add_item(testtoexecute);
36+
37+
-- provide a reporter to process results tabbing each hierarcy level by tab_size
38+
suite.execute(ut_custom_reporter(a_tab_size => 2));
39+
end;
40+
/
41+
42+
43+
drop type ut_custom_reporter;

examples/RunExampleTestSuiteWithDBMSOutputReporter.sql

Lines changed: 32 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,35 @@
22
--No tables are used for this.
33
--Suite Management packages are when developed will make this easier.
44
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;
11-
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';
20-
21-
Suite.Tests.Extend;
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';
28-
29-
Suite.Tests.Extend;
30-
Suite.Tests(Suite.Tests.LAST) := TestToExecute;
31-
32-
33-
ut_Test_Runner.Execute_Tests(Suite,TestResults);
34-
END;
35-
36-
37-
38-
39-
40-
5+
Set Serveroutput On Size Unlimited format truncated
6+
set echo off
7+
--install the example unit test packages
8+
@@ut_exampletest.pks
9+
@@ut_exampletest.pkb
10+
@@ut_exampletest2.pks
11+
@@ut_exampletest2.pkb
12+
13+
declare
14+
suite ut_test_suite;
15+
testtoexecute ut_test;
16+
begin
17+
suite := ut_test_suite(a_suite_name => 'Test Suite Name' /*,a_items => ut_test_objects_list()*/);
18+
19+
testtoexecute := ut_test(a_object_name => 'ut_exampletest'
20+
,a_test_procedure => 'ut_exAmpletest'
21+
,a_setup_procedure => 'Setup'
22+
,a_teardown_procedure => 'tEardown');
23+
24+
suite.add_item(testtoexecute);
25+
26+
testtoexecute := ut_test(a_object_name => 'UT_EXAMPLETEST2'
27+
,a_test_procedure => 'UT_EXAMPLETEST'
28+
,a_setup_procedure => 'SETUP'
29+
,a_teardown_procedure => 'TEARDOWN');
30+
31+
suite.add_item(testtoexecute);
32+
33+
-- provide a reporter to process results
34+
suite.execute(ut_dbms_output_suite_reporter);
35+
end;
36+
/
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
--This shows how the interna test engine works to test a single package.
22
--No tables are used for this and exceptions are handled better.
33
Clear Screen
4-
Set Serveroutput On Size Unlimited
4+
Set Serveroutput On Size Unlimited format truncated
5+
set echo off
6+
--install the example unit test packages
7+
@@ut_exampletest.pks
8+
@@ut_exampletest.pkb
9+
510
declare
6-
testtoexecute ut_types.single_test;
7-
testresults ut_types.test_execution_result;
11+
simple_test ut_test;
12+
reporter ut_suite_reporter;
813
begin
9-
--testtoexecute.typeoftest := ut_types.tt_package;
10-
testtoexecute.owner_name := user;
11-
testtoexecute.object_name := 'ut_exampletest';
12-
testtoexecute.setup_procedure := 'setup';
13-
testtoexecute.teardown_procedure := 'teardown';
14-
testtoexecute.test_procedure := 'ut_exampletest';
15-
ut_test_execute.execute_test(testtoexecute,testresults);
1614

17-
--for now result is an integer but will need a look upto make pretty later.
18-
dbms_output.put_line('result: ' || ut_types.test_result_to_char(testresults.result) );
19-
dbms_output.put_line('assert results:');
20-
for i in testresults.assert_results.first .. testresults.assert_results.last
21-
Loop
22-
dbms_output.put_line(i || ' - result: ' || ut_types.test_result_to_char(testresults.assert_results(i).result) );
23-
dbms_output.put_line(i || ' - message: ' || testresults.assert_results(i).message);
24-
end loop;
15+
simple_test := ut_test(a_object_name => 'ut_exampletest'
16+
,a_test_procedure => 'ut_exampletest'
17+
,a_test_name => 'Simple test1'
18+
,a_owner_name => user
19+
,a_setup_procedure => 'setup'
20+
,a_teardown_procedure => 'teardown');
21+
22+
reporter := ut_dbms_output_suite_reporter;
23+
simple_test.execute(reporter);
2524
end;
25+
/

examples/ut_custom_reporter.tpb

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
create or replace type body ut_custom_reporter is
2+
3+
constructor function ut_custom_reporter(a_tab_size integer default 4) return self as result is
4+
begin
5+
self.name := $$plsql_unit;
6+
self.lvl := 0;
7+
self.tab_size := a_tab_size;
8+
return;
9+
end;
10+
11+
member function tab(self in ut_custom_reporter) return varchar2 is
12+
tab_str varchar2(255);
13+
begin
14+
tab_str := rpad(' ', lvl * tab_size);
15+
return tab_str;
16+
end tab;
17+
18+
overriding member procedure print(msg varchar2) is
19+
begin
20+
(self as ut_dbms_output_suite_reporter).print(tab || msg);
21+
end print;
22+
23+
overriding member procedure begin_suite(self in out nocopy ut_custom_reporter, a_suite_name in varchar2) as
24+
begin
25+
(self as ut_dbms_output_suite_reporter).begin_suite(a_suite_name);
26+
lvl := lvl + 1;
27+
end;
28+
29+
overriding member procedure end_suite(self in out nocopy ut_custom_reporter, a_suite_name in varchar2, a_suite_execution_result in ut_execution_result) as
30+
begin
31+
lvl := lvl - 1;
32+
(self as ut_dbms_output_suite_reporter).end_suite(a_suite_name,a_suite_execution_result);
33+
end;
34+
35+
overriding member procedure begin_test(self in out nocopy ut_custom_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params) as
36+
begin
37+
(self as ut_dbms_output_suite_reporter).begin_test(a_test_name,a_test_call_params);
38+
lvl := lvl + 1;
39+
end;
40+
41+
overriding member procedure end_test(self in out nocopy ut_custom_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) as
42+
begin
43+
lvl := lvl - 1;
44+
(self as ut_dbms_output_suite_reporter).end_test(a_test_name, a_test_call_params, a_execution_result, a_assert_list);
45+
end;
46+
47+
end;
48+
/

examples/ut_custom_reporter.tps

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
create or replace type ut_custom_reporter under ut_dbms_output_suite_reporter
2+
(
3+
lvl integer,
4+
tab_size integer,
5+
6+
-- Member functions and procedures
7+
constructor function ut_custom_reporter(a_tab_size integer default 4) return self as result,
8+
member function tab(self in ut_custom_reporter) return varchar2,
9+
overriding member procedure print(msg varchar2),
10+
overriding member procedure begin_suite(self in out nocopy ut_custom_reporter, a_suite_name in varchar2),
11+
overriding member procedure end_suite(self in out nocopy ut_custom_reporter, a_suite_name in varchar2, a_suite_execution_result in ut_execution_result),
12+
overriding member procedure begin_test(self in out nocopy ut_custom_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params),
13+
overriding member procedure end_test(self in out nocopy ut_custom_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)
14+
)
15+
not final
16+
/

examples/ut_exampletest.pkb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ AS
2020
ut_assert.are_Equal('Test 2 Should Fail',1,2);
2121
end;
2222

23-
END;
23+
END;
24+
/

examples/ut_exampletest.pks

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ AS
33
procedure Setup;
44
procedure TearDown;
55
procedure ut_exampletest;
6-
END;
6+
END;
7+
/

examples/ut_exampletest2.pkb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ AS
2020
ut_assert.are_Equal('Test 2 Should Pass',2,2);
2121
end;
2222

23-
END;
23+
END;
24+
/

0 commit comments

Comments
 (0)