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
end
It 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: