class Teaspoon::Runner

Attributes

failure_count[R]

Public Class Methods

new(suite_name = :default) click to toggle source
# File lib/teaspoon/runner.rb, line 8
def initialize(suite_name = :default)
  @suite_name = suite_name
  @failure_count = 0
  @formatters = Teaspoon.configuration.formatters.map { |f| resolve_formatter(f) }
end

Public Instance Methods

process(line) click to toggle source
# File lib/teaspoon/runner.rb, line 14
def process(line)
  if result = result_from_line(line)
    return notify_formatters(result.type, result)
  end
  notify_formatters("console", line) unless Teaspoon.configuration.suppress_log
end

Private Instance Methods

notify_formatters(event, result) click to toggle source
# File lib/teaspoon/runner.rb, line 28
def notify_formatters(event, result)
  @formatters.each { |f| f.send(event, result) if f.respond_to?(event) }
  send(:"on_#{event}", result) if respond_to?(:"on_#{event}", true)
end
on_exception(result) click to toggle source
# File lib/teaspoon/runner.rb, line 48
def on_exception(result)
  raise Teaspoon::RunnerError.new(result.message)
end
on_result(result) click to toggle source
# File lib/teaspoon/runner.rb, line 52
def on_result(result)
  resolve_coverage(result.coverage)
  notify_formatters("complete", @failure_count)
end
resolve_coverage(data) click to toggle source
# File lib/teaspoon/runner.rb, line 57
def resolve_coverage(data)
  return unless Teaspoon.configuration.use_coverage
  raise Teaspoon::IstanbulNotFoundError unless Teaspoon::Instrumentation.executable

  coverage = Teaspoon::Coverage.new(@suite_name, data)
  coverage.generate_reports { |msg| notify_formatters("coverage", msg) }
  coverage.check_thresholds do |msg|
    notify_formatters("threshold_failure", msg)
    @failure_count += 1
  end
end
resolve_formatter(formatter) click to toggle source
# File lib/teaspoon/runner.rb, line 23
def resolve_formatter(formatter)
  formatter, output = formatter.to_s.split(">")
  Teaspoon::Formatter.fetch(formatter).new(@suite_name, output)
end
result_from_json(json) click to toggle source
# File lib/teaspoon/runner.rb, line 42
def result_from_json(json)
  result = Teaspoon::Result.build_from_json(json)
  @failure_count += 1 if result.failing?
  result
end
result_from_line(line) click to toggle source
# File lib/teaspoon/runner.rb, line 33
def result_from_line(line)
  json = JSON.parse(line)
  return false unless json && json["_teaspoon"] && json["type"]
  json["original_json"] = line
  result_from_json(json)
rescue JSON::ParserError
  false
end