aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2022-10-08 00:33:40 +1300
committerGitHub <noreply@github.com>2022-10-08 00:33:40 +1300
commit24f3e397e957a6747a2067edd831bc7920e204ec (patch)
treec8e88edd04574492619296e934465b7866ee0121
parent1e6cdc76e4b11084f85b2b4718090787a500fd69 (diff)
downloadruby-24f3e397e957a6747a2067edd831bc7920e204ec.tar.gz
Add spec for `Coverage.supported?` and `start(eval: true)`. (#6499)
* Don't emit coverage for eval when eval coverage is disabled.
-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;