Skip to content

Commit f12bd96

Browse files
committed
Refactored a bit logic for result's format
1 parent 64602f4 commit f12bd96

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

lib/truffle/coverage.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def self.start(modes = UNDEFINED)
3131
raise 'cannot enable lines and oneshot_lines simultaneously'
3232
end
3333

34-
@lines = Primitive.as_boolean(options[:lines]) # presence of :lines affects `result`'s report format
34+
@default_mode = (modes == UNDEFINED)
3535
Truffle::Coverage.enable
3636

3737
nil
@@ -41,10 +41,11 @@ def self.result(stop: true, clear: true)
4141
result = peek_result
4242
Truffle::Coverage.disable if stop || clear
4343
Truffle::Coverage.enable if !stop && clear
44-
# We have to wrap the coverage lines array in a hash with the :lines key if
45-
# the :lines option was given
46-
if @lines
47-
result.transform_values! do |_,*lines_array|
44+
45+
# if there is only the default mode (:lines only) - return result as array per file,
46+
# otherwise return result for each mode separately (e.g. for :branches, :methods, :lines)
47+
if !@default_mode
48+
result.transform_values! do |_, *lines_array|
4849
# need to add nil to the beginning of each lines array, because the
4950
# first line has index 1 and not 0
5051
{ lines: lines_array.unshift(nil) }

spec/ruby/library/coverage/result_spec.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,41 @@
2626
}
2727
end
2828

29+
ruby_version_is "3.2" do
30+
it 'returns results for each mode separately when enabled :all modes' do
31+
Coverage.start(:all)
32+
require @class_file.chomp('.rb')
33+
result = Coverage.result
34+
35+
result.should == {
36+
@class_file => {
37+
:lines => [
38+
nil, nil, 1, nil, nil, 1, nil, nil, 0, nil, nil, nil, nil, nil, nil, nil
39+
],
40+
:branches => {},
41+
:methods => {
42+
[SomeClass, :some_method, 6, 2, 11, 5] => 0
43+
}
44+
}
45+
}
46+
end
47+
48+
it 'returns results for each mode separately when enabled any mode explicitly' do
49+
Coverage.start(lines: true)
50+
require @class_file.chomp('.rb')
51+
result = Coverage.result
52+
53+
result.should == {
54+
@class_file =>
55+
{
56+
:lines=> [
57+
nil, nil, 1, nil, nil, 1, nil, nil, 0, nil, nil, nil, nil, nil, nil, nil
58+
]
59+
}
60+
}
61+
end
62+
end
63+
2964
it 'no requires/loads should give empty hash' do
3065
Coverage.start
3166
result = Coverage.result

spec/tags/library/coverage/result_tags.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ fails:Coverage.result second Coverage.start give exception
22
fails:Coverage.result indicates support for different features
33
fails:Coverage.result returns the correct results when eval coverage is enabled
44
fails:Coverage.result returns the correct results when eval coverage is disabled
5+
fails:Coverage.result returns results for each mode separately when enabled :all modes

0 commit comments

Comments
 (0)