10000 First checking. · utPLSQL/utPLSQL@0474d7a · GitHub
[go: up one dir, main page]

Skip to content

Commit 0474d7a

Browse files
committed
First checking.
Still some more tests to go for complex nesting.
1 parent 2426952 commit 0474d7a

File tree

3 files changed

+218
-44
lines changed

3 files changed

+218
-44
lines changed

source/reporters/ut_tfs_junit_reporter.tpb

Lines changed: 56 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,12 @@ create or replace type body ut_tfs_junit_reporter is
5151
return regexp_substr(a_path_with_name, '(.*)\.' ||a_name||'$',subexpression=>1);
5252
end;
5353

54-
procedure print_test_results(a_test ut_test) is
54+
function add_test_results(a_test ut_test) return ut_varchar2_rows is
5555
l_results ut_varchar2_rows := ut_varchar2_rows();
5656
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)) || '" ' ||
5858
get_common_testcase_attributes(a_test) || '>');
59+
5960
/*
6061
According to specs :
6162
- A failure is a test which the code has explicitly failed by using the mechanisms for that purpose.
@@ -83,64 +84,83 @@ create or replace type body ut_tfs_junit_reporter is
8384

8485
ut_utils.append_to_list( l_results, '</testcase>');
8586

86-
self.print_text_lines(l_results);
87+
return l_results;
8788
end;
8889

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
9091
l_tests_count integer := a_suite.results_count.disabled_count + a_suite.results_count.success_count +
9192
a_suite.results_count.failure_count + a_suite.results_count.errored_count;
9293
l_results ut_varchar2_rows := ut_varchar2_rows();
9394
l_suite ut_suite;
9495
l_outputs clob;
9596
l_errors ut_varchar2_list;
96-
begin
97-
97+
l_tests ut_varchar2_list;
98+
begin
9899
for i in 1 .. a_suite.items.count loop
99100
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);
101+
print_suite_results(treat(a_suite.items(i) as ut_logical_suite), a_suite_id, a_nested_tests);
101102
end if;
102103
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/>');
104+
--Due to fact tha TFS and junit5 accepts only flat structure we have to report in suite level only.
105+
if a_suite.self_type ='UT_SUITE_CONTEXT' then
109106
for i in 1 .. a_suite.items.count loop
110107
if a_suite.items(i) is of(ut_test) then
111-
print_test_results(treat(a_suite.items(i) as ut_test));
108+
ut_utils.append_to_list( a_nested_tests,(add_test_results(treat(a_suite.items(i) as ut_test))));
112109
end if;
113110
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);
111+
elsif a_suite.self_type ='UT_SUITE' then
112+
for i in 1 .. a_suite.items.count loop
113+
if a_suite.items(i) is of(ut_test) then
114+
ut_utils.append_to_list( a_nested_tests,(add_test_results(treat(a_suite.items(i) as ut_test))));
115+
end if;
116+
end loop;
117+
--TFS doesnt report on empty test suites, however all we want to make sure is that we dont pring parents suites
118+
-- showing test count but not tests.
119+
if (a_nested_tests.count > 0 and l_tests_count > 0) or (a_nested_tests.count = 0 and l_tests_count = 0) then
120+
a_suite_id := a_suite_id + 1;
121+
ut_utils.append_to_list( l_results,'<testsuite tests="' || l_tests_count || '"' || ' id="' || a_suite_id || '"' || ' package="' ||
122+
dbms_xmlgen.convert(a_suite.path) || '" ' || get_common_suite_attributes(a_suite) || '>');
123+
ut_utils.append_to_list( l_results,'<properties/>');
124+
ut_utils.append_to_list(l_results,a_nested_tests);
125+
l_suite := treat(a_suite as ut_suite);
126+
l_outputs := l_suite.get_serveroutputs();
127+
if l_outputs is not null and l_outputs != empty_clob() then
128+
ut_utils.append_to_list( l_results, '<system-out>');
129+
ut_utils.append_to_list( l_results, ut_utils.to_cdata( l_suite.get_serveroutputs() ) );
130+
ut_utils.append_to_list( l_results, '</system-out>');
131+
else
132+
ut_utils.append_to_list( l_results, '<system-out/>');
133+
end if;
134+
135+
l_errors := l_suite.get_error_stack_traces();
136+
if l_errors is not empty then
137+
ut_utils.append_to_list( l_results, '<system-err>');
138+
ut_utils.append_to_list( l_results, ut_utils.to_cdata( ut_utils.convert_collection( l_errors ) ) );
139+
ut_utils.append_to_list( l_results, '</system-err>');
140+
else
141+
ut_utils.append_to_list( l_results, '<system-err/>');
142+
end if;
143+
ut_utils.append_to_list( l_results, '</testsuite>');
144+
145+
self.print_text_lines(l_results);
146+
--We have resolved a context and we now reset value.
147+
a_nested_tests := ut_varchar2_rows();
148+
end if;
135149
end if;
136150
end;
151+
152+
procedure get_suite_results(a_suite ut_logical_suite, a_suite_id in out nocopy integer) is
153+
l_nested_tests ut_varchar2_rows:= ut_varchar2_rows();
154+
begin
155+
print_suite_results(a_suite, l_suite_id,l_nested_tests);
156+
end;
137157

138158
begin
139159
l_suite_id := 0;
140160
self.print_text(ut_utils.get_xml_header(a_run.client_character_set));
141161
self.print_text('<testsuites>');
142162
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);
163+
get_suite_results(treat(a_run.items(i) as ut_logical_suite), l_suite_id);
144164
end loop;
145165
self.print_text('</testsuites>');
146166
end;

test/ut3_user/reporters/test_tfs_junit_reporter.pkb

Lines changed: 153 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ create or replace package body test_tfs_junit_reporter as
88

99
--%test(A test with <tag>)
1010
procedure test_do_stuff;
11-
11+
1212
end;]';
1313
execute immediate q'[create or replace package body check_junit_reporting is
1414
procedure test_do_stuff is
@@ -18,12 +18,12 @@ create or replace package body test_tfs_junit_reporter as
1818
end;
1919

2020
end;]';
21-
21+
2222
execute immediate q'[create or replace package check_junit_rep_suitepath is
2323
--%suitepath(core)
2424
--%suite(check_junit_rep_suitepath)
2525
--%displayname(Check JUNIT Get path for suitepath)
26-
26+
2727
--%test(check_junit_rep_suitepath)
2828
--%displayname(Check JUNIT Get path for suitepath)
2929
procedure check_junit_rep_suitepath;
@@ -38,7 +38,7 @@ create or replace package body test_tfs_junit_reporter as
3838
execute immediate q'[create or replace package check_junit_flat_suitepath is
3939
--%suitepath(core.check_junit_rep_suitepath)
4040
--%suite(flatsuitepath)
41-
41+
4242
--%beforeall
4343
procedure donuffin;
4444
end;]';
@@ -49,8 +49,85 @@ create or replace package body test_tfs_junit_reporter as
4949
end;
5050
end;]';
5151

52-
end;
52+
execute immediate q'[create or replace package check_junit_in_context is
53+
--%suitepath(core.check_junit_rep_suitepath)
54+
--%suite(inctxsuite)
55+
--%displayname(JUNIT test are inside context)
56+
57+
-- %context(incontext)
58+
-- %name(incontext)
59+
60+
--%test(incontext)
61+
--%displayname(Check JUNIT Get path incontext)
62+
procedure check_junit_rep_incontext;
63+
64+
-- %endcontext
65+
end;]';
66+
execute immediate q'[create or replace package body check_junit_in_context is
67+
procedure check_junit_rep_incontext is
68+
begin
69+
ut3_develop.ut.expect(1).to_equal(1);
70+
end;
71+
end;]';
72+
73+
execute immediate q'[create or replace package check_junit_out_context is
74+
--%suitepath(core)
75+
--%suite(outctxsuite)
76+
--%displayname(JUNIT test are outside context)
77+
78+
-- %context(outcontext)
79+
-- %name(outcontext)
80+
81+
-- %endcontext
82+
83+
84+
--%test(outctx)
85+
--%displayname(outctx)
86+
procedure outctx;
87+
88+
89+
end;]';
90+
execute immediate q'[create or replace package body check_junit_out_context is
91+
procedure outctx is
92+
begin
93+
ut3_develop.ut.expect(1).to_equal(1);
94+
end;
95+
end;]';
96+
97+
execute immediate q'[create or replace package check_junit_inout_context is
98+
--%suitepath(core)
99+
--%suite(inoutcontext)
100+
--%displayname(Test in and out of context)
53101

102+
-- %context(incontext)
103+
-- %name(ProductincontextFeatures)
104+
105+
--%test(inctx)
106+
--%displayname(inctx)
107+
procedure inctx;
108+
109+
-- %endcontext
110+
111+
112+
--%test(outctx)
113+
--%displayname(outctx)
114+
procedure outctx;
115+
116+
117+
end;]';
118+
execute immediate q'[create or replace package body check_junit_inout_context is
119+
procedure inctx is
120+
begin
121+
ut3_develop.ut.expect(1).to_equal(1);
122+
end;
123+
124+
procedure outctx is
125+
begin
126+
ut3_develop.ut.expect(1).to_equal(1);
127+
end;
128+
end;]';
129+
130+
end;
54131

55132
procedure escapes_special_chars is
56133
l_results ut3_develop.ut_varchar2_list;
@@ -92,7 +169,7 @@ create or replace package body test_tfs_junit_reporter as
92169
--Assert
93170
ut.expect(l_actual).to_be_like('%testcase classname="check_junit_reporting"%');
94171
end;
95-
172+
96173
procedure check_flatten_nested_suites is
97174
l_results ut3_develop.ut_varchar2_list;
98175
l_actual clob;
@@ -111,7 +188,7 @@ create or replace package body test_tfs_junit_reporter as
111188
<system-err/>
112189
</testsuite>%');
113190
end;
114-
191+
115192
procedure check_nls_number_formatting is
116193
l_results ut3_develop.ut_varchar2_list;
117194
l_actual clob;
@@ -163,5 +240,73 @@ create or replace package body test_tfs_junit_reporter as
163240
reporters.check_xml_encoding_included(ut3_develop.ut_tfs_junit_reporter(), 'UTF-8');
164241
end;
165242

243+
procedure reports_only_test_in_ctx is
244+
l_results ut3_develop.ut_varchar2_list;
245+
l_actual clob;
246+
begin
247+
--Act
248+
select *
249+
bulk collect into l_results
250+
from table(ut3_develop.ut.run('check_junit_in_context',ut3_develop.ut_tfs_junit_reporter()));
251+
l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results);
252+
--Assert
253+
ut.expect(l_actual).to_be_like('<?xml version="1.0"?>
254+
<testsuites>
255+
<testsuite tests="1" id="1" package="core.check_junit_rep_suitepath.check_junit_in_context" errors="0" failures="0" name="JUNIT test are inside context" time="%" timestamp="%" hostname="%" >
256+
<properties/>
257+
<testcase classname="core.check_junit_rep_suitepath.check_junit_in_context.incontext" name="Check JUNIT Get path incontext" time="%">
258+
</testcase>
259+
<system-out/>
260+
<system-err/>
261+
</testsuite>
262+
</testsuites>%');
263+
end;
264+
265+
procedure reports_only_test_out_ctx is
266+
l_results ut3_develop.ut_varchar2_list;
267+
l_actual clob;
268+
begin
269+
--Act
270+
select *
271+
bulk collect into l_results
272+
from table(ut3_develop.ut.run('check_junit_out_context',ut3_develop.ut_tfs_junit_reporter()));
273+
l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results);
274+
--Assert
275+
ut.expect(l_actual).to_be_like('<?xml version="1.0"?>
276+
<testsuites>
277+
<testsuite tests="1" id="1" package="core.check_junit_out_context" errors="0" failures="0" name="JUNIT test are outside context" time="%" timestamp="%" hostname="%" >
278+
<properties/>
279+
<testcase classname="core.check_junit_out_context" name="outctx" time="%">
280+
</testcase>
281+
<system-out/>
282+
<system-err/>
283+
</testsuite>
284+
</testsuites>%');
285+
end;
286+
287+
procedure reports_only_test_inout_ctx is
288+
l_results ut3_develop.ut_varchar2_list;
289+
l_actual clob;
290+
begin
291+
--Act
292+
select *
293+
bulk collect into l_results
294+
from table(ut3_develop.ut.run('check_junit_inout_context',ut3_develop.ut_tfs_junit_reporter()));
295+
l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results);
296+
--Assert
297+
ut.expect(l_actual).to_be_like('<?xml version="1.0"?>
298+
<testsuites>
299+
<testsuite tests="2" id="1" package="core.check_junit_inout_context" errors="0" failures="0" name="Test in and out of context" time="%" timestamp="%" hostname="%" >
300+
<properties/>
301+
<testcase classname="core.check_junit_inout_context.ProductincontextFeatures" name="inctx" time="%">
302+
</testcase>
303+
<testcase classname="core.check_junit_inout_context" name="outctx" time="%">
304+
</testcase>
305+
<system-out/>
306+
<system-err/>
307+
</testsuite>
308+
</testsuites>%');
309+
end;
310+
166311
end;
167-
/
312+
/

test/ut3_user/reporters/test_tfs_junit_reporter.pks

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ create or replace package test_tfs_junit_reporter as
3030
--%test(Includes XML header with encoding when encoding provided)
3131
procedure check_encoding_included;
3232

33+
--%test(Reports only testsuites where there are any testcases, all tests are in context)
34+
procedure reports_only_test_in_ctx;
35+
36+
--%test(Reports only testsuites where there are any testcases, all tests are outside context)
37+
procedure reports_only_test_out_ctx;
38+
39+
--%test(Reports only testsuites where there are any testcases, one test in ctx one test outside)
40+
procedure reports_only_test_inout_ctx;
41+
3342
--%afterall
3443
procedure remove_test_package;
3544
end;

0 commit comments

Comments
 (0)
0