~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/activesupport/lib/active_support/testing/setup_and_teardown.rb

  • Committer: Richard Lee (Canonical)
  • Date: 2010-10-15 15:17:58 UTC
  • mfrom: (190.1.3 use-case-mapper)
  • Revision ID: richard.lee@canonical.com-20101015151758-wcvmfxrexsongf9d
Merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
require 'active_support/callbacks'
2
 
 
3
 
module ActiveSupport
4
 
  module Testing
5
 
    module SetupAndTeardown
6
 
      def self.included(base)
7
 
        base.class_eval do
8
 
          include ActiveSupport::Callbacks
9
 
          define_callbacks :setup, :teardown
10
 
 
11
 
          if defined?(MiniTest::Assertions) && TestCase < MiniTest::Assertions
12
 
            include ForMiniTest
13
 
          else
14
 
            include ForClassicTestUnit
15
 
          end
16
 
        end
17
 
      end
18
 
 
19
 
      module ForMiniTest
20
 
        def run(runner)
21
 
          result = '.'
22
 
          begin
23
 
            run_callbacks :setup
24
 
            result = super
25
 
          rescue Exception => e
26
 
            result = runner.puke(self.class, self.name, e)
27
 
          ensure
28
 
            begin
29
 
              run_callbacks :teardown, :enumerator => :reverse_each
30
 
            rescue Exception => e
31
 
              result = runner.puke(self.class, self.name, e)
32
 
            end
33
 
          end
34
 
          result
35
 
        end
36
 
      end
37
 
 
38
 
      module ForClassicTestUnit
39
 
        # For compatibility with Ruby < 1.8.6
40
 
        PASSTHROUGH_EXCEPTIONS = Test::Unit::TestCase::PASSTHROUGH_EXCEPTIONS rescue [NoMemoryError, SignalException, Interrupt, SystemExit]
41
 
 
42
 
        # This redefinition is unfortunate but test/unit shows us no alternative.
43
 
        # Doubly unfortunate: hax to support Mocha's hax.
44
 
        def run(result)
45
 
          return if @method_name.to_s == "default_test"
46
 
 
47
 
          if using_mocha = respond_to?(:mocha_verify)
48
 
            assertion_counter_klass = if defined?(Mocha::TestCaseAdapter::AssertionCounter)
49
 
                                        Mocha::TestCaseAdapter::AssertionCounter
50
 
                                      else
51
 
                                        Mocha::Integration::TestUnit::AssertionCounter
52
 
                                      end
53
 
            assertion_counter = assertion_counter_klass.new(result)
54
 
          end
55
 
 
56
 
          yield(Test::Unit::TestCase::STARTED, name)
57
 
          @_result = result
58
 
          begin
59
 
            begin
60
 
              run_callbacks :setup
61
 
              setup
62
 
              __send__(@method_name)
63
 
              mocha_verify(assertion_counter) if using_mocha
64
 
            rescue Mocha::ExpectationError => e
65
 
              add_failure(e.message, e.backtrace)
66
 
            rescue Test::Unit::AssertionFailedError => e
67
 
              add_failure(e.message, e.backtrace)
68
 
            rescue Exception => e
69
 
              raise if PASSTHROUGH_EXCEPTIONS.include?(e.class)
70
 
              add_error(e)
71
 
            ensure
72
 
              begin
73
 
                teardown
74
 
                run_callbacks :teardown, :enumerator => :reverse_each
75
 
              rescue Test::Unit::AssertionFailedError => e
76
 
                add_failure(e.message, e.backtrace)
77
 
              rescue Exception => e
78
 
                raise if PASSTHROUGH_EXCEPTIONS.include?(e.class)
79
 
                add_error(e)
80
 
              end
81
 
            end
82
 
          ensure
83
 
            mocha_teardown if using_mocha
84
 
          end
85
 
          result.add_run
86
 
          yield(Test::Unit::TestCase::FINISHED, name)
87
 
        end
88
 
      end
89
 
    end
90
 
  end
91
 
end