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
Show all changes
38 commits
Select commit Hold shift + click to select a range
b1f6323
Initial, incomplete version of reporter
PhilippSalvisberg Dec 17, 2018
e83eeaf
added grants ans synonyms for ut_sqldev_reporter
PhilippSalvisberg Dec 17, 2018
99c1d31
rename ut_sqldev_reporter to ut_realtime_reporter
PhilippSalvisberg Dec 27, 2018
6531e08
add initial test suite for ut_realtime_reporter
PhilippSalvisberg Dec 28, 2018
28a1a73
install test_realtime_reporter
PhilippSalvisberg Dec 28, 2018
010b8fd
add ut_realtime_reporter to list of core reporters
PhilippSalvisberg Dec 28, 2018
9e79e6f
use print_xml_fragment for pretty printing
PhilippSalvisberg Dec 28, 2018
4b29c56
changed formatting and comments
PhilippSalvisberg Dec 28, 2018
2f22a89
new XML report format, using XML attributes for id only
PhilippSalvisberg Dec 28, 2018
d45c88c
extended unit test, reasonable coverage, helps understanding the repo…
PhilippSalvisberg Dec 28, 2018
b37b188
enable drop of test packages
PhilippSalvisberg Dec 28, 2018
8c1c561
remove hard-coded owner ut3_tester
PhilippSalvisberg Dec 28, 2018
bcf1606
make complete event a.s.a.p. visible in consuming session
PhilippSalvisberg Dec 28, 2018
d4b09c7
fix incompatibility to 12.1
PhilippSalvisberg Dec 29, 2018
c2cc292
Fixed typos in comments and made comments more precise.
PhilippSalvisberg Dec 29, 2018
0c6a0ad
get_description synchronized with type specification.
PhilippSalvisberg Dec 29, 2018
7134f13
use print_end_node to close tags
PhilippSalvisberg Dec 29, 2018
2577566
removed duplicate line feed
PhilippSalvisberg Dec 29, 2018
1672248
removed duplicate line feed
PhilippSalvisberg Dec 29, 2018
42cf8ee
change description of the tests to reflect the requirements as sugges…
PhilippSalvisberg Dec 29, 2018
6512cf8
replace granular self.print_text_lines calls with a few self.print_te…
PhilippSalvisberg Dec 29, 2018
c1273af
added text_xmltype_list collection type for test_realtime_reporter
PhilippSalvisberg Dec 29, 2018
b05760d
install new collection type test_xmltype_list for test_realtime_reporter
PhilippSalvisberg Dec 29, 2018
93e4ea8
add xml_header attribute, used for each produced document
PhilippSalvisberg Dec 29, 2018
290ca30
replace hard-coded id attribute with name and value for an optional a…
PhilippSalvisberg Dec 29, 2018
e570e48
produce an XML document for each event resulting in a new output stru…
PhilippSalvisberg Dec 29, 2018
17ed198
changed name and description to match new output structure
PhilippSalvisberg Dec 29, 2018
eef5938
test 26 event-based XML documents produced by the revised reporter
PhilippSalvisberg Dec 29, 2018
eba2e9e
change comment to reflect new role of the member procedure
PhilippSalvisberg Dec 30, 2018
8f5b736
Added `item_type` attribute to output buffer.
jgebal Dec 30, 2018
e02d238
Added `item_type` attribute to output reporters.
jgebal Dec 30, 2018
fc0f0e9
Fixed failing examples.
jgebal Dec 30, 2018
fb96511
create object type and collection type for test_realtime_reporter
PhilippSalvisberg Dec 31, 2018
957e5c9
produce 1 row per event document using new output buffer
PhilippSalvisberg Dec 31, 2018
f992193
renamed package persistent variable
PhilippSalvisberg Dec 31, 2018
576b8ea
Fix crash due to null value.
PhilippSalvisberg Dec 31, 2018
73669eb
Fixed issues with nested runs
PhilippSalvisberg Jan 1, 2019
cc3a7e4
Extracted duplicated code from pipelined functions into `get_report_o…
jgebal Jan 1, 2019
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
extended unit test, reasonable coverage, helps understanding the repo…
…rter
  • Loading branch information
PhilippSalvisberg committed Dec 28, 2018
commit d45c88ceb1fdb2772f1f77baba5370735d81ca46
271 changes: 255 additions & 16 deletions test/core/reporters/test_realtime_reporter.pkb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
create or replace package body test_realtime_reporter as

procedure create_test_suites is
g_actual_xml_report xmltype;

procedure create_test_suites_and_run is
pragma autonomous_transaction;
begin
execute immediate q'[create or replace package ut3_tester.check_realtime_reporting1 is
Expand Down Expand Up @@ -52,34 +54,271 @@ create or replace package body test_realtime_reporter as
procedure test_4_nok is
begin
ut3.ut.expect(2).to_equal(3);
ut3.ut.expect(2).to_equal(4);
end;

procedure test_5 is
begin
null;
end;
end;]';
commit;
end;

execute immediate q'[create or replace package ut3_tester.check_realtime_reporting3 is
--%suite
--%suitepath(realtime_reporting)

--%test
procedure test_6_with_runtime_error;

--%test
procedure test_7_with_serveroutput;

--%afterall
procedure print_and_raise;
end;]';
execute immediate q'[create or replace package body ut3_tester.check_realtime_reporting3 is
procedure test_6_with_runtime_error is
l_actual integer;
begin
execute immediate 'select 6 from non_existing_table' into l_actual;
ut3.ut.expect(6).to_equal(l_actual);
end;

procedure test_7_with_serveroutput is
begin
dbms_output.put_line('before test 7');
ut3.ut.expect(7).to_equal(7);
dbms_output.put_line('after test 7');
end;

procedure print_and_raise is
begin
dbms_output.put_line('Now, a no_data_found exception is raised');
dbms_output.put_line('dbms_output and error stack is reported for this suite.');
dbms_output.put_line('A runtime error in afterall is counted as a warning.');
raise no_data_found;
end;
end;]';

<<run_report_and_cache_result>>
declare
l_results ut3.ut_varchar2_list;
begin
select *
bulk collect into l_results
from table(ut3.ut.run('ut3_tester:realtime_reporting', ut3.ut_realtime_reporter()));
g_actual_xml_report := xmltype(ut3.ut_utils.table_to_clob(l_results));
end run_report_and_cache_result;
end create_test_suites_and_run;

procedure xml_report_structure is
l_actual clob;
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
l_actual := g_actual_xml_report.getclobval();
ut3.ut_utils.append_to_list(l_expected_list, '<?xml version="1.0"?>');
ut3.ut_utils.append_to_list(l_expected_list, '%<report>');
ut3.ut_utils.append_to_list(l_expected_list, '% <preRun>');
ut3.ut_utils.append_to_list(l_expected_list, '% <suites>');
ut3.ut_utils.append_to_list(l_expected_list, '% <suite id="%">');
ut3.ut_utils.append_to_list(l_expected_list, '% %<test id="%">');
ut3.ut_utils.append_to_list(l_expected_list, '% %</test>');
ut3.ut_utils.append_to_list(l_expected_list, '% </suite>');
ut3.ut_utils.append_to_list(l_expected_list, '% </suites>');
ut3.ut_utils.append_to_list(l_expected_list, '% <totalNumberOfTests>%</totalNumberOfTests>');
ut3.ut_utils.append_to_list(l_expected_list, '% </preRun>');
ut3.ut_utils.append_to_list(l_expected_list, '% <runEvents>');
ut3.ut_utils.append_to_list(l_expected_list, '% <startSuiteEvent id="%">');
ut3.ut_utils.append_to_list(l_expected_list, '% </startTestEvent>');
ut3.ut_utils.append_to_list(l_expected_list, '% <startTestEvent id="%">');
ut3.ut_utils.append_to_list(l_expected_list, '% </startTestEvent>');
ut3.ut_utils.append_to_list(l_expected_list, '% <endTestEvent id="%">');
ut3.ut_utils.append_to_list(l_expected_list, '% </endTestEvent>');
ut3.ut_utils.append_to_list(l_expected_list, '% <endSuiteEvent id="%">');
ut3.ut_utils.append_to_list(l_expected_list, '% </endSuiteEvent>');
ut3.ut_utils.append_to_list(l_expected_list, '% </runEvents>');
ut3.ut_utils.append_to_list(l_expected_list, '%</report>');
l_expected := ut3.ut_utils.table_to_clob(l_expected_list, null);
ut.expect(l_actual).to_be_like(l_expected);
end xml_report_structure;

procedure total_number_of_tests is
l_actual integer;
l_expected integer := 7;
begin
l_actual := g_actual_xml_report.extract('/report/preRun/totalNumberOfTests/text()').getnumberval();
ut.expect(l_actual).to_equal(l_expected);
end total_number_of_tests;

procedure escaped_characters is
l_actual varchar2(32767);
l_expected varchar2(20) := 'suite &lt;A&gt;';
begin
l_actual :=
g_actual_xml_report.extract(
'//suite[@id="realtime_reporting.check_realtime_reporting1"]/description/text()'
).getstringval();
ut.expect(l_actual).to_equal(l_expected);
end escaped_characters;

procedure number_of_starttestevent_nodes is
l_actual integer;
l_expected integer := 7;
begin
select count(*)
into l_actual
from xmltable(
'/report/runEvents/startTestEvent'
passing g_actual_xml_report
columns id varchar2(4000) path '@id',
test_number integer path 'testNumber',
total_number_of_tests integer path 'totalNumberOfTests'
)
where id is not null
and test_number is not null
and total_number_of_tests is not null;
ut.expect(l_actual).to_equal(l_expected);
end number_of_starttestevent_nodes;

procedure endtestevent_nodes is
l_actual sys_refcursor;
l_expected sys_refcursor;
begin
open l_actual for
select test_number, total_number_of_tests
from xmltable(
'/report/runEvents/endTestEvent'
passing g_actual_xml_report
columns id varchar2(4000) path '@id',
test_number integer path 'testNumber',
total_number_of_tests integer path 'totalNumberOfTests'
)
where id is not null
and test_number is not null
and total_number_of_tests is not null;
open l_expected for
select level as test_number,
7 as total_number_of_tests
from dual
connect by level <= 7;
ut.expect(l_actual).to_equal(l_expected).unordered;
end endtestevent_nodes;

procedure report_produces_expected_out is
l_results ut3.ut_varchar2_list;
l_actual clob;
l_expected varchar2(32767) := q'[<?xml version="1.0"?>%]';

procedure single_failed_message is
l_actual varchar2(32767);
l_expected varchar2(80) := '<![CDATA[Actual: 1 (number) was expected to equal: 2 (number) ]]>';
begin
l_actual :=
g_actual_xml_report.extract(
'/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting1.test context.test_2_nok"]/failedExpectations/expectation[1]/message/text()'
).getstringval();
ut.expect(l_actual).to_equal(l_expected);
end single_failed_message;

procedure multiple_failed_messages is
l_actual integer;
l_expected integer := 2;
begin
select count(*)
into l_actual
from xmltable(
'/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting2.test_4_nok"]/failedExpectations/expectation'
passing g_actual_xml_report
columns message clob path 'message',
caller clob path 'caller'
)
where message is not null
and caller is not null;
ut.expect(l_actual).to_equal(l_expected);
end multiple_failed_messages;

procedure serveroutput_of_test is
l_actual clob;
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
select *
bulk collect into l_results
from table(ut3.ut.run('ut3_tester:realtime_reporting', ut3.ut_realtime_reporter()));
l_actual := ut3.ut_utils.table_to_clob(l_results);
ut.expect(l_actual).to_be_like(l_expected);
end;
l_actual :=
g_actual_xml_report.extract(
'/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting3.test_7_with_serveroutput"]/serverOutput/text()'
).getclobval();
ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[before test 7');
ut3.ut_utils.append_to_list(l_expected_list, 'after test 7');
ut3.ut_utils.append_to_list(l_expected_list, ']]>');
l_expected := ut3.ut_utils.table_to_clob(l_expected_list);
ut.expect(l_actual).to_equal(l_expected);
end serveroutput_of_test;

procedure serveroutput_of_testsuite is
l_actual clob;
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
l_actual :=
g_actual_xml_report.extract(
'/report/runEvents/endSuiteEvent[@id="realtime_reporting.check_realtime_reporting3"]/serverOutput/text()'
).getclobval();
ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[Now, a no_data_found exception is raised');
ut3.ut_utils.append_to_list(l_expected_list, 'dbms_output and error stack is reported for this suite.');
ut3.ut_utils.append_to_list(l_expected_list, 'A runtime error in afterall is counted as a warning.');
ut3.ut_utils.append_to_list(l_expected_list, ']]>');
l_expected := ut3.ut_utils.table_to_clob(l_expected_list);
ut.expect(l_actual).to_equal(l_expected);
end serveroutput_of_testsuite;

procedure error_stack_of_test is
l_actual clob;
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
l_actual :=
g_actual_xml_report.extract(
'/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting3.test_6_with_runtime_error"]/errorStack/text()'
).getclobval();
ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[ORA-00942: table or view does not exist');
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 5');
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 5');
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at line 6]]>');
l_expected := ut3.ut_utils.table_to_clob(l_expected_list);
ut.expect(l_actual).to_equal(l_expected);
end error_stack_of_test;

procedure error_stack_of_testsuite is
l_actual clob;
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
l_actual :=
g_actual_xml_report.extract(
'/report/runEvents/endSuiteEvent[@id="realtime_reporting.check_realtime_reporting3"]/errorStack/text()'
).getclobval();
ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[ORA-01403: no data found');
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 21');
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 21');
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at line 6]]>');
l_expected := ut3.ut_utils.table_to_clob(l_expected_list);
ut.expect(l_actual).to_equal(l_expected);
end error_stack_of_testsuite;

procedure get_description is
l_reporter ut3.ut_realtime_reporter;
l_actual varchar2(4000);
l_expected varchar2(80) := '%SQL Developer%';
begin
l_reporter := ut3.ut_realtime_reporter();
l_actual := l_reporter.get_description();
ut.expect(l_actual).to_be_like(l_expected);
end get_description;

procedure remove_test_suites is
pragma autonomous_transaction;
begin
begin/*
execute immediate 'drop package ut3_tester.check_realtime_reporting1';
execute immediate 'drop package ut3_tester.check_realtime_reporting2';
end;
execute immediate 'drop package ut3_tester.check_realtime_reporting3';
*/ null;
end remove_test_suites;

end;
end test_realtime_reporter;
/
42 changes: 38 additions & 4 deletions test/core/reporters/test_realtime_reporter.pks
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,46 @@ create or replace package test_realtime_reporter as
--%suitepath(utplsql.core.reporters)

--%beforeall
procedure create_test_suites;
procedure create_test_suites_and_run;

--%test(Report produces expected output)
procedure report_produces_expected_out;
--%test(Check XML report structure)
procedure xml_report_structure;

--%test(Check total number of tests)
procedure total_number_of_tests;

--%test(Check escaped characters in test suite description)
procedure escaped_characters;

--%test(Check number of startTestEvent nodes)
procedure number_of_starttestevent_nodes;

--%test(Check testNumber and totalNumberOfTests in endTestEvent nodes)
procedure endtestevent_nodes;

--%test(Check expectation message for a failed test)
procedure single_failed_message;

--%test(Check existence of multiple expectation messages for a failed test)
procedure multiple_failed_messages;

--%test(Check for serveroutput of test)
procedure serveroutput_of_test;

--%test(Check for serveroutput of testsuite)
procedure serveroutput_of_testsuite;

--%test(Check for error stack of test)
procedure error_stack_of_test;

--%test(Check for error stack of testsuite)
procedure error_stack_of_testsuite;

--%test(Check description of reporter)
procedure get_description;

--%afterall
procedure remove_test_suites;
end;

end test_realtime_reporter;
/