class Towel::Minitest::Reporter

Reports Minitest results to Towel.

Public Class Methods

new(options) click to toggle source
# File lib/towel/minitest/reporter.rb, line 5
def initialize(options)
  @session = Towel::Session.new
  @stdout = nil
  @stderr = nil
  @previous_stdout = nil
  @previous_stderr = nil
  @cancelled = false
end

Public Instance Methods

prerecord(klass, name) click to toggle source
# File lib/towel/minitest/reporter.rb, line 35
def prerecord(klass, name)
  context = @session.create_result(
    klass.to_s,
    name,
    display_name: result_name(klass, name)
  )

  @stdout.context = context
  @stderr.context = context
end
record(result) click to toggle source
# File lib/towel/minitest/reporter.rb, line 46
def record(result)
  @stdout.context = nil
  @stderr.context = nil

  if result.passed?
    state = Towel::V1alpha::ResultState::SUCCESS
  elsif result.skipped?
    state = Towel::V1alpha::ResultState::SKIPPED
  elsif result.error?
    state = Towel::V1alpha::ResultState::ERROR
  else
    state = Towel::V1alpha::ResultState::FAILURE
  end

  duration = nil
  if !result.skipped?
    duration = result.time
  end

  description = nil
  if !result.failures.empty?
    description = result.failures.first.message
  end

  @session.update_result(
    result.klass,
    result.name,
    state: state,
    duration: duration,
    description: description
  )
end
report() click to toggle source
# File lib/towel/minitest/reporter.rb, line 79
def report
  $stdout = @previous_stdout
  $stderr = @previous_stderr

  if @cancelled
    @session.cancel_invocation
  else
    @session.finish_invocation
  end
end
start() click to toggle source
# File lib/towel/minitest/reporter.rb, line 14
def start
  url = @session.create_invocation
  puts "View test results at #{url}"

  # Register a cancellation handler
  old_handler = Signal.trap("INT") do
    @cancelled = true
    if old_handler.respond_to?(:call)
      old_handler.call
    else
      raise Interrupt
    end
  end

  # Capture logs
  @previous_stdout = $stdout
  $stdout = @stdout = Towel::LogIO.new(@session.create_log("STDOUT"))
  @previous_stderr = $stderr
  $stderr = @stderr = Towel::LogIO.new(@session.create_log("STDERR"))
end

Private Instance Methods

result_name(klass, name) click to toggle source

Clean up names from Minitest::Spec

# File lib/towel/minitest/reporter.rb, line 93
def result_name(klass, name)
  if defined?(::Minitest::Spec) &&
      klass.ancestors.include?(::Minitest::Spec)
    name.sub(/^test_\d{4}_/, "")
  else
    name
  end
end