@@ -51,11 +51,12 @@ create or replace type body ut_tfs_junit_reporter is
51
51
return regexp_substr(a_path_with_name, '(.*)\.' ||a_name||'$',subexpression=>1);
52
52
end;
53
53
54
- procedure print_test_results (a_test ut_test) is
54
+ function add_test_results (a_test ut_test) return ut_varchar2_rows is
55
55
l_results ut_varchar2_rows := ut_varchar2_rows();
56
56
begin
57
- self.print_text( '<testcase classname="' || dbms_xmlgen.convert(get_path(a_test.path, a_test.name)) || '" ' ||
57
+ ut_utils.append_to_list( l_results, '<testcase classname="' || dbms_xmlgen.convert(get_path(a_test.path, a_test.name)) || '" ' ||
58
58
get_common_testcase_attributes(a_test) || '>');
59
+
59
60
/*
60
61
According to specs :
61
62
- A failure is a test which the code has explicitly failed by using the mechanisms for that purpose.
@@ -83,64 +84,87 @@ create or replace type body ut_tfs_junit_reporter is
83
84
84
85
ut_utils.append_to_list( l_results, '</testcase>');
85
86
86
- self.print_text_lines( l_results) ;
87
+ return l_results;
87
88
end;
88
89
89
- procedure print_suite_results(a_suite ut_logical_suite, a_suite_id in out nocopy integer) is
90
+ procedure print_suite_results(a_suite ut_logical_suite, a_suite_id in out nocopy integer, a_nested_tests in out nocopy ut_varchar2_rows ) is
90
91
l_tests_count integer := a_suite.results_count.disabled_count + a_suite.results_count.success_count +
91
92
a_suite.results_count.failure_count + a_suite.results_count.errored_count;
92
93
l_results ut_varchar2_rows := ut_varchar2_rows();
93
94
l_suite ut_suite;
94
95
l_outputs clob;
95
96
l_errors ut_varchar2_list;
96
- begin
97
-
97
+ l_tests ut_varchar2_list;
98
+ begin
98
99
for i in 1 .. a_suite.items.count loop
99
- if a_suite.items(i) is of(ut_logical_suite) then
100
- print_suite_results(treat(a_suite.items(i) as ut_logical_suite), a_suite_id);
100
+ if a_suite.items(i) is of(ut_suite_context) then
101
+ print_suite_results(treat(a_suite.items(i) as ut_suite_context), a_suite_id, a_nested_tests);
102
+ elsif a_suite.items(i) is of(ut_suite) then
103
+ print_suite_results(treat(a_suite.items(i) as ut_suite), a_suite_id, a_nested_tests);
104
+ elsif a_suite.items(i) is of(ut_logical_suite) then
105
+ print_suite_results(treat(a_suite.items(i) as ut_logical_suite), a_suite_id, a_nested_tests);
101
106
end if;
102
107
end loop;
103
-
104
- if a_suite is of(ut_suite) then
105
- a_suite_id := a_suite_id + 1;
106
- self.print_text('<testsuite tests="' || l_tests_count || '"' || ' id="' || a_suite_id || '"' || ' package="' ||
107
- dbms_xmlgen.convert(a_suite.path) || '" ' || get_common_suite_attributes(a_suite) || '>');
108
- self.print_text('<properties/>');
108
+ --Due to fact tha TFS and junit5 accepts only flat structure we have to report in suite level only.
109
+ if a_suite is of(ut_suite_context) then
109
110
for i in 1 .. a_suite.items.count loop
110
111
if a_suite.items(i) is of(ut_test) then
111
- print_test_results( treat(a_suite.items(i) as ut_test));
112
+ ut_utils.append_to_list( a_nested_tests,(add_test_results( treat(a_suite.items(i) as ut_test)) ));
112
113
end if;
113
114
end loop;
114
- l_suite := treat(a_suite as ut_suite);
115
- l_outputs := l_suite.get_serveroutputs();
116
- if l_outputs is not null and l_outputs != empty_clob() then
117
- ut_utils.append_to_list( l_results, '<system-out>');
118
- ut_utils.append_to_list( l_results, ut_utils.to_cdata( l_suite.get_serveroutputs() ) );
119
- ut_utils.append_to_list( l_results, '</system-out>');
120
- else
121
- ut_utils.append_to_list( l_results, '<system-out/>');
122
- end if;
123
-
124
- l_errors := l_suite.get_error_stack_traces();
125
- if l_errors is not empty then
126
- ut_utils.append_to_list( l_results, '<system-err>');
127
- ut_utils.append_to_list( l_results, ut_utils.to_cdata( ut_utils.convert_collection( l_errors ) ) );
128
- ut_utils.append_to_list( l_results, '</system-err>');
129
- else
130
- ut_utils.append_to_list( l_results, '<system-err/>');
131
- end if;
132
- ut_utils.append_to_list( l_results, '</testsuite>');
133
-
134
- self.print_text_lines(l_results);
115
+ elsif a_suite is of(ut_suite) then
116
+ for i in 1 .. a_suite.items.count loop
117
+ if a_suite.items(i) is of(ut_test) then
118
+ ut_utils.append_to_list( a_nested_tests,(add_test_results(treat(a_suite.items(i) as ut_test))));
119
+ end if;
120
+ end loop;
121
+ --TFS doesnt report on empty test suites, however all we want to make sure is that we dont pring parents suites
122
+ -- showing test count but not tests.
123
+ if (a_nested_tests.count > 0 and l_tests_count > 0) or (a_nested_tests.count = 0 and l_tests_count = 0) then
124
+ a_suite_id := a_suite_id + 1;
125
+ ut_utils.append_to_list( l_results,'<testsuite tests="' || l_tests_count || '"' || ' id="' || a_suite_id || '"' || ' package="' ||
126
+ dbms_xmlgen.convert(a_suite.path) || '" ' || get_common_suite_attributes(a_suite) || '>');
127
+ ut_utils.append_to_list( l_results,'<properties/>');
128
+ ut_utils.append_to_list(l_results,a_nested_tests);
129
+ l_suite := treat(a_suite as ut_suite);
130
+ l_outputs := l_suite.get_serveroutputs();
131
+ if l_outputs is not null and l_outputs != empty_clob() then
132
+ ut_utils.append_to_list( l_results, '<system-out>');
133
+ ut_utils.append_to_list( l_results, ut_utils.to_cdata( l_suite.get_serveroutputs() ) );
134
+ ut_utils.append_to_list( l_results, '</system-out>');
135
+ else
136
+ ut_utils.append_to_list( l_results, '<system-out/>');
137
+ end if;
138
+
139
+ l_errors := l_suite.get_error_stack_traces();
140
+ if l_errors is not empty then
141
+ ut_utils.append_to_list( l_results, '<system-err>');
142
+ ut_utils.append_to_list( l_results, ut_utils.to_cdata( ut_utils.convert_collection( l_errors ) ) );
143
+ ut_utils.append_to_list( l_results, '</system-err>');
144
+ else
145
+ ut_utils.append_to_list( l_results, '<system-err/>');
146
+ end if;
147
+ ut_utils.append_to_list( l_results, '</testsuite>');
148
+
149
+ self.print_text_lines(l_results);
150
+ --We have resolved a context and we now reset value.
151
+ a_nested_tests := ut_varchar2_rows();
152
+ end if;
135
153
end if;
136
154
end;
155
+
156
+ procedure get_suite_results(a_suite ut_logical_suite, a_suite_id in out nocopy integer) is
157
+ l_nested_tests ut_varchar2_rows:= ut_varchar2_rows();
158
+ begin
159
+ print_suite_results(a_suite, l_suite_id,l_nested_tests);
160
+ end;
137
161
138
162
begin
139
163
l_suite_id := 0;
140
164
self.print_text(ut_utils.get_xml_header(a_run.client_character_set));
141
165
self.print_text('<testsuites>');
142
166
for i in 1 .. a_run.items.count loop
143
- print_suite_results (treat(a_run.items(i) as ut_logical_suite), l_suite_id);
167
+ get_suite_results (treat(a_run.items(i) as ut_logical_suite), l_suite_id);
144
168
end loop;
145
169
self.print_text('</testsuites>');
146
170
end;
0 commit comments