class GCOV::File
Attributes
lines[R]
meta[R]
name[R]
stats[R]
Public Class Methods
demangle(filename)
click to toggle source
# File lib/file.rb, line 119 def self.demangle filename result = filename.dup if start = result.index(/###/) result = result[start..-1] end result.gsub!( /(###|#|\^|\.gcov$)/, {"###"=>"/","#"=>"/","^"=>"..",".gcov"=>""} ) result = ::Pathname.new(result).cleanpath.to_s result end
load(filename)
click to toggle source
# File lib/file.rb, line 93 def self.load filename files = [] file = nil ::File.open(filename, "r") do |file_handle| file_handle.each_line do |line_| line = GCOV::Line.parse(line_) if line.number == 0 key,val = /([^:]+):(.*)$/.match(line.text).to_a[1..2] if key == 'Source' if !file.nil? file._update_stats files << file end # if file = GCOV::File.new val end # if source end # if line == 0 file._add_line line end # each line end# file_handle if file file._update_stats files << file end # if file files end
new(name)
click to toggle source
# File lib/file.rb, line 22 def initialize name fail "name required" unless name and name.is_a? String @name = name @lines = {} @meta = {} @stats = {} _update_stats end
Public Instance Methods
<<(line)
click to toggle source
# File lib/file.rb, line 88 def <<(line) fail "need to be in add_lines block" unless @adding _add_line line end
_add_line(line)
click to toggle source
# File lib/file.rb, line 79 def _add_line line if line.number == 0 key,val = /([^:]+):(.*)$/.match(line.text).to_a[1..2] @meta[key] = val else @lines[line.number] = line end end
_update_stats()
click to toggle source
# File lib/file.rb, line 44 def _update_stats @stats = { :missed_lines => 0, :exec_lines => 0, :empty_lines => 0, :total_exec => 0, :total_lines => 0, :lines => 0, :coverage => 0.0, :hits_per_line => 0.0 } @lines.each do |index,line| @stats[:missed_lines] += (line.state == :missed).to_i @stats[:exec_lines] += (line.state == :exec).to_i @stats[:total_exec] += (line.count.is_a?(Integer) ? line.count : 0 ) @stats[:empty_lines] += (line.state == :none).to_i end @stats[:lines] = @stats[:exec_lines] + @stats[:missed_lines] @stats[:total_lines] = @stats[:lines] + @stats[:empty_lines] if @stats[:lines] > 0 @stats[:coverage] = @stats[:exec_lines].to_f / @stats[:lines].to_f @stats[:hits_per_line] = @stats[:total_exec].to_f / @stats[:lines] else @stats[:coverage] = 1 @stats[:hits_per_line] = 0 end @stats[:coverage_s] = sprintf("%0.01f%",100.0*@stats[:coverage]) @stats[:hits_per_line_s] = sprintf("%0.02f",@stats[:hits_per_line]) end
add_lines() { || ... }
click to toggle source
# File lib/file.rb, line 36 def add_lines &block fail "add_lines requires a block" unless block_given? @adding = true yield @adding = false _update_stats end
merge(other)
click to toggle source
# File lib/file.rb, line 141 def merge other result = self.dup result.merge! other result end
merge!(other)
click to toggle source
# File lib/file.rb, line 130 def merge! other other.lines.each do |line| if @lines.has_key? line.number @lines[line.number].merge! line else @lines[line.number] = line end end _update_stats end