simplecov 0.16.1 → 0.22.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 +5 -5
- data/CHANGELOG.md +112 -402
- data/README.md +391 -127
- data/doc/alternate-formatters.md +21 -1
- data/doc/commercial-services.md +5 -0
- data/lib/minitest/simplecov_plugin.rb +15 -0
- data/lib/simplecov/combine/branches_combiner.rb +32 -0
- data/lib/simplecov/combine/files_combiner.rb +24 -0
- data/lib/simplecov/combine/lines_combiner.rb +43 -0
- data/lib/simplecov/combine/results_combiner.rb +60 -0
- data/lib/simplecov/combine.rb +30 -0
- data/lib/simplecov/command_guesser.rb +6 -3
- data/lib/simplecov/configuration.rb +210 -15
- data/lib/simplecov/coverage_statistics.rb +56 -0
- data/lib/simplecov/default_formatter.rb +20 -0
- data/lib/simplecov/defaults.rb +15 -12
- data/lib/simplecov/exit_codes/exit_code_handling.rb +29 -0
- data/lib/simplecov/exit_codes/maximum_coverage_drop_check.rb +83 -0
- data/lib/simplecov/exit_codes/minimum_coverage_by_file_check.rb +54 -0
- data/lib/simplecov/exit_codes/minimum_overall_coverage_check.rb +53 -0
- data/lib/simplecov/exit_codes.rb +5 -0
- data/lib/simplecov/file_list.rb +72 -13
- data/lib/simplecov/filter.rb +9 -6
- data/lib/simplecov/formatter/multi_formatter.rb +5 -7
- data/lib/simplecov/formatter/simple_formatter.rb +4 -4
- data/lib/simplecov/formatter.rb +2 -2
- data/lib/simplecov/last_run.rb +3 -1
- data/lib/simplecov/lines_classifier.rb +5 -5
- data/lib/simplecov/no_defaults.rb +1 -1
- data/lib/simplecov/process.rb +19 -0
- data/lib/simplecov/profiles/hidden_filter.rb +5 -0
- data/lib/simplecov/profiles/rails.rb +1 -1
- data/lib/simplecov/profiles.rb +9 -7
- data/lib/simplecov/result.rb +18 -12
- data/lib/simplecov/result_adapter.rb +30 -0
- data/lib/simplecov/result_merger.rb +130 -59
- data/lib/simplecov/simulate_coverage.rb +29 -0
- data/lib/simplecov/source_file/branch.rb +84 -0
- data/lib/simplecov/source_file/line.rb +72 -0
- data/lib/simplecov/source_file.rb +279 -127
- data/lib/simplecov/useless_results_remover.rb +18 -0
- data/lib/simplecov/version.rb +1 -1
- data/lib/simplecov.rb +310 -121
- metadata +48 -50
- data/CONTRIBUTING.md +0 -51
- data/ISSUE_TEMPLATE.md +0 -23
- data/lib/simplecov/jruby_fix.rb +0 -44
- data/lib/simplecov/railtie.rb +0 -9
- data/lib/simplecov/railties/tasks.rake +0 -13
- data/lib/simplecov/raw_coverage.rb +0 -41
data/lib/simplecov.rb
CHANGED
@@ -2,29 +2,31 @@
|
|
2
2
|
|
3
3
|
require "English"
|
4
4
|
|
5
|
-
#
|
6
|
-
# Code coverage for ruby 1.9. Please check out README for a full introduction.
|
7
|
-
#
|
8
5
|
# Coverage may be inaccurate under JRUBY.
|
9
|
-
if defined?(JRUBY_VERSION) && defined?(JRuby)
|
6
|
+
if defined?(JRUBY_VERSION) && defined?(JRuby) && !org.jruby.RubyInstanceConfig.FULL_TRACE_ENABLED
|
10
7
|
|
11
8
|
# @see https://github.com/jruby/jruby/issues/1196
|
12
9
|
# @see https://github.com/metricfu/metric_fu/pull/226
|
13
|
-
# @see https://github.com/
|
14
|
-
# @see https://github.com/
|
10
|
+
# @see https://github.com/simplecov-ruby/simplecov/issues/420
|
11
|
+
# @see https://github.com/simplecov-ruby/simplecov/issues/86
|
15
12
|
# @see https://jira.codehaus.org/browse/JRUBY-6106
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
' or set the "debug.fullTrace=true" option in your .jrubyrc'
|
21
|
-
end
|
14
|
+
warn 'Coverage may be inaccurate; set the "--debug" command line option,' \
|
15
|
+
' or do JRUBY_OPTS="--debug"' \
|
16
|
+
' or set the "debug.fullTrace=true" option in your .jrubyrc'
|
22
17
|
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# Code coverage for ruby. Please check out README for a full introduction.
|
21
|
+
#
|
23
22
|
module SimpleCov
|
24
23
|
class << self
|
25
|
-
attr_accessor :running
|
26
|
-
|
27
|
-
|
24
|
+
attr_accessor :running, :pid
|
25
|
+
|
26
|
+
# Basically, should we take care of at_exit behavior or something else?
|
27
|
+
# Used by the minitest plugin. See lib/minitest/simplecov_plugin.rb
|
28
|
+
attr_accessor :external_at_exit
|
29
|
+
alias external_at_exit? external_at_exit
|
28
30
|
|
29
31
|
#
|
30
32
|
# Sets up SimpleCov to run against your project.
|
@@ -44,35 +46,52 @@ module SimpleCov
|
|
44
46
|
# Please check out the RDoc for SimpleCov::Configuration to find about available config options
|
45
47
|
#
|
46
48
|
def start(profile = nil, &block)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
49
|
+
require "coverage"
|
50
|
+
initial_setup(profile, &block)
|
51
|
+
require_relative "./simplecov/process" if SimpleCov.enabled_for_subprocesses? &&
|
52
|
+
::Process.respond_to?(:fork)
|
53
|
+
|
54
|
+
make_parallel_tests_available
|
55
|
+
|
56
|
+
@result = nil
|
57
|
+
self.pid = Process.pid
|
58
|
+
|
59
|
+
start_coverage_measurement
|
59
60
|
end
|
60
61
|
|
61
62
|
#
|
62
|
-
#
|
63
|
-
# the line-by-line coverage to zero (if relevant) or nil (comments / whitespace etc).
|
63
|
+
# Collate a series of SimpleCov result files into a single SimpleCov output.
|
64
64
|
#
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
65
|
+
# You can optionally specify configuration with a block:
|
66
|
+
# SimpleCov.collate Dir["simplecov-resultset-*/.resultset.json"]
|
67
|
+
# OR
|
68
|
+
# SimpleCov.collate Dir["simplecov-resultset-*/.resultset.json"], 'rails' # using rails profile
|
69
|
+
# OR
|
70
|
+
# SimpleCov.collate Dir["simplecov-resultset-*/.resultset.json"] do
|
71
|
+
# add_filter 'test'
|
72
|
+
# end
|
73
|
+
# OR
|
74
|
+
# SimpleCov.collate Dir["simplecov-resultset-*/.resultset.json"], 'rails' do
|
75
|
+
# add_filter 'test'
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# Please check out the RDoc for SimpleCov::Configuration to find about
|
79
|
+
# available config options, or checkout the README for more in-depth
|
80
|
+
# information about coverage collation
|
81
|
+
#
|
82
|
+
# By default `collate` ignores the merge_timeout so all results of all files specified will be
|
83
|
+
# merged together. If you want to honor the merge_timeout then provide the keyword argument
|
84
|
+
# `ignore_timeout: false`.
|
85
|
+
#
|
86
|
+
def collate(result_filenames, profile = nil, ignore_timeout: true, &block)
|
87
|
+
raise "There are no reports to be merged" if result_filenames.empty?
|
70
88
|
|
71
|
-
|
72
|
-
end
|
73
|
-
end
|
89
|
+
initial_setup(profile, &block)
|
74
90
|
|
75
|
-
result
|
91
|
+
# Use the ResultMerger to produce a single, merged result, ready to use.
|
92
|
+
@result = ResultMerger.merge_and_store(*result_filenames, ignore_timeout: ignore_timeout)
|
93
|
+
|
94
|
+
run_exit_tasks!
|
76
95
|
end
|
77
96
|
|
78
97
|
#
|
@@ -83,13 +102,12 @@ module SimpleCov
|
|
83
102
|
return @result if result?
|
84
103
|
|
85
104
|
# Collect our coverage result
|
86
|
-
if running
|
87
|
-
@result = SimpleCov::Result.new add_not_loaded_files(Coverage.result)
|
88
|
-
end
|
105
|
+
process_coverage_result if running
|
89
106
|
|
90
107
|
# If we're using merging of results, store the current result
|
91
108
|
# first (if there is one), then merge the results and return those
|
92
109
|
if use_merging
|
110
|
+
wait_for_other_processes
|
93
111
|
SimpleCov::ResultMerger.store_result(@result) if result?
|
94
112
|
@result = SimpleCov::ResultMerger.merged_result
|
95
113
|
end
|
@@ -146,22 +164,6 @@ module SimpleCov
|
|
146
164
|
load_profile(name)
|
147
165
|
end
|
148
166
|
|
149
|
-
#
|
150
|
-
# Checks whether we're on a proper version of Ruby (likely 1.9+) which
|
151
|
-
# provides coverage support
|
152
|
-
#
|
153
|
-
def usable?
|
154
|
-
return @usable if defined?(@usable) && !@usable.nil?
|
155
|
-
|
156
|
-
@usable = begin
|
157
|
-
require "coverage"
|
158
|
-
require "simplecov/jruby_fix"
|
159
|
-
true
|
160
|
-
rescue LoadError
|
161
|
-
false
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
167
|
#
|
166
168
|
# Clear out the previously cached .result. Primarily useful in testing
|
167
169
|
#
|
@@ -169,41 +171,73 @@ module SimpleCov
|
|
169
171
|
@result = nil
|
170
172
|
end
|
171
173
|
|
174
|
+
def at_exit_behavior
|
175
|
+
# If we are in a different process than called start, don't interfere.
|
176
|
+
return if SimpleCov.pid != Process.pid
|
177
|
+
|
178
|
+
# If SimpleCov is no longer running then don't run exit tasks
|
179
|
+
SimpleCov.run_exit_tasks! if SimpleCov.running
|
180
|
+
end
|
181
|
+
|
182
|
+
# @api private
|
172
183
|
#
|
173
|
-
#
|
174
|
-
# This will get called inside the at_exit block
|
184
|
+
# Called from at_exit block
|
175
185
|
#
|
176
|
-
def
|
177
|
-
|
186
|
+
def run_exit_tasks!
|
187
|
+
error_exit_status = exit_status_from_exception
|
188
|
+
|
189
|
+
at_exit.call
|
190
|
+
|
191
|
+
exit_and_report_previous_error(error_exit_status) if previous_error?(error_exit_status)
|
192
|
+
process_results_and_report_error if ready_to_process_results?
|
178
193
|
end
|
179
194
|
|
195
|
+
#
|
196
|
+
# @api private
|
180
197
|
#
|
181
198
|
# Returns the exit status from the exit exception
|
182
199
|
#
|
183
200
|
def exit_status_from_exception
|
184
|
-
|
201
|
+
# Capture the current exception if it exists
|
202
|
+
@exit_exception = $ERROR_INFO
|
203
|
+
return nil unless @exit_exception
|
185
204
|
|
186
|
-
if exit_exception.is_a?(SystemExit)
|
187
|
-
exit_exception.status
|
205
|
+
if @exit_exception.is_a?(SystemExit)
|
206
|
+
@exit_exception.status
|
188
207
|
else
|
189
208
|
SimpleCov::ExitCodes::EXCEPTION
|
190
209
|
end
|
191
210
|
end
|
192
211
|
|
193
212
|
# @api private
|
213
|
+
def previous_error?(error_exit_status)
|
214
|
+
# Normally it'd be enough to check for previous error but when running test_unit
|
215
|
+
# status is 0
|
216
|
+
error_exit_status && error_exit_status != SimpleCov::ExitCodes::SUCCESS
|
217
|
+
end
|
218
|
+
|
194
219
|
#
|
195
|
-
#
|
220
|
+
# @api private
|
196
221
|
#
|
197
|
-
|
198
|
-
|
222
|
+
# Thinking: Move this behavior earlier so if there was an error we do nothing?
|
223
|
+
def exit_and_report_previous_error(exit_status)
|
224
|
+
warn("Stopped processing SimpleCov as a previous error not related to SimpleCov has been detected") if print_error_status
|
225
|
+
Kernel.exit(exit_status)
|
226
|
+
end
|
199
227
|
|
200
|
-
|
228
|
+
# @api private
|
229
|
+
def ready_to_process_results?
|
230
|
+
final_result_process? && result?
|
231
|
+
end
|
201
232
|
|
202
|
-
|
233
|
+
def process_results_and_report_error
|
234
|
+
exit_status = process_result(result)
|
203
235
|
|
204
236
|
# Force exit with stored status (see github issue #5)
|
205
|
-
|
206
|
-
|
237
|
+
if exit_status.positive?
|
238
|
+
warn("SimpleCov failed with exit #{exit_status} due to a coverage related error") if print_error_status
|
239
|
+
Kernel.exit exit_status
|
240
|
+
end
|
207
241
|
end
|
208
242
|
|
209
243
|
# @api private
|
@@ -211,71 +245,226 @@ module SimpleCov
|
|
211
245
|
# Usage:
|
212
246
|
# exit_status = SimpleCov.process_result(SimpleCov.result, exit_status)
|
213
247
|
#
|
214
|
-
def process_result(result
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
covered_percent = result.covered_percent.round(2)
|
219
|
-
result_exit_status = result_exit_status(result, covered_percent)
|
220
|
-
if result_exit_status == SimpleCov::ExitCodes::SUCCESS # No result errors
|
221
|
-
write_last_run(covered_percent)
|
222
|
-
end
|
248
|
+
def process_result(result)
|
249
|
+
result_exit_status = result_exit_status(result)
|
250
|
+
write_last_run(result) if result_exit_status == SimpleCov::ExitCodes::SUCCESS
|
223
251
|
result_exit_status
|
224
252
|
end
|
225
253
|
|
254
|
+
# @api private
|
255
|
+
CoverageLimits = Struct.new(:minimum_coverage, :minimum_coverage_by_file, :maximum_coverage_drop, keyword_init: true)
|
256
|
+
def result_exit_status(result)
|
257
|
+
coverage_limits = CoverageLimits.new(
|
258
|
+
minimum_coverage: minimum_coverage, minimum_coverage_by_file: minimum_coverage_by_file,
|
259
|
+
maximum_coverage_drop: maximum_coverage_drop
|
260
|
+
)
|
261
|
+
|
262
|
+
ExitCodes::ExitCodeHandling.call(result, coverage_limits: coverage_limits)
|
263
|
+
end
|
264
|
+
|
265
|
+
#
|
226
266
|
# @api private
|
227
267
|
#
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
268
|
+
def final_result_process?
|
269
|
+
# checking for ENV["TEST_ENV_NUMBER"] to determine if the tests are being run in parallel
|
270
|
+
!defined?(ParallelTests) || !ENV["TEST_ENV_NUMBER"] || ParallelTests.last_process?
|
271
|
+
end
|
272
|
+
|
273
|
+
#
|
274
|
+
# @api private
|
275
|
+
#
|
276
|
+
def wait_for_other_processes
|
277
|
+
return unless defined?(ParallelTests) && final_result_process?
|
278
|
+
|
279
|
+
ParallelTests.wait_for_other_processes_to_finish
|
280
|
+
end
|
281
|
+
|
282
|
+
#
|
283
|
+
# @api private
|
284
|
+
#
|
285
|
+
def write_last_run(result)
|
286
|
+
SimpleCov::LastRun.write(result:
|
287
|
+
result.coverage_statistics.transform_values do |stats|
|
288
|
+
round_coverage(stats.percent)
|
289
|
+
end)
|
290
|
+
end
|
291
|
+
|
292
|
+
#
|
293
|
+
# @api private
|
294
|
+
#
|
295
|
+
# Rounding down to be extra strict, see #679
|
296
|
+
def round_coverage(coverage)
|
297
|
+
coverage.floor(2)
|
298
|
+
end
|
299
|
+
|
300
|
+
private
|
301
|
+
|
302
|
+
def initial_setup(profile, &block)
|
303
|
+
load_profile(profile) if profile
|
304
|
+
configure(&block) if block_given?
|
305
|
+
self.running = true
|
306
|
+
end
|
307
|
+
|
308
|
+
#
|
309
|
+
# Trigger Coverage.start depends on given config coverage_criterion
|
310
|
+
#
|
311
|
+
# With Positive branch it supports all coverage measurement types
|
312
|
+
# With Negative branch it supports only line coverage measurement type
|
313
|
+
#
|
314
|
+
def start_coverage_measurement
|
315
|
+
# This blog post gives a good run down of the coverage criterias introduced
|
316
|
+
# in Ruby 2.5: https://blog.bigbinary.com/2018/04/11/ruby-2-5-supports-measuring-branch-and-method-coverages.html
|
317
|
+
# There is also a nice writeup of the different coverage criteria made in this
|
318
|
+
# comment https://github.com/simplecov-ruby/simplecov/pull/692#discussion_r281836176 :
|
319
|
+
# Ruby < 2.5:
|
320
|
+
# https://github.com/ruby/ruby/blob/v1_9_3_374/ext/coverage/coverage.c
|
321
|
+
# traditional mode (Array)
|
322
|
+
#
|
323
|
+
# Ruby 2.5:
|
324
|
+
# https://bugs.ruby-lang.org/issues/13901
|
325
|
+
# https://github.com/ruby/ruby/blob/v2_5_3/ext/coverage/coverage.c
|
326
|
+
# default: traditional/compatible mode (Array)
|
327
|
+
# :lines - like traditional mode but using Hash
|
328
|
+
# :branches
|
329
|
+
# :methods
|
330
|
+
# :all - same as lines + branches + methods
|
331
|
+
#
|
332
|
+
# Ruby >= 2.6:
|
333
|
+
# https://bugs.ruby-lang.org/issues/15022
|
334
|
+
# https://github.com/ruby/ruby/blob/v2_6_3/ext/coverage/coverage.c
|
335
|
+
# default: traditional/compatible mode (Array)
|
336
|
+
# :lines - like traditional mode but using Hash
|
337
|
+
# :branches
|
338
|
+
# :methods
|
339
|
+
# :oneshot_lines - can not be combined with lines
|
340
|
+
# :all - same as lines + branches + methods
|
341
|
+
#
|
342
|
+
if coverage_start_arguments_supported?
|
343
|
+
start_coverage_with_criteria
|
245
344
|
else
|
246
|
-
|
345
|
+
Coverage.start unless Coverage.running?
|
247
346
|
end
|
248
347
|
end
|
249
|
-
|
348
|
+
|
349
|
+
def start_coverage_with_criteria
|
350
|
+
start_arguments = coverage_criteria.map do |criterion|
|
351
|
+
[lookup_corresponding_ruby_coverage_name(criterion), true]
|
352
|
+
end.to_h
|
353
|
+
|
354
|
+
start_arguments[:eval] = true if coverage_for_eval_enabled?
|
355
|
+
|
356
|
+
Coverage.start(start_arguments) unless Coverage.running?
|
357
|
+
end
|
358
|
+
|
359
|
+
CRITERION_TO_RUBY_COVERAGE = {
|
360
|
+
branch: :branches,
|
361
|
+
line: :lines
|
362
|
+
}.freeze
|
363
|
+
def lookup_corresponding_ruby_coverage_name(criterion)
|
364
|
+
CRITERION_TO_RUBY_COVERAGE.fetch(criterion)
|
365
|
+
end
|
250
366
|
|
251
367
|
#
|
252
|
-
#
|
368
|
+
# Finds files that were to be tracked but were not loaded and initializes
|
369
|
+
# the line-by-line coverage to zero (if relevant) or nil (comments / whitespace etc).
|
253
370
|
#
|
254
|
-
def
|
255
|
-
|
371
|
+
def add_not_loaded_files(result)
|
372
|
+
if tracked_files
|
373
|
+
result = result.dup
|
374
|
+
Dir[tracked_files].each do |file|
|
375
|
+
absolute_path = File.expand_path(file)
|
376
|
+
result[absolute_path] ||= SimulateCoverage.call(absolute_path)
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
result
|
381
|
+
end
|
382
|
+
|
383
|
+
#
|
384
|
+
# Call steps that handle process coverage result
|
385
|
+
#
|
386
|
+
# @return [Hash]
|
387
|
+
#
|
388
|
+
def process_coverage_result
|
389
|
+
adapt_coverage_result
|
390
|
+
remove_useless_results
|
391
|
+
result_with_not_loaded_files
|
392
|
+
end
|
393
|
+
|
394
|
+
#
|
395
|
+
# Unite the result so it wouldn't matter what coverage type was called
|
396
|
+
#
|
397
|
+
# @return [Hash]
|
398
|
+
#
|
399
|
+
def adapt_coverage_result
|
400
|
+
@result = SimpleCov::ResultAdapter.call(Coverage.result)
|
401
|
+
end
|
402
|
+
|
403
|
+
#
|
404
|
+
# Filter coverage result
|
405
|
+
# The result before filter also has result of coverage for files
|
406
|
+
# are not related to the project like loaded gems coverage.
|
407
|
+
#
|
408
|
+
# @return [Hash]
|
409
|
+
#
|
410
|
+
def remove_useless_results
|
411
|
+
@result = SimpleCov::UselessResultsRemover.call(@result)
|
412
|
+
end
|
413
|
+
|
414
|
+
#
|
415
|
+
# Initialize result with files that are not included by coverage
|
416
|
+
# and added inside the config block
|
417
|
+
#
|
418
|
+
# @return [Hash]
|
419
|
+
#
|
420
|
+
def result_with_not_loaded_files
|
421
|
+
@result = SimpleCov::Result.new(add_not_loaded_files(@result))
|
422
|
+
end
|
423
|
+
|
424
|
+
# parallel_tests isn't always available, see: https://github.com/grosser/parallel_tests/issues/772
|
425
|
+
def make_parallel_tests_available
|
426
|
+
return if defined?(ParallelTests)
|
427
|
+
return unless probably_running_parallel_tests?
|
428
|
+
|
429
|
+
require "parallel_tests"
|
430
|
+
rescue LoadError
|
431
|
+
warn("SimpleCov guessed you were running inside parallel tests but couldn't load it. Please file a bug report with us!")
|
432
|
+
end
|
433
|
+
|
434
|
+
def probably_running_parallel_tests?
|
435
|
+
ENV["TEST_ENV_NUMBER"] && ENV["PARALLEL_TEST_GROUPS"]
|
256
436
|
end
|
257
437
|
end
|
258
438
|
end
|
259
439
|
|
260
|
-
|
261
|
-
require "
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
440
|
+
# requires are down here here for a load order reason I'm not sure what it is about
|
441
|
+
require "set"
|
442
|
+
require "forwardable"
|
443
|
+
require_relative "simplecov/configuration"
|
444
|
+
SimpleCov.extend SimpleCov::Configuration
|
445
|
+
require_relative "simplecov/coverage_statistics"
|
446
|
+
require_relative "simplecov/exit_codes"
|
447
|
+
require_relative "simplecov/profiles"
|
448
|
+
require_relative "simplecov/source_file/line"
|
449
|
+
require_relative "simplecov/source_file/branch"
|
450
|
+
require_relative "simplecov/source_file"
|
451
|
+
require_relative "simplecov/file_list"
|
452
|
+
require_relative "simplecov/result"
|
453
|
+
require_relative "simplecov/filter"
|
454
|
+
require_relative "simplecov/formatter"
|
455
|
+
require_relative "simplecov/last_run"
|
456
|
+
require_relative "simplecov/lines_classifier"
|
457
|
+
require_relative "simplecov/result_merger"
|
458
|
+
require_relative "simplecov/command_guesser"
|
459
|
+
require_relative "simplecov/version"
|
460
|
+
require_relative "simplecov/result_adapter"
|
461
|
+
require_relative "simplecov/combine"
|
462
|
+
require_relative "simplecov/combine/branches_combiner"
|
463
|
+
require_relative "simplecov/combine/files_combiner"
|
464
|
+
require_relative "simplecov/combine/lines_combiner"
|
465
|
+
require_relative "simplecov/combine/results_combiner"
|
466
|
+
require_relative "simplecov/useless_results_remover"
|
467
|
+
require_relative "simplecov/simulate_coverage"
|
276
468
|
|
277
469
|
# Load default config
|
278
|
-
|
279
|
-
|
280
|
-
# Load Rails integration (only for Rails 3, see #113)
|
281
|
-
require "simplecov/railtie" if defined? Rails::Railtie
|
470
|
+
require_relative "simplecov/defaults" unless ENV["SIMPLECOV_NO_DEFAULTS"]
|