[前][次][番号順一覧][スレッド一覧]

ruby-changes:20981

From: mame <ko1@a...>
Date: Wed, 24 Aug 2011 00:44:37 +0900 (JST)
Subject: [ruby-changes:20981] mame:r33030 (trunk): * thread.c (update_coverage): skip coverage count up if the current

mame	2011-08-24 00:44:26 +0900 (Wed, 24 Aug 2011)

  New Revision: 33030

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=33030

  Log:
    * thread.c (update_coverage): skip coverage count up if the current
      line is out of the way.  rb_sourceline() is unreliable when source
      code is big.  [ruby-dev:44413]
    
    * test/coverage/test_coverage.rb: add a test for above.

  Modified files:
    trunk/ChangeLog
    trunk/test/coverage/test_coverage.rb
    trunk/thread.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 33029)
+++ ChangeLog	(revision 33030)
@@ -1,3 +1,11 @@
+Wed Aug 24 00:38:22 2011  Yusuke Endoh  <mame@t...>
+
+	* thread.c (update_coverage): skip coverage count up if the current
+	  line is out of the way.  rb_sourceline() is unreliable when source
+	  code is big.  [ruby-dev:44413]
+
+	* test/coverage/test_coverage.rb: add a test for above.
+
 Tue Aug 23 15:23:56 2011  Eric Hodel  <drbrain@s...>
 
 	* load.c (rb_f_require):  Improve documentation of Kernel#require.
Index: thread.c
===================================================================
--- thread.c	(revision 33029)
+++ thread.c	(revision 33030)
@@ -4764,7 +4764,7 @@
 	long line = rb_sourceline() - 1;
 	long count;
 	if (RARRAY_PTR(coverage)[line] == Qnil) {
-	    rb_bug("bug");
+	    return;
 	}
 	count = FIX2LONG(RARRAY_PTR(coverage)[line]) + 1;
 	if (POSFIXABLE(count)) {
Index: test/coverage/test_coverage.rb
===================================================================
--- test/coverage/test_coverage.rb	(revision 33029)
+++ test/coverage/test_coverage.rb	(revision 33030)
@@ -31,13 +31,34 @@
 
         Coverage.start
         require tmp + '/test.rb'
-        Coverage.result
+        assert_equal 3, Coverage.result[tmp + '/test.rb'].size
         Coverage.start
         coverage_test_method
-        assert_equal 1, Coverage.result.size
+        assert_equal 0, Coverage.result[tmp + '/test.rb'].size
       }
     }
   ensure
     $".replace loaded_features
   end
+
+  def test_big_code
+    loaded_features = $".dup
+
+    Dir.mktmpdir {|tmp|
+      Dir.chdir(tmp) {
+        File.open("test.rb", "w") do |f|
+          f.puts "p\n" * 10000
+          f.puts "def ignore(x); end"
+          f.puts "ignore([1"
+          f.puts "])"
+        end
+
+        Coverage.start
+        require tmp + '/test.rb'
+        assert_equal 10003, Coverage.result[tmp + '/test.rb'].size
+      }
+    }
+  ensure
+    $".replace loaded_features
+  end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]