class Capture
Captures Ruby coverage data and forwards it to another coverage output.
Definitions
def initialize(...)
Initialize capture with independent tracer state.
Implementation
def initialize(...)
super
@tracer = nil
@files = {}
end
def start
Start Ruby coverage collection.
Implementation
def start
super
@files = {}
@tracer = build_tracer
@tracer.start
end
def clear
Clear any collected coverage data without stopping coverage.
Implementation
def clear
super
@tracer&.stop
@files = {}
@tracer = build_tracer
@tracer.start
end
def finish
Stop coverage collection and add the collected results to the output. Ignores Ruby's anonymous eval paths and files that no longer exist.
Implementation
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 execute(source, binding: TOPLEVEL_BINDING)
Execute the given source while capturing coverage for it.
Signature
-
parameter
sourceCovered::Source The source to execute.
-
parameter
bindingBinding The binding used to evaluate the source.
-
returns
Object The result of evaluating the source.
Implementation
def execute(source, binding: TOPLEVEL_BINDING)
start
eval(source.code!, binding, source.path, source.line_offset)
ensure
finish
end