From: Xavier Shay Date: 2011-06-05T15:15:34+09:00 Subject: [ruby-core:36745] [Ruby 1.9 - Feature #4796] Coverage should be restartable Issue #4796 has been updated by Xavier Shay. I tried this patch and it works as expected. Here is a patch for the test case, slightly cleaned up: diff --git a/test/coverage/test_coverage.rb b/test/coverage/test_coverage.rb index ace49d3..56966b1 100644 --- a/test/coverage/test_coverage.rb +++ b/test/coverage/test_coverage.rb @@ -1,5 +1,6 @@ require "test/unit" require "coverage" +require "tmpdir" class TestCoverage < Test::Unit::TestCase def test_result_without_start @@ -14,4 +15,29 @@ class TestCoverage < Test::Unit::TestCase assert_kind_of(Array, val) end end + + def test_restarting_coverage + loaded_features = $".dup + + Dir.mktmpdir {|tmp| + Dir.chdir(tmp) { + File.open("test.rb", "w") do |f| + f.puts <<-EOS + def coverage_test_method + :ok + end + EOS + end + + Coverage.start + require tmp + '/test.rb' + Coverage.result + Coverage.start + coverage_test_method + assert_equal 1, Coverage.result.size + } + } + ensure + $".replace loaded_features + end end ---------------------------------------- Feature #4796: Coverage should be restartable http://redmine.ruby-lang.org/issues/4796 Author: Xavier Shay Status: Assigned Priority: Normal Assignee: Yusuke Endoh Category: lib Target version: 1.9.3 I would like a way to be able to make the following test past: 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 assert_equal 1, Coverage.result.size } } end end The problem is that `Coverage.start` doesn't track any files loaded before it is called. This is probably desired behaviour so that stdlib files are not tracked, but it limits the usefulness of Coverage. Specifically, I am trying to collate coverage reports from workers in multiple processes. Also I want to associate coverages with specific tests (this test executed this code, etc...). This is very difficult without being able to restart. What would be involved in doing this? If you point me in the right direction I can perhaps have a go. -- http://redmine.ruby-lang.org