class Turn::ProgressReporter

Public Class Methods

new(io, opts={}) click to toggle source
Calls superclass method Turn::Reporter.new
# File lib/turn/reporters/progress_reporter.rb, line 9
def initialize(io, opts={})
  super(io, opts)
  @fails  = Hash.new{|h,k|h[k]=[]}
  @errors = Hash.new{|h,k|h[k]=[]}
  @skips  = Hash.new{|h,k|h[k]=[]}
end

Public Instance Methods

error(exception, message=nil) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 35
def error(exception, message=nil)
  @errors[@_current_case] << exception
end
fail(assertion, message=nil) click to toggle source

def pass(message=nil) end

# File lib/turn/reporters/progress_reporter.rb, line 31
def fail(assertion, message=nil)
  @fails[@_current_case] << assertion
end
finish_case(kase) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 43
def finish_case(kase)
  @pbar.inc
end
finish_suite(suite) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 47
def finish_suite(suite)
  @pbar.finish
  post_report(suite)
end
post_report(suite) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 53
def post_report(suite)
  tally = test_tally(suite)

  width = suite.collect{ |tr| tr.name.to_s.size }.max

  headers = [ 'TESTCASE  ', '  TESTS   ', 'ASSERTIONS', ' FAILURES ', '  ERRORS   ', 'SKIPS    ' ]
  io.puts "\n\n%-#{width}s       %10s %10s %10s %10s %10s\n" % headers

  io.puts ("-" * (width + 60))

  files = nil
  suite.each do |testrun|
    if testrun.files != [testrun.name] && testrun.files != files
      label = testrun.files.join(' ')
      label = Colorize.magenta(label)
      io.puts(label + "\n")
      files = testrun.files
    end
    io.puts paint_line(testrun, width)
  end

  #puts("\n%i tests, %i assertions, %i failures, %i errors\n\n" % tally)

  tally_line = ("-" * (width + 60))
  tally_line << "\n%-#{width}s  " % "TOTAL"
  tally_line << "%10s %10s %10s %10s %10s" % tally

  io.puts(tally_line + "\n\n\n")

  io.puts "-- Failures --\n\n" unless @fails.empty?

  @fails.each do |tc, cc|
    cc.each do |e|
      message = e.message.tabto(0).strip
      message = Colorize.red(message)
      message += "\n" + clean_backtrace(e.backtrace).join("\n")
      io.puts(message+"\n\n")
    end
    io.puts
  end

  io.puts "-- Errors --\n\n" unless @errors.empty?

  @errors.each do |tc, cc|
    cc.each do |e|
      message = e.message.tabto(0).strip
      message = Colorize.red(message)
      message += "\n" + clean_backtrace(e.backtrace).join("\n")
      io.puts(message+"\n\n")
    end
    io.puts
  end

  #fails = suite.select do |testrun|
  #  testrun.fail? || testrun.error?
  #end

  ##if tally[2] != 0 or tally[3] != 0
  #  unless fails.empty? # or verbose?
  #    io.puts "\n\n-- Failures and Errors --\n\n"
  #    fails.uniq.each do |testrun|
  #      message = testrun.message.tabto(0).strip
  #      message = Colorize.red(message)
  #      # backtrace ?
  #      #message += clean_backtrace(testrun.exception.backtrace).join("\n")
  #      io.puts(message+"\n\n")
  #    end
  #    io.puts
  #  end
  ##end
end
skip(exception, message=nil) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 39
def skip(exception, message=nil)
  @skips[@_current_case] << exception
end
start_case(testcase) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 21
def start_case(testcase)
  @_current_case = testcase
end
start_suite(suite) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 16
def start_suite(suite)
  @pbar = ::ANSI::Progressbar.new('Testing', suite.size)
  @pbar.inc
end

Private Instance Methods

paint_line(testrun, width) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 127
def paint_line(testrun, width)
  line = ''
  line << "%-#{width}s  " % [testrun.name]
  line << "%10s %10s %10s %10s %10s" % testrun.counts
  line << " " * 8
  if testrun.fail?
    line << "[#{FAIL}]"
  elsif testrun.error?
    line << "[#{FAIL}]"
  else
    line << "[#{PASS}]"
  end
  line
end
test_tally(suite) click to toggle source
# File lib/turn/reporters/progress_reporter.rb, line 142
def test_tally(suite)
  counts = suite.collect{ |tr| tr.counts }
  tally  = [0,0,0,0,0]
  counts.each do |count|
    5.times{ |i| tally[i] += count[i] }
  end
  return tally
end