Skip to content

Commit c632dff

Browse files
authored
Merge pull request #575 from utPLSQL/feature/fix_xunit_reporter_NLS_dependency
Fixed issue with NLS settings for decimal numbers in XML reporting.
2 parents 844817d + 0a012f9 commit c632dff

5 files changed

Lines changed: 41 additions & 3 deletions

File tree

source/core/ut_utils.pkb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,6 @@ create or replace package body ut_utils is
451451
commit;
452452
end;
453453

454-
455454
function ut_owner return varchar2 is
456455
begin
457456
return sys_context('userenv','current_schema');
@@ -462,5 +461,10 @@ create or replace package body ut_utils is
462461
return nvl(trunc(power(10,(floor(log(10,a_cardinality))+1))/3),0);
463462
end;
464463

464+
function to_xml_number_format(a_value number) return varchar2 is
465+
begin
466+
return to_char(a_value, gc_number_format, 'NLS_NUMERIC_CHARACTERS=''. ''');
467+
end;
468+
465469
end ut_utils;
466470
/

source/core/ut_utils.pks

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,5 +281,11 @@ create or replace package ut_utils authid definer is
281281
*/
282282
function scale_cardinality(a_cardinality natural) return natural;
283283

284+
/**
285+
* Returns number as string. The value is represented as decimal according to XML standard:
286+
* https://www.w3.org/TR/xmlschema-2/#decimal
287+
*/
288+
function to_xml_number_format(a_value number) return varchar2;
289+
284290
end ut_utils;
285291
/

source/reporters/ut_xunit_reporter.tpb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,11 @@ create or replace type body ut_xunit_reporter is
123123

124124
member function get_common_item_attributes(a_item ut_suite_item) return varchar2 is
125125
begin
126-
return ' skipped="' || a_item.results_count.disabled_count || '" error="' || a_item.results_count.errored_count || '"' || ' failure="' || a_item.results_count.failure_count || '" name="' || dbms_xmlgen.convert(nvl(a_item.description, a_item.name)) || '"' || ' time="' || a_item.execution_time() || '" ';
126+
return ' skipped="' || a_item.results_count.disabled_count
127+
|| '" error="' || a_item.results_count.errored_count
128+
|| '" failure="' || a_item.results_count.failure_count
129+
|| '" name="' || dbms_xmlgen.convert(nvl(a_item.description, a_item.name))
130+
|| '" time="' || ut_utils.to_xml_number_format(a_item.execution_time()) || '" ';
127131
end;
128132

129133
end;

test/core/reporters/test_xunit_reporter.pkb

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,28 @@ create or replace package body test_xunit_reporter as
8787
from table(ut3.ut.run('check_xunit_reporting',ut3.ut_xunit_reporter()));
8888
l_actual := ut3.ut_utils.table_to_clob(l_results);
8989
--Assert
90-
ut.expect(l_actual).to_be_like('%testcase classname="check_xunit_reporting"%');
90+
ut.expect(l_actual).to_be_like('%testcase classname="check_xunit_reporting"%');
91+
end;
92+
93+
procedure check_nls_number_formatting is
94+
l_results ut3.ut_varchar2_list;
95+
l_actual clob;
96+
l_nls_numeric_characters varchar2(30);
97+
begin
98+
--Arrange
99+
select nsp.value into l_nls_numeric_characters
100+
from nls_session_parameters nsp
101+
where parameter = 'NLS_NUMERIC_CHARACTERS';
102+
execute immediate q'[alter session set NLS_NUMERIC_CHARACTERS=', ']';
103+
--Act
104+
select *
105+
bulk collect into l_results
106+
from table(ut3.ut.run('check_xunit_reporting', ut3.ut_xunit_reporter()));
107+
l_actual := ut3.ut_utils.table_to_clob(l_results);
108+
--Assert
109+
ut.expect(l_actual).to_match('time="[0-9]*\.[0-9]{6}"');
110+
--Cleanup
111+
execute immediate 'alter session set NLS_NUMERIC_CHARACTERS='''||l_nls_numeric_characters||'''';
91112
end;
92113

93114
procedure check_classname_suitepath is

test/core/reporters/test_xunit_reporter.pks

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ create or replace package test_xunit_reporter as
2121
--%test(Check that classname is returned correct suitepath)
2222
procedure check_classname_suitepath;
2323

24+
--%test(Reports duration according to XML specification for numbers)
25+
procedure check_nls_number_formatting;
26+
2427
--%afterall
2528
procedure remove_test_package;
2629
end;

0 commit comments

Comments
 (0)