simplecov 0.18.2 → 0.19.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.
@@ -13,7 +13,7 @@ module SimpleCov
13
13
  WHITESPACE_OR_COMMENT_LINE = Regexp.union(WHITESPACE_LINE, COMMENT_LINE)
14
14
 
15
15
  def self.no_cov_line
16
- /^(\s*)#(\s*)(\:#{SimpleCov.nocov_token}\:)/o
16
+ /^(\s*)#(\s*)(:#{SimpleCov.nocov_token}:)/o
17
17
  end
18
18
 
19
19
  def self.no_cov_line?(line)
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  ENV["SIMPLECOV_NO_DEFAULTS"] = "yes, no defaults"
4
- require "simplecov"
4
+ require_relative "../simplecov"
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Process
4
+ class << self
5
+ def fork_with_simplecov(&block)
6
+ if defined?(SimpleCov) && SimpleCov.running
7
+ fork_without_simplecov do
8
+ SimpleCov.at_fork.call(Process.pid)
9
+ block.call if block_given?
10
+ end
11
+ else
12
+ fork_without_simplecov(&block)
13
+ end
14
+ end
15
+
16
+ alias fork_without_simplecov fork
17
+ alias fork fork_with_simplecov
18
+ end
19
+ end
@@ -25,9 +25,11 @@ module SimpleCov
25
25
 
26
26
  # Initialize a new SimpleCov::Result from given Coverage.result (a Hash of filenames each containing an array of
27
27
  # coverage data)
28
- def initialize(original_result)
28
+ def initialize(original_result, command_name: nil, created_at: nil)
29
29
  result = adapt_result(original_result)
30
30
  @original_result = result.freeze
31
+ @command_name = command_name
32
+ @created_at = created_at
31
33
  @files = SimpleCov::FileList.new(result.map do |filename, coverage|
32
34
  SimpleCov::SourceFile.new(filename, JSON.parse(JSON.dump(coverage))) if File.file?(filename)
33
35
  end.compact.sort_by(&:filename))
@@ -70,15 +72,15 @@ module SimpleCov
70
72
  }
71
73
  end
72
74
 
75
+ def time_since_creation
76
+ Time.now - created_at
77
+ end
78
+
73
79
  # Loads a SimpleCov::Result#to_hash dump
74
80
  def self.from_hash(hash)
75
- command_name, data = hash.first
76
-
77
- result = SimpleCov::Result.new(data["coverage"])
78
-
79
- result.command_name = command_name
80
- result.created_at = Time.at(data["timestamp"])
81
- result
81
+ hash.map do |command_name, data|
82
+ new(data.fetch("coverage"), command_name: command_name, created_at: Time.at(data["timestamp"]))
83
+ end
82
84
  end
83
85
 
84
86
  private
@@ -86,7 +88,7 @@ module SimpleCov
86
88
  # We changed the format of the raw result data in simplecov, as people are likely
87
89
  # to have "old" resultsets lying around (but not too old so that they're still
88
90
  # considered we can adapt them).
89
- # See https://github.com/colszowka/simplecov/pull/824#issuecomment-576049747
91
+ # See https://github.com/simplecov-ruby/simplecov/pull/824#issuecomment-576049747
90
92
  def adapt_result(result)
91
93
  if pre_simplecov_0_18_result?(result)
92
94
  adapt_pre_simplecov_0_18_result(result)
@@ -103,9 +105,9 @@ module SimpleCov
103
105
  end
104
106
 
105
107
  def adapt_pre_simplecov_0_18_result(result)
106
- result.map do |file_path, line_coverage_data|
107
- [file_path, {"lines" => line_coverage_data}]
108
- end.to_h
108
+ result.transform_values do |line_coverage_data|
109
+ {"lines" => line_coverage_data}
110
+ end
109
111
  end
110
112
 
111
113
  def coverage
@@ -53,13 +53,8 @@ module SimpleCov
53
53
  # All results that are above the SimpleCov.merge_timeout will be
54
54
  # dropped. Returns an array of SimpleCov::Result items.
55
55
  def results
56
- results = []
57
- resultset.each do |command_name, data|
58
- result = SimpleCov::Result.from_hash(command_name => data)
59
- # Only add result if the timeout is above the configured threshold
60
- results << result if (Time.now - result.created_at) < SimpleCov.merge_timeout
61
- end
62
- results
56
+ results = Result.from_hash(resultset)
57
+ results.select { |result| result.time_since_creation < SimpleCov.merge_timeout }
63
58
  end
64
59
 
65
60
  def merge_and_store(*results)
@@ -25,7 +25,7 @@ module SimpleCov
25
25
  def src
26
26
  # We intentionally read source code lazily to
27
27
  # suppress reading unused source code.
28
- @src ||= File.open(filename, "rb", &:readlines)
28
+ @src ||= load_source
29
29
  end
30
30
  alias source src
31
31
 
@@ -175,6 +175,51 @@ module SimpleCov
175
175
  end
176
176
  end
177
177
 
178
+ def load_source
179
+ lines = []
180
+ # The default encoding is UTF-8
181
+ File.open(filename, "rb:UTF-8") do |file|
182
+ current_line = file.gets
183
+
184
+ if shebang?(current_line)
185
+ lines << current_line
186
+ current_line = file.gets
187
+ end
188
+
189
+ read_lines(file, lines, current_line)
190
+ end
191
+ end
192
+
193
+ SHEBANG_REGEX = /\A#!/.freeze
194
+ def shebang?(line)
195
+ SHEBANG_REGEX.match?(line)
196
+ end
197
+
198
+ def read_lines(file, lines, current_line)
199
+ return lines unless current_line
200
+
201
+ set_encoding_based_on_magic_comment(file, current_line)
202
+ lines.concat([current_line], ensure_remove_undefs(file.readlines))
203
+ end
204
+
205
+ RUBY_FILE_ENCODING_MAGIC_COMMENT_REGEX = /\A#\s*(?:-\*-)?\s*(?:en)?coding:\s*(\S+)\s*(?:-\*-)?\s*\z/.freeze
206
+ def set_encoding_based_on_magic_comment(file, line)
207
+ # Check for encoding magic comment
208
+ # Encoding magic comment must be placed at first line except for shebang
209
+ if (match = RUBY_FILE_ENCODING_MAGIC_COMMENT_REGEX.match(line))
210
+ file.set_encoding(match[1], "UTF-8")
211
+ end
212
+ end
213
+
214
+ def ensure_remove_undefs(file_lines)
215
+ # invalid/undef replace are technically not really necessary but nice to
216
+ # have and work around a JRuby incompatibility. Also moved here from
217
+ # simplecov-html to have encoding shenaningans in one place. See #866
218
+ # also setting these option on `file.set_encoding` doesn't seem to work
219
+ # properly so it has to be done here.
220
+ file_lines.each { |line| line.encode!("UTF-8", invalid: :replace, undef: :replace) }
221
+ end
222
+
178
223
  def build_lines
179
224
  coverage_exceeding_source_warn if coverage_data["lines"].size > src.size
180
225
  lines = src.map.with_index(1) do |src, i|
@@ -5,12 +5,14 @@ module SimpleCov
5
5
  # Select the files that related to working scope directory of SimpleCov
6
6
  #
7
7
  module UselessResultsRemover
8
- ROOT_REGX = /\A#{Regexp.escape(SimpleCov.root + File::SEPARATOR)}/io.freeze
9
-
10
8
  def self.call(coverage_result)
11
9
  coverage_result.select do |path, _coverage|
12
- path =~ ROOT_REGX
10
+ path =~ root_regx
13
11
  end
14
12
  end
13
+
14
+ def self.root_regx
15
+ @root_regx ||= /\A#{Regexp.escape(SimpleCov.root + File::SEPARATOR)}/i.freeze
16
+ end
15
17
  end
16
18
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SimpleCov
4
- VERSION = "0.18.2"
4
+ VERSION = "0.19.0"
5
5
  end
data/lib/simplecov.rb CHANGED
@@ -7,8 +7,8 @@ if defined?(JRUBY_VERSION) && defined?(JRuby)
7
7
 
8
8
  # @see https://github.com/jruby/jruby/issues/1196
9
9
  # @see https://github.com/metricfu/metric_fu/pull/226
10
- # @see https://github.com/colszowka/simplecov/issues/420
11
- # @see https://github.com/colszowka/simplecov/issues/86
10
+ # @see https://github.com/simplecov-ruby/simplecov/issues/420
11
+ # @see https://github.com/simplecov-ruby/simplecov/issues/86
12
12
  # @see https://jira.codehaus.org/browse/JRUBY-6106
13
13
 
14
14
  unless org.jruby.RubyInstanceConfig.FULL_TRACE_ENABLED
@@ -23,9 +23,12 @@ end
23
23
  #
24
24
  module SimpleCov
25
25
  class << self
26
- attr_accessor :running
27
- attr_accessor :pid
28
- attr_reader :exit_exception
26
+ attr_accessor :running, :pid
27
+
28
+ # Basically, should we take care of at_exit behavior or something else?
29
+ # Used by the minitest plugin. See lib/minitest/simplecov_plugin.rb
30
+ attr_accessor :external_at_exit
31
+ alias external_at_exit? external_at_exit
29
32
 
30
33
  #
31
34
  # Sets up SimpleCov to run against your project.
@@ -47,6 +50,9 @@ module SimpleCov
47
50
  def start(profile = nil, &block)
48
51
  require "coverage"
49
52
  initial_setup(profile, &block)
53
+ require_relative "./simplecov/process" if SimpleCov.enabled_for_subprocesses?
54
+ make_parallel_tests_available
55
+
50
56
  @result = nil
51
57
  self.pid = Process.pid
52
58
 
@@ -79,13 +85,11 @@ module SimpleCov
79
85
 
80
86
  results = result_filenames.flat_map do |filename|
81
87
  # Re-create each included instance of SimpleCov::Result from the stored run data.
82
- (JSON.parse(File.read(filename)) || {}).map do |command_name, coverage|
83
- SimpleCov::Result.from_hash(command_name => coverage)
84
- end
88
+ Result.from_hash(JSON.parse(File.read(filename)) || {})
85
89
  end
86
90
 
87
91
  # Use the ResultMerger to produce a single, merged result, ready to use.
88
- @result = SimpleCov::ResultMerger.merge_and_store(*results)
92
+ @result = ResultMerger.merge_and_store(*results)
89
93
 
90
94
  run_exit_tasks!
91
95
  end
@@ -98,7 +102,6 @@ module SimpleCov
98
102
  return @result if result?
99
103
 
100
104
  # Collect our coverage result
101
-
102
105
  process_coverage_result if running
103
106
 
104
107
  # If we're using merging of results, store the current result
@@ -168,46 +171,71 @@ module SimpleCov
168
171
  @result = nil
169
172
  end
170
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
171
183
  #
172
- # Capture the current exception if it exists
173
- # This will get called inside the at_exit block
184
+ # Called from at_exit block
174
185
  #
175
- def set_exit_exception
176
- @exit_exception = $ERROR_INFO
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?
177
193
  end
178
194
 
195
+ #
196
+ # @api private
179
197
  #
180
198
  # Returns the exit status from the exit exception
181
199
  #
182
200
  def exit_status_from_exception
183
- return SimpleCov::ExitCodes::SUCCESS unless exit_exception
201
+ # Capture the current exception if it exists
202
+ @exit_exception = $ERROR_INFO
203
+ return nil unless @exit_exception
184
204
 
185
- if exit_exception.is_a?(SystemExit)
186
- exit_exception.status
205
+ if @exit_exception.is_a?(SystemExit)
206
+ @exit_exception.status
187
207
  else
188
208
  SimpleCov::ExitCodes::EXCEPTION
189
209
  end
190
210
  end
191
211
 
192
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
+
193
219
  #
194
- # Called from at_exit block
220
+ # @api private
195
221
  #
196
- def run_exit_tasks!
197
- set_exit_exception
198
-
199
- exit_status = SimpleCov.exit_status_from_exception
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
200
227
 
201
- SimpleCov.at_exit.call
228
+ # @api private
229
+ def ready_to_process_results?
230
+ final_result_process? && result?
231
+ end
202
232
 
203
- # Don't modify the exit status unless the result has already been
204
- # computed
205
- exit_status = SimpleCov.process_result(SimpleCov.result, exit_status) if SimpleCov.result?
233
+ def process_results_and_report_error
234
+ exit_status = process_result(result)
206
235
 
207
236
  # Force exit with stored status (see github issue #5)
208
- # unless it's nil or 0 (see github issue #281)
209
- if exit_status&.positive?
210
- $stderr.printf("SimpleCov failed with exit %<exit_status>d\n", exit_status: exit_status) if print_error_status
237
+ if exit_status.positive?
238
+ warn("SimpleCov failed with exit #{exit_status} due to a coverage related error") if print_error_status
211
239
  Kernel.exit exit_status
212
240
  end
213
241
  end
@@ -217,55 +245,29 @@ module SimpleCov
217
245
  # Usage:
218
246
  # exit_status = SimpleCov.process_result(SimpleCov.result, exit_status)
219
247
  #
220
- def process_result(result, exit_status)
221
- return exit_status if exit_status != SimpleCov::ExitCodes::SUCCESS # Existing errors
222
-
223
- covered_percent = result.covered_percent.floor(2)
224
- result_exit_status = result_exit_status(result, covered_percent)
225
- write_last_run(covered_percent) if result_exit_status == SimpleCov::ExitCodes::SUCCESS # No result errors
226
- final_result_process? ? result_exit_status : SimpleCov::ExitCodes::SUCCESS
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
251
+ result_exit_status
227
252
  end
228
253
 
229
254
  # @api private
230
- #
231
- # rubocop:disable Metrics/MethodLength
232
- def result_exit_status(result, covered_percent)
233
- covered_percentages = result.covered_percentages.map { |percentage| percentage.floor(2) }
234
- if (minimum_violations = minimum_coverage_violated(result)).any?
235
- report_minimum_violated(minimum_violations)
236
- SimpleCov::ExitCodes::MINIMUM_COVERAGE
237
- elsif covered_percentages.any? { |p| p < SimpleCov.minimum_coverage_by_file }
238
- $stderr.printf(
239
- "File (%<file>s) is only (%<least_covered_percentage>.2f%%) covered. This is below the expected minimum coverage per file of (%<min_coverage>.2f%%).\n",
240
- file: result.least_covered_file,
241
- least_covered_percentage: covered_percentages.min,
242
- min_coverage: SimpleCov.minimum_coverage_by_file
243
- )
244
- SimpleCov::ExitCodes::MINIMUM_COVERAGE
245
- elsif (last_run = SimpleCov::LastRun.read)
246
- coverage_diff = last_run[:result][:covered_percent] - covered_percent
247
- if coverage_diff > SimpleCov.maximum_coverage_drop
248
- $stderr.printf(
249
- "Coverage has dropped by %<drop_percent>.2f%% since the last time (maximum allowed: %<max_drop>.2f%%).\n",
250
- drop_percent: coverage_diff,
251
- max_drop: SimpleCov.maximum_coverage_drop
252
- )
253
- SimpleCov::ExitCodes::MAXIMUM_COVERAGE_DROP
254
- else
255
- SimpleCov::ExitCodes::SUCCESS
256
- end
257
- else
258
- SimpleCov::ExitCodes::SUCCESS
259
- end
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)
260
263
  end
261
- # rubocop:enable Metrics/MethodLength
262
264
 
263
265
  #
264
266
  # @api private
265
267
  #
266
268
  def final_result_process?
267
- # checking for ENV["TEST_ENV_NUMBER"] to determine if the tess are being run in parallel
268
- !defined?(ParallelTests) || !ENV["TEST_ENV_NUMBER"] || ParallelTests.number_of_running_processes <= 1
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?
269
271
  end
270
272
 
271
273
  #
@@ -280,8 +282,16 @@ module SimpleCov
280
282
  #
281
283
  # @api private
282
284
  #
283
- def write_last_run(covered_percent)
284
- SimpleCov::LastRun.write(result: {covered_percent: covered_percent})
285
+ def write_last_run(result)
286
+ SimpleCov::LastRun.write(result: {covered_percent: round_coverage(result.covered_percent)})
287
+ end
288
+
289
+ #
290
+ # @api private
291
+ #
292
+ # Rounding down to be extra strict, see #679
293
+ def round_coverage(coverage)
294
+ coverage.floor(2)
285
295
  end
286
296
 
287
297
  private
@@ -302,7 +312,7 @@ module SimpleCov
302
312
  # This blog post gives a good run down of the coverage criterias introduced
303
313
  # in Ruby 2.5: https://blog.bigbinary.com/2018/04/11/ruby-2-5-supports-measuring-branch-and-method-coverages.html
304
314
  # There is also a nice writeup of the different coverage criteria made in this
305
- # comment https://github.com/colszowka/simplecov/pull/692#discussion_r281836176 :
315
+ # comment https://github.com/simplecov-ruby/simplecov/pull/692#discussion_r281836176 :
306
316
  # Ruby < 2.5:
307
317
  # https://github.com/ruby/ruby/blob/v1_9_3_374/ext/coverage/coverage.c
308
318
  # traditional mode (Array)
@@ -406,61 +416,50 @@ module SimpleCov
406
416
  @result = SimpleCov::Result.new(add_not_loaded_files(@result))
407
417
  end
408
418
 
409
- def minimum_coverage_violated(result)
410
- coverage_achieved = minimum_coverage.map do |criterion, percent|
411
- {
412
- criterion: criterion,
413
- minimum_expected: percent,
414
- actual: result.coverage_statistics[criterion].percent
415
- }
416
- end
419
+ # parallel_tests isn't always available, see: https://github.com/grosser/parallel_tests/issues/772
420
+ def make_parallel_tests_available
421
+ return if defined?(ParallelTests)
422
+ return unless probably_running_parallel_tests?
417
423
 
418
- coverage_achieved.select do |achieved|
419
- achieved.fetch(:actual) < achieved.fetch(:minimum_expected)
420
- end
424
+ require "parallel_tests"
425
+ rescue LoadError
426
+ warn("SimpleCov guessed you were running inside parallel tests but couldn't load it. Please file a bug report with us!")
421
427
  end
422
428
 
423
- def report_minimum_violated(violations)
424
- violations.each do |violation|
425
- $stderr.printf(
426
- "%<criterion>s coverage (%<covered>.2f%%) is below the expected minimum coverage (%<minimum_coverage>.2f%%).\n",
427
- covered: violation.fetch(:actual).floor(2),
428
- minimum_coverage: violation.fetch(:minimum_expected),
429
- criterion: violation.fetch(:criterion).capitalize
430
- )
431
- end
429
+ def probably_running_parallel_tests?
430
+ ENV["TEST_ENV_NUMBER"] && ENV["PARALLEL_TEST_GROUPS"]
432
431
  end
433
432
  end
434
433
  end
435
434
 
436
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__)))
435
+ # requires are down here here for a load order reason I'm not sure what it is about
437
436
  require "set"
438
437
  require "forwardable"
439
- require "simplecov/configuration"
438
+ require_relative "simplecov/configuration"
440
439
  SimpleCov.extend SimpleCov::Configuration
441
- require "simplecov/coverage_statistics"
442
- require "simplecov/exit_codes"
443
- require "simplecov/profiles"
444
- require "simplecov/source_file/line"
445
- require "simplecov/source_file/branch"
446
- require "simplecov/source_file"
447
- require "simplecov/file_list"
448
- require "simplecov/result"
449
- require "simplecov/filter"
450
- require "simplecov/formatter"
451
- require "simplecov/last_run"
452
- require "simplecov/lines_classifier"
453
- require "simplecov/result_merger"
454
- require "simplecov/command_guesser"
455
- require "simplecov/version"
456
- require "simplecov/result_adapter"
457
- require "simplecov/combine"
458
- require "simplecov/combine/branches_combiner"
459
- require "simplecov/combine/files_combiner"
460
- require "simplecov/combine/lines_combiner"
461
- require "simplecov/combine/results_combiner"
462
- require "simplecov/useless_results_remover"
463
- require "simplecov/simulate_coverage"
440
+ require_relative "simplecov/coverage_statistics"
441
+ require_relative "simplecov/exit_codes"
442
+ require_relative "simplecov/profiles"
443
+ require_relative "simplecov/source_file/line"
444
+ require_relative "simplecov/source_file/branch"
445
+ require_relative "simplecov/source_file"
446
+ require_relative "simplecov/file_list"
447
+ require_relative "simplecov/result"
448
+ require_relative "simplecov/filter"
449
+ require_relative "simplecov/formatter"
450
+ require_relative "simplecov/last_run"
451
+ require_relative "simplecov/lines_classifier"
452
+ require_relative "simplecov/result_merger"
453
+ require_relative "simplecov/command_guesser"
454
+ require_relative "simplecov/version"
455
+ require_relative "simplecov/result_adapter"
456
+ require_relative "simplecov/combine"
457
+ require_relative "simplecov/combine/branches_combiner"
458
+ require_relative "simplecov/combine/files_combiner"
459
+ require_relative "simplecov/combine/lines_combiner"
460
+ require_relative "simplecov/combine/results_combiner"
461
+ require_relative "simplecov/useless_results_remover"
462
+ require_relative "simplecov/simulate_coverage"
464
463
 
465
464
  # Load default config
466
- require "simplecov/defaults" unless ENV["SIMPLECOV_NO_DEFAULTS"]
465
+ require_relative "simplecov/defaults" unless ENV["SIMPLECOV_NO_DEFAULTS"]
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplecov
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.2
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoph Olszowka
8
+ - Tobias Pfeiffer
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2020-02-12 00:00:00.000000000 Z
12
+ date: 2020-08-16 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: docile
@@ -42,6 +43,7 @@ description: Code coverage for Ruby with a powerful configuration library and au
42
43
  merging of coverage across test suites
43
44
  email:
44
45
  - christoph at olszowka de
46
+ - pragtob@gmail.com
45
47
  executables: []
46
48
  extensions: []
47
49
  extra_rdoc_files: []
@@ -55,6 +57,7 @@ files:
55
57
  - doc/alternate-formatters.md
56
58
  - doc/commercial-services.md
57
59
  - doc/editor-integration.md
60
+ - lib/minitest/simplecov_plugin.rb
58
61
  - lib/simplecov.rb
59
62
  - lib/simplecov/combine.rb
60
63
  - lib/simplecov/combine/branches_combiner.rb
@@ -66,6 +69,10 @@ files:
66
69
  - lib/simplecov/coverage_statistics.rb
67
70
  - lib/simplecov/defaults.rb
68
71
  - lib/simplecov/exit_codes.rb
72
+ - lib/simplecov/exit_codes/exit_code_handling.rb
73
+ - lib/simplecov/exit_codes/maximum_coverage_drop_check.rb
74
+ - lib/simplecov/exit_codes/minimum_coverage_by_file_check.rb
75
+ - lib/simplecov/exit_codes/minimum_overall_coverage_check.rb
69
76
  - lib/simplecov/file_list.rb
70
77
  - lib/simplecov/filter.rb
71
78
  - lib/simplecov/formatter.rb
@@ -75,6 +82,7 @@ files:
75
82
  - lib/simplecov/lines_classifier.rb
76
83
  - lib/simplecov/load_global_config.rb
77
84
  - lib/simplecov/no_defaults.rb
85
+ - lib/simplecov/process.rb
78
86
  - lib/simplecov/profiles.rb
79
87
  - lib/simplecov/profiles/bundler_filter.rb
80
88
  - lib/simplecov/profiles/hidden_filter.rb
@@ -90,15 +98,15 @@ files:
90
98
  - lib/simplecov/source_file/line.rb
91
99
  - lib/simplecov/useless_results_remover.rb
92
100
  - lib/simplecov/version.rb
93
- homepage: https://github.com/colszowka/simplecov
101
+ homepage: https://github.com/simplecov-ruby/simplecov
94
102
  licenses:
95
103
  - MIT
96
104
  metadata:
97
- bug_tracker_uri: https://github.com/colszowka/simplecov/issues
98
- changelog_uri: https://github.com/colszowka/simplecov/blob/master/CHANGELOG.md
99
- documentation_uri: https://www.rubydoc.info/gems/simplecov/0.18.2
105
+ bug_tracker_uri: https://github.com/simplecov-ruby/simplecov/issues
106
+ changelog_uri: https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md
107
+ documentation_uri: https://www.rubydoc.info/gems/simplecov/0.19.0
100
108
  mailing_list_uri: https://groups.google.com/forum/#!forum/simplecov
101
- source_code_uri: https://github.com/colszowka/simplecov/tree/v0.18.2
109
+ source_code_uri: https://github.com/simplecov-ruby/simplecov/tree/v0.19.0
102
110
  post_install_message:
103
111
  rdoc_options: []
104
112
  require_paths:
@@ -107,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
115
  requirements:
108
116
  - - ">="
109
117
  - !ruby/object:Gem::Version
110
- version: 2.4.0
118
+ version: 2.5.0
111
119
  required_rubygems_version: !ruby/object:Gem::Requirement
112
120
  requirements:
113
121
  - - ">="