Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
287590b
12.2 Stable :
lwasylow Mar 11, 2018
68768f8
12.2 Stable :
lwasylow Mar 13, 2018
76bf869
12.2 Stable :
lwasylow Mar 13, 2018
1f4f5f0
Tests 12.2 Coverage:
lwasylow Mar 14, 2018
90858eb
Added 12.2 coverage
lwasylow Mar 14, 2018
d77cf9a
Test 12.2 coverage
lwasylow Mar 14, 2018
4f83357
Added 12.2 Coverage
lwasylow Mar 14, 2018
ac40332
Added 12.2 Coverage
lwasylow Mar 14, 2018
5f74db9
Merge pull request #602 from lwasylow/12coveragestab2
lwasylow Mar 14, 2018
9d7f16c
Added conditional install of tests for 12.2 only - when block coverag…
jgebal Mar 15, 2018
20541b5
Refactoring coverage:
lwasylow Mar 18, 2018
ab7eb93
Coverage Refactoring:
lwasylow Mar 23, 2018
8dbb1a1
Merge pull request #614 from lwasylow/feature/12cblockcoverage
lwasylow Mar 25, 2018
e0b220d
Merge branch 'develop' into feature/12cblockcoverage
lwasylow Mar 25, 2018
2560f5b
Revert "Feature/12cblockcoverage"
lwasylow Mar 25, 2018
6fe32c5
Merge pull request #615 from utPLSQL/revert-614-feature/12cblockcoverage
lwasylow Mar 25, 2018
8235848
Refactor Coverage:
lwasylow Mar 25, 2018
78fdab5
Refactor Coverage:
lwasylow Mar 25, 2018
3a19341
Merge branch 'feature/12cblockcoverage' of github.com:lwasylow/utPLSQ…
lwasylow Mar 25, 2018
466e126
Update test local
lwasylow Mar 25, 2018
e968f76
Merge pull request #616 from lwasylow/feature/12cblockcoverage
lwasylow Mar 25, 2018
0f1d789
12.2 coverage
lwasylow Apr 3, 2018
faab0fe
Merge pull request #625 from lwasylow/feature/12cblockcoverage
lwasylow Apr 3, 2018
35e5e13
12.2 coverage
lwasylow Apr 3, 2018
1289e99
Merge branch 'feature/12cblockcoverage' of github.com:lwasylow/utPLSQ…
lwasylow Apr 3, 2018
d3ce10c
Merge pull request #626 from lwasylow/feature/12cblockcoverage
lwasylow Apr 3, 2018
c0ca9d3
Fixing error in package name
lwasylow Apr 3, 2018
f151a6e
Update test
lwasylow Apr 4, 2018
28f7653
Statement Coverage First Commit
lwasylow Apr 7, 2018
1f51049
Merge branch 'develop' of https://github.com/utPLSQL/utPLSQL into fea…
lwasylow Apr 7, 2018
9c87b06
Merge branch 'develop' of github.com:utPLSQL/utPLSQL into feature/12c…
lwasylow Apr 7, 2018
d8b8e87
Updated coverage with statement level information
lwasylow Apr 7, 2018
49b1b84
Move get_cov_sql function into common package to remove code duplication
lwasylow Apr 8, 2018
ab7eb24
Refactor Coverage to now enrich profile for partially covered lines u…
lwasylow Apr 8, 2018
36279fa
Update tests and fixed typo in original coverage reporter
lwasylow Apr 10, 2018
661ef74
Merge branch 'feature/12cblockcoverage' of https://github.com/utPLSQL…
lwasylow Apr 10, 2018
57f7a4f
Updated coverage
lwasylow Apr 11, 2018
3a2ff00
Merge branch 'develop' of https://github.com/utPLSQL/utPLSQL into fea…
lwasylow Apr 11, 2018
e6c2be2
Merge pull request #640 from lwasylow/feature/12cov_extended
lwasylow Apr 11, 2018
c9cb004
Fixes to conditional compilation
lwasylow Apr 11, 2018
a862b95
Fixes to new asso array during mock coverage id.
lwasylow Apr 11, 2018
57ee184
Merge pull request #641 from lwasylow/feature/12cblockcoverage
lwasylow Apr 11, 2018
4561795
Update test
lwasylow Apr 11, 2018
0556fbe
Update test
lwasylow Apr 11, 2018
b91e51d
Merge branch 'feature/12cblockcoverage' of github.com:utPLSQL/utPLSQL…
lwasylow Apr 11, 2018
d19f941
Update test/core/reporters/test_extended_coverage.pkb
lwasylow Apr 11, 2018
e2e1437
Updated html reporter to show a information about the partially cover…
lwasylow Apr 11, 2018
a112e36
Added support for block coverage in sonar and cobertura reporters.
jgebal Apr 14, 2018
f0e2653
Clean-up and removal of unnecessary reporters
lwasylow Apr 15, 2018
4458dff
Unify reporters
lwasylow Apr 15, 2018
2027421
Update test
lwasylow Apr 15, 2018
924eb9b
Update issue with part covered being zero.
lwasylow Apr 15, 2018
a111c6d
Update for test with timestamp
lwasylow Apr 15, 2018
2d6c7d3
Merge branch 'develop' into feature/12cblockcoverage
lwasylow Apr 16, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Unify reporters
  • Loading branch information
lwasylow committed Apr 15, 2018
commit 4458dfff327da741cf882fb3d98899d3c6b41de0
4 changes: 0 additions & 4 deletions source/install.sql
Original file line number Diff line number Diff line change
Expand Up @@ -260,11 +260,7 @@ prompt Installing DBMSPLSQL Tables objects into &&ut3_owner schema

@@install_component.sql 'reporters/ut_coverage_html_reporter.tps'
@@install_component.sql 'reporters/ut_coverage_report_html_helper.pks'
@@install_above_12_1.sql 'reporters/ut_extended_report_html_helper.pks'
@@install_component.sql 'reporters/ut_proftab_report_html_helper.pks'
@@install_above_12_1.sql 'reporters/ut_extended_report_html_helper.pkb'
@@install_component.sql 'reporters/ut_coverage_report_html_helper.pkb'
@@install_component.sql 'reporters/ut_proftab_report_html_helper.pkb'
@@install_component.sql 'reporters/ut_coverage_html_reporter.tpb'
@@install_component.sql 'reporters/ut_coverage_sonar_reporter.tps'
@@install_component.sql 'reporters/ut_coverage_sonar_reporter.tpb'
Expand Down
243 changes: 237 additions & 6 deletions source/reporters/ut_coverage_report_html_helper.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -98,19 +98,250 @@ create or replace package body ut_coverage_report_html_helper is
return '<a href="#' || object_id(a_object_full_name) || '" class="src_link" title="' || a_object_full_name || '">' || a_object_full_name || '</a>';
end;




function get_details_file_content(a_object_id varchar2, a_unit ut_object_name, a_unit_coverage ut_coverage.t_unit_coverage)
return clob is
l_source_code ut_varchar2_list;
l_result clob;

function get_block_file_attributes(a_coverage_unit ut_coverage.t_unit_coverage) return varchar2 is
l_result varchar2(32767);
begin
if (a_coverage_unit.partcovered_lines is not null) OR (a_coverage_unit.partcovered_lines > 0) then
l_result := ' (including <span class="yellow"><b>'|| a_coverage_unit.partcovered_lines ||'</b> lines partially covered</span> )';
else
l_result := null;
end if;
return l_result;
end;

function get_common_file_attributes(a_coverage_unit ut_coverage.t_unit_coverage) return varchar2 is
l_attributes varchar2(32767);
begin
l_attributes := '<div> <b>' ||(a_coverage_unit.covered_lines + a_coverage_unit.uncovered_lines)
||'</b> relevant lines. ' || '<span class="green"><b>' || a_coverage_unit.covered_lines
||'</b> lines covered</span>'
|| get_block_file_attributes(a_coverage_unit)
|| ' and <span class="red"><b>' || a_coverage_unit.uncovered_lines ||'</b> lines missed</span>';
return l_attributes;
end;

function build_details_file_content(a_object_id varchar2, a_object_full_name varchar2, a_source_code ut_varchar2_list, a_coverage_unit ut_coverage.t_unit_coverage)
return clob is
l_file_part varchar2(32767);
l_result clob;
l_coverage_pct number(5, 2);
l_coverage_block_pct number(5, 2);
l_hits varchar2(30);
l_blocks varchar2(30);
begin
dbms_lob.createtemporary(l_result, true);

l_coverage_pct := coverage_pct(a_coverage_unit.covered_lines, a_coverage_unit.uncovered_lines);

l_file_part := '<div class="source_table" id="' || a_object_id || '"><div class="header"> <h3>' ||
dbms_xmlgen.convert(a_object_full_name) || '</h3><h4><span class="' || coverage_css_class(l_coverage_pct) || '">'
|| l_coverage_pct || ' %</span> lines covered</h4>'
||get_common_file_attributes(a_coverage_unit) ||'</div></div><pre><ol>';
ut_utils.append_to_clob(l_result, l_file_part);

for line_no in 1 .. a_source_code.count loop
if not a_coverage_unit.lines.exists(line_no) then
l_file_part := '
<li class="' || line_status(null) || '" data-hits="" data-linenumber="' || line_no || '">
<code class="sql">' || (dbms_xmlgen.convert(a_source_code(line_no))) ||
'</code></li>';
else
l_hits := to_char(a_coverage_unit.lines(line_no).executions);
if nvl(a_coverage_unit.lines(line_no).covered_blocks,0) < nvl(a_coverage_unit.lines(line_no).no_blocks,0)
and nvl(a_coverage_unit.lines(line_no).partcove,0) = 1 then
l_blocks := to_char(a_coverage_unit.lines(line_no).covered_blocks) || chr(47)||
to_char(a_coverage_unit.lines(line_no).no_blocks);
else
l_blocks := null;
end if;

l_file_part := '
<li class="' || line_status(a_coverage_unit.lines(line_no)) || '" data-hits="' ||
dbms_xmlgen.convert(l_hits)|| '"'||
case
when l_blocks is not null
then ' data-blocks="'||dbms_xmlgen.convert(l_blocks)||'"'
else
null
end
||' data-linenumber="' || (line_no) || '">';
if a_coverage_unit.lines(line_no).executions > 0 then

l_file_part := l_file_part ||
case when l_blocks is not null
then '
<span class="blocks">' ||dbms_xmlgen.convert(l_blocks) ||
'</span>'
else
null
end
|| '
<span class="hits">' || dbms_xmlgen.convert(l_hits) ||
'</span>';
end if;
l_file_part := l_file_part || '
<code class="sql">' || (dbms_xmlgen.convert(a_source_code(line_no))) ||
'</code></li>';
end if;
ut_utils.append_to_clob(l_result, l_file_part);
end loop;

l_file_part := '</ol></pre></div>';
ut_utils.append_to_clob(l_result, l_file_part);
return l_result;
end;
begin
l_source_code := ut_coverage_helper.get_tmp_table_object_lines(a_unit.owner, a_unit.name);
dbms_lob.createtemporary(l_result, true);
l_result := build_details_file_content(a_object_id
,a_unit.identity
,l_source_code
,a_unit_coverage
);
return l_result;
end;

function get_block_list_attributes(a_coverage_unit ut_coverage.t_coverage) return varchar2 is
l_result varchar2(32767);
begin
if (a_coverage_unit.partcovered_lines is not null) OR (a_coverage_unit.partcovered_lines > 0) then
l_result := ' (including <span class="yellow"><b>'|| a_coverage_unit.partcovered_lines ||'</b> lines partially covered</span> )';
else
l_result := null;
end if;
return l_result;
end;

function file_list(a_title varchar2, a_coverage ut_coverage.t_coverage) return clob is
l_file_part varchar2(32767);
l_title varchar2(100) := 'All files';
l_coverage_pct number(5, 2);
l_coverage_block_pct number(5, 2);
l_result clob;
l_id varchar2(50) := object_id(a_title);
l_unit_coverage ut_coverage.t_unit_coverage;
l_unit ut_coverage.t_object_name;
begin
l_coverage_pct := coverage_pct(a_coverage.covered_lines, a_coverage.uncovered_lines);

dbms_lob.createtemporary(l_result, true);

l_file_part := '<div class="file_list_container" id="' || l_id || '">' || '<h2><span class="group_name">' || l_title ||
'</span>' || ' (<span class="covered_percent"><span class="' || coverage_css_class(l_coverage_pct) || '">' ||
l_coverage_pct || '%</span></span>' || ' lines covered'||
' at <span class="covered_strength">' ||
'<span class="' ||line_hits_css_class(executions_per_line(a_coverage.executions
,a_coverage.uncovered_lines + a_coverage.covered_lines)) || '">' ||
executions_per_line(a_coverage.executions, a_coverage.uncovered_lines + a_coverage.covered_lines)
|| '</span></span> hits/line)</h2>' || '<a name="' || l_id || '"></a>' || '<div><b>' ||
a_coverage.objects.count || '</b> files in total. </div><div>' || '<b>' ||
(a_coverage.uncovered_lines + a_coverage.covered_lines)
|| '</b> relevant lines. ' || '<span class="green"><b>' || a_coverage.covered_lines ||
'</b> lines covered</span>'|| get_block_list_attributes(a_coverage)
||' and <span class="red"><b>' || a_coverage.uncovered_lines || '</b> lines missed.</span>'||
'<table class="file_list"><thead>' || '<tr>' ||
'<th>File</th><th>% covered</th><th>Lines</th><th>Relevant Lines</th><th>Lines covered</th><th>Lines missed</th><th>'
||'Avg. Hits / Line </th>' ||
'</tr></thead><tbody>';
ut_utils.append_to_clob(l_result, l_file_part);
l_unit := a_coverage.objects.first;
loop
exit when l_unit is null;
l_unit_coverage := a_coverage.objects(l_unit);
l_coverage_pct := coverage_pct(l_unit_coverage.covered_lines, l_unit_coverage.uncovered_lines);

l_file_part := chr(10) || '<tr>' || '<td class="strong">' || link_to_source_file(dbms_xmlgen.convert(l_unit)) ||
'</td>' || '<td class="' || coverage_css_class(l_coverage_pct) || ' strong">' || l_coverage_pct ||
' %</td>' || '<td>' || l_unit_coverage.total_lines || '</td>' || '<td>' ||
(l_unit_coverage.covered_lines + l_unit_coverage.uncovered_lines) || '</td>' || '<td>' ||
l_unit_coverage.covered_lines || '</td><td>' || l_unit_coverage.uncovered_lines || '</td>' ||
'<td>' || to_char(executions_per_line(l_unit_coverage.executions
,l_unit_coverage.uncovered_lines + l_unit_coverage.covered_lines))
|| '</td></tr>';
ut_utils.append_to_clob(l_result, l_file_part);
l_unit := a_coverage.objects.next(l_unit);
end loop;
l_file_part := '</tbody></table></div>';
ut_utils.append_to_clob(l_result, l_file_part);
return l_result;
end;

/*
* public definitions
*/
function get_index(a_coverage_data ut_coverage.t_coverage, a_assets_path varchar2, a_project_name varchar2 := null, a_command_line varchar2 := null)
return clob is

l_file_part varchar2(32767);
l_result clob;
begin
$if dbms_db_version.version = 12 and dbms_db_version.release >= 2 or dbms_db_version.version > 12 $then
l_result := ut_extended_report_html_helper.get_index(a_coverage_data => a_coverage_data, a_assets_path => a_assets_path,a_project_name=>a_project_name,a_command_line=> a_command_line);
$else
l_result := ut_proftab_report_html_helper.get_index(a_coverage_data => a_coverage_data, a_assets_path => a_assets_path,a_project_name=>a_project_name,a_command_line=> a_command_line);
$end
l_title varchar2(250);
l_coverage_pct number(5, 2);
l_time_str varchar2(50);
l_using varchar2(1000);
l_unit ut_coverage.t_full_name;
begin
l_coverage_pct := coverage_pct(a_coverage_data.covered_lines, a_coverage_data.uncovered_lines);

l_time_str := ut_utils.to_string(sysdate);
l_using := case
when a_command_line is not null then
'<br/>using ' || dbms_xmlgen.convert(a_command_line)
end;
dbms_lob.createtemporary(l_result, true);

l_title := case
when a_project_name is null then
'Code coverage'
else
dbms_xmlgen.convert(a_project_name) || ' code coverage'
end;
--TODO - build main file containing total run data and per schema data
l_file_part := '<!DOCTYPE html><html xmlns=''http://www.w3.org/1999/xhtml''><head>' || '<title>' || l_title ||
'</title>' || '<meta http-equiv="content-type" content="text/html; charset=utf-8" />' ||
'<script src=''' || a_assets_path || 'application.js'' type=''text/javascript''></script>' ||
'<link href=''' || a_assets_path ||
'application.css'' media=''screen, projection, print'' rel=''stylesheet'' type=''text/css''>' ||
'<link rel="shortcut icon" type="image/png" href="' || a_assets_path || 'favicon_' ||
coverage_css_class(l_coverage_pct) || '.png" />' || '<link rel="icon" type="image/png" href="' ||
a_assets_path || 'favicon_' || coverage_css_class(l_coverage_pct) || '.png" />' || '</head>' ||
'<body><div id="loading"><img src="' || a_assets_path || 'loading.gif" alt="loading"/></div>' ||
'<div id="wrapper" style="display:none;">' ||
'<div class="timestamp">Generated <abbr class="timeago" title="' || l_time_str || '">' || l_time_str ||
'</abbr></div>' || '<ul class="group_tabs"></ul>' || '<div id="content">';
ut_utils.append_to_clob(l_result, l_file_part);

dbms_lob.append(l_result, file_list('All files', a_coverage_data));

l_file_part := chr(10) || '</div><div id="footer">' ||
'Generated by <a href="http://github.com/utPLSQL/utPLSQL">utPLSQL ' || ut_utils.gc_version ||
'</a><br/>' ||
'Based on <a href="http://github.com/colszowka/simplecov-html">simplecov-html</a> v0.10.0 ' ||
l_using || '' || '</div><div class="source_files">';
ut_utils.append_to_clob(l_result, l_file_part);

l_unit := a_coverage_data.objects.first;
loop
exit when l_unit is null;
dbms_lob.append(l_result
,get_details_file_content(object_id(l_unit)
,ut_object_name(a_coverage_data.objects(l_unit).owner
,a_coverage_data.objects(l_unit).name)
,a_coverage_data.objects(l_unit)
));
l_unit := a_coverage_data.objects.next(l_unit);
end loop;

l_file_part := '</div></div></body></html>';

ut_utils.append_to_clob(l_result, l_file_part);
return l_result;
end;

Expand Down
Loading