
30 Aug
2023
30 Aug
'23
2:39 a.m.
Issue #19857 has been updated by ioquatix (Samuel Williams). Example output: ```
./test.rb foo bar {"foo.rb"=>{:lines=>[1, 1, 0, nil, 1, nil, nil]}}
(swap lines)
./test.rb bar foo {"foo.rb"=>{:lines=>[1, 1, 1, nil, 0, nil, nil]}}
----------------------------------------
Bug #19857: Eval coverage is reset after each `eval`.
https://bugs.ruby-lang.org/issues/19857#change-104405
* Author: ioquatix (Samuel Williams)
* Status: Open
* Priority: Normal
* Assignee: ioquatix (Samuel Williams)
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
It seems like `eval` based coverage is reset every time eval is invoked.
```ruby
#!/usr/bin/env ruby
require 'coverage'
def measure(flag)
c = Class.new
c.class_eval(<<~RUBY, "foo.rb", 1)
def foo(flag)
if flag
puts "foo"
else
puts "bar"
end
end
RUBY
return c.new.foo(flag)
end
Coverage.start(lines: true, eval: true)
# Depending on the order of these two operations, different computation is calculated, because the evaluation of the code is considered different, even if the content/path is the same.
measure(false)
measure(true)
p Coverage.result
Further investigation is required. -- https://bugs.ruby-lang.org/