Skip to content

Fixed XML/HTML special characters in reportersand XUnit failures reporting #500

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 24, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
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
4 changes: 2 additions & 2 deletions examples/developer_examples/RunExampleTestSuite.sql
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ begin
dbms_output.put_line('Test:' || test_item.item.form_name);
dbms_output.put_line('Result: ' || ut_utils.test_result_to_char(test_item.result));
dbms_output.put_line('expectation Results:');
for i in test_item.results.first .. test_item.results.last loop
expectation := test_item.results(i);
for i in 1 .. test_item.failed_expectations.count loop
expectation := test_item.failed_expectations(i);
dbms_output.put_line(i || ' - result: ' || ut_utils.test_result_to_char(expectation.result));
dbms_output.put_line(i || ' - Message: ' || expectation.message);
end loop;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ END;';
if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
else
l_results := ut_expectation_processor.get_expectations_results();
l_results := ut_expectation_processor.get_failed_expectations();
for i in 1 .. l_results.count loop
dbms_output.put_line(l_results(i).message);
end loop;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ begin
--Act
ut.expect(l_actual).&&5.to_equal(l_expected);
l_result := ut_expectation_processor.get_status();
l_message := ut_expectation_processor.get_expectations_results()(1).get_result_clob;
l_message := ut_expectation_processor.get_failed_expectations()(1).get_result_clob;
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result = ut_utils.tr_failure
and l_message like 'Actual (%) cannot be compared to Expected (%) using matcher%' then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ declare
begin
--Act
ut.expect(l_actual).to_equal(l_expected);
l_result := ut_expectation_processor.get_expectations_results()(1);
l_result := ut_expectation_processor.get_failed_expectations()(1);
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result.get_result_clob like '&&4' then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ declare
begin
--Act
ut.expect(l_actual, l_test_description ).to_equal( l_expected);
l_results := ut_expectation_processor.get_expectations_results();
l_results := ut_expectation_processor.get_failed_expectations();
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success
and treat(l_results(1) as ut_expectation_result).description like '' || l_test_description || '' then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ begin
if l_result = ut_utils.tr_failure then
:test_result := ut_utils.tr_success;
else
dbms_output.put_line( substr(ut_expectation_processor.get_expectations_results()(1).get_result_clob(),1,32767) );
dbms_output.put_line( substr(ut_expectation_processor.get_failed_expectations()(1).get_result_clob(),1,32767) );
end if;
end;
/
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ begin
if l_result = ut_utils.tr_failure then
:test_result := ut_utils.tr_success;
else
dbms_output.put_line( substr(ut_expectation_processor.get_expectations_results()(1).get_result_clob(),1,32767) );
dbms_output.put_line( substr(ut_expectation_processor.get_failed_expectations()(1).get_result_clob(),1,32767) );
end if;
end;
/
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ begin

ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected), a_exclude=>ut_varchar2_list('VALUE'));
l_result := ut_expectation_processor.get_status();
l_results_details := ut_expectation_processor.get_expectations_results();
l_results_details := ut_expectation_processor.get_failed_expectations();
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ begin
a_exclude=>ut_varchar2_list('/UT_KEY_VALUE_PAIRS/UT_KEY_VALUE_PAIR/VALUE')
);
l_result := ut_expectation_processor.get_status();
l_results_details := ut_expectation_processor.get_expectations_results();
l_results_details := ut_expectation_processor.get_failed_expectations();
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ begin

ut.expect(anydata.convertObject(l_actual)).to_equal(anydata.convertObject(l_expected), a_exclude=>'VALUE');
l_result := ut_expectation_processor.get_status();
l_results_details := ut_expectation_processor.get_expectations_results();
l_results_details := ut_expectation_processor.get_failed_expectations();
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ begin

ut.expect(anydata.convertObject(l_actual)).to_equal(anydata.convertObject(l_expected), a_exclude=>'/UT_KEY_VALUE_PAIR/VALUE');
l_result := ut_expectation_processor.get_status();
l_results_details := ut_expectation_processor.get_expectations_results();
l_results_details := ut_expectation_processor.get_failed_expectations();
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ declare
begin
--Act
ut.expect( anydata.convertObject(l_actual) ).to_equal( anydata.convertObject(l_expected) );
l_assert_result := treat(ut_expectation_processor.get_expectations_results()(1) as ut_expectation_result);
l_assert_result := treat(ut_expectation_processor.get_failed_expectations()(1) as ut_expectation_result);

--Assert
if l_assert_result.message like q'[Actual:%
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ begin
open l_expected for select 'a' as "A_Column", 'd' as A_COLUMN, 'x' SOME_COL, 'c' "Some_Col" from dual;
ut.expect(l_actual).to_equal(l_expected, a_exclude=>ut_varchar2_list('A_COLUMN','Some_Col'));
l_result := ut_expectation_processor.get_status();
l_results_details := ut_expectation_processor.get_expectations_results();
l_results_details := ut_expectation_processor.get_failed_expectations();
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ begin
open l_expected for select 'a' as "A_Column", 'd' as A_COLUMN, 'x' SOME_COL, 'c' "Some_Col" from dual;
ut.expect(l_actual).to_equal(l_expected, a_exclude=>'A_COLUMN,Some_Col');
l_result := ut_expectation_processor.get_status();
l_results_details := ut_expectation_processor.get_expectations_results();
l_results_details := ut_expectation_processor.get_failed_expectations();
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ begin
open l_expected for select 'a' as "A_Column", 'd' as A_COLUMN, 'x' SOME_COL, 'c' "Some_Col" from dual;
ut.expect(l_actual).to_equal(l_expected, a_exclude=>'/ROW/A_COLUMN|/ROW/Some_Col');
l_result := ut_expectation_processor.get_status();
l_results_details := ut_expectation_processor.get_expectations_results();
l_results_details := ut_expectation_processor.get_failed_expectations();
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success and l_result = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ begin
open l_expected for select * from user_objects where rownum <=3;
ut.expect(l_actual).to_equal(l_expected);

l_result := treat( ut_expectation_processor.get_expectations_results()(1) as ut_expectation_result );
l_result := treat( ut_expectation_processor.get_failed_expectations()(1) as ut_expectation_result );
--Assert
if nvl(:test_result, ut_utils.tr_success) = ut_utils.tr_success
and l_result.message like q'[Actual:%
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'blob' 'to_blob(''abc'')' 'to_blob(''abc'')'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'boolean' 'true' 'true'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'clob' '''abc''' '''abc'''"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'date' 'sysdate' 'sysdate'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'number' '1' '1'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'timestamp' 'sysdate' 'sysdate'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'timestamp with local time zone' 'sysdate' 'sysdate'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'timestamp with time zone' 'sysdate' 'sysdate'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'varchar2(100)' '''abc''' '''abc'''"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'interval day to second' '''2 01:00:00''' '''2 01:00:00'''"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'interval year to month' '''1-1''' '''1-1'''"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'blob' 'to_blob(''abcd'')' 'to_blob(''abc'')'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'boolean' 'false' 'true'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'clob' '''abcd''' '''abc'''"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'date' 'sysdate-1' 'sysdate'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'number' '2' '1'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'timestamp' 'sysdate-1' 'sysdate'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'timestamp with local time zone' 'sysdate-1' 'sysdate'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'timestamp with time zone' 'sysdate-1' 'sysdate'"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'varchar2(100)' '''abcd''' '''abc'''"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'interval day to second' '''2 01:01:00''' '''2 01:00:00'''"
@@lib/RunTest.sql "ut_expectations/common/ut.expect.to_equal.scalar.with_message.common.sql 'interval year to month' '''1-2''' '''1-1'''"



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ begin
if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
else
dbms_output.put_line(ut_expectation_processor.get_expectations_results()(1).get_result_clob);
dbms_output.put_line(ut_expectation_processor.get_failed_expectations()(1).get_result_clob);
end if;

delete from ut_output_buffer_tmp where reporter_id = l_reporter.reporter_id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ begin
if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
else
dbms_output.put_line(ut_expectation_processor.get_expectations_results()(1).get_result_clob);
dbms_output.put_line(ut_expectation_processor.get_failed_expectations()(1).get_result_clob);
end if;

delete from ut_output_buffer_tmp where reporter_id = l_reporter.reporter_id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ begin
if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
else
dbms_output.put_line(ut_expectation_processor.get_expectations_results()(1).get_result_clob);
dbms_output.put_line(ut_expectation_processor.get_failed_expectations()(1).get_result_clob);
end if;

end;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ begin
if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
else
dbms_output.put_line(ut_expectation_processor.get_expectations_results()(1).get_result_clob);
dbms_output.put_line(ut_expectation_processor.get_failed_expectations()(1).get_result_clob);
end if;

end;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ begin
if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
else
dbms_output.put_line(ut_expectation_processor.get_expectations_results()(1).get_result_clob);
dbms_output.put_line(ut_expectation_processor.get_failed_expectations()(1).get_result_clob);
end if;

delete from ut_output_buffer_tmp where reporter_id = l_reporter.reporter_id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ begin
ut.expect(l_test.description).to_equal('A test description, though with comma, is assigned by suite_manager');


l_results := ut_expectation_processor.get_expectations_results();
l_results := ut_expectation_processor.get_failed_expectations();

:test_result := ut_utils.tr_success;
for i in 1 .. l_results.count loop
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ begin
declare
l_results ut_expectation_results;
begin
l_results := ut_expectation_processor.get_expectations_results;
l_results := ut_expectation_processor.get_failed_expectations;
for i in 1..l_results.count loop
if l_results(i).result > ut_utils.tr_success then
dbms_output.put_line(l_results(i).get_result_clob);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ begin
declare
l_results ut_expectation_results;
begin
l_results := ut_expectation_processor.get_expectations_results;
l_results := ut_expectation_processor.get_failed_expectations;
for i in 1..l_results.count loop
if l_results(i).result > ut_utils.tr_success then
dbms_output.put_line(l_results(i).get_result_clob);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ begin
dbms_output.put_line(
xmltype(
anydata.convertcollection(
ut_expectation_processor.get_expectations_results()
ut_expectation_processor.get_failed_expectations()
)
).getclobval()
);
Expand Down
3 changes: 2 additions & 1 deletion source/core/types/ut_test.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,8 @@ create or replace type body ut_test as
self.result := ut_utils.tr_error;
end if;
--expectation results need to be part of test results
self.results := ut_expectation_processor.get_expectations_results();
self.expectations_count := ut_expectation_processor.get_expectations_count();
self.failed_expectations := ut_expectation_processor.get_failed_expectations();
self.results_count.set_counter_values(self.result);
end;

Expand Down
8 changes: 6 additions & 2 deletions source/core/types/ut_test.tps
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,14 @@ create or replace type ut_test under ut_suite_item (
*/
after_each ut_executable,
/**
* The list of expectation results as well as database errors encountered while invoking
* The list of failed expectation results as well as database errors encountered while invoking
* The test procedure and the before_test/after_test blocks
*/
results ut_expectation_results,
failed_expectations ut_expectation_results,
/**
* The count of all expectations executed in the test
*/
expectations_count integer,
parent_error_stack_trace varchar2(4000),
constructor function ut_test(
self in out nocopy ut_test, a_object_owner varchar2 := null, a_object_name varchar2, a_name varchar2, a_description varchar2 := null,
Expand Down
19 changes: 15 additions & 4 deletions source/core/ut_expectation_processor.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,25 @@ create or replace package body ut_expectation_processor as
g_expectations_called.delete;
end;

function get_expectations_results return ut_expectation_results is
function get_expectations_count return integer is
begin
return g_expectations_called.count;
end;

function get_failed_expectations return ut_expectation_results is
l_expectations_results ut_expectation_results := ut_expectation_results();
begin
ut_utils.debug_log('ut_expectation_processor.get_expectations_results: .count='||g_expectations_called.count);
l_expectations_results := g_expectations_called;
ut_utils.debug_log('ut_expectation_processor.get_failed_expectations: g_expectations_called.count='||g_expectations_called.count);
for i in 1 .. g_expectations_called.count loop
if g_expectations_called(i).status > ut_utils.tr_success then
l_expectations_results.extend;
l_expectations_results(l_expectations_results.last) := g_expectations_called(i);
end if;
end loop;
ut_utils.debug_log('ut_expectation_processor.get_failed_expectations: l_expectations_results.count='||g_expectations_called.count);
clear_expectations();
return l_expectations_results;
end get_expectations_results;
end get_failed_expectations;

procedure add_expectation_result(a_expectation_result ut_expectation_result) is
begin
Expand Down
4 changes: 3 additions & 1 deletion source/core/ut_expectation_processor.pks
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ create or replace package ut_expectation_processor authid current_user as

procedure clear_expectations;

function get_expectations_results return ut_expectation_results;
function get_expectations_count return integer;

function get_failed_expectations return ut_expectation_results;

procedure add_expectation_result(a_expectation_result ut_expectation_result);

Expand Down
4 changes: 2 additions & 2 deletions source/reporters/ut_coverage_report_html_helper.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ create or replace package body ut_coverage_report_html_helper is
dbms_lob.createtemporary(l_result, true);
l_coverage_pct := coverage_pct(a_coverage_unit.covered_lines, a_coverage_unit.uncovered_lines);
l_file_part :=
'<div class="source_table" id="'||a_object_id||'"><div class="header"> <h3>'||a_object_full_name||'</h3>' ||
'<div class="source_table" id="'||a_object_id||'"><div class="header"> <h3>'||dbms_xmlgen.convert(a_object_full_name)||'</h3>' ||
'<h4><span class="'||coverage_css_class(l_coverage_pct)||'">'||l_coverage_pct||' %</span> covered</h4>' ||
'<div> <b>'||(a_coverage_unit.covered_lines+a_coverage_unit.uncovered_lines)||'</b> relevant lines. ' ||
'<span class="green"><b>'||a_coverage_unit.covered_lines||'</b> lines covered</span> and ' ||
Expand Down Expand Up @@ -179,7 +179,7 @@ create or replace package body ut_coverage_report_html_helper is
l_file_part :=
chr(10)||
'<tr>' ||
'<td class="strong">'||link_to_source_file(l_unit)||'</td>' ||
'<td class="strong">'||link_to_source_file(dbms_xmlgen.convert(l_unit))||'</td>' ||
'<td class="'||coverage_css_class(l_coverage_pct)||' strong">'||l_coverage_pct||' %</td>' ||
'<td>'||l_unit_coverage.total_lines||'</td>' ||
'<td>'||(l_unit_coverage.covered_lines+l_unit_coverage.uncovered_lines)||'</td>' ||
Expand Down
2 changes: 1 addition & 1 deletion source/reporters/ut_coverage_sonar_reporter.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ create or replace type body ut_coverage_sonar_reporter is
ut_utils.append_to_clob(l_result, c_coverage_header);
l_unit := a_coverage_data.objects.first;
while l_unit is not null loop
l_file_part := '<file path="'||l_unit||'">'||chr(10);
l_file_part := '<file path="'||dbms_xmlgen.convert(l_unit)||'">'||chr(10);
ut_utils.append_to_clob(l_result, l_file_part);

dbms_lob.append(l_result,get_lines_xml(a_coverage_data.objects(l_unit)));
Expand Down
6 changes: 2 additions & 4 deletions source/reporters/ut_documentation_reporter.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,8 @@ create or replace type body ut_documentation_reporter is

self.print_red_text(ut_utils.table_to_clob(a_test.get_error_stack_traces()));

for j in 1 .. a_test.results.count loop
if a_test.results(j).status > ut_utils.tr_success then
print_failure_for_expectation(a_test.results(j));
end if;
for j in 1 .. a_test.failed_expectations.count loop
print_failure_for_expectation(a_test.failed_expectations(j));
end loop;

self.lvl := self.lvl - 3;
Expand Down
Loading