start logic to record line and branch coverage information in FileCoverage class

This commit is contained in:
Josh Holtrop 2017-01-15 13:05:32 -05:00
parent f0b5a36252
commit 894c426cbf
2 changed files with 52 additions and 0 deletions

View File

@ -1,4 +1,33 @@
module Gcovinator
class FileCoverage
def initialize
@line_counts = {}
@branches = {}
end
def log_line_count(line_number, count)
@line_counts[line_number] ||= 0
@line_counts[line_number] += count
end
def get_line_count(line_number)
@line_counts[line_number]
end
def log_branch(line_number, branch_id, taken_count, branch_info)
@branches[line_number] ||= {}
@branches[line_number][branch_id] ||= {
taken_count: 0,
branch_info: nil,
}
@branches[line_number][branch_id][:taken_count] += taken_count
@branches[line_number][branch_id][:branch_info] = branch_info
end
def get_branch(line_number)
@branches[line_number]
end
end
end

View File

@ -5,6 +5,7 @@ module Gcovinator
def parse(gcov_file, file_coverages, build_dir, source_dirs)
gcov_file = File.read(gcov_file)
file_coverage = nil
current_line_number = nil
gcov_file.each_line do |line|
if line =~ /^\s+\S*:\s*\d*:Source:(.*)$/
filename = $1
@ -20,6 +21,28 @@ module Gcovinator
next
end
next unless file_coverage
if line =~ /^\s*(\S+):\s*(\d+):/
line_coverage, current_line_number = $1, $2.to_i
if (line_coverage =~ /^#+$/) or
(line_coverage =~ /^\$+$/) or
(line_coverage =~ /^=+$/)
file_coverage.log_line_count(current_line_number, 0)
elsif line_coverage =~ /^\d+$/
file_coverage.log_line_count(current_line_number, line_coverage.to_i)
end
next
end
if line =~ /^branch\s+(\d+)\s+(.*)$/
branch_id, taken_extra = $1.to_i, $2
branch_info = nil
if taken_extra =~ /never.executed/
taken_count = 0
elsif taken_extra =~ /taken\s+(\d+)(?:.*\((.*)\))?/
taken_count = $1.to_i
branch_info = $2
end
file_coverage.log_branch(current_line_number, branch_id, taken_count, branch_info)
end
end
end