@@ -19,13 +19,14 @@ create or replace type body ut_realtime_reporter is
1919 constructor function ut_realtime_reporter(self in out nocopy ut_realtime_reporter) return self as result is
2020 begin
2121 self.init($$plsql_unit);
22+ current_indent := 0;
2223 return;
2324 end;
2425
2526 overriding member procedure before_calling_run(self in out nocopy ut_realtime_reporter, a_run in ut_run) is
2627 procedure print_test_elements(a_test ut_test) is
2728 begin
28- self.print_text ('<testcase path="' || a_test.path || '"'
29+ self.print_xml_fragment ('<testcase path="' || a_test.path || '"'
2930 || ' executable_type="' || a_test.item.executable_type || '"'
3031 || ' owner_name="' || a_test.item.owner_name || '"'
3132 || ' object_name="' || a_test.item.object_name || '"'
@@ -37,57 +38,74 @@ create or replace type body ut_realtime_reporter is
3738
3839 procedure print_suite_elements(a_suite ut_logical_suite) is
3940 begin
40- self.print_text ('<testsuite path="' || a_suite.path || '"'
41+ self.print_xml_fragment ('<testsuite path="' || a_suite.path || '"'
4142 || ' name="' || a_suite.name || '"'
42- || ' description="' || a_suite.description || '">');
43+ || ' description="' || a_suite.description || '">', 0, 1 );
4344 for i in 1 .. a_suite.items.count loop
4445 if a_suite.items(i) is of(ut_test) then
4546 print_test_elements(treat(a_suite.items(i) as ut_test));
4647 elsif a_suite.items(i) is of(ut_logical_suite) then
4748 print_suite_elements(treat(a_suite.items(i) as ut_logical_suite));
4849 end if;
4950 end loop;
50- self.print_text ('</testsuite>');
51+ self.print_xml_fragment ('</testsuite>', -1 );
5152 end;
5253
5354 begin
54- self.print_text (ut_utils.get_xml_header(a_run.client_character_set));
55- self.print_text ('<report>');
56- self.print_text ('<prolog>');
57- self.print_text ('<testsuites>');
55+ self.print_xml_fragment (ut_utils.get_xml_header(a_run.client_character_set));
56+ self.print_xml_fragment ('<report>', 0, 1 );
57+ self.print_xml_fragment ('<prolog>', 0, 1 );
58+ self.print_xml_fragment ('<testsuites>', 0, 1 );
5859 for i in 1 .. a_run.items.count loop
5960 print_suite_elements(treat(a_run.items(i) as ut_logical_suite));
6061 end loop;
61- self.print_text ('</testsuites>');
62- self.print_text ('</prolog>');
63- self.print_text ('<run>');
62+ self.print_xml_fragment ('</testsuites>', -1 );
63+ self.print_xml_fragment ('</prolog>', -1 );
64+ self.print_xml_fragment ('<run>', 0, 1 );
6465 end;
6566
6667 overriding member procedure before_calling_test(self in out nocopy ut_realtime_reporter, a_test in ut_test) as
6768 begin
68- self.print_text ('<test path="' || a_test.path || '"'
69+ self.print_xml_fragment ('<test path="' || a_test.path || '"'
6970 || ' executable_type="' || a_test.item.executable_type || '"'
7071 || ' owner_name="' || a_test.item.owner_name || '"'
7172 || ' object_name="' || a_test.item.object_name || '"'
7273 || ' procedure_name="' || a_test.item.procedure_name || '"'
73- || ' disabled="' || case when a_test.get_disabled_flag() then 'true' else 'false' end || '"/>');
74+ || ' disabled="' || case when a_test.get_disabled_flag() then 'true' else 'false' end || '"/>', 1, -1 );
7475 end;
7576
7677 overriding member procedure after_calling_test(self in out nocopy ut_realtime_reporter, a_test in ut_test) as
7778 begin
78- self.print_text ('');
79+ self.print_xml_fragment ('');
7980 end;
80-
81+
82+ overriding member procedure after_calling_suite(self in out nocopy ut_realtime_reporter, a_suite in ut_logical_suite) as
83+ begin
84+ self.print_xml_fragment('');
85+ end;
86+
8187 overriding member procedure after_calling_run(self in out nocopy ut_realtime_reporter, a_run in ut_run) as
8288 begin
83- self.print_text ('</run>');
84- self.print_text ('</report>');
89+ self.print_xml_fragment ('</run>', -1 );
90+ self.print_xml_fragment ('</report>', -1 );
8591 end;
8692
8793 overriding member function get_description return varchar2 as
8894 begin
8995 return 'Provides test results in a XML format, to consumed by clients such as SQL Developer interested progressing details.';
9096 end;
9197
98+ member procedure print_xml_fragment(
99+ self in out nocopy ut_realtime_reporter,
100+ a_fragment in varchar2,
101+ a_indent_summand_before in integer default 0,
102+ a_indent_summand_after in integer default 0
103+ ) as
104+ begin
105+ current_indent := current_indent + a_indent_summand_before;
106+ self.print_text(lpad(' ', 2 * current_indent) || a_fragment);
107+ current_indent := current_indent + a_indent_summand_after;
108+ end;
109+
92110end;
93111/
0 commit comments