summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spec/ruby/library/coverage/result_spec.rb30
-rw-r--r--vm_eval.c5
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
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 @@
**********************************************************************/
+#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,
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;