From: tenderlove@... Date: 2018-01-14T23:53:33+00:00 Subject: [ruby-core:84862] [Ruby trunk Bug#9572] Restarting Coverage does not produce correct coverage result Issue #9572 has been updated by tenderlovemaking (Aaron Patterson). > The more important piece of the change is being able to pause and resume coverage. Pause / Resume just seems like ignoring coverage information for some code. This case seems like you can handle by taking snapshots around the execution you want to ignore, and doing the appropriate math. > Especially being able to continue getting coverage results for files already required. This might be pretty tricky. Enabling code coverage changes the way code is compiled. Since the code is compiled when you require it, you'd have to go back and recompile it. Here is an example: ~~~ require 'coverage' code = <<-eoruby def method_a puts "method_a called" end def method_b puts "method_b_called" end method_a method_b eoruby iseq = RubyVM::InstructionSequence.compile code puts iseq.disasm Coverage.start iseq = RubyVM::InstructionSequence.compile code puts iseq.disasm ~~~ If you run this code, you'll see that the instructions emitted are different on the second call (specifically calls like `0028 trace 131072`). The coverage tool uses these instructions to record coverage information. Files that have been required before the coverage tool has been enabled simply don't have these instructions. ---------------------------------------- Bug #9572: Restarting Coverage does not produce correct coverage result https://bugs.ruby-lang.org/issues/9572#change-69576 * Author: sean_ferguson (Sean Ferguson) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.6.0dev (2018-01-13 trunk 61811) [x86_64-darwin15] * Backport: ---------------------------------------- Feature 4796(https://www.ruby-forum.com/topic/1811306#1001864) appears to have a bug in it. While the test listed there does pass the following test does not:
require "test/unit" require "coverage" require 'tmpdir' class TestCoverage < Test::Unit::TestCase def test_restarting_coverage Dir.mktmpdir {|tmp| Dir.chdir(tmp) { File.open("test.rb", "w") do |f| f.puts <<-EOS def coverage_test_method puts :ok end EOS end Coverage.start require tmp + '/test.rb' Coverage.result Coverage.start coverage_test_method result = Coverage.result assert_equal 1, result.size assert_equal [0, 1, nil], result.first[1] # coverage stats show an empty array here } } end endIt appears that while the coverage is finding the correct files it is not giving any coverage stats for those files. Knowing this information would be very helpful in determining test coverage data for individual test files. I'm not very familiar with how the coverage library works, but if you can point me at where to look I can give fixing it a try. Thanks, Sean Ferguson -- https://bugs.ruby-lang.org/ Unsubscribe: