Class: ActiveMutator::Reporter::Terminal

Inherits:
Object
  • Object
show all
Defined in:
lib/active_mutator/reporter/terminal.rb

Constant Summary collapse

CHARS =
{ killed: ".", survived: "S", timeout: "T", error: "E", uncovered: "U", accepted: "A" }.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(out: $stdout) ⇒ Terminal

Returns a new instance of Terminal.



6
7
8
# File 'lib/active_mutator/reporter/terminal.rb', line 6

def initialize(out: $stdout)
  @out = out
end

Class Method Details

.score(counts) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/active_mutator/reporter/terminal.rb', line 26

def self.score(counts)
  detected = counts.fetch(:killed, 0) + counts.fetch(:timeout, 0)
  denominator = detected + counts.fetch(:survived, 0)
  return 1.0 if denominator.zero?

  detected.to_f / denominator
end

Instance Method Details

#on_result(result) ⇒ Object



10
11
12
# File 'lib/active_mutator/reporter/terminal.rb', line 10

def on_result(result)
  @out.print(CHARS.fetch(result.status))
end

#summary(results, invalid_count:) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/active_mutator/reporter/terminal.rb', line 14

def summary(results, invalid_count:)
  counts = results.group_by(&:status).transform_values(&:size)
  @out.puts "", ""
  CHARS.each_key do |status|
    @out.puts "#{status}: #{counts.fetch(status, 0)}"
  end
  @out.puts "invalid (discarded): #{invalid_count}"
  @out.puts format("Mutation score: %.1f%%", score(counts) * 100)
  survivors = results.select { |r| r.status == :survived }
  print_survivors(survivors) unless survivors.empty?
end