Class: Evilution::Reporter::CLI::LineFormatters::UnresolvedRateWarning Private

Inherits:
Object
  • Object
show all
Defined in:
lib/evilution/reporter/cli/line_formatters/unresolved_rate_warning.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

EV-z7f5 / GH #1325: unresolved mutations are excluded from score_denominator, so a run whose specs could not be auto-resolved collapses to a bare "Score: 0.00% (0/0)" that reads like a genuine mutation-quality failure. This formatter surfaces a loud, actionable warning when the unresolved rate is high — and a distinct message when the denominator hit zero (nothing was measured at all) — so the user knows to pass --spec instead of trusting the 0.0.

Sibling of ErrorRateWarning (EV-nrgw / GH #1168).

Constant Summary collapse

DEFAULT_THRESHOLD =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

0.25
HINT =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

"Pass --spec to point evilution at the test file(s)."

Instance Method Summary collapse

Constructor Details

#initialize(threshold: DEFAULT_THRESHOLD) ⇒ UnresolvedRateWarning

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of UnresolvedRateWarning.



18
19
20
# File 'lib/evilution/reporter/cli/line_formatters/unresolved_rate_warning.rb', line 18

def initialize(threshold: DEFAULT_THRESHOLD)
  @threshold = threshold
end

Instance Method Details

#format(summary) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/evilution/reporter/cli/line_formatters/unresolved_rate_warning.rb', line 22

def format(summary)
  return nil if summary.total.zero?
  return nil if summary.unresolved.zero?

  rate = summary.unresolved.to_f / summary.total
  return nil if rate <= @threshold

  fraction = "#{summary.unresolved}/#{summary.total}"
  pct = (rate * 100).round(1)
  warning(summary, fraction, pct)
end