2010-10-05 00:28:21 +08:00
|
|
|
require 'abstract_unit'
|
|
|
|
|
|
|
|
module ActiveSupport
|
|
|
|
class TestCaseTest < ActiveSupport::TestCase
|
|
|
|
class FakeRunner
|
|
|
|
attr_reader :puked
|
|
|
|
|
|
|
|
def initialize
|
|
|
|
@puked = []
|
|
|
|
end
|
|
|
|
|
|
|
|
def puke(klass, name, e)
|
|
|
|
@puked << [klass, name, e]
|
|
|
|
end
|
2011-03-02 02:11:32 +08:00
|
|
|
|
|
|
|
def options
|
|
|
|
nil
|
|
|
|
end
|
2010-10-05 00:28:21 +08:00
|
|
|
end
|
|
|
|
|
2012-05-29 05:44:28 +08:00
|
|
|
def test_standard_error_raised_within_setup_callback_is_puked
|
2012-01-07 00:30:27 +08:00
|
|
|
tc = Class.new(TestCase) do
|
2012-05-29 05:44:28 +08:00
|
|
|
def self.name; nil; end
|
2012-01-07 07:16:41 +08:00
|
|
|
|
2012-01-07 00:30:27 +08:00
|
|
|
setup :bad_callback
|
|
|
|
def bad_callback; raise 'oh noes' end
|
|
|
|
def test_true; assert true end
|
2010-10-05 00:28:21 +08:00
|
|
|
end
|
2010-10-05 00:29:37 +08:00
|
|
|
|
2012-01-07 00:30:27 +08:00
|
|
|
test_name = 'test_true'
|
|
|
|
fr = FakeRunner.new
|
2010-10-05 00:29:37 +08:00
|
|
|
|
2012-01-07 00:30:27 +08:00
|
|
|
test = tc.new test_name
|
|
|
|
test.run fr
|
|
|
|
klass, name, exception = *fr.puked.first
|
2010-10-05 00:29:37 +08:00
|
|
|
|
2012-01-07 00:30:27 +08:00
|
|
|
assert_equal tc, klass
|
|
|
|
assert_equal test_name, name
|
|
|
|
assert_equal 'oh noes', exception.message
|
|
|
|
end
|
2010-10-05 00:29:37 +08:00
|
|
|
|
2012-05-29 05:44:28 +08:00
|
|
|
def test_standard_error_raised_within_teardown_callback_is_puked
|
2012-01-07 00:30:27 +08:00
|
|
|
tc = Class.new(TestCase) do
|
2012-05-29 05:44:28 +08:00
|
|
|
def self.name; nil; end
|
2012-01-07 07:16:41 +08:00
|
|
|
|
2012-01-07 00:30:27 +08:00
|
|
|
teardown :bad_callback
|
|
|
|
def bad_callback; raise 'oh noes' end
|
|
|
|
def test_true; assert true end
|
2010-10-05 00:29:37 +08:00
|
|
|
end
|
2012-01-07 00:30:27 +08:00
|
|
|
|
|
|
|
test_name = 'test_true'
|
|
|
|
fr = FakeRunner.new
|
|
|
|
|
|
|
|
test = tc.new test_name
|
|
|
|
test.run fr
|
|
|
|
klass, name, exception = *fr.puked.first
|
|
|
|
|
|
|
|
assert_equal tc, klass
|
|
|
|
assert_equal test_name, name
|
|
|
|
assert_equal 'oh noes', exception.message
|
2010-10-05 00:28:21 +08:00
|
|
|
end
|
2012-05-29 05:44:28 +08:00
|
|
|
|
|
|
|
def test_passthrough_exception_raised_within_test_method_is_not_rescued
|
|
|
|
tc = Class.new(TestCase) do
|
|
|
|
def self.name; nil; end
|
|
|
|
|
|
|
|
def test_which_raises_interrupt; raise Interrupt; end
|
|
|
|
end
|
|
|
|
|
|
|
|
test_name = 'test_which_raises_interrupt'
|
|
|
|
fr = FakeRunner.new
|
|
|
|
|
|
|
|
test = tc.new test_name
|
|
|
|
assert_raises(Interrupt) { test.run fr }
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_passthrough_exception_raised_within_setup_callback_is_not_rescued
|
|
|
|
tc = Class.new(TestCase) do
|
|
|
|
def self.name; nil; end
|
|
|
|
|
|
|
|
setup :callback_which_raises_interrupt
|
|
|
|
def callback_which_raises_interrupt; raise Interrupt; end
|
|
|
|
def test_true; assert true end
|
|
|
|
end
|
|
|
|
|
|
|
|
test_name = 'test_true'
|
|
|
|
fr = FakeRunner.new
|
|
|
|
|
|
|
|
test = tc.new test_name
|
|
|
|
assert_raises(Interrupt) { test.run fr }
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_passthrough_exception_raised_within_teardown_callback_is_not_rescued
|
|
|
|
tc = Class.new(TestCase) do
|
|
|
|
def self.name; nil; end
|
|
|
|
|
|
|
|
teardown :callback_which_raises_interrupt
|
|
|
|
def callback_which_raises_interrupt; raise Interrupt; end
|
|
|
|
def test_true; assert true end
|
|
|
|
end
|
|
|
|
|
|
|
|
test_name = 'test_true'
|
|
|
|
fr = FakeRunner.new
|
|
|
|
|
|
|
|
test = tc.new test_name
|
|
|
|
assert_raises(Interrupt) { test.run fr }
|
|
|
|
end
|
2010-10-05 00:28:21 +08:00
|
|
|
end
|
|
|
|
end
|