Class: Evilution::Reporter::Suggestion

Inherits:
Object
  • Object
show all
Defined in:
lib/evilution/reporter/suggestion.rb

Defined Under Namespace

Modules: DiffHelpers, Templates Classes: Registry

Constant Summary collapse

DEFAULT_SUGGESTION =
"Add a more specific test that detects this mutation"

Instance Method Summary collapse

Constructor Details

#initialize(suggest_tests: false, integration: :rspec, registry: Registry.default) ⇒ Suggestion

Returns a new instance of Suggestion.



8
9
10
11
12
# File 'lib/evilution/reporter/suggestion.rb', line 8

def initialize(suggest_tests: false, integration: :rspec, registry: Registry.default)
  @suggest_tests = suggest_tests
  @integration = integration
  @registry = registry
end

Instance Method Details

#call(summary) ⇒ Array<Hash>

Generate suggestions for survived mutations.

Parameters:

Returns:

  • (Array<Hash>)

    Array of { mutation:, suggestion: }



18
19
20
21
22
23
24
25
# File 'lib/evilution/reporter/suggestion.rb', line 18

def call(summary)
  summary.survived_results.map do |result|
    {
      mutation: result.mutation,
      suggestion: suggestion_for(result.mutation)
    }
  end
end

#suggestion_for(mutation) ⇒ String

Generate a suggestion for a single mutation.

Parameters:

Returns:

  • (String)


31
32
33
34
35
36
37
38
39
# File 'lib/evilution/reporter/suggestion.rb', line 31

def suggestion_for(mutation)
  op = mutation.operator_name
  if @suggest_tests
    concrete = @registry.concrete(op, integration: @integration)
    return concrete.call(mutation) if concrete
  end

  @registry.generic(op) || DEFAULT_SUGGESTION
end