start logic to record line and branch coverage information in FileCoverage class
This commit is contained in:
parent
f0b5a36252
commit
894c426cbf
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user