class Covered::Capture
Captures Ruby coverage data and forwards it to another coverage output.
def build_tracer
def build_tracer ::Ruby::Coverage::Tracer.new do |path, iseq| @files[path] ||= begin lines = [] ::Ruby::Coverage.executable_lines(iseq).each do |line| lines[line] = 0 end lines end end end
def clear
def clear super @tracer&.stop @files = {} @tracer = build_tracer @tracer.start end
def execute(source, binding: TOPLEVEL_BINDING)
@parameter binding [Binding] The binding used to evaluate the source.
@parameter source [Covered::Source] The source to execute.
Execute the given source while capturing coverage for it.
def execute(source, binding: TOPLEVEL_BINDING) start eval(source.code!, binding, source.path, source.line_offset) ensure finish end
def finish
Stop coverage collection and add the collected results to the output.
def finish @tracer&.stop @files.each do |path, lines| next if EVAL_PATHS.include?(path) path = self.expand_path(path) # Skip files which don't exist. This can happen if `eval` is used with an invalid/incorrect path: if File.exist?(path) @output.mark(path, 0, lines) else # warn "Skipping coverage for #{path.inspect} because it doesn't exist!" # Ignore. end end @tracer = nil @files = {} super end
def initialize(...)
def initialize(...) super @tracer = nil @files = {} end
def start
def start super @files = {} @tracer = build_tracer @tracer.start end