From 957e5c95bc25104cc46cc39e783c6ad498c0c1ab Mon Sep 17 00:00:00 2001 From: Philipp Salvisberg Date: Mon, 31 Dec 2018 01:59:37 +0100 Subject: [PATCH] produce 1 row per event document using new output buffer --- source/reporters/ut_realtime_reporter.tpb | 27 +++-- source/reporters/ut_realtime_reporter.tps | 3 +- .../core/reporters/test_realtime_reporter.pkb | 106 ++++++++---------- 3 files changed, 62 insertions(+), 74 deletions(-) diff --git a/source/reporters/ut_realtime_reporter.tpb b/source/reporters/ut_realtime_reporter.tpb index 0e0b212fc..5d6d3eca5 100644 --- a/source/reporters/ut_realtime_reporter.tpb +++ b/source/reporters/ut_realtime_reporter.tpb @@ -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( @@ -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( @@ -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( @@ -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( @@ -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( @@ -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 @@ -214,10 +214,6 @@ create or replace type body ut_realtime_reporter is ) is begin self.print_xml_fragment('', -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( @@ -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; diff --git a/source/reporters/ut_realtime_reporter.tps b/source/reporters/ut_realtime_reporter.tps index 5d8b315ec..49305b247 100644 --- a/source/reporters/ut_realtime_reporter.tps +++ b/source/reporters/ut_realtime_reporter.tps @@ -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 diff --git a/test/core/reporters/test_realtime_reporter.pkb b/test/core/reporters/test_realtime_reporter.pkb index bd1df040a..2ecc222dc 100644 --- a/test/core/reporters/test_realtime_reporter.pkb +++ b/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; @@ -102,33 +102,17 @@ create or replace package body test_realtime_reporter as <> declare - l_clob clob; + l_reporter ut3.ut_realtime_reporter := ut3.ut_realtime_reporter(); begin - g_xml_reports.delete; - <> - for r in ( - with - base as ( - select sum(case when column_value like ' 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; @@ -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 @@ -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 <A>'; 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; @@ -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 @@ -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 @@ -245,12 +229,12 @@ create or replace package body test_realtime_reporter as l_actual varchar2(32767); l_expected varchar2(80) := ''; 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; @@ -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; @@ -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, '