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

Skip to content

Commit f8895a2

Browse files
committed
Added Cobertura Coverage
Added Cobertura coverage Format at its basic to support TFS coverage publish.
1 parent 53ade01 commit f8895a2

2 files changed

Lines changed: 158 additions & 0 deletions

File tree

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
create or replace type body ut_coverage_cob_reporter is
2+
/*
3+
utPLSQL - Version v3.0.4.1372
4+
Copyright 2016 - 2017 utPLSQL Project
5+
6+
Licensed under the Apache License, Version 2.0 (the "License"):
7+
you may not use this file except in compliance with the License.
8+
You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing, software
13+
distributed under the License is distributed on an "AS IS" BASIS,
14+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
See the License for the specific language governing permissions and
16+
limitations under the License.
17+
*/
18+
19+
constructor function ut_coverage_cob_reporter(
20+
self in out nocopy ut_coverage_cob_reporter
21+
) return self as result is
22+
begin
23+
self.init($$plsql_unit);
24+
return;
25+
end;
26+
27+
28+
overriding member procedure after_calling_run(self in out nocopy ut_coverage_cob_reporter, a_run in ut_run) as
29+
l_report_lines ut_varchar2_list;
30+
l_coverage_data ut_coverage.t_coverage;
31+
32+
function get_lines_xml(a_unit_coverage ut_coverage.t_unit_coverage) return clob is
33+
l_file_part varchar2(32767);
34+
l_result clob;
35+
l_line_no binary_integer;
36+
begin
37+
dbms_lob.createtemporary(l_result, true);
38+
l_line_no := a_unit_coverage.lines.first;
39+
if l_line_no is null then
40+
for i in 1 .. a_unit_coverage.total_lines loop
41+
l_file_part := '<line number="'||i||'" hits="0" branch="false"/>'||chr(10);
42+
ut_utils.append_to_clob(l_result, l_file_part);
43+
end loop;
44+
else
45+
while l_line_no is not null loop
46+
if a_unit_coverage.lines(l_line_no) = 0 then
47+
l_file_part := '<line number="'||l_line_no||'" hits="0" branch="false"/>'||chr(10);
48+
else
49+
l_file_part := '<line number="'||l_line_no||'" hits="1" branch="false"/>'||chr(10);
50+
end if;
51+
ut_utils.append_to_clob(l_result, l_file_part);
52+
l_line_no := a_unit_coverage.lines.next(l_line_no);
53+
end loop;
54+
end if;
55+
return l_result;
56+
end;
57+
58+
function get_coverage_xml(
59+
a_coverage_data ut_coverage.t_coverage
60+
) return clob is
61+
l_file_part varchar2(32767);
62+
l_result clob;
63+
l_unit ut_coverage.t_full_name;
64+
c_coverage_def constant varchar2(200) := '<?xml version="1.0"?>'||CHR(10)||'<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">'||chr(10);
65+
c_file_footer constant varchar2(30) := '</file>'||chr(10);
66+
c_coverage_footer constant varchar2(30) := '</coverage>';
67+
c_sources_footer constant varchar2(30) := '</sources>'||chr(10);
68+
c_packages_footer constant varchar2(30) := '</packages>'||chr(10);
69+
c_package_footer constant varchar2(30) := '</package>'||chr(10);
70+
c_class_footer constant varchar2(30) := '</class>'||chr(10);
71+
c_lines_footer constant varchar2(30) := '</lines>'||chr(10);
72+
begin
73+
dbms_lob.createtemporary(l_result,true);
74+
75+
ut_utils.append_to_clob(l_result, c_coverage_def);
76+
77+
--write header
78+
l_file_part:= '<coverage line-rate="0" branch-rate="0.0" lines-covered="'||a_coverage_data.covered_lines||'" lines-valid="'||TO_CHAR(a_coverage_data.covered_lines + a_coverage_data.uncovered_lines)||'" branches-covered="0" branches-valid="0" complexity="0" version="1" timestamp="1403301904999">';
79+
ut_utils.append_to_clob(l_result, l_file_part);
80+
81+
82+
--Write sources
83+
l_unit := a_coverage_data.objects.first;
84+
l_file_part := '<sources>'||CHR(10);
85+
ut_utils.append_to_clob(l_result, l_file_part);
86+
87+
while l_unit is not null loop
88+
l_file_part := '<source>'||dbms_xmlgen.convert(l_unit)||'</source>'||chr(10);
89+
ut_utils.append_to_clob(l_result, l_file_part);
90+
l_unit := a_coverage_data.objects.next(l_unit);
91+
end loop;
92+
ut_utils.append_to_clob(l_result, c_sources_footer);
93+
94+
--write packages
95+
l_unit := a_coverage_data.objects.first;
96+
l_file_part := '<packages>'||CHR(10);
97+
ut_utils.append_to_clob(l_result, l_file_part);
98+
99+
while l_unit is not null loop
100+
l_file_part := '<package name="'||dbms_xmlgen.convert(l_unit)||'" line-rate="0.0" branch-rate="0.0" complexity="0.0">'||CHR(10);
101+
ut_utils.append_to_clob(l_result, l_file_part);
102+
103+
l_file_part := '<class name="'||dbms_xmlgen.convert(l_unit)||'" filename="'||dbms_xmlgen.convert(l_unit)||'" line-rate="0.0" branch-rate="0.0" complexity="0.0">'||CHR(10);
104+
ut_utils.append_to_clob(l_result, l_file_part);
105+
106+
l_file_part := '<lines>'||CHR(10);
107+
ut_utils.append_to_clob(l_result, l_file_part);
108+
109+
dbms_lob.append(l_result,get_lines_xml(a_coverage_data.objects(l_unit)));
110+
111+
ut_utils.append_to_clob(l_result, c_lines_footer);
112+
ut_utils.append_to_clob(l_result, c_class_footer);
113+
ut_utils.append_to_clob(l_result, c_package_footer);
114+
115+
l_unit := a_coverage_data.objects.next(l_unit);
116+
end loop;
117+
118+
ut_utils.append_to_clob(l_result, c_packages_footer);
119+
ut_utils.append_to_clob(l_result, c_coverage_footer);
120+
return l_result;
121+
end;
122+
begin
123+
ut_coverage.coverage_stop();
124+
125+
l_coverage_data := ut_coverage.get_coverage_data(a_run.coverage_options);
126+
127+
self.print_clob( get_coverage_xml( l_coverage_data ) );
128+
129+
(self as ut_reporter_base).after_calling_run(a_run);
130+
end;
131+
132+
end;
133+
/
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
create or replace type ut_coverage_cob_reporter under ut_coverage_reporter_base(
2+
/*
3+
utPLSQL - Version v3.0.4.1372
4+
Copyright 2016 - 2017 utPLSQL Project
5+
6+
Licensed under the Apache License, Version 2.0 (the "License"):
7+
you may not use this file except in compliance with the License.
8+
You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing, software
13+
distributed under the License is distributed on an "AS IS" BASIS,
14+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
See the License for the specific language governing permissions and
16+
limitations under the License.
17+
*/
18+
19+
constructor function ut_coverage_cob_reporter(
20+
self in out nocopy ut_coverage_cob_reporter
21+
) return self as result,
22+
23+
overriding member procedure after_calling_run(self in out nocopy ut_coverage_cob_reporter, a_run in ut_run)
24+
)
25+
/

0 commit comments

Comments
 (0)