From 0af108dc022272ac67f57deebff7a42dba766082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20G=C4=99bal?= Date: Thu, 23 May 2019 08:58:31 +0100 Subject: [PATCH 1/6] Failure details in sonar test reporter are now CDATA --- source/reporters/ut_sonar_test_reporter.tpb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/reporters/ut_sonar_test_reporter.tpb b/source/reporters/ut_sonar_test_reporter.tpb index 1da349d83..01ad0538c 100644 --- a/source/reporters/ut_sonar_test_reporter.tpb +++ b/source/reporters/ut_sonar_test_reporter.tpb @@ -57,12 +57,11 @@ create or replace type body ut_sonar_test_reporter is ut_utils.append_to_list( l_results, ''); elsif a_test.result > ut_utils.gc_success then ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, ''); ut_utils.append_to_list( l_results, ''); end if; ut_utils.append_to_list( l_results, ''); From 02b89bd74524ecebb5705b590b8cdd6496a4ea1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20G=C4=99bal?= Date: Thu, 23 May 2019 12:59:01 +0100 Subject: [PATCH 2/6] Update ut_junit_reporter.tpb --- source/reporters/ut_junit_reporter.tpb | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/reporters/ut_junit_reporter.tpb b/source/reporters/ut_junit_reporter.tpb index bc88aa8af..604bc420a 100644 --- a/source/reporters/ut_junit_reporter.tpb +++ b/source/reporters/ut_junit_reporter.tpb @@ -57,15 +57,11 @@ create or replace type body ut_junit_reporter is ut_utils.append_to_list( l_results, ''); elsif a_test.result > ut_utils.gc_success then ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, c_cddata_tag_start); for i in 1 .. a_test.failed_expectations.count loop - - l_lines := a_test.failed_expectations(i).get_result_lines(); - - for j in 1 .. l_lines.count loop - ut_utils.append_to_list( l_results, dbms_xmlgen.convert(l_lines(j)) ); - end loop; - ut_utils.append_to_list( l_results, dbms_xmlgen.convert(a_test.failed_expectations(i).caller_info) ); + ut_utils.append_to_list( l_results, ut_utils.table_to_clob(a_test.failed_expectations(i).get_result_lines())); end loop; + ut_utils.append_to_list( l_results, c_cddata_tag_end); ut_utils.append_to_list( l_results, ''); end if; -- TODO - decide if we need/want to use the tag too From bee9c22818d48766139f562f7065698fd911bcf4 Mon Sep 17 00:00:00 2001 From: Jacek Gebal Date: Fri, 24 May 2019 00:55:27 +0100 Subject: [PATCH 3/6] Added handling of CDATA in failure messages for XML reporters. --- source/reporters/ut_junit_reporter.tpb | 40 ++++++++++-------- source/reporters/ut_sonar_test_reporter.tpb | 22 ++++++---- source/reporters/ut_tfs_junit_reporter.tpb | 22 ++++++---- test/ut3_user/reporters.pkb | 40 +++++++++++++++++- test/ut3_user/reporters.pks | 4 ++ .../reporters/test_documentation_reporter.pkb | 2 +- .../reporters/test_junit_reporter.pkb | 39 +---------------- .../reporters/test_junit_reporter.pks | 3 -- .../reporters/test_sonar_test_reporter.pkb | 5 +++ .../reporters/test_sonar_test_reporter.pks | 3 ++ .../reporters/test_tfs_junit_reporter.pkb | 42 +------------------ .../reporters/test_tfs_junit_reporter.pks | 3 -- 12 files changed, 105 insertions(+), 120 deletions(-) diff --git a/source/reporters/ut_junit_reporter.tpb b/source/reporters/ut_junit_reporter.tpb index 604bc420a..8b619ccc7 100644 --- a/source/reporters/ut_junit_reporter.tpb +++ b/source/reporters/ut_junit_reporter.tpb @@ -23,8 +23,9 @@ create or replace type body ut_junit_reporter is end; overriding member procedure after_calling_run(self in out nocopy ut_junit_reporter, a_run in ut_run) is - c_cddata_tag_start constant varchar2(30) := ''; + c_cdata_start_tag constant varchar2(30) := ''; + c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; l_suite_id integer := 0; l_tests_count integer := a_run.results_count.disabled_count + a_run.results_count.success_count + a_run.results_count.failure_count + a_run.results_count.errored_count; @@ -37,7 +38,7 @@ create or replace type body ut_junit_reporter is procedure print_test_elements(a_test ut_test) is l_results ut_varchar2_rows := ut_varchar2_rows(); l_lines ut_varchar2_list; - l_output clob; + l_output clob; begin ut_utils.append_to_list( l_results, @@ -51,26 +52,31 @@ create or replace type body ut_junit_reporter is end if; if a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cddata_tag_start); + ut_utils.append_to_list( l_results, c_cdata_start_tag); ut_utils.append_to_list( l_results, ut_utils.convert_collection(a_test.get_error_stack_traces()) ); - ut_utils.append_to_list( l_results, c_cddata_tag_end); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); elsif a_test.result > ut_utils.gc_success then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cddata_tag_start); + ut_utils.append_to_list( l_results, c_cdata_start_tag); for i in 1 .. a_test.failed_expectations.count loop - ut_utils.append_to_list( l_results, ut_utils.table_to_clob(a_test.failed_expectations(i).get_result_lines())); + l_lines := a_test.failed_expectations(i).get_result_lines(); + for j in 1 .. l_lines.count loop + --Encapsulate nested CDATA in results + ut_utils.append_to_list( l_results, replace( l_lines(j), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); + end loop; + ut_utils.append_to_list( l_results, replace( a_test.failed_expectations(i).caller_info, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); end loop; - ut_utils.append_to_list( l_results, c_cddata_tag_end); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); end if; -- TODO - decide if we need/want to use the tag too l_output := a_test.get_serveroutputs(); if l_output is not null then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cddata_tag_start); - ut_utils.append_to_list( l_results, l_output); - ut_utils.append_to_list( l_results, c_cddata_tag_end ); + ut_utils.append_to_list( l_results, c_cdata_start_tag); + ut_utils.append_to_list( l_results, replace( l_output, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); + ut_utils.append_to_list( l_results, c_cdata_end_tag ); ut_utils.append_to_list( l_results, '' ); else ut_utils.append_to_list( l_results, ''); @@ -115,9 +121,9 @@ create or replace type body ut_junit_reporter is l_data := l_suite.get_serveroutputs(); if l_data is not null and l_data != empty_clob() then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cddata_tag_start); - ut_utils.append_to_list( l_results, l_data); - ut_utils.append_to_list( l_results, c_cddata_tag_end); + ut_utils.append_to_list( l_results, c_cdata_start_tag); + ut_utils.append_to_list( l_results, replace( l_data, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); else ut_utils.append_to_list( l_results, ''); @@ -126,9 +132,9 @@ create or replace type body ut_junit_reporter is l_errors := l_suite.get_error_stack_traces(); if l_errors is not empty then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cddata_tag_start); - ut_utils.append_to_list( l_results, ut_utils.table_to_clob(l_errors)); - ut_utils.append_to_list( l_results, c_cddata_tag_end); + ut_utils.append_to_list( l_results, c_cdata_start_tag); + ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(l_errors), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); else ut_utils.append_to_list( l_results, ''); diff --git a/source/reporters/ut_sonar_test_reporter.tpb b/source/reporters/ut_sonar_test_reporter.tpb index 01ad0538c..de4699058 100644 --- a/source/reporters/ut_sonar_test_reporter.tpb +++ b/source/reporters/ut_sonar_test_reporter.tpb @@ -43,25 +43,33 @@ create or replace type body ut_sonar_test_reporter is end; procedure print_test_results(a_test ut_test) is - l_results ut_varchar2_rows := ut_varchar2_rows(); - l_lines ut_varchar2_list; + c_cdata_start_tag constant varchar2(30) := ''; + c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; + l_results ut_varchar2_rows := ut_varchar2_rows(); + l_lines ut_varchar2_list; begin ut_utils.append_to_list( l_results, ''); if a_test.result = ut_utils.gc_disabled then ut_utils.append_to_list( l_results, ''); elsif a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); elsif a_test.result > ut_utils.gc_success then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); end if; ut_utils.append_to_list( l_results, ''); diff --git a/source/reporters/ut_tfs_junit_reporter.tpb b/source/reporters/ut_tfs_junit_reporter.tpb index 5f3770b23..814cb7230 100644 --- a/source/reporters/ut_tfs_junit_reporter.tpb +++ b/source/reporters/ut_tfs_junit_reporter.tpb @@ -28,6 +28,9 @@ create or replace type body ut_tfs_junit_reporter is end; member procedure junit_version_one(self in out nocopy ut_tfs_junit_reporter,a_run in ut_run) is + c_cdata_start_tag constant varchar2(30) := ''; + c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; l_suite_id integer := 0; l_tests_count integer := a_run.results_count.disabled_count + a_run.results_count.success_count + a_run.results_count.failure_count + a_run.results_count.errored_count; @@ -69,20 +72,23 @@ create or replace type body ut_tfs_junit_reporter is if a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); -- Do not count error as failure elsif a_test.result = ut_utils.gc_failure then ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, c_cdata_start_tag); for i in 1 .. a_test.failed_expectations.count loop l_lines := a_test.failed_expectations(i).get_result_lines(); for j in 1 .. l_lines.count loop - ut_utils.append_to_list( l_results, dbms_xmlgen.convert(l_lines(j))); + --Encapsulate nested CDATA in results + ut_utils.append_to_list( l_results, replace( l_lines(j), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); end loop; - ut_utils.append_to_list( l_results, dbms_xmlgen.convert(a_test.failed_expectations(i).caller_info)); + ut_utils.append_to_list( l_results, replace( a_test.failed_expectations(i).caller_info, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); end loop; + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); end if; @@ -120,9 +126,9 @@ create or replace type body ut_tfs_junit_reporter is l_outputs := l_suite.get_serveroutputs(); if l_outputs is not null and l_outputs != empty_clob() then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); else ut_utils.append_to_list( l_results, ''); @@ -131,9 +137,9 @@ create or replace type body ut_tfs_junit_reporter is l_errors := l_suite.get_error_stack_traces(); if l_errors is not empty then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); else ut_utils.append_to_list( l_results, ''); diff --git a/test/ut3_user/reporters.pkb b/test/ut3_user/reporters.pkb index 364566569..213d7eaa6 100644 --- a/test/ut3_user/reporters.pkb +++ b/test/ut3_user/reporters.pkb @@ -110,8 +110,24 @@ as dbms_output.put_line(''); end; -end;]'; - +end;]'; + + execute immediate q'[create or replace package check_fail_escape is + --%suitepath(core) + --%suite(Check JUNIT XML failure is escaped) + + --%test(Fail Miserably) + procedure fail_miserably; + + end;]'; + + execute immediate q'[create or replace package body check_fail_escape is + procedure fail_miserably is + begin + ut3.ut.expect('test').to_equal(''); + end; + end;]'; + end; procedure reporters_setup is @@ -122,6 +138,7 @@ end;]'; procedure drop_test_helper_package is begin execute immediate 'drop package test_reporters'; + execute immediate 'drop package check_fail_escape'; end; procedure reporters_cleanup is @@ -146,5 +163,24 @@ end;]'; ut.expect(l_actual).to_be_like('%'); end; + procedure check_xml_failure_escaped( + a_reporter ut3.ut_output_reporter_base + ) is + l_results ut3.ut_varchar2_list; + l_actual clob; + begin + --Act + select * + bulk collect into l_results + from table( ut3.ut.run( 'check_fail_escape', a_reporter ) ); + l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); + --Assert + ut.expect(l_actual).to_be_like('%' (varchar2)%]' + ||q'[at "UT3$USER#.CHECK_FAIL_ESCAPE.FAIL_MISERABLY", line % ut3.ut.expect('test').to_equal('');]' + ||'%]]>%' + ); + end; + end reporters; / diff --git a/test/ut3_user/reporters.pks b/test/ut3_user/reporters.pks index cb601cf3b..54800fa4a 100644 --- a/test/ut3_user/reporters.pks +++ b/test/ut3_user/reporters.pks @@ -14,5 +14,9 @@ create or replace package reporters is a_client_character_set varchar2 ); + procedure check_xml_failure_escaped( + a_reporter ut3.ut_output_reporter_base + ); + end reporters; / diff --git a/test/ut3_user/reporters/test_documentation_reporter.pkb b/test/ut3_user/reporters/test_documentation_reporter.pkb index 394594fa4..a1f895947 100644 --- a/test/ut3_user/reporters/test_documentation_reporter.pkb +++ b/test/ut3_user/reporters/test_documentation_reporter.pkb @@ -1 +1 @@ -create or replace package body test_documentation_reporter as procedure report_produces_expected_out is l_results ut3.ut_varchar2_list; l_actual clob; l_expected varchar2(32767):=q'[%org utplsql tests helpers A suite for testing different outcomes from reporters A description of some context passing_test [% sec] a test with failing assertion [% sec] (FAILED - 1) a test raising unhandled exception [% sec] (FAILED - 2) a disabled test [0 sec] (DISABLED) % Failures: % 1) failing_test "Fails as values are different" Actual: 'number [1] ' (varchar2) was expected to equal: 'number [2] ' (varchar2)% at "UT3$USER#.TEST_REPORTERS%", line 36 ut3.ut.expect('number [1] ','Fails as values are different').to_equal('number [2] '); % % 2) erroring_test ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at "UT3$USER#.TEST_REPORTERS", line 44% ORA-06512: at line 6 Finished in % seconds 4 tests, 1 failed, 1 errored, 1 disabled, 0 warning(s)%]'; begin select * bulk collect into l_results from table( ut3.ut.run( 'test_reporters', ut3.ut_documentation_reporter() ) ); l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); ut.expect(l_actual).to_be_like(l_expected); end; procedure check_encoding_included is begin reporters.check_xml_encoding_included(ut3.ut_sonar_test_reporter(), 'UTF-8'); end; end; / \ No newline at end of file +create or replace package body test_documentation_reporter as procedure report_produces_expected_out is l_results ut3.ut_varchar2_list; l_actual clob; l_expected varchar2(32767):=q'[%org utplsql tests helpers A suite for testing different outcomes from reporters A description of some context passing_test [% sec] a test with failing assertion [% sec] (FAILED - 1) a test raising unhandled exception [% sec] (FAILED - 2) a disabled test [0 sec] (DISABLED) % Failures: % 1) failing_test "Fails as values are different" Actual: 'number [1] ' (varchar2) was expected to equal: 'number [2] ' (varchar2)% at "UT3$USER#.TEST_REPORTERS%", line 36 ut3.ut.expect('number [1] ','Fails as values are different').to_equal('number [2] '); % % 2) erroring_test ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at "UT3$USER#.TEST_REPORTERS", line 44% ORA-06512: at line 6 Finished in % seconds 4 tests, 1 failed, 1 errored, 1 disabled, 0 warning(s)%]'; begin select * bulk collect into l_results from table( ut3.ut.run( 'test_reporters', ut3.ut_documentation_reporter() ) ); l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); ut.expect(l_actual).to_be_like(l_expected); end; end; / \ No newline at end of file diff --git a/test/ut3_user/reporters/test_junit_reporter.pkb b/test/ut3_user/reporters/test_junit_reporter.pkb index b86bb698c..e1b790156 100644 --- a/test/ut3_user/reporters/test_junit_reporter.pkb +++ b/test/ut3_user/reporters/test_junit_reporter.pkb @@ -72,23 +72,6 @@ create or replace package body test_junit_reporter as execute immediate q'[create or replace package body Tst_Fix_Case_Sensitive as procedure bUgFiX is begin ut.expect(1).to_equal(1); end; end;]'; - - execute immediate q'[create or replace package check_fail_escape is - --%suitepath(core) - --%suite(checkfailedescape) - --%displayname(Check JUNIT XML failure is escaped) - - --%test(Fail Miserably) - procedure fail_miserably; - - end;]'; - - execute immediate q'[create or replace package body check_fail_escape is - procedure fail_miserably is - begin - ut3.ut.expect('test').to_equal(''); - end; - end;]'; end; @@ -134,19 +117,6 @@ create or replace package body test_junit_reporter as ut.expect(l_actual).to_be_like('%Actual: 1 (number) was expected to equal: 2 (number)%'); end; - procedure reports_failed_line is - l_results ut3.ut_varchar2_list; - l_actual clob; - begin - --Act - select * - bulk collect into l_results - from table(ut3.ut.run('check_junit_reporting',ut3.ut_junit_reporter())); - l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); - --Assert - ut.expect(l_actual).to_be_like('%at "%.CHECK_JUNIT_REPORTING%", line %'); - end; - procedure check_classname_suite is l_results ut3.ut_varchar2_list; l_actual clob; @@ -302,13 +272,7 @@ create or replace package body test_junit_reporter as l_results ut3.ut_varchar2_list; l_actual clob; begin - --Act - select * - bulk collect into l_results - from table(ut3.ut.run('check_fail_escape',ut3.ut_junit_reporter())); - l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); - --Assert - ut.expect(l_actual).to_be_like('%Actual: 'test' (varchar2) was expected to equal: '<![CDATA[some stuff]]>' (varchar2)%'); + reporters.check_xml_failure_escaped(ut3.ut_junit_reporter()); end; procedure check_classname_is_populated is @@ -345,7 +309,6 @@ create or replace package body test_junit_reporter as execute immediate 'drop package check_junit_rep_suitepath'; execute immediate 'drop package tst_package_junit_nodesc'; execute immediate 'drop package tst_package_junit_nosuite'; - execute immediate 'drop package check_fail_escape'; execute immediate 'drop package Tst_Fix_Case_Sensitive'; end; diff --git a/test/ut3_user/reporters/test_junit_reporter.pks b/test/ut3_user/reporters/test_junit_reporter.pks index 8af2ba430..71443c180 100644 --- a/test/ut3_user/reporters/test_junit_reporter.pks +++ b/test/ut3_user/reporters/test_junit_reporter.pks @@ -15,9 +15,6 @@ create or replace package test_junit_reporter as --%test(Xunit Backward Compatibility - Reports only failed expectations and exceptions) procedure reports_xunit_only_fail_or_err; - --%test(Reports failed line of test) - procedure reports_failed_line; - --%test(Check that classname is returned correct suite) procedure check_classname_suite; diff --git a/test/ut3_user/reporters/test_sonar_test_reporter.pkb b/test/ut3_user/reporters/test_sonar_test_reporter.pkb index 76cec84c8..357eff0a2 100644 --- a/test/ut3_user/reporters/test_sonar_test_reporter.pkb +++ b/test/ut3_user/reporters/test_sonar_test_reporter.pkb @@ -32,5 +32,10 @@ create or replace package body test_sonar_test_reporter as reporters.check_xml_encoding_included(ut3.ut_sonar_test_reporter(), 'UTF-8'); end; + procedure check_failure_escaped is + begin + reporters.check_xml_failure_escaped(ut3.ut_sonar_test_reporter()); + end; + end; / diff --git a/test/ut3_user/reporters/test_sonar_test_reporter.pks b/test/ut3_user/reporters/test_sonar_test_reporter.pks index 0c2fdf70a..ade449dba 100644 --- a/test/ut3_user/reporters/test_sonar_test_reporter.pks +++ b/test/ut3_user/reporters/test_sonar_test_reporter.pks @@ -9,5 +9,8 @@ create or replace package test_sonar_test_reporter as --%test(Includes XML header with encoding when encoding provided) procedure check_encoding_included; + --%test( Validate that fail with special char are escaped ) + procedure check_failure_escaped; + end; / diff --git a/test/ut3_user/reporters/test_tfs_junit_reporter.pkb b/test/ut3_user/reporters/test_tfs_junit_reporter.pkb index 623dda51e..196a2ec08 100644 --- a/test/ut3_user/reporters/test_tfs_junit_reporter.pkb +++ b/test/ut3_user/reporters/test_tfs_junit_reporter.pkb @@ -48,25 +48,7 @@ create or replace package body test_tfs_junit_reporter as null; end; end;]'; - - execute immediate q'[create or replace package check_fail_escape is - --%suitepath(core) - --%suite(checkfailedescape) - --%displayname(Check JUNIT XML failure is escaped) - - --%test(Fail Miserably) - procedure fail_miserably; - - end;]'; - - execute immediate q'[create or replace package body check_fail_escape is - procedure fail_miserably is - begin - ut3.ut.expect('test').to_equal(''); - end; - end;]'; - end; @@ -98,19 +80,6 @@ create or replace package body test_tfs_junit_reporter as ut.expect(l_actual).to_be_like('%Actual: 1 (number) was expected to equal: 2 (number)%'); end; - procedure reports_failed_line is - l_results ut3.ut_varchar2_list; - l_actual clob; - begin - --Act - select * - bulk collect into l_results - from table(ut3.ut.run('check_junit_reporting',ut3.ut_tfs_junit_reporter())); - l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); - --Assert - ut.expect(l_actual).to_be_like('%at "%.CHECK_JUNIT_REPORTING%", line %'); - end; - procedure check_classname_suite is l_results ut3.ut_varchar2_list; l_actual clob; @@ -165,16 +134,8 @@ create or replace package body test_tfs_junit_reporter as end; procedure check_failure_escaped is - l_results ut3.ut_varchar2_list; - l_actual clob; begin - --Act - select * - bulk collect into l_results - from table(ut3.ut.run('check_fail_escape',ut3.ut_tfs_junit_reporter())); - l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); - --Assert - ut.expect(l_actual).to_be_like('%Actual: 'test' (varchar2) was expected to equal: '<![CDATA[some stuff]]>' (varchar2)%'); + reporters.check_xml_failure_escaped(ut3.ut_tfs_junit_reporter()); end; procedure check_classname_suitepath is @@ -195,7 +156,6 @@ create or replace package body test_tfs_junit_reporter as execute immediate 'drop package check_junit_reporting'; execute immediate 'drop package check_junit_rep_suitepath'; execute immediate 'drop package check_junit_flat_suitepath'; - execute immediate 'drop package check_fail_escape'; end; procedure check_encoding_included is diff --git a/test/ut3_user/reporters/test_tfs_junit_reporter.pks b/test/ut3_user/reporters/test_tfs_junit_reporter.pks index af6227283..07acb4d21 100644 --- a/test/ut3_user/reporters/test_tfs_junit_reporter.pks +++ b/test/ut3_user/reporters/test_tfs_junit_reporter.pks @@ -12,9 +12,6 @@ create or replace package test_tfs_junit_reporter as --%test(Reports only failed expectations and exceptions) procedure reports_only_failed_or_errored; - --%test(Reports failed line of test) - procedure reports_failed_line; - --%test(Check that classname is returned correct suite) procedure check_classname_suite; From d2fd0f2f8dedad2f1ddc9a56d3b90c06a036223f Mon Sep 17 00:00:00 2001 From: Jacek Gebal Date: Sat, 25 May 2019 19:44:26 +0100 Subject: [PATCH 4/6] Fixing unit test for Oracle 11.2 & 12.1 --- test/ut3_user/reporters.pkb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ut3_user/reporters.pkb b/test/ut3_user/reporters.pkb index 213d7eaa6..d6a104242 100644 --- a/test/ut3_user/reporters.pkb +++ b/test/ut3_user/reporters.pkb @@ -177,7 +177,7 @@ end;]'; --Assert ut.expect(l_actual).to_be_like('%' (varchar2)%]' - ||q'[at "UT3$USER#.CHECK_FAIL_ESCAPE.FAIL_MISERABLY", line % ut3.ut.expect('test').to_equal('');]' + ||q'[at "UT3$USER#.CHECK_FAIL_ESCAPE%", line % ut3.ut.expect('test').to_equal('');]' ||'%]]>%' ); end; From 21a812d0985c6793eb2669091f915e49e8fcf0eb Mon Sep 17 00:00:00 2001 From: Jacek Gebal Date: Sat, 25 May 2019 20:29:43 +0100 Subject: [PATCH 5/6] Fixing code duplication --- source/core/types/ut_test.tpb | 21 +++++++++++++++++++++ source/core/types/ut_test.tps | 3 ++- source/reporters/ut_junit_reporter.tpb | 13 ++----------- source/reporters/ut_sonar_test_reporter.tpb | 14 ++------------ source/reporters/ut_tfs_junit_reporter.tpb | 18 ++++-------------- 5 files changed, 31 insertions(+), 38 deletions(-) diff --git a/source/core/types/ut_test.tpb b/source/core/types/ut_test.tpb index 14620b24b..698f179ff 100644 --- a/source/core/types/ut_test.tpb +++ b/source/core/types/ut_test.tpb @@ -162,5 +162,26 @@ create or replace type body ut_test as end loop; return l_outputs; end; + + member function get_failed_expectations_cdata return ut_varchar2_rows is + c_cdata_start_tag constant varchar2(30) := ''; + c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; + l_results ut_varchar2_rows; + l_lines ut_varchar2_list; + begin + ut_utils.append_to_list( l_results, c_cdata_start_tag); + for i in 1 .. self.failed_expectations.count loop + l_lines := self.failed_expectations(i).get_result_lines(); + for j in 1 .. l_lines.count loop + --Encapsulate nested CDATA in results + ut_utils.append_to_list( l_results, replace( l_lines(j), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); + end loop; + ut_utils.append_to_list( l_results, replace( self.failed_expectations(i).caller_info, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); + end loop; + ut_utils.append_to_list( l_results, c_cdata_end_tag); + return l_results; + end; + end; / diff --git a/source/core/types/ut_test.tps b/source/core/types/ut_test.tps index 752ef3ef7..dfe7a7e0f 100644 --- a/source/core/types/ut_test.tps +++ b/source/core/types/ut_test.tps @@ -64,6 +64,7 @@ create or replace type ut_test under ut_suite_item ( overriding member procedure calc_execution_result(self in out nocopy ut_test), overriding member procedure mark_as_errored(self in out nocopy ut_test, a_error_stack_trace varchar2), overriding member function get_error_stack_traces(self ut_test) return ut_varchar2_list, - overriding member function get_serveroutputs return clob + overriding member function get_serveroutputs return clob, + member function get_failed_expectations_cdata return ut_varchar2_rows ) / diff --git a/source/reporters/ut_junit_reporter.tpb b/source/reporters/ut_junit_reporter.tpb index 8b619ccc7..11996b433 100644 --- a/source/reporters/ut_junit_reporter.tpb +++ b/source/reporters/ut_junit_reporter.tpb @@ -53,21 +53,12 @@ create or replace type body ut_junit_reporter is if a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, ut_utils.convert_collection(a_test.get_error_stack_traces()) ); + ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(a_test.get_error_stack_traces()), c_cdata_end_tag, c_cdata_end_tag_wrap )); ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); elsif a_test.result > ut_utils.gc_success then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - for i in 1 .. a_test.failed_expectations.count loop - l_lines := a_test.failed_expectations(i).get_result_lines(); - for j in 1 .. l_lines.count loop - --Encapsulate nested CDATA in results - ut_utils.append_to_list( l_results, replace( l_lines(j), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - end loop; - ut_utils.append_to_list( l_results, replace( a_test.failed_expectations(i).caller_info, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - end loop; - ut_utils.append_to_list( l_results, c_cdata_end_tag); + ut_utils.append_to_list( l_results, a_test.get_failed_expectations_cdata() ); ut_utils.append_to_list( l_results, ''); end if; -- TODO - decide if we need/want to use the tag too diff --git a/source/reporters/ut_sonar_test_reporter.tpb b/source/reporters/ut_sonar_test_reporter.tpb index de4699058..ce1a67089 100644 --- a/source/reporters/ut_sonar_test_reporter.tpb +++ b/source/reporters/ut_sonar_test_reporter.tpb @@ -47,7 +47,6 @@ create or replace type body ut_sonar_test_reporter is c_cdata_end_tag constant varchar2(10) := ']]>'; c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; l_results ut_varchar2_rows := ut_varchar2_rows(); - l_lines ut_varchar2_list; begin ut_utils.append_to_list( l_results, ''); if a_test.result = ut_utils.gc_disabled then @@ -55,21 +54,12 @@ create or replace type body ut_sonar_test_reporter is elsif a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, ut_utils.table_to_clob(a_test.get_error_stack_traces())); + ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(a_test.get_error_stack_traces()), c_cdata_end_tag, c_cdata_end_tag_wrap )); ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); elsif a_test.result > ut_utils.gc_success then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - for i in 1 .. a_test.failed_expectations.count loop - l_lines := a_test.failed_expectations(i).get_result_lines(); - for j in 1 .. l_lines.count loop - --Encapsulate nested CDATA in results - ut_utils.append_to_list( l_results, replace( l_lines(j), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - end loop; - ut_utils.append_to_list( l_results, replace( a_test.failed_expectations(i).caller_info, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - end loop; - ut_utils.append_to_list( l_results, c_cdata_end_tag); + ut_utils.append_to_list( l_results, a_test.get_failed_expectations_cdata() ); ut_utils.append_to_list( l_results, ''); end if; ut_utils.append_to_list( l_results, ''); diff --git a/source/reporters/ut_tfs_junit_reporter.tpb b/source/reporters/ut_tfs_junit_reporter.tpb index 814cb7230..cb112e9b7 100644 --- a/source/reporters/ut_tfs_junit_reporter.tpb +++ b/source/reporters/ut_tfs_junit_reporter.tpb @@ -58,7 +58,6 @@ create or replace type body ut_tfs_junit_reporter is procedure print_test_results(a_test ut_test) is l_results ut_varchar2_rows := ut_varchar2_rows(); - l_lines ut_varchar2_list; begin self.print_text(''); @@ -73,22 +72,13 @@ create or replace type body ut_tfs_junit_reporter is if a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, ut_utils.table_to_clob(a_test.get_error_stack_traces())); + ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(a_test.get_error_stack_traces()), c_cdata_end_tag, c_cdata_end_tag_wrap )); ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); -- Do not count error as failure elsif a_test.result = ut_utils.gc_failure then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - for i in 1 .. a_test.failed_expectations.count loop - l_lines := a_test.failed_expectations(i).get_result_lines(); - for j in 1 .. l_lines.count loop - --Encapsulate nested CDATA in results - ut_utils.append_to_list( l_results, replace( l_lines(j), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - end loop; - ut_utils.append_to_list( l_results, replace( a_test.failed_expectations(i).caller_info, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - end loop; - ut_utils.append_to_list( l_results, c_cdata_end_tag); + ut_utils.append_to_list( l_results, a_test.get_failed_expectations_cdata() ); ut_utils.append_to_list( l_results, ''); end if; @@ -127,7 +117,7 @@ create or replace type body ut_tfs_junit_reporter is if l_outputs is not null and l_outputs != empty_clob() then ut_utils.append_to_list( l_results, ''); ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, l_outputs); + ut_utils.append_to_list( l_results, replace( l_outputs, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); else @@ -138,7 +128,7 @@ create or replace type body ut_tfs_junit_reporter is if l_errors is not empty then ut_utils.append_to_list( l_results, ''); ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, ut_utils.table_to_clob(l_errors)); + ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(l_errors), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); ut_utils.append_to_list( l_results, c_cdata_end_tag); ut_utils.append_to_list( l_results, ''); else From 36e08014e2068fe6a2351bff3eba5bdd2a3f20c6 Mon Sep 17 00:00:00 2001 From: Jacek Gebal Date: Sun, 2 Jun 2019 22:15:16 +0100 Subject: [PATCH 6/6] Fixing sonar violation on duplicated code. --- source/core/types/ut_test.tpb | 21 ++---- source/core/types/ut_test.tps | 2 +- source/core/ut_utils.pkb | 26 +++++++ source/core/ut_utils.pks | 21 +++++- source/reporters/ut_junit_reporter.tpb | 30 +++----- source/reporters/ut_sonar_test_reporter.tpb | 9 +-- source/reporters/ut_tfs_junit_reporter.tpb | 77 +++++++++------------ test/ut3_user/api/test_ut_run.pkb | 4 +- 8 files changed, 97 insertions(+), 93 deletions(-) diff --git a/source/core/types/ut_test.tpb b/source/core/types/ut_test.tpb index 698f179ff..099704fd5 100644 --- a/source/core/types/ut_test.tpb +++ b/source/core/types/ut_test.tpb @@ -163,25 +163,14 @@ create or replace type body ut_test as return l_outputs; end; - member function get_failed_expectations_cdata return ut_varchar2_rows is - c_cdata_start_tag constant varchar2(30) := ''; - c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; - l_results ut_varchar2_rows; - l_lines ut_varchar2_list; + member function get_failed_expectation_lines return ut_varchar2_rows is + l_results ut_varchar2_rows; begin - ut_utils.append_to_list( l_results, c_cdata_start_tag); - for i in 1 .. self.failed_expectations.count loop - l_lines := self.failed_expectations(i).get_result_lines(); - for j in 1 .. l_lines.count loop - --Encapsulate nested CDATA in results - ut_utils.append_to_list( l_results, replace( l_lines(j), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - end loop; - ut_utils.append_to_list( l_results, replace( self.failed_expectations(i).caller_info, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); + for i in 1 .. failed_expectations.count loop + ut_utils.append_to_list( l_results, ut_utils.convert_collection( failed_expectations(i).get_result_lines() ) ); + ut_utils.append_to_list( l_results, failed_expectations(i).caller_info ); end loop; - ut_utils.append_to_list( l_results, c_cdata_end_tag); return l_results; end; - end; / diff --git a/source/core/types/ut_test.tps b/source/core/types/ut_test.tps index dfe7a7e0f..7ca01313a 100644 --- a/source/core/types/ut_test.tps +++ b/source/core/types/ut_test.tps @@ -65,6 +65,6 @@ create or replace type ut_test under ut_suite_item ( overriding member procedure mark_as_errored(self in out nocopy ut_test, a_error_stack_trace varchar2), overriding member function get_error_stack_traces(self ut_test) return ut_varchar2_list, overriding member function get_serveroutputs return clob, - member function get_failed_expectations_cdata return ut_varchar2_rows + member function get_failed_expectation_lines return ut_varchar2_rows ) / diff --git a/source/core/ut_utils.pkb b/source/core/ut_utils.pkb index 92ee0895d..52477d9b4 100644 --- a/source/core/ut_utils.pkb +++ b/source/core/ut_utils.pkb @@ -798,5 +798,31 @@ create or replace package body ut_utils is return l_valid_name; end; + function to_cdata(a_lines ut_varchar2_rows) return ut_varchar2_rows is + l_results ut_varchar2_rows; + begin + if a_lines is not empty then + ut_utils.append_to_list( l_results, gc_cdata_start_tag); + for i in 1 .. a_lines.count loop + ut_utils.append_to_list( l_results, replace( a_lines(i), gc_cdata_end_tag, gc_cdata_end_tag_wrap ) ); + end loop; + ut_utils.append_to_list( l_results, gc_cdata_end_tag); + else + l_results := a_lines; + end if; + return l_results; + end; + + function to_cdata(a_clob clob) return clob is + l_result clob; + begin + if a_clob is not null and a_clob != empty_clob() then + l_result := replace( a_clob, gc_cdata_end_tag, gc_cdata_end_tag_wrap ); + else + l_result := a_clob; + end if; + return l_result; + end; + end ut_utils; / diff --git a/source/core/ut_utils.pks b/source/core/ut_utils.pks index 25487d9c3..85cfeeb16 100644 --- a/source/core/ut_utils.pks +++ b/source/core/ut_utils.pks @@ -44,6 +44,11 @@ create or replace package ut_utils authid definer is gc_failure_char constant varchar2(7) := 'Failure'; -- one or more expectations failed gc_error_char constant varchar2(5) := 'Error'; -- exception was raised + gc_cdata_start_tag constant varchar2(10) := ''; + gc_cdata_end_tag_wrap constant varchar2(30) := ']]'||gc_cdata_end_tag||gc_cdata_start_tag||'>'; + + /* Constants: Rollback type for ut_test_object */ @@ -386,6 +391,18 @@ create or replace package ut_utils authid definer is * Check if xml name is valid if not build a valid name */ function get_valid_xml_name(a_name varchar2) return varchar2; - -end ut_utils; + + /** + * Converts input list into a list surrounded by CDATA tags + * All CDATA end tags get escaped using recommended method from https://en.wikipedia.org/wiki/CDATA#Nesting + */ + function to_cdata(a_lines ut_varchar2_rows) return ut_varchar2_rows; + + /** + * Converts input CLOB into a CLOB surrounded by CDATA tags + * All CDATA end tags get escaped using recommended method from https://en.wikipedia.org/wiki/CDATA#Nesting + */ + function to_cdata(a_clob clob) return clob; + + end ut_utils; / diff --git a/source/reporters/ut_junit_reporter.tpb b/source/reporters/ut_junit_reporter.tpb index 11996b433..c08790080 100644 --- a/source/reporters/ut_junit_reporter.tpb +++ b/source/reporters/ut_junit_reporter.tpb @@ -23,9 +23,6 @@ create or replace type body ut_junit_reporter is end; overriding member procedure after_calling_run(self in out nocopy ut_junit_reporter, a_run in ut_run) is - c_cdata_start_tag constant varchar2(30) := ''; - c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; l_suite_id integer := 0; l_tests_count integer := a_run.results_count.disabled_count + a_run.results_count.success_count + a_run.results_count.failure_count + a_run.results_count.errored_count; @@ -37,7 +34,6 @@ create or replace type body ut_junit_reporter is procedure print_test_elements(a_test ut_test) is l_results ut_varchar2_rows := ut_varchar2_rows(); - l_lines ut_varchar2_list; l_output clob; begin ut_utils.append_to_list( @@ -52,22 +48,18 @@ create or replace type body ut_junit_reporter is end if; if a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(a_test.get_error_stack_traces()), c_cdata_end_tag, c_cdata_end_tag_wrap )); - ut_utils.append_to_list( l_results, c_cdata_end_tag); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( ut_utils.convert_collection( a_test.get_error_stack_traces() ) ) ); ut_utils.append_to_list( l_results, ''); elsif a_test.result > ut_utils.gc_success then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, a_test.get_failed_expectations_cdata() ); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( a_test.get_failed_expectation_lines() ) ); ut_utils.append_to_list( l_results, ''); end if; - -- TODO - decide if we need/want to use the tag too + l_output := a_test.get_serveroutputs(); if l_output is not null then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, replace( l_output, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - ut_utils.append_to_list( l_results, c_cdata_end_tag ); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( a_test.get_serveroutputs() ) ); ut_utils.append_to_list( l_results, '' ); else ut_utils.append_to_list( l_results, ''); @@ -79,7 +71,7 @@ create or replace type body ut_junit_reporter is end; procedure print_suite_elements(a_suite ut_logical_suite, a_suite_id in out nocopy integer) is - l_tests_count integer := a_suite.results_count.disabled_count + a_suite.results_count.success_count + + l_count integer := a_suite.results_count.disabled_count + a_suite.results_count.success_count + a_suite.results_count.failure_count + a_suite.results_count.errored_count; l_suite ut_suite; l_tests ut_suite_items := ut_suite_items(); @@ -88,7 +80,7 @@ create or replace type body ut_junit_reporter is l_errors ut_varchar2_list; begin a_suite_id := a_suite_id + 1; - self.print_text(''); -- Becasue testsuites have to appear before test we capture test and leave it for later. @@ -110,11 +102,9 @@ create or replace type body ut_junit_reporter is l_suite := treat(a_suite as ut_suite); l_data := l_suite.get_serveroutputs(); - if l_data is not null and l_data != empty_clob() then + if l_data is not null then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, replace( l_data, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - ut_utils.append_to_list( l_results, c_cdata_end_tag); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( l_data ) ); ut_utils.append_to_list( l_results, ''); else ut_utils.append_to_list( l_results, ''); @@ -123,9 +113,7 @@ create or replace type body ut_junit_reporter is l_errors := l_suite.get_error_stack_traces(); if l_errors is not empty then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(l_errors), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - ut_utils.append_to_list( l_results, c_cdata_end_tag); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( ut_utils.convert_collection( l_errors ) ) ); ut_utils.append_to_list( l_results, ''); else ut_utils.append_to_list( l_results, ''); diff --git a/source/reporters/ut_sonar_test_reporter.tpb b/source/reporters/ut_sonar_test_reporter.tpb index ce1a67089..874a07957 100644 --- a/source/reporters/ut_sonar_test_reporter.tpb +++ b/source/reporters/ut_sonar_test_reporter.tpb @@ -43,9 +43,6 @@ create or replace type body ut_sonar_test_reporter is end; procedure print_test_results(a_test ut_test) is - c_cdata_start_tag constant varchar2(30) := ''; - c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; l_results ut_varchar2_rows := ut_varchar2_rows(); begin ut_utils.append_to_list( l_results, ''); @@ -53,13 +50,11 @@ create or replace type body ut_sonar_test_reporter is ut_utils.append_to_list( l_results, ''); elsif a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(a_test.get_error_stack_traces()), c_cdata_end_tag, c_cdata_end_tag_wrap )); - ut_utils.append_to_list( l_results, c_cdata_end_tag); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( ut_utils.convert_collection( a_test.get_error_stack_traces() ) ) ); ut_utils.append_to_list( l_results, ''); elsif a_test.result > ut_utils.gc_success then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, a_test.get_failed_expectations_cdata() ); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( a_test.get_failed_expectation_lines() ) ); ut_utils.append_to_list( l_results, ''); end if; ut_utils.append_to_list( l_results, ''); diff --git a/source/reporters/ut_tfs_junit_reporter.tpb b/source/reporters/ut_tfs_junit_reporter.tpb index cb112e9b7..5fba96886 100644 --- a/source/reporters/ut_tfs_junit_reporter.tpb +++ b/source/reporters/ut_tfs_junit_reporter.tpb @@ -28,13 +28,8 @@ create or replace type body ut_tfs_junit_reporter is end; member procedure junit_version_one(self in out nocopy ut_tfs_junit_reporter,a_run in ut_run) is - c_cdata_start_tag constant varchar2(30) := ''; - c_cdata_end_tag_wrap constant varchar2(30) := ']]'||c_cdata_end_tag||c_cdata_start_tag||'>'; l_suite_id integer := 0; - l_tests_count integer := a_run.results_count.disabled_count + a_run.results_count.success_count + - a_run.results_count.failure_count + a_run.results_count.errored_count; - + function get_common_suite_attributes(a_item ut_suite_item) return varchar2 is begin return ' errors="' ||a_item.results_count.errored_count || '"' || @@ -71,14 +66,12 @@ create or replace type body ut_tfs_junit_reporter is if a_test.result = ut_utils.gc_error then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(a_test.get_error_stack_traces()), c_cdata_end_tag, c_cdata_end_tag_wrap )); - ut_utils.append_to_list( l_results, c_cdata_end_tag); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( ut_utils.convert_collection( a_test.get_error_stack_traces() ) ) ); ut_utils.append_to_list( l_results, ''); -- Do not count error as failure elsif a_test.result = ut_utils.gc_failure then ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, a_test.get_failed_expectations_cdata() ); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( a_test.get_failed_expectation_lines() ) ); ut_utils.append_to_list( l_results, ''); end if; @@ -102,43 +95,39 @@ create or replace type body ut_tfs_junit_reporter is end if; end loop; - if a_suite is of(ut_suite) then - a_suite_id := a_suite_id + 1; - self.print_text(''); - self.print_text(''); - for i in 1 .. a_suite.items.count loop - if a_suite.items(i) is of(ut_test) then - print_test_results(treat(a_suite.items(i) as ut_test)); - end if; - end loop; - l_suite := treat(a_suite as ut_suite); - l_outputs := l_suite.get_serveroutputs(); - if l_outputs is not null and l_outputs != empty_clob() then - ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, replace( l_outputs, c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - ut_utils.append_to_list( l_results, c_cdata_end_tag); - ut_utils.append_to_list( l_results, ''); - else - ut_utils.append_to_list( l_results, ''); - end if; + if a_suite is of(ut_suite) then + a_suite_id := a_suite_id + 1; + self.print_text(''); + self.print_text(''); + for i in 1 .. a_suite.items.count loop + if a_suite.items(i) is of(ut_test) then + print_test_results(treat(a_suite.items(i) as ut_test)); + end if; + end loop; + l_suite := treat(a_suite as ut_suite); + l_outputs := l_suite.get_serveroutputs(); + if l_outputs is not null and l_outputs != empty_clob() then + ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( l_suite.get_serveroutputs() ) ); + ut_utils.append_to_list( l_results, ''); + else + ut_utils.append_to_list( l_results, ''); + end if; - l_errors := l_suite.get_error_stack_traces(); - if l_errors is not empty then - ut_utils.append_to_list( l_results, ''); - ut_utils.append_to_list( l_results, c_cdata_start_tag); - ut_utils.append_to_list( l_results, replace( ut_utils.table_to_clob(l_errors), c_cdata_end_tag, c_cdata_end_tag_wrap ) ); - ut_utils.append_to_list( l_results, c_cdata_end_tag); - ut_utils.append_to_list( l_results, ''); - else - ut_utils.append_to_list( l_results, ''); - end if; - ut_utils.append_to_list( l_results, ''); + l_errors := l_suite.get_error_stack_traces(); + if l_errors is not empty then + ut_utils.append_to_list( l_results, ''); + ut_utils.append_to_list( l_results, ut_utils.to_cdata( ut_utils.convert_collection( l_errors ) ) ); + ut_utils.append_to_list( l_results, ''); + else + ut_utils.append_to_list( l_results, ''); + end if; + ut_utils.append_to_list( l_results, ''); - self.print_text_lines(l_results); + self.print_text_lines(l_results); end if; - end; + end; begin l_suite_id := 0; diff --git a/test/ut3_user/api/test_ut_run.pkb b/test/ut3_user/api/test_ut_run.pkb index 43a2238ae..620c87977 100644 --- a/test/ut3_user/api/test_ut_run.pkb +++ b/test/ut3_user/api/test_ut_run.pkb @@ -734,8 +734,8 @@ Failures:% procedure remove_time_from_results(a_results in out nocopy ut3.ut_varchar2_list) is begin for i in 1 .. a_results.count loop - a_results(i) := regexp_replace(a_results(i),'\[[0-9]*\.[0-9]+ sec\]',''); - a_results(i) := regexp_replace(a_results(i),'Finished in [0-9]*\.[0-9]+ seconds',''); + a_results(i) := regexp_replace(a_results(i),'\[[0-9]*[\.,][0-9]+ sec\]',''); + a_results(i) := regexp_replace(a_results(i),'Finished in [0-9]*[\.,][0-9]+ seconds',''); end loop; end;