single_cov 1.11.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/single_cov/version.rb +1 -1
- data/lib/single_cov.rb +39 -50
- metadata +89 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e47ea219fd0ed2b3d8911ca9679c4de43988ba900072e7a3efe349275d230f8b
|
|
4
|
+
data.tar.gz: 24410aaf39a37f4301723bc53b76cbccfeb596ceed364a4ebe4dfbdde54a3556
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0dd92b86bfa607cfb908cfaa7fc2a5b8e74da99a92d6a116cc88dbf2b241cc27664c027814989cb6e7d180bed5d7dff65e181c76cb71181340e0d947d7a0d183
|
|
7
|
+
data.tar.gz: c42f4b53dfc9e16cb72b57e8180cf81c9cad57dbf1be0f549ceb480e16dd31d7030130dfca58e731dc3398ff61a82d05eeafb9b5fa2a7b905dd43ca6ab60bfa4
|
data/lib/single_cov/version.rb
CHANGED
data/lib/single_cov.rb
CHANGED
|
@@ -32,7 +32,7 @@ module SingleCov
|
|
|
32
32
|
|
|
33
33
|
def all_covered?(result)
|
|
34
34
|
errors = COVERAGES.flat_map do |file, expected_uncovered|
|
|
35
|
-
next no_coverage_error(file) unless coverage = result["#{root}/#{file}"]
|
|
35
|
+
next no_coverage_error(file) unless (coverage = result["#{root}/#{file}"])
|
|
36
36
|
|
|
37
37
|
uncovered = uncovered(coverage)
|
|
38
38
|
next if uncovered.size == expected_uncovered
|
|
@@ -119,8 +119,7 @@ module SingleCov
|
|
|
119
119
|
|
|
120
120
|
case framework
|
|
121
121
|
when :minitest
|
|
122
|
-
|
|
123
|
-
return if minitest_running_subset_of_tests?
|
|
122
|
+
return if minitest_running_subset_of_tests?(ARGV)
|
|
124
123
|
when :rspec
|
|
125
124
|
return if rspec_running_subset_of_tests?
|
|
126
125
|
else
|
|
@@ -129,15 +128,35 @@ module SingleCov
|
|
|
129
128
|
|
|
130
129
|
start_coverage_recording
|
|
131
130
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
131
|
+
# minitest overrides at_exit, so we need to get into it to execute after it finishes
|
|
132
|
+
# so when using the `minitest` executable or loading minitest before SingleCov the first branch is used
|
|
133
|
+
if defined?(Minitest)
|
|
134
|
+
(class << Minitest; self; end).prepend(Module.new do
|
|
135
|
+
def run(args = [])
|
|
136
|
+
original_args = args.dup # minitest modified them
|
|
137
|
+
result = super
|
|
138
|
+
if result && !SingleCov.send(:minitest_running_subset_of_tests?, original_args)
|
|
139
|
+
return SingleCov.report_at_exit
|
|
140
|
+
end
|
|
141
|
+
result
|
|
142
|
+
end
|
|
143
|
+
end)
|
|
144
|
+
else
|
|
145
|
+
override_at_exit do |status, _exception|
|
|
146
|
+
if main_process? && status == 0 && !report_at_exit
|
|
147
|
+
exit 1
|
|
148
|
+
end
|
|
137
149
|
end
|
|
138
150
|
end
|
|
139
151
|
end
|
|
140
152
|
|
|
153
|
+
def report_at_exit
|
|
154
|
+
return unless enabled?
|
|
155
|
+
results = coverage_results
|
|
156
|
+
generate_report results
|
|
157
|
+
SingleCov.all_covered?(results)
|
|
158
|
+
end
|
|
159
|
+
|
|
141
160
|
# use this in forks when using rspec to silence duplicated output
|
|
142
161
|
def disable
|
|
143
162
|
@disabled = true
|
|
@@ -159,7 +178,7 @@ module SingleCov
|
|
|
159
178
|
end
|
|
160
179
|
|
|
161
180
|
def enabled?
|
|
162
|
-
|
|
181
|
+
!defined?(@disabled) || !@disabled
|
|
163
182
|
end
|
|
164
183
|
|
|
165
184
|
# assuming that the main process will load all the files, we store it's pid
|
|
@@ -168,7 +187,7 @@ module SingleCov
|
|
|
168
187
|
end
|
|
169
188
|
|
|
170
189
|
def main_process?
|
|
171
|
-
|
|
190
|
+
!defined?(@main_process_pid) || @main_process_pid == Process.pid
|
|
172
191
|
end
|
|
173
192
|
|
|
174
193
|
# {[branch_id] => {[branch_part] => coverage}} --> uncovered location
|
|
@@ -230,56 +249,26 @@ module SingleCov
|
|
|
230
249
|
COVERAGES.size == 1
|
|
231
250
|
end
|
|
232
251
|
|
|
233
|
-
# we cannot insert our hooks when minitest is already running
|
|
234
|
-
def minitest_should_not_be_running!
|
|
235
|
-
return unless defined?(Minitest)
|
|
236
|
-
return unless Minitest.class_variable_defined?(:@@installed_at_exit)
|
|
237
|
-
return unless Minitest.class_variable_get(:@@installed_at_exit)
|
|
238
|
-
|
|
239
|
-
# untested
|
|
240
|
-
# https://github.com/rails/rails/pull/26515 rails loads autorun before test
|
|
241
|
-
# but it works out for some reason
|
|
242
|
-
return if Minitest.extensions.include?('rails')
|
|
243
|
-
|
|
244
|
-
# untested
|
|
245
|
-
# forking test runner does some hacky acrobatics to fake minitest status
|
|
246
|
-
# and the resets it ... works out ok in the end ...
|
|
247
|
-
return if faked_by_forking_test_runner?
|
|
248
|
-
|
|
249
|
-
# ... but only if it's used with `--merge-coverage` otherwise the coverage reporting is useless
|
|
250
|
-
if $0.end_with?("/forking-test-runner")
|
|
251
|
-
raise "forking-test-runner only work with single_cov when using --merge-coverage"
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
raise "Load minitest after setting up SingleCov"
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
# ForkingTestRunner fakes an initialized minitest to avoid multiple hooks being installed
|
|
258
|
-
# so hooks still get added in order https://github.com/grosser/forking_test_runner/pull/4
|
|
259
|
-
def faked_by_forking_test_runner?
|
|
260
|
-
defined?(Coverage) && Coverage.respond_to?(:capture_coverage!)
|
|
261
|
-
end
|
|
262
|
-
|
|
263
252
|
# do not record or verify when only running selected tests since it would be missing data
|
|
264
|
-
def minitest_running_subset_of_tests?
|
|
253
|
+
def minitest_running_subset_of_tests?(argv)
|
|
265
254
|
# via direct option (ruby test.rb -n /foo/)
|
|
266
|
-
|
|
255
|
+
# or `minitest foo.rb:123` which is translated to -n
|
|
256
|
+
argv.map { |a| a.split('=', 2).first }.intersect?(['-n', '--name', '-l', '--line']) ||
|
|
267
257
|
|
|
268
|
-
# via testrbl
|
|
269
|
-
(
|
|
258
|
+
# via testrbl, mtest, or rails with direct line number (mtest test.rb:123)
|
|
259
|
+
(argv.first =~ /:\d+\Z/) ||
|
|
270
260
|
|
|
271
261
|
# via rails test which preloads mintest, removes ARGV and fills options
|
|
272
262
|
(
|
|
273
|
-
defined?(Minitest) &&
|
|
274
263
|
defined?(Minitest.reporter) &&
|
|
275
264
|
Minitest.reporter &&
|
|
276
265
|
(reporter = Minitest.reporter.reporters.first) &&
|
|
277
|
-
reporter.options[:filter]
|
|
266
|
+
(reporter.options[:filter] || reporter.options[:include]) # MT 5 vs MT 6
|
|
278
267
|
)
|
|
279
268
|
end
|
|
280
269
|
|
|
281
270
|
def rspec_running_subset_of_tests?
|
|
282
|
-
(
|
|
271
|
+
ARGV.intersect?(['-t', '--tag', '-e', '--example']) || ARGV.any? { |a| a =~ /:\d+$|\[[\d:]+\]$/ }
|
|
283
272
|
end
|
|
284
273
|
|
|
285
274
|
# code stolen from SimpleCov
|
|
@@ -400,7 +389,7 @@ module SingleCov
|
|
|
400
389
|
end
|
|
401
390
|
|
|
402
391
|
# remove test extension
|
|
403
|
-
if !file_part.sub!(/_(?:test|spec)\.rb\b.*/, '.rb') && !file_part.sub!(
|
|
392
|
+
if !file_part.sub!(/_(?:test|spec)\.rb\b.*/, '.rb') && !file_part.sub!('/test_', "/")
|
|
404
393
|
raise "Unable to remove test extension from #{file} ... /test_, _test.rb and _spec.rb are supported"
|
|
405
394
|
end
|
|
406
395
|
end
|
|
@@ -418,14 +407,14 @@ module SingleCov
|
|
|
418
407
|
end
|
|
419
408
|
|
|
420
409
|
def generate_report(results)
|
|
421
|
-
return unless report = coverage_report
|
|
410
|
+
return unless (report = coverage_report)
|
|
422
411
|
|
|
423
412
|
# not a hard dependency for the whole library
|
|
424
413
|
require "json"
|
|
425
414
|
require "fileutils"
|
|
426
415
|
|
|
427
416
|
used = COVERAGES.map { |f, _| "#{root}/#{f}" }
|
|
428
|
-
covered = results.
|
|
417
|
+
covered = results.slice(*used)
|
|
429
418
|
|
|
430
419
|
if coverage_report_lines
|
|
431
420
|
covered = covered.transform_values { |v| v.is_a?(Hash) ? v.fetch(:lines) : v }
|
metadata
CHANGED
|
@@ -1,16 +1,98 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: single_cov
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michael Grosser
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
-
dependencies:
|
|
13
|
-
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: bump
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: minitest
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rake
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rspec
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rubocop
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: simplecov
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0'
|
|
14
96
|
email: michael@grosser.it
|
|
15
97
|
executables: []
|
|
16
98
|
extensions: []
|
|
@@ -23,7 +105,6 @@ homepage: https://github.com/grosser/single_cov
|
|
|
23
105
|
licenses:
|
|
24
106
|
- MIT
|
|
25
107
|
metadata: {}
|
|
26
|
-
post_install_message:
|
|
27
108
|
rdoc_options: []
|
|
28
109
|
require_paths:
|
|
29
110
|
- lib
|
|
@@ -31,15 +112,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
31
112
|
requirements:
|
|
32
113
|
- - ">="
|
|
33
114
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: 2.
|
|
115
|
+
version: 3.2.0
|
|
35
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
36
117
|
requirements:
|
|
37
118
|
- - ">="
|
|
38
119
|
- !ruby/object:Gem::Version
|
|
39
120
|
version: '0'
|
|
40
121
|
requirements: []
|
|
41
|
-
rubygems_version: 3.
|
|
42
|
-
signing_key:
|
|
122
|
+
rubygems_version: 3.6.9
|
|
43
123
|
specification_version: 4
|
|
44
124
|
summary: Actionable code coverage.
|
|
45
125
|
test_files: []
|