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

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
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
  • Loading branch information
Pazus committed Jul 26, 2016
commit 955dcc5308d98440375c27416d6046c5c14634f3
5 changes: 5 additions & 0 deletions examples/RunAllExamples.sql
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
Clear Screen
set echo off
set feedback off
prompt RunExampleComplexSuiteWithCustomDBMSOutputReporter
@@RunExampleComplexSuiteWithCustomDBMSOutputReporter.sql
prompt RunExampleTestSuite
@@RunExampleTestSuite.sql
prompt RunExampleTestSuiteWithCustomDBMSOutputReporter
@@RunExampleTestSuiteWithCustomDBMSOutputReporter.sql
prompt RunExampleTestSuiteWithDBMSOutputReporter
@@RunExampleTestSuiteWithDBMSOutputReporter.sql
prompt RunExampleTestThroughBaseClass
@@RunExampleTestThroughBaseClass.sql
2 changes: 1 addition & 1 deletion examples/RunExampleTestSuite.sql
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ begin
for test_idx in suite.items.first .. suite.items.last loop
test_item := treat(suite.items(test_idx) as ut_test);
dbms_output.put_line('---------------------------------------------------');
dbms_output.put_line('Test:' || test_item.call_params.object_name || '.' || test_item.call_params.test_procedure);
dbms_output.put_line('Test:' || test_item.test.form_name);
dbms_output.put_line('Result: ' || test_item.execution_result.result_to_char);
dbms_output.put_line('Assert Results:');
for i in test_item.assert_results.first .. test_item.assert_results.last loop
Expand Down
3 changes: 3 additions & 0 deletions source/install.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
@@ut_assert.pks
@@types/ut_execution_result.tps
@@types/ut_suite_reporter.tps
@@types/ut_reporters_list.tps
@@types/ut_composite_reporter.tps
@@types/ut_test_object.tps
@@types/ut_test_objects_list.tps
@@types/ut_test.tps
Expand All @@ -18,6 +20,7 @@
@@types/ut_test.tpb
@@types/ut_test_suite.tpb
@@types/ut_test_call_params.tpb
@@types/ut_composite_reporter.tpb
@@types/ut_reporter_decorator.tpb
@@types/ut_dbms_output_suite_reporter.tpb
@@ut_metadata.pkb
Expand Down
54 changes: 54 additions & 0 deletions source/types/ut_composite_reporter.tpb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
create or replace type body ut_composite_reporter is

constructor function ut_composite_reporter(the_reporters ut_reporters_list default ut_reporters_list())
return self as result is
begin
self.name := $$plsql_unit;
return;
end;

member procedure add_reporter(self in out nocopy ut_composite_reporter, a_reporter ut_suite_reporter) is
begin
self.reporters.extend(1);
self.reporters(self.reporters.last) := a_reporter;
end;
member procedure remove_reporter(self in out nocopy ut_composite_reporter, an_index pls_integer) is
begin
for i in an_index + 1 .. self.reporters.last loop
self.reporters(i - 1) := self.reporters(i);
end loop;

self.reporters.delete(self.reporters.last);

end;

overriding member procedure begin_suite(self in out nocopy ut_composite_reporter, a_suite_name in varchar2) is
begin
for i in 1 .. self.reporters.count loop
self.reporters(i).begin_suite(a_suite_name => a_suite_name);
end loop;
end;
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
begin
for i in 1 .. self.reporters.count loop
self.reporters(i).begin_test(a_test_name => a_test_name, a_test_call_params => a_test_call_params);
end loop;
end;
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
begin
for i in 1 .. self.reporters.count loop
self.reporters(i).end_test(a_test_name => a_test_name
,a_test_call_params => a_test_call_params
,a_execution_result => a_execution_result
,a_assert_list => a_assert_list);
end loop;
end;
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
begin
for i in 1 .. self.reporters.count loop
self.reporters(i).end_suite(a_suite_name => a_suite_name, a_suite_execution_result => a_suite_execution_result);
end loop;
end;

end;
/
17 changes: 17 additions & 0 deletions source/types/ut_composite_reporter.tps
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
create or replace type ut_composite_reporter under ut_suite_reporter
(
reporters ut_reporters_list,

constructor function ut_composite_reporter(the_reporters ut_reporters_list default ut_reporters_list())
return self as result,
member procedure add_reporter(self in out nocopy ut_composite_reporter, a_reporter ut_suite_reporter),
member procedure remove_reporter(self in out nocopy ut_composite_reporter, an_index pls_integer),

overriding member procedure begin_suite(self in out nocopy ut_composite_reporter, a_suite_name in varchar2),
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),
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),
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)

)
not final
/
9 changes: 2 additions & 7 deletions source/types/ut_dbms_output_suite_reporter.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,9 @@ create or replace type body ut_dbms_output_suite_reporter is
begin
print(ut_dbms_output_suite_reporter.c_dashed_line);
if a_test_name is not null then
print('test ' || a_test_name || ' (' ||
ut_metadata.form_name(a_test_call_params.owner_name
,a_test_call_params.object_name
,a_test_call_params.test_procedure) || ')');
print('test ' || a_test_name || ' (' ||a_test_call_params.form_name || ')');
else
print('test ' || ut_metadata.form_name(a_test_call_params.owner_name
,a_test_call_params.object_name
,a_test_call_params.test_procedure));
print('test ' || a_test_call_params.form_name);
end if;
end;

Expand Down
2 changes: 2 additions & 0 deletions source/types/ut_reporters_list.tps
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
create or replace type ut_reporters_list as table of ut_suite_reporter;
/
44 changes: 29 additions & 15 deletions source/types/ut_test.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,32 @@ create or replace type body ut_test is
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)
return self as result is
begin
self.name := a_test_name;
self.call_params := ut_test_call_params(object_name => trim(a_object_name)
,test_procedure => trim(a_test_procedure)
,owner_name => trim(a_owner_name)
,setup_procedure => trim(a_setup_procedure)
,teardown_procedure => trim(a_teardown_procedure));
self.name := a_test_name;
self.test := ut_test_call_params(object_name => trim(a_object_name)
,procedure_name => trim(a_test_procedure)
,owner_name => trim(a_owner_name));

if a_setup_procedure is not null then
self.setup := ut_test_call_params(object_name => trim(a_object_name)
,procedure_name => trim(a_setup_procedure)
,owner_name => trim(a_owner_name));
end if;

if a_teardown_procedure is not null then
self.teardown := ut_test_call_params(object_name => trim(a_object_name)
,procedure_name => trim(a_teardown_procedure)
,owner_name => trim(a_owner_name));
end if;
return;
end ut_test;

member function is_valid(self in ut_test) return boolean is
v_is_valid boolean;
begin
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));
v_is_valid := test.validate_params('test') and setup is null or setup.validate_params('setup') and teardown is null or
teardown.validate_params('teardown');

return v_is_valid;
end is_valid;

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

begin
Expand All @@ -35,11 +49,11 @@ create or replace type body ut_test is
$end

self.execution_result := ut_execution_result();
if self.call_params.validate_params() then
self.call_params.setup;
if self.is_valid() then
self.setup.execute;
begin
self.call_params.run_test;
self.test.execute;
exception
when others then
-- dbms_utility.format_error_backtrace is 10g or later
Expand All @@ -51,7 +65,7 @@ create or replace type body ut_test is
$end
ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
end;
self.call_params.teardown;
self.teardown.execute;
end if;

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

if reporter is not null then
reporter.end_test(a_test_name => self.name
,a_test_call_params => self.call_params
,a_test_call_params => self.test
,a_execution_result => self.execution_result
,a_assert_list => self.assert_results);
end if;
return reporter;
end;

overriding member procedure execute(self in out nocopy ut_test) is
v_null_reporter ut_suite_reporter;
v_null_reporter ut_suite_reporter;
begin
self.execute(v_null_reporter);
end execute;
Expand Down
5 changes: 3 additions & 2 deletions source/types/ut_test.tps
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
create or replace type ut_test force under ut_test_object
(

call_params ut_test_call_params,
setup ut_test_call_params,
test ut_test_call_params,
teardown ut_test_call_params,
assert_results ut_assert_list,

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)
Expand Down
55 changes: 17 additions & 38 deletions source/types/ut_test_call_params.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -56,67 +56,46 @@ create or replace type body ut_test_call_params is
end is_valid;
*/

member function validate_params(self in ut_test_call_params) return boolean is
member function validate_params(a_proc_type varchar2) return boolean is
a_result boolean := true;
begin

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

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

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

if a_result then
if not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.test_procedure) then
ut_assert.report_error('package missing test method ' || self.object_name || '.' ||
nvl(self.test_procedure, '<missing procedure name>'));
end if;

if self.setup_procedure is not null and
not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.setup_procedure) then
ut_assert.report_error('package missing setup method ' || self.object_name || '.' ||
nvl(self.setup_procedure, '<missing procedure name>'));
end if;

if self.teardown_procedure is not null and
not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.teardown_procedure) then
ut_assert.report_error('package missing teardown method ' || self.object_name || '.' ||
nvl(self.teardown_procedure, '<missing procedure name>'));
end if;
if a_result and not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.procedure_name) then
a_result := false;
ut_assert.report_error('Call params for ' || a_proc_type || ' are not valid: package missing ' || a_proc_type ||
' procedure ' || self.object_name || '.' ||
nvl(self.procedure_name, '<missing procedure name>'));
end if;

return a_result;
end validate_params;

member procedure setup(self in ut_test_call_params) is
member function form_name return varchar2 is
begin
if self.setup_procedure is not null and self.object_name is not null then
ut_test_call_params.execute_call(self.owner_name, self.object_name, self.setup_procedure);
end if;
end setup;

member procedure run_test(self in ut_test_call_params) is
begin
if self.test_procedure is not null and self.object_name is not null then
ut_test_call_params.execute_call(self.owner_name, self.object_name, self.test_procedure);
end if;
return ut_metadata.form_name(owner_name, object_name, procedure_name);
end;

member procedure teardown(self in ut_test_call_params) is
member procedure execute(self in ut_test_call_params) is
begin
if self.teardown_procedure is not null and self.object_name is not null then
ut_test_call_params.execute_call(self.owner_name, self.object_name, self.teardown_procedure);
end if;
end;
ut_test_call_params.execute_call(self.owner_name, self.object_name, self.procedure_name);
end execute;

end;
/
14 changes: 5 additions & 9 deletions source/types/ut_test_call_params.tps
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
create or replace type ut_test_call_params force as object
(
object_name varchar2(32 char),
test_procedure varchar2(32 char),
owner_name varchar2(32 char),
setup_procedure varchar2(32 char),
teardown_procedure varchar2(32 char),
object_name varchar2(32 char),
procedure_name varchar2(32 char),

static procedure execute_call(a_owner varchar2, a_object varchar2, a_procedure_name varchar2),
--member function is_valid(self in ut_test_call_params) return boolean,
member function validate_params(self in ut_test_call_params) return boolean,
member procedure setup(self in ut_test_call_params),
member procedure run_test(self in ut_test_call_params),
member procedure teardown(self in ut_test_call_params)
member function validate_params(a_proc_type varchar2) return boolean,
member function form_name return varchar2,
member procedure execute(self in ut_test_call_params)
) final
/
6 changes: 6 additions & 0 deletions source/uninstall.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ drop package ut_metadata;

drop package ut_utils;

drop type ut_custom_reporter;

drop type ut_dbms_output_suite_reporter;

drop type ut_reporter_decorator;
Expand All @@ -16,6 +18,10 @@ drop type ut_test;

drop type ut_test_object;

drop type ut_composite_reporter;

drop type ut_reporters_list;

drop type ut_suite_reporter force;

drop type ut_execution_result;
Expand Down
6 changes: 6 additions & 0 deletions source/ut_metadata.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ create or replace package body ut_metadata as

-- expect both package and body to be valid
return v_cnt = 2;
exception
when others then
return false;
end;

function procedure_exists(a_owner_name varchar2, a_package_name in varchar2, a_procedure_name in varchar2)
Expand Down Expand Up @@ -90,6 +93,9 @@ create or replace package body ut_metadata as

--expect one method only for the package with that name.
return v_cnt = 1;
exception
when others then
return false;
end;

function resolvable(the_owner in varchar2, the_object in varchar2, a_procedurename in varchar2) return boolean is
Expand Down