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

ruby-changes:73912

From: Samuel <ko1@a...>
Date: Fri, 7 Oct 2022 20:34:09 +0900 (JST)
Subject: [ruby-changes:73912] 24f3e397e9 (master): Add spec for `Coverage.supported?` and `start(eval: true)`. (#6499)

https://git.ruby-lang.org/ruby.git/commit/?id=24f3e397e9

From 24f3e397e957a6747a2067edd831bc7920e204ec Mon Sep 17 00:00:00 2001
From: Samuel Williams <samuel.williams@o...>
Date: Sat, 8 Oct 2022 00:33:40 +1300
Subject: Add spec for `Coverage.supported?` and `start(eval: true)`. (#6499)

* Don't emit coverage for eval when eval coverage is disabled.
---
 spec/ruby/library/coverage/result_spec.rb | 30 +++++++++++++++++++++++++-----
 vm_eval.c                                 |  5 ++++-
 2 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/spec/ruby/library/coverage/result_spec.rb b/spec/ruby/library/coverage/result_spec.rb
index 61283e4545..4bcce00cd7 100644
--- a/spec/ruby/library/coverage/result_spec.rb
+++ b/spec/ruby/library/coverage/result_spec.rb
@@ -106,15 +106,35 @@ describe 'Coverage.result' do https://github.com/ruby/ruby/blob/trunk/spec/ruby/library/coverage/result_spec.rb#L106
   end
 
   ruby_version_is '3.2' do
-    it 'returns the correct results when eval is used' do
-      Coverage.start
+    it 'indicates support for different features' do
+      Coverage.supported?(:lines).should == true
+    end
+
+    it 'returns the correct results when eval coverage is enabled' do
+      Coverage.supported?(:eval).should == true
+
+      Coverage.start(lines: true, eval: true)
       require @eval_code_file.chomp('.rb')
       result = Coverage.result
 
       result.should == {
-          @eval_code_file => [
-              1, nil, 1, nil, 1, 1, nil, nil, nil, nil, 1
-          ]
+          @eval_code_file => {
+              lines: [1, nil, 1, nil, 1, 1, nil, nil, nil, nil, 1]
+          }
+      }
+    end
+
+    it 'returns the correct results when eval coverage is enabled' do
+      Coverage.supported?(:eval).should == true
+
+      Coverage.start(lines: true, eval: false)
+      require @eval_code_file.chomp('.rb')
+      result = Coverage.result
+
+      result.should == {
+          @eval_code_file => {
+              lines: [1, nil, 1, nil, 1, nil, nil, nil, nil, nil, 1]
+          }
       }
     end
   end
diff --git a/vm_eval.c b/vm_eval.c
index c0558fce2b..a71688c6bc 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -11,6 +11,7 @@ https://github.com/ruby/ruby/blob/trunk/vm_eval.c#L11
 
 **********************************************************************/
 
+#include "internal/thread.h"
 struct local_var_list {
     VALUE tbl;
 };
@@ -1672,7 +1673,9 @@ eval_make_iseq(VALUE src, VALUE fname, int line, const rb_binding_t *bind, https://github.com/ruby/ruby/blob/trunk/vm_eval.c#L1673
     rb_iseq_t *iseq = NULL;
     rb_ast_t *ast;
     int isolated_depth = 0;
-    int coverage_enabled = Qtrue;
+
+    // Conditionally enable coverage depending on the current mode:
+    VALUE coverage_enabled = RBOOL(rb_get_coverage_mode() & COVERAGE_TARGET_EVAL);
 
     {
         int depth = 1;
-- 
cgit v1.2.1


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

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