lib/simplecov.rb in simplecov-0.18.0.beta3 vs lib/simplecov.rb in simplecov-0.18.0
- old
+ new
@@ -229,16 +229,12 @@
# @api private
#
# rubocop:disable Metrics/MethodLength
def result_exit_status(result, covered_percent)
covered_percentages = result.covered_percentages.map { |percentage| percentage.floor(2) }
- if covered_percent < SimpleCov.minimum_coverage
- $stderr.printf(
- "Coverage (%<covered>.2f%%) is below the expected minimum coverage (%<minimum_coverage>.2f%%).\n",
- covered: covered_percent,
- minimum_coverage: SimpleCov.minimum_coverage
- )
+ if (minimum_violations = minimum_coverage_violated(result)).any?
+ report_minimum_violated(minimum_violations)
SimpleCov::ExitCodes::MINIMUM_COVERAGE
elsif covered_percentages.any? { |p| p < SimpleCov.minimum_coverage_by_file }
$stderr.printf(
"File (%<file>s) is only (%<least_covered_percentage>.2f%%) covered. This is below the expected minimum coverage per file of (%<min_coverage>.2f%%).\n",
file: result.least_covered_file,
@@ -407,16 +403,43 @@
# @return [Hash]
#
def result_with_not_loaded_files
@result = SimpleCov::Result.new(add_not_loaded_files(@result))
end
+
+ def minimum_coverage_violated(result)
+ coverage_achieved = minimum_coverage.map do |criterion, percent|
+ {
+ criterion: criterion,
+ minimum_expected: percent,
+ actual: result.coverage_statistics[criterion].percent
+ }
+ end
+
+ coverage_achieved.select do |achieved|
+ achieved.fetch(:actual) < achieved.fetch(:minimum_expected)
+ end
+ end
+
+ def report_minimum_violated(violations)
+ violations.each do |violation|
+ $stderr.printf(
+ "%<criterion>s coverage (%<covered>.2f%%) is below the expected minimum coverage (%<minimum_coverage>.2f%%).\n",
+ covered: violation.fetch(:actual).floor(2),
+ minimum_coverage: violation.fetch(:minimum_expected),
+ criterion: violation.fetch(:criterion).capitalize
+ )
+ end
+ end
end
end
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__)))
require "set"
+require "forwardable"
require "simplecov/configuration"
SimpleCov.extend SimpleCov::Configuration
+require "simplecov/coverage_statistics"
require "simplecov/exit_codes"
require "simplecov/profiles"
require "simplecov/source_file/line"
require "simplecov/source_file/branch"
require "simplecov/source_file"