Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9e79e6f

Browse files
use print_xml_fragment for pretty printing
1 parent 010b8fd commit 9e79e6f

2 files changed

Lines changed: 72 additions & 24 deletions

File tree

source/reporters/ut_realtime_reporter.tpb

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
92110
end;
93111
/

source/reporters/ut_realtime_reporter.tps

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,31 @@ create or replace type ut_realtime_reporter force under ut_output_reporter_base(
1515
See the License for the specific language governing permissions and
1616
limitations under the License.
1717
*/
18-
19-
-- TODO: unit test
20-
-- TODO: add after suite to handle dbms_output and warnings on this level.
2118

2219
/**
23-
* The SQL Developer reporter.
20+
* Private attribute containing the total number of all tests in the run (incl. disabled tests).
21+
*/
22+
total_number_of_tests integer,
23+
24+
/**
25+
* Private attribute containing the currently executed test.
26+
*/
27+
current_test_number integer,
28+
29+
/**
30+
* Private attribute containing the current indentation in logical tabs.
31+
*/
32+
current_indent integer,
33+
34+
/**
35+
* The realtime reporter.
2436
* Provides test results in a XML format, to consumed by clients such as SQL Developer interested progressing details.
2537
*/
2638
constructor function ut_realtime_reporter(self in out nocopy ut_realtime_reporter) return self as result,
2739

2840
/**
2941
* Provides meta data of complete run in advance.
30-
* Used in IDE to show total tests and initialize a progress bar.
42+
* Used to show total tests and initialize a progress bar.
3143
*/
3244
overriding member procedure before_calling_run(self in out nocopy ut_realtime_reporter, a_run in ut_run),
3345

@@ -37,10 +49,15 @@ create or replace type ut_realtime_reporter force under ut_output_reporter_base(
3749
overriding member procedure before_calling_test(self in out nocopy ut_realtime_reporter, a_test in ut_test),
3850

3951
/**
40-
* Provides meta data of a completed test with runtime, status,
52+
* Provides meta data of a completed test with runtime and status.
4153
*/
4254
overriding member procedure after_calling_test(self in out nocopy ut_realtime_reporter, a_test in ut_test),
4355

56+
/**
57+
* Provides meta data of completed test suite with runtime.
58+
*/
59+
overriding member procedure after_calling_suite(self in out nocopy ut_realtime_reporter, a_suite in ut_logical_suite),
60+
4461
/**
4562
* Provides closing tag with runtime summary.
4663
*/
@@ -49,7 +66,20 @@ create or replace type ut_realtime_reporter force under ut_output_reporter_base(
4966
/**
5067
* Provides the description of this reporter.
5168
*/
52-
overriding member function get_description return varchar2
69+
overriding member function get_description return varchar2,
70+
71+
/**
72+
* Private procedure to print a line of the resulting XML document using the current indentation.
73+
* a_indent_summand_before is added before printing a line.
74+
* a_indent_summand_after is added after printing a line.
75+
* All output is produced through this function.
76+
*/
77+
member procedure print_xml_fragment(
78+
self in out nocopy ut_realtime_reporter,
79+
a_fragment in varchar2,
80+
a_indent_summand_before in integer default 0,
81+
a_indent_summand_after in integer default 0
82+
)
5383
)
5484
not final
5585
/

0 commit comments

Comments
 (0)