Module: Test::Unit::ErrorCollector

Defined in:
lib/walrus/additions/test/unit/error_collector.rb

Overview

See blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/138320 Usage:

require 'test/unit'
require 'walrus/additions/test/unit/error_collector'

class TestClass < Test::Unit::TestCase

  include Test::Unit::ErrorCollector

  def test_method
    collecting_errors do
      assert false
      assert false
    end
  end

end

Instance Method Summary collapse

Instance Method Details

#collecting_errorsObject



30
31
32
33
34
35
36
37
38
# File 'lib/walrus/additions/test/unit/error_collector.rb', line 30

def collecting_errors
  # save state prior to yielding to block
  is_collecting = @is_collecting
  @is_collecting = true
  yield
ensure
  # restore state on leaving block
  @is_collecting = is_collecting
end

#handle_error(method, error) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'lib/walrus/additions/test/unit/error_collector.rb', line 48

def handle_error(method, error)
  backtrace = error.backtrace
  backtrace.shift # raise shouldn't appear in the backtrace
  if @is_collecting
    backtrace.slice!(5, 2) # remove collecting_errors and corresponding block
    send(method, error.message, backtrace)
  else
    Kernel.raise(error, error.message, backtrace)
  end
end

#raiseObject



40
41
42
43
44
45
46
# File 'lib/walrus/additions/test/unit/error_collector.rb', line 40

def raise(*)
  super
rescue Test::Unit::AssertionFailedError
  handle_error(:add_failure, $!)
rescue StandardError, ScriptError
  handle_error(:add_error, $!)
end