Skip to content

Commit fdb4b3a

Browse files
authored
Merge pull request #1269 from utPLSQL/feature/1268_enable_line_rate_in_cobertura
The line-rate is not recorded for packages and classes in cobertura coverage reporter
2 parents 2426952 + df121ca commit fdb4b3a

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

source/reporters/ut_coverage_cobertura_reporter.tpb

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,34 @@ create or replace type body ut_coverage_cobertura_reporter is
2929
l_report_lines ut_varchar2_list;
3030
l_coverage_data ut_coverage.t_coverage;
3131

32-
function get_lines_xml(a_unit_coverage ut_coverage.t_unit_coverage) return clob is
32+
function get_line_rate(a_lines_covered in integer, a_lines_hit in integer) return varchar2 is
33+
begin
34+
return to_char(round((case a_lines_covered when 0 then 0 else a_lines_covered/a_lines_hit end), 17), rpad('FM0.0',20,'9') , 'NLS_NUMERIC_CHARACTERS=''. ''');
35+
end;
36+
37+
procedure get_lines_xml(a_unit_coverage ut_coverage.t_unit_coverage,
38+
a_lines_result in out nocopy clob, a_lines_hits out number, a_lines_total out number) is
3339
l_file_part varchar2(32767);
3440
l_result clob;
3541
l_line_no binary_integer;
3642
l_pct integer;
43+
l_lines_hits integer := 0;
44+
l_lines_total integer := 0;
3745
begin
3846
dbms_lob.createtemporary(l_result, true);
3947
l_line_no := a_unit_coverage.lines.first;
4048
if l_line_no is null then
4149
for i in 1 .. a_unit_coverage.total_lines loop
4250
ut_utils.append_to_clob(l_result, '<line number="'||i||'" hits="0" branch="false"/>'||chr(10));
4351
end loop;
52+
l_lines_hits:=0;
53+
l_lines_total:= a_unit_coverage.total_lines;
4454
else
4555
while l_line_no is not null loop
4656
if a_unit_coverage.lines(l_line_no).executions = 0 then
4757
l_file_part := '<line number="'||l_line_no||'" hits="0" branch="false"/>'||chr(10);
4858
else
59+
l_lines_hits:= l_lines_hits+1;
4960
l_file_part := '<line number="'||l_line_no||'" hits="'||a_unit_coverage.lines(l_line_no).executions||'"';
5061
if a_unit_coverage.lines(l_line_no).covered_blocks < a_unit_coverage.lines(l_line_no).no_blocks then
5162
l_file_part := l_file_part || ' branch="true"';
@@ -59,16 +70,21 @@ create or replace type body ut_coverage_cobertura_reporter is
5970
end if;
6071
ut_utils.append_to_clob(l_result, l_file_part);
6172
l_line_no := a_unit_coverage.lines.next(l_line_no);
73+
l_lines_total := l_lines_total + 1;
6274
end loop;
6375
end if;
64-
return l_result;
76+
a_lines_result := l_result;
77+
a_lines_hits :=l_lines_hits;
78+
a_lines_total := l_lines_total;
6579
end;
6680

6781
function get_coverage_xml(
6882
a_coverage_data ut_coverage.t_coverage,
6983
a_run ut_run
7084
) return ut_varchar2_rows is
85+
7186
l_file_part varchar2(32767);
87+
l_lines_xml clob;
7288
l_result ut_varchar2_rows := ut_varchar2_rows();
7389
l_unit ut_coverage.t_object_name;
7490
l_obj_name ut_coverage.t_object_name;
@@ -83,6 +99,8 @@ create or replace type body ut_coverage_cobertura_reporter is
8399
c_lines_footer constant varchar2(30) := '</lines>';
84100
l_epoch varchar2(50) := (sysdate - to_date('01-01-1970 00:00:00', 'dd-mm-yyyy hh24:mi:ss')) * 24 * 60 * 60;
85101
l_lines_valid integer := a_coverage_data.covered_lines + a_coverage_data.uncovered_lines;
102+
l_line_hits integer;
103+
l_line_total integer;
86104
begin
87105

88106
ut_utils.append_to_list( l_result, ut_utils.get_xml_header(a_run.client_character_set) );
@@ -92,7 +110,7 @@ create or replace type body ut_coverage_cobertura_reporter is
92110
ut_utils.append_to_list(
93111
l_result,
94112
'<coverage line-rate="'
95-
||to_char(round((case l_lines_valid when 0 then 0 else a_coverage_data.covered_lines/(l_lines_valid) end), 17), rpad('FM0.0',20,'9') , 'NLS_NUMERIC_CHARACTERS=''. ''')
113+
||get_line_rate(a_coverage_data.covered_lines,l_lines_valid)
96114
||'" branch-rate="0.0" lines-covered="'
97115
||a_coverage_data.covered_lines||'" lines-valid="'
98116
||to_char(l_lines_valid)
@@ -116,9 +134,12 @@ create or replace type body ut_coverage_cobertura_reporter is
116134

117135
while l_unit is not null loop
118136
l_obj_name := a_coverage_data.objects(l_unit).name;
137+
dbms_lob.createtemporary(l_lines_xml, true);
138+
get_lines_xml(a_coverage_data.objects(l_unit),l_lines_xml,l_line_hits,l_line_total);
139+
119140
ut_utils.append_to_list(
120141
l_result,
121-
'<package name="'||dbms_xmlgen.convert(l_obj_name)||'" line-rate="0.0" branch-rate="0.0" complexity="0.0">'
142+
'<package name="'||dbms_xmlgen.convert(l_obj_name)||'" line-rate="'||get_line_rate(l_line_hits,l_line_total)||'" branch-rate="0.0" complexity="0.0">'
122143
);
123144

124145
ut_utils.append_to_list(
@@ -129,13 +150,13 @@ create or replace type body ut_coverage_cobertura_reporter is
129150
ut_utils.append_to_list(
130151
l_result,
131152
'<class name="'||dbms_xmlgen.convert(l_obj_name)||'" filename="'
132-
||dbms_xmlgen.convert(l_unit)||'" line-rate="0.0" branch-rate="0.0" complexity="0.0">'
153+
||dbms_xmlgen.convert(l_unit)||'" line-rate="'||get_line_rate(l_line_hits,l_line_total)||'" branch-rate="0.0" complexity="0.0">'
133154
);
134155

135156
ut_utils.append_to_list(l_result, '<lines>');
136-
137-
ut_utils.append_to_list( l_result, get_lines_xml(a_coverage_data.objects(l_unit)) );
138-
157+
ut_utils.append_to_list( l_result,l_lines_xml);
158+
dbms_lob.freetemporary(l_lines_xml);
159+
139160
ut_utils.append_to_list(l_result, c_lines_footer);
140161
ut_utils.append_to_list(l_result, c_class_footer);
141162
ut_utils.append_to_list(l_result, c_classes_footer);

test/ut3_user/reporters/test_coverage/test_cov_cobertura_reporter.pkb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ create or replace package body test_cov_cobertura_reporter is
2525
<source>]'||l_file_path||q'[</source>
2626
</sources>
2727
<packages>
28-
<package name="]'||upper(l_name)||q'[" line-rate="0.0" branch-rate="0.0" complexity="0.0">
28+
<package name="]'||upper(l_name)||q'[" line-rate="0.5" branch-rate="0.0" complexity="0.0">
2929
<classes>
30-
<class name="]'||upper(l_name)||q'[" filename="]'||l_file_path||q'[" line-rate="0.0" branch-rate="0.0" complexity="0.0">
30+
<class name="]'||upper(l_name)||q'[" filename="]'||l_file_path||q'[" line-rate="0.5" branch-rate="0.0" complexity="0.0">
3131
<lines>
3232
]'||l_block_cov||q'[
3333
<line number="6" hits="0" branch="false"/>

test/ut3_user/reporters/test_coverage/test_coverage_standalone.pkb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ create or replace package body test_coverage_standalone is
2020
<source>]'||l_file_path||q'[</source>
2121
</sources>
2222
<packages>
23-
<package name="]'||upper(a_object_name)||q'[" line-rate="0.0" branch-rate="0.0" complexity="0.0">
23+
<package name="]'||upper(a_object_name)||q'[" line-rate="1.0" branch-rate="0.0" complexity="0.0">
2424
<classes>
25-
<class name="]'||upper(a_object_name)||q'[" filename="]'||l_file_path||q'[" line-rate="0.0" branch-rate="0.0" complexity="0.0">
25+
<class name="]'||upper(a_object_name)||q'[" filename="]'||l_file_path||q'[" line-rate="1.0" branch-rate="0.0" complexity="0.0">
2626
<lines>
2727
]'||l_block_cov||q'[
2828
<line number="6" hits="1" branch="false"/>

0 commit comments

Comments
 (0)