class CI::Reporter::Runner

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/ci/reporter/minitest.rb, line 61
def initialize
  super
  @report_manager = ReportManager.new("test")
end

Public Instance Methods

_run_anything(type) click to toggle source
# File lib/ci/reporter/minitest.rb, line 66
def _run_anything(type)
  suites = MiniTest::Unit::TestCase.send "#{type}_suites"
  return if suites.empty?

  started_anything type

  sync = output.respond_to? :"sync=" # stupid emacs
  old_sync, output.sync = output.sync, true if sync

  _run_suites(suites, type)

  output.sync = old_sync if sync

  finished_anything(type)
end
_run_suite(suite, type) click to toggle source
# File lib/ci/reporter/minitest.rb, line 86
def _run_suite(suite, type)
  start_suite(suite)

  header = "#{type}_suite_header"
  puts send(header, suite) if respond_to? header

  filter_suite_methods(suite, type).each do |method|
    _run_test(suite, method)
  end

  finish_suite
end
_run_suites(suites, type) click to toggle source
# File lib/ci/reporter/minitest.rb, line 82
def _run_suites(suites, type)
  suites.map { |suite| _run_suite suite, type }
end
_run_test(suite, method) click to toggle source
# File lib/ci/reporter/minitest.rb, line 99
def _run_test(suite, method)
  start_case(method)

  result = run_test(suite, method)

  @assertion_count += result._assertions
  @test_count += 1

  finish_case
end
puke(klass, meth, e) click to toggle source
# File lib/ci/reporter/minitest.rb, line 110
def puke(klass, meth, e)
  e = case e
      when MiniTest::Skip then
        @skips += 1
        fault(e, :skip)
        return "S" unless @verbose
        "Skipped:\n#{meth}(#{klass}) [#{location e}]:\n#{e.message}\n"
      when MiniTest::Assertion then
        @failures += 1
        fault(e, :failure, meth)
        "Failure:\n#{meth}(#{klass}) [#{location e}]:\n#{e.message}\n"
      else
        @errors += 1
        fault(e, :error)
        bt = MiniTest::filter_backtrace(e.backtrace).join "\n    "
        "Error:\n#{meth}(#{klass}):\n#{e.class}: #{e.message}\n    #{bt}\n"
      end
  @report << e
  e[0, 1]
end

Private Instance Methods

fault(fault, type = nil, meth = nil) click to toggle source
# File lib/ci/reporter/minitest.rb, line 212
def fault(fault, type = nil, meth = nil)
  tc = @current_suite.testcases.last
  if :skip == type
    tc.skipped = true
  else
    tc.failures << Failure.new(fault, type, meth)
  end
end
filter_suite_methods(suite, type) click to toggle source
# File lib/ci/reporter/minitest.rb, line 161
def filter_suite_methods(suite, type)
  filter = options[:filter] || '/./'
  filter = Regexp.new $1 if filter =~ /\/(.*)\//

  suite.send("#{type}_methods").grep(filter)
end
finish_case() click to toggle source
# File lib/ci/reporter/minitest.rb, line 205
def finish_case
  tc = @current_suite.testcases.last
  tc.finish
  tc.assertions = @assertion_count - @result_assertion_count
  @result_assertion_count = @assertion_count
end
finish_suite() click to toggle source
# File lib/ci/reporter/minitest.rb, line 190
def finish_suite
  if @current_suite
    @current_suite.finish
    @current_suite.assertions = @assertion_count - @last_assertion_count
    @last_assertion_count = @assertion_count
    @report_manager.write_report(@current_suite)
  end
end
finished_anything(type) click to toggle source
# File lib/ci/reporter/minitest.rb, line 145
def finished_anything(type)
  t = Time.now - @start
  puts
  puts
  puts "Finished #{type}s in %.6fs, %.4f tests/s, %.4f assertions/s." %
    [t, @test_count / t, @assertion_count / t]

  report.each_with_index do |msg, i|
    puts "\n%3d) %s" % [i + 1, msg]
  end

  puts

  status
end
run_test(suite, method) click to toggle source
# File lib/ci/reporter/minitest.rb, line 168
def run_test(suite, method)
  inst = suite.new method
  inst._assertions = 0

  print "#{suite}##{method} = " if @verbose

  @start_time = Time.now
  result = inst.run self
  time = Time.now - @start_time

  print "%.2f s = " % time if @verbose
  print result
  puts if @verbose

  return inst
end
start_case(test_name) click to toggle source
# File lib/ci/reporter/minitest.rb, line 199
def start_case(test_name)
  tc = CI::Reporter::TestCase.new(test_name)
  tc.start
  @current_suite.testcases << tc
end
start_suite(suite_name) click to toggle source
# File lib/ci/reporter/minitest.rb, line 185
def start_suite(suite_name)
  @current_suite = CI::Reporter::TestSuite.new(suite_name)
  @current_suite.start
end
started_anything(type) click to toggle source
# File lib/ci/reporter/minitest.rb, line 133
def started_anything(type)
  @test_count = 0
  @assertion_count = 0
  @last_assertion_count = 0
  @result_assertion_count = 0
  @start = Time.now

  puts
  puts "# Running #{type}s:"
  puts
end