Skip to content

Commit

Permalink
produce 1 row per event document using new output buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
PhilippSalvisberg committed Dec 31, 2018
1 parent fb96511 commit 957e5c9
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 74 deletions.
27 changes: 15 additions & 12 deletions source/reporters/ut_realtime_reporter.tpb
Expand Up @@ -78,7 +78,7 @@ create or replace type body ut_realtime_reporter is
self.print_end_node('suites');
self.print_node('totalNumberOfTests', to_char(total_number_of_tests));
self.print_end_node('event');
self.flush_print_buffer();
self.flush_print_buffer('pre-run');
end before_calling_run;

overriding member procedure after_calling_run(
Expand All @@ -89,7 +89,7 @@ create or replace type body ut_realtime_reporter is
self.print_xml_fragment(xml_header);
self.print_start_node('event', 'type', 'post-run');
self.print_end_node('event');
self.flush_print_buffer();
self.flush_print_buffer('post-run');
end after_calling_run;

overriding member procedure before_calling_suite(
Expand All @@ -102,7 +102,7 @@ create or replace type body ut_realtime_reporter is
self.print_start_node('suite', 'id', a_suite.path);
self.print_end_node('suite');
self.print_end_node('event');
self.flush_print_buffer();
self.flush_print_buffer('pre-suite');
end before_calling_suite;

overriding member procedure after_calling_suite(
Expand All @@ -127,7 +127,7 @@ create or replace type body ut_realtime_reporter is
self.print_cdata_node('serverOutput', a_suite.get_serveroutputs());
self.print_end_node('suite');
self.print_end_node('event');
self.flush_print_buffer();
self.flush_print_buffer('post-suite');
end after_calling_suite;

overriding member procedure before_calling_test(
Expand All @@ -143,7 +143,7 @@ create or replace type body ut_realtime_reporter is
self.print_node('totalNumberOfTests', to_char(total_number_of_tests));
self.print_end_node('test');
self.print_end_node('event');
self.flush_print_buffer();
self.flush_print_buffer('pre-test');
end before_calling_test;

overriding member procedure after_calling_test(
Expand Down Expand Up @@ -182,7 +182,7 @@ create or replace type body ut_realtime_reporter is
end if;
self.print_end_node('test');
self.print_end_node('event');
self.flush_print_buffer();
self.flush_print_buffer('post-test');
end after_calling_test;

overriding member function get_description return varchar2 is
Expand Down Expand Up @@ -214,10 +214,6 @@ create or replace type body ut_realtime_reporter is
) is
begin
self.print_xml_fragment('</' || a_name || '>', -1);
if a_name = 'event' then
-- force new line to make complete event a.s.a.p. visible in consuming session
self.print_xml_fragment(' ');
end if;
end print_end_node;

member procedure print_node(
Expand Down Expand Up @@ -255,10 +251,17 @@ create or replace type body ut_realtime_reporter is
end print_xml_fragment;

member procedure flush_print_buffer(
self in out nocopy ut_realtime_reporter
self in out nocopy ut_realtime_reporter,
a_item_type in varchar2
) is
l_doc clob;
l_rows integer := print_buffer.count;
begin
self.print_text_lines(print_buffer);
for i in 1 .. l_rows loop
ut_utils.append_to_clob(l_doc, print_buffer(i));
ut_utils.append_to_clob(l_doc, chr(10));
end loop;
self.print_clob(l_doc, a_item_type);
print_buffer.delete;
end flush_print_buffer;

Expand Down
3 changes: 2 additions & 1 deletion source/reporters/ut_realtime_reporter.tps
Expand Up @@ -155,7 +155,8 @@ create or replace type ut_realtime_reporter force under ut_output_reporter_base(
* Flushes the local print buffer to the output buffer.
*/
member procedure flush_print_buffer(
self in out nocopy ut_realtime_reporter
self in out nocopy ut_realtime_reporter,
a_item_type in varchar2
)
)
not final
Expand Down
106 changes: 45 additions & 61 deletions test/core/reporters/test_realtime_reporter.pkb
@@ -1,6 +1,6 @@
create or replace package body test_realtime_reporter as

g_xml_reports test_xmltype_list := test_xmltype_list();
g_xml_reports test_event_list := test_event_list();

procedure create_test_suites_and_run is
pragma autonomous_transaction;
Expand Down Expand Up @@ -102,33 +102,17 @@ create or replace package body test_realtime_reporter as

<<run_report_and_cache_result>>
declare
l_clob clob;
l_reporter ut3.ut_realtime_reporter := ut3.ut_realtime_reporter();
begin
g_xml_reports.delete;
<<report_lines>>
for r in (
with
base as (
select sum(case when column_value like '<?xml%' then 1 else 0 end) over(order by rownum) group_no,
rownum as rn,
column_value as line
from table(ut3.ut.run('ut3_tester:realtime_reporting', ut3.ut_realtime_reporter()))
)
select group_no,
lead(group_no, 1, -1) over (order by rn) as next_group_no,
rn,
line
from base
order by rn
) loop
ut3.ut_utils.append_to_clob(l_clob, r.line);
ut3.ut_utils.append_to_clob(l_clob, chr(10));
if r.group_no != r.next_group_no then
g_xml_reports.extend;
g_xml_reports(g_xml_reports.count) := xmltype(l_clob);
l_clob := null;
end if;
end loop report_lines;
-- produce
ut3.ut_runner.run(
a_paths => ut3.ut_varchar2_list(':realtime_reporting'),
a_reporters => ut3.ut_reporters(l_reporter)
);
-- consume
select test_event_object(item_type, xmltype(text))
bulk collect into g_xml_reports
from table(ut3.ut_output_table_buffer(l_reporter.output_buffer.output_id).get_lines());
end run_report_and_cache_result;
end create_test_suites_and_run;

Expand All @@ -137,8 +121,8 @@ create or replace package body test_realtime_reporter as
l_expected sys_refcursor;
begin
open l_actual for
select t.column_value.extract('/event/@type').getstringval() as event_type,
t.column_value.extract('/event/suite/@id|/event/test/@id').getstringval() as item_id
select t.event_doc.extract('/event/@type').getstringval() as event_type,
t.event_doc.extract('/event/suite/@id|/event/test/@id').getstringval() as item_id
from table(g_xml_reports) t;
open l_expected for
select 'pre-run' as event_type, null as item_id from dual union all
Expand Down Expand Up @@ -174,22 +158,22 @@ create or replace package body test_realtime_reporter as
l_actual integer;
l_expected integer := 7;
begin
select t.column_value.extract('/event/totalNumberOfTests/text()').getnumberval()
select t.event_doc.extract('/event/totalNumberOfTests/text()').getnumberval()
into l_actual
from table(g_xml_reports) t
where t.column_value.extract('/event/@type').getstringval() = 'pre-run';
where t.event_type = 'pre-run';
end total_number_of_tests;

procedure escaped_characters is
l_actual varchar2(32767);
l_expected varchar2(20) := 'suite &lt;A&gt;';
begin
select t.column_value.extract(
select t.event_doc.extract(
'//suite[@id="realtime_reporting.check_realtime_reporting1"]/description/text()'
).getstringval()
into l_actual
from table(g_xml_reports) t
where t.column_value.extract('/event/@type').getstringval() = 'pre-run';
where t.event_type = 'pre-run';
ut.expect(l_actual).to_equal(l_expected);
end escaped_characters;

Expand All @@ -198,13 +182,13 @@ create or replace package body test_realtime_reporter as
l_expected sys_refcursor;
begin
open l_actual for
select t.column_value.extract('//test/testNumber/text()')
select t.event_doc.extract('//test/testNumber/text()')
.getnumberval() as test_number,
t.column_value.extract('//test/totalNumberOfTests/text()')
t.event_doc.extract('//test/totalNumberOfTests/text()')
.getnumberval() as total_number_of_tests
from table(g_xml_reports) t
where t.column_value.extract('/event/@type').getstringval() = 'pre-test'
and t.column_value.extract('//test/@id').getstringval() is not null;
where t.event_type = 'pre-test'
and t.event_doc.extract('//test/@id').getstringval() is not null;
open l_expected for
select level as test_number,
7 as total_number_of_tests
Expand All @@ -218,21 +202,21 @@ create or replace package body test_realtime_reporter as
l_expected sys_refcursor;
begin
open l_actual for
select t.column_value.extract('//test/testNumber/text()')
select t.event_doc.extract('//test/testNumber/text()')
.getnumberval() as test_number,
t.column_value.extract('//test/totalNumberOfTests/text()')
t.event_doc.extract('//test/totalNumberOfTests/text()')
.getnumberval() as total_number_of_tests
from table(g_xml_reports) t
where t.column_value.extract('/event/@type').getstringval() = 'post-test'
and t.column_value.extract('//test/@id').getstringval() is not null
and t.column_value.extract('//test/startTime/text()').getstringval() is not null
and t.column_value.extract('//test/endTime/text()').getstringval() is not null
and t.column_value.extract('//test/executionTime/text()').getnumberval() is not null
and t.column_value.extract('//test/counter/disabled/text()').getnumberval() is not null
and t.column_value.extract('//test/counter/success/text()').getnumberval() is not null
and t.column_value.extract('//test/counter/failure/text()').getnumberval() is not null
and t.column_value.extract('//test/counter/error/text()').getnumberval() is not null
and t.column_value.extract('//test/counter/warning/text()').getnumberval() is not null;
where t.event_type = 'post-test'
and t.event_doc.extract('//test/@id').getstringval() is not null
and t.event_doc.extract('//test/startTime/text()').getstringval() is not null
and t.event_doc.extract('//test/endTime/text()').getstringval() is not null
and t.event_doc.extract('//test/executionTime/text()').getnumberval() is not null
and t.event_doc.extract('//test/counter/disabled/text()').getnumberval() is not null
and t.event_doc.extract('//test/counter/success/text()').getnumberval() is not null
and t.event_doc.extract('//test/counter/failure/text()').getnumberval() is not null
and t.event_doc.extract('//test/counter/error/text()').getnumberval() is not null
and t.event_doc.extract('//test/counter/warning/text()').getnumberval() is not null;
open l_expected for
select level as test_number,
7 as total_number_of_tests
Expand All @@ -245,12 +229,12 @@ create or replace package body test_realtime_reporter as
l_actual varchar2(32767);
l_expected varchar2(80) := '<![CDATA[Actual: 1 (number) was expected to equal: 2 (number) ]]>';
begin
select t.column_value.extract(
select t.event_doc.extract(
'/event/test/failedExpectations/expectation[1]/message/text()'
).getstringval()
into l_actual
from table(g_xml_reports) t
where t.column_value.extract('/event[@type="post-test"]/test/@id').getstringval()
where t.event_doc.extract('/event[@type="post-test"]/test/@id').getstringval()
= 'realtime_reporting.check_realtime_reporting1.test context.test_2_nok';
ut.expect(l_actual).to_equal(l_expected);
end single_failed_message;
Expand All @@ -264,11 +248,11 @@ create or replace package body test_realtime_reporter as
from table(g_xml_reports) t,
xmltable(
'/event/test/failedExpectations/expectation'
passing t.column_value
passing t.event_doc
columns message clob path 'message',
caller clob path 'caller'
) x
where t.column_value.extract('/event[@type="post-test"]/test/@id').getstringval()
where t.event_doc.extract('/event[@type="post-test"]/test/@id').getstringval()
= 'realtime_reporting.check_realtime_reporting2.test_4_nok'
and x.message is not null
and x.caller is not null;
Expand All @@ -280,10 +264,10 @@ create or replace package body test_realtime_reporter as
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
select t.column_value.extract('//event/test/serverOutput/text()').getstringval()
select t.event_doc.extract('//event/test/serverOutput/text()').getstringval()
into l_actual
from table(g_xml_reports) t
where t.column_value.extract('/event[@type="post-test"]/test/@id').getstringval()
where t.event_doc.extract('/event[@type="post-test"]/test/@id').getstringval()
= 'realtime_reporting.check_realtime_reporting3.test_7_with_serveroutput';
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');
Expand All @@ -297,10 +281,10 @@ create or replace package body test_realtime_reporter as
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
select t.column_value.extract('//event/suite/serverOutput/text()').getstringval()
select t.event_doc.extract('//event/suite/serverOutput/text()').getstringval()
into l_actual
from table(g_xml_reports) t
where t.column_value.extract('/event[@type="post-suite"]/suite/@id').getstringval()
where t.event_doc.extract('/event[@type="post-suite"]/suite/@id').getstringval()
= 'realtime_reporting.check_realtime_reporting3';
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.');
Expand All @@ -315,10 +299,10 @@ create or replace package body test_realtime_reporter as
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
select t.column_value.extract('//event/test/errorStack/text()').getstringval()
select t.event_doc.extract('//event/test/errorStack/text()').getstringval()
into l_actual
from table(g_xml_reports) t
where t.column_value.extract('/event[@type="post-test"]/test/@id').getstringval()
where t.event_doc.extract('/event[@type="post-test"]/test/@id').getstringval()
= 'realtime_reporting.check_realtime_reporting3.test_6_with_runtime_error';
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 "%.CHECK_REALTIME_REPORTING3", line 5');
Expand All @@ -332,10 +316,10 @@ create or replace package body test_realtime_reporter as
l_expected_list ut3.ut_varchar2_list;
l_expected clob;
begin
select t.column_value.extract('//event/suite/errorStack/text()').getstringval()
select t.event_doc.extract('//event/suite/errorStack/text()').getstringval()
into l_actual
from table(g_xml_reports) t
where t.column_value.extract('/event[@type="post-suite"]/suite/@id').getstringval()
where t.event_doc.extract('/event[@type="post-suite"]/suite/@id').getstringval()
= 'realtime_reporting.check_realtime_reporting3';
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 "%.CHECK_REALTIME_REPORTING3", line 21');
Expand Down

0 comments on commit 957e5c9

Please sign in to comment.