1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
require 'active_support/concern'
require 'active_support/callbacks'
module ActiveSupport
module Testing
module SetupAndTeardown
PASSTHROUGH_EXCEPTIONS = [
NoMemoryError,
SignalException,
Interrupt,
SystemExit
]
extend ActiveSupport::Concern
included do
include ActiveSupport::Callbacks
define_callbacks :setup, :teardown
end
module ClassMethods
def setup(*args, &block)
set_callback(:setup, :before, *args, &block)
end
def teardown(*args, &block)
set_callback(:teardown, :after, *args, &block)
end
end
def run(runner)
result = '.'
begin
run_callbacks :setup do
result = super
end
rescue *PASSTHROUGH_EXCEPTIONS
raise
rescue Exception => e
result = runner.puke(self.class, method_name, e)
ensure
begin
run_callbacks :teardown
rescue *PASSTHROUGH_EXCEPTIONS
raise
rescue Exception => e
result = runner.puke(self.class, method_name, e)
end
end
result
end
end
end
end
|