# File vendor/rails/activesupport/lib/active_support/testing/performance.rb, line 26
26: def self.included(base)
27: base.superclass_delegating_accessor :profile_options
28: base.profile_options = DEFAULTS
29: end
# File vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb, line 12
12: def self.included(base)
13: base.class_eval do
14: include ActiveSupport::Callbacks
15: define_callbacks :setup, :teardown
16:
17: if defined?(::Mini)
18: undef_method :run
19: alias_method :run, :run_with_callbacks_and_miniunit
20: else
21: begin
22: require 'mocha'
23: undef_method :run
24: alias_method :run, :run_with_callbacks_and_mocha
25: rescue LoadError
26: undef_method :run
27: alias_method :run, :run_with_callbacks_and_testunit
28: end
29: end
30: end
31: end
# File vendor/rails/activesupport/lib/active_support/testing/performance.rb, line 31
31: def full_test_name
32: "#{self.class.name}##{method_name}"
33: end
# File vendor/rails/activesupport/lib/active_support/testing/performance.rb, line 35
35: def run(result)
36: return if method_name =~ /^default_test$/
37:
38: yield(self.class::STARTED, name)
39: @_result = result
40:
41: run_warmup
42: if profile_options && metrics = profile_options[:metrics]
43: metrics.each do |metric_name|
44: if klass = Metrics[metric_name.to_sym]
45: run_profile(klass.new)
46: result.add_run
47: end
48: end
49: end
50:
51: yield(self.class::FINISHED, name)
52: end
# File vendor/rails/activesupport/lib/active_support/testing/performance.rb, line 54
54: def run_test(metric, mode)
55: run_callbacks :setup
56: setup
57: metric.send(mode) { __send__ @method_name }
58: rescue ::Test::Unit::AssertionFailedError => e
59: add_failure(e.message, e.backtrace)
60: rescue StandardError, ScriptError
61: add_error($!)
62: ensure
63: begin
64: teardown
65: run_callbacks :teardown, :enumerator => :reverse_each
66: rescue ::Test::Unit::AssertionFailedError => e
67: add_failure(e.message, e.backtrace)
68: rescue StandardError, ScriptError
69: add_error($!)
70: end
71: end
# File vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb, line 33
33: def run_with_callbacks_and_miniunit(runner)
34: result = '.'
35: begin
36: run_callbacks :setup
37: result = super
38: rescue Exception => e
39: result = runner.puke(self.class, self.name, e)
40: ensure
41: begin
42: teardown
43: run_callbacks :teardown, :enumerator => :reverse_each
44: rescue Exception => e
45: result = runner.puke(self.class, self.name, e)
46: end
47: end
48: result
49: end
Doubly unfortunate: mocha does the same so we have to hax their hax.
# File vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb, line 84
84: def run_with_callbacks_and_mocha(result)
85: return if @method_name.to_s == "default_test"
86:
87: yield(Test::Unit::TestCase::STARTED, name)
88: @_result = result
89: begin
90: mocha_setup
91: begin
92: run_callbacks :setup
93: setup
94: __send__(@method_name)
95: mocha_verify { add_assertion }
96: rescue Mocha::ExpectationError => e
97: add_failure(e.message, e.backtrace)
98: rescue Test::Unit::AssertionFailedError => e
99: add_failure(e.message, e.backtrace)
100: rescue StandardError, ScriptError
101: add_error($!)
102: ensure
103: begin
104: teardown
105: run_callbacks :teardown, :enumerator => :reverse_each
106: rescue Test::Unit::AssertionFailedError => e
107: add_failure(e.message, e.backtrace)
108: rescue StandardError, ScriptError
109: add_error($!)
110: end
111: end
112: ensure
113: mocha_teardown
114: end
115: result.add_run
116: yield(Test::Unit::TestCase::FINISHED, name)
117: end
# File vendor/rails/activesupport/lib/active_support/testing/performance.rb, line 84
84: def run_profile(metric)
85: klass = profile_options[:benchmark] ? Benchmarker : Profiler
86: performer = klass.new(self, metric)
87:
88: performer.run
89: puts performer.report
90: performer.record
91: end