@@ -24,65 +24,75 @@ create or replace type body ut_sonar_test_reporter is
2424 return;
2525 end;
2626
27- overriding member procedure before_calling_run(self in out nocopy ut_sonar_test_reporter, a_run in ut_run) is
28- begin
29- self.file_mappings := coalesce(a_run.test_file_mappings,ut_file_mappings());
30- self.print_text('<testExecutions version="1">');
31- end;
27+ overriding member procedure after_calling_run(self in out nocopy ut_sonar_test_reporter, a_run in ut_run) is
3228
33- overriding member procedure before_calling_suite(self in out nocopy ut_sonar_test_reporter, a_suite ut_logical_suite) is
29+ function map_package_to_file(a_suite ut_suite, a_file_mappings ut_file_mappings) return varchar2 is
3430 l_file_name varchar2(4000);
35- begin
36- if a_suite is of (ut_suite) then
37- for i in 1 .. self.file_mappings.count loop
38- if upper(self.file_mappings(i).object_name) = upper(a_suite.object_name)
39- and upper(self.file_mappings(i).object_owner) = upper(a_suite.object_owner) then
40- l_file_name := self.file_mappings(i).file_name;
41- exit;
31+ begin
32+ if a_file_mappings is not null then
33+ for i in 1 .. a_file_mappings.count loop
34+ if upper(a_file_mappings(i).object_name) = upper(a_suite.object_name)
35+ and upper(a_file_mappings(i).object_owner) = upper(a_suite.object_owner) then
36+ l_file_name := a_file_mappings(i).file_name;
37+ exit;
38+ end if;
39+ end loop;
40+ end if;
41+ return coalesce(l_file_name, a_suite.path);
42+ end;
43+
44+ procedure print_test_results(a_test ut_test) is
45+ l_lines ut_varchar2_list;
46+ begin
47+ self.print_text('<testCase name="'||a_test.name||'" duration="'||round(a_test.execution_time()*1000,0)||'" >');
48+ if a_test.result = ut_utils.tr_disabled then
49+ self.print_text('<skipped message="skipped"/>');
50+ elsif a_test.result = ut_utils.tr_error then
51+ self.print_text('<error message="encountered errors">');
52+ self.print_text('<![CDATA[');
53+ self.print_clob(ut_utils.table_to_clob(a_test.get_error_stack_traces()));
54+ self.print_text(']]>');
55+ self.print_text('</error>');
56+ elsif a_test.result > ut_utils.tr_success then
57+ self.print_text('<failure message="some expectations have failed">');
58+ self.print_text('<![CDATA[');
59+ for i in 1 .. a_test.results.count loop
60+ l_lines := a_test.results(i).get_result_lines();
61+ for i in 1 .. l_lines.count loop
62+ self.print_text(l_lines(i));
63+ end loop;
64+ end loop;
65+ self.print_text(']]>');
66+ self.print_text('</failure>');
67+ end if;
68+ self.print_text('</testCase>');
69+ end;
70+
71+ procedure print_suite_results(a_suite ut_logical_suite, a_file_mappings ut_file_mappings) is
72+ begin
73+ for i in 1 .. a_suite.items.count loop
74+ if a_suite.items(i) is of(ut_logical_suite) then
75+ print_suite_results(treat(a_suite.items(i) as ut_logical_suite), a_file_mappings);
4276 end if;
4377 end loop;
44- l_file_name := coalesce(l_file_name, a_suite.path);
45- self.print_text('<file path="'||l_file_name||'">');
46- end if;
47- end;
78+ if a_suite is of(ut_suite) then
79+ self.print_text('<file path="'||map_package_to_file(treat(a_suite as ut_suite), a_file_mappings)||'">');
4880
49- overriding member procedure after_calling_test(self in out nocopy ut_sonar_test_reporter, a_test ut_test) is
50- l_message varchar2(32757);
51- l_lines ut_varchar2_list;
52- begin
53- self.print_text('<testCase name="'||a_test.name||'" duration="'||round(a_test.execution_time()*1000,0)||'" >');
54- if a_test.result = ut_utils.tr_disabled then
55- self.print_text('<skipped message="skipped"/>');
56- elsif a_test.result = ut_utils.tr_error then
57- self.print_text('<error message="encountered errors">');
58- self.print_text('<![CDATA[');
59- self.print_clob(ut_utils.table_to_clob(a_test.get_error_stack_traces()));
60- self.print_text(']]>');
61- self.print_text('</error>');
62- elsif a_test.result > ut_utils.tr_success then
63- self.print_text('<failure message="some expectations have failed">');
64- self.print_text('<![CDATA[');
65- for i in 1 .. a_test.results.count loop
66- l_lines := a_test.results(i).get_result_lines();
67- for i in 1 .. l_lines.count loop
68- self.print_text(l_lines(i));
81+ for i in 1 .. a_suite.items.count loop
82+ if a_suite.items(i) is of(ut_test) then
83+ print_test_results(treat(a_suite.items(i) as ut_test));
84+ end if;
6985 end loop;
70- end loop;
71- self.print_text(']]>');
72- self.print_text('</failure>');
73- end if;
74- self.print_text('</testCase>');
75- end;
86+ self.print_text('</file>');
87+ end if;
88+ end;
7689
77- overriding member procedure after_calling_suite(self in out nocopy ut_sonar_test_reporter, a_suite ut_logical_suite) is
7890 begin
79- if a_suite is of (ut_suite) then
80- self.print_text('</file>');
81- end if ;
82- end;
91+ self.print_text('<testExecutions version="1">');
92+ for i in 1 .. a_run.items.count loop
93+ print_suite_results(treat(a_run.items(i) as ut_logical_suite), a_run.test_file_mappings) ;
94+ end loop ;
8395
84- overriding member procedure after_calling_run(self in out nocopy ut_sonar_test_reporter, a_run in ut_run) is
85- begin
8696 self.print_text('</testExecutions>');
8797 end;
8898
0 commit comments