diff options
author | Samuel Williams <[email protected]> | 2022-09-29 00:08:03 +1300 |
---|---|---|
committer | Samuel Williams <[email protected]> | 2022-09-29 09:44:14 +1300 |
commit | bd2fbd35888413217337dd327ad90015c0322d12 (patch) | |
tree | 5c669b72d799558f1b98de53b442f732ebc61cfc /ext/coverage/coverage.c | |
parent | 9dd902b83186ad6f9d0a553da2ca114bac6ab7b5 (diff) |
Add `Coverage.supported?` to detect what modes are supported.
Diffstat (limited to 'ext/coverage/coverage.c')
-rw-r--r-- | ext/coverage/coverage.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/ext/coverage/coverage.c b/ext/coverage/coverage.c index 6978bb24cb..c8229ae8fe 100644 --- a/ext/coverage/coverage.c +++ b/ext/coverage/coverage.c @@ -24,6 +24,32 @@ static int current_mode; static VALUE me2counter = Qnil; /* + * call-seq: Coverage.supported?(mode) -> true or false + * + * Returns true if coverage measurement is supported for the given mode. + * + * The mode should be one of the following symbols: + * +:lines+, +:branches+, +:methods+, +:eval+. + * + * Example: + * + * Coverage.supported?(:lines) #=> true + * Coverage.supported?(:all) #=> false + */ +static VALUE +rb_coverage_supported(VALUE self, VALUE _mode) +{ + ID mode = RB_SYM2ID(_mode); + + return RBOOL( + mode == rb_intern("lines") || + mode == rb_intern("branches") || + mode == rb_intern("methods") || + mode == rb_intern("eval") + ); +} + +/* * call-seq: * Coverage.setup => nil * Coverage.setup(:all) => nil @@ -590,6 +616,9 @@ void Init_coverage(void) { VALUE rb_mCoverage = rb_define_module("Coverage"); + + rb_define_singleton_method(rb_mCoverage, "supported?", rb_coverage_supported, 1); + rb_define_module_function(rb_mCoverage, "setup", rb_coverage_setup, -1); rb_define_module_function(rb_mCoverage, "start", rb_coverage_start, -1); rb_define_module_function(rb_mCoverage, "resume", rb_coverage_resume, 0); |