writing a (very ugly) file coverage report
This commit is contained in:
parent
0422f6f573
commit
1fe35ea23d
@ -0,0 +1,60 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Coverage for <%= @source_file_name %></title>
|
||||||
|
<style>
|
||||||
|
.code {
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>Coverage for <%= @source_file_name %></title>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Line Coverage:</th>
|
||||||
|
<% if @total_lines > 0 %>
|
||||||
|
<td><%= @covered_lines %> / <%= @total_lines %> = <%= (100.0 * @covered_lines / @total_lines).to_i %>%</td>
|
||||||
|
<% else %>
|
||||||
|
<td>-</td>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Branch Coverage:</th>
|
||||||
|
<% if @total_branches > 0 %>
|
||||||
|
<td><%= @covered_branches %> / <%= @total_branches %> = <%= (100.0 * @covered_branches / @total_branches).to_i %>%</td>
|
||||||
|
<% else %>
|
||||||
|
<td>-</td>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Execution Count</th>
|
||||||
|
<th>Branch Count</th>
|
||||||
|
<th>Line</th>
|
||||||
|
<th>Source</th>
|
||||||
|
</tr>
|
||||||
|
<% source_file_lines.each_with_index do |line, i| %>
|
||||||
|
<% line_number = i + 1 %>
|
||||||
|
<tr>
|
||||||
|
<td><%= file_coverage.get_line_count(line_number) %></td>
|
||||||
|
<td>
|
||||||
|
<% if branches = file_coverage.get_branches(line_number) %>
|
||||||
|
<% branches.each_with_index do |(branch_id, branch_coverage), i| %>
|
||||||
|
<% if i > 0 %>
|
||||||
|
<br/>
|
||||||
|
<% end %>
|
||||||
|
<%= branch_coverage[:taken_count] %>
|
||||||
|
<% if branch_coverage[:branch_info] %>
|
||||||
|
(<%= branch_coverage[:branch_info] %>)
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<td><%= line_number %></td>
|
||||||
|
<td class="code"><%= CGI.escape_html(line.chomp).gsub("\t", " " * 4) %></td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1,6 +1,9 @@
|
|||||||
module Gcovinator
|
module Gcovinator
|
||||||
class FileCoverage
|
class FileCoverage
|
||||||
|
|
||||||
|
attr_reader :line_counts
|
||||||
|
attr_reader :branches
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@line_counts = {}
|
@line_counts = {}
|
||||||
@branches = {}
|
@branches = {}
|
||||||
@ -25,7 +28,7 @@ module Gcovinator
|
|||||||
@branches[line_number][branch_id][:branch_info] = branch_info
|
@branches[line_number][branch_id][:branch_info] = branch_info
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_branch(line_number)
|
def get_branches(line_number)
|
||||||
@branches[line_number]
|
@branches[line_number]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ module Gcovinator
|
|||||||
@covered_lines = 0
|
@covered_lines = 0
|
||||||
@total_branches = 0
|
@total_branches = 0
|
||||||
@covered_branches = 0
|
@covered_branches = 0
|
||||||
run(source_file_name, File.join(output_dir, report_file_name))
|
run(source_file_name, File.join(output_dir, report_file_name), file_coverage)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -23,18 +23,33 @@ module Gcovinator
|
|||||||
source_file_name
|
source_file_name
|
||||||
end
|
end
|
||||||
|
|
||||||
def run(source_file_name, output_file_name)
|
def run(source_file_name, output_file_name, file_coverage)
|
||||||
|
analyze(file_coverage)
|
||||||
|
require "cgi"
|
||||||
require "erb"
|
require "erb"
|
||||||
source_file = read_source_file(source_file_name)
|
source_file = read_source_file(source_file_name)
|
||||||
source_file_lines = source_file.lines.to_a
|
source_file_lines = source_file.lines.to_a
|
||||||
file_report_template = File.read(File.join(File.dirname(__FILE__), "../../assets/file_report.html.erb"))
|
file_report_template = File.read(File.join(File.dirname(__FILE__), "../../assets/file_report.html.erb"))
|
||||||
erb = ERB.new(file_report_template, nil, "<>")
|
erb = ERB.new(file_report_template, nil, "<>")
|
||||||
report = erb.run(binding.clone)
|
report = erb.result(binding.clone)
|
||||||
File.open(output_file_name, "w") do |fh|
|
File.open(output_file_name, "w") do |fh|
|
||||||
fh.write(report)
|
fh.write(report)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def analyze(file_coverage)
|
||||||
|
file_coverage.line_counts.each do |line_number, count|
|
||||||
|
@total_lines += 1
|
||||||
|
@covered_lines += 1 if count > 0
|
||||||
|
end
|
||||||
|
file_coverage.branches.each do |line_number, branches|
|
||||||
|
branches.each do |branch_id, branch_coverage|
|
||||||
|
@total_branches += 1
|
||||||
|
@covered_branches += 1 if branch_coverage[:taken_count] > 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def read_source_file(source_file_name)
|
def read_source_file(source_file_name)
|
||||||
begin
|
begin
|
||||||
File.read(source_file_name)
|
File.read(source_file_name)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user