Sha256: d1de7792a5615c1a3fb5881d0ba62c568c3f9acd1a2262b3bf7bdcac38c7f003

Contents?: true

Size: 1.74 KB

Versions: 5

Compression:

Stored size: 1.74 KB

Contents

require 'test/unit'
require 'test_belt/test_unit/runner'

module Test::Unit

  class TestCase

    class << self

      def _testbelt_suite_callbacks
        @_testbelt_suite_callbacks ||= {
          :started => [],
          :finished => []
        }
      end

      def _testbelt_testcase_callbacks
        @_testbelt_testcase_callbacks ||= {
          :setup => [],
          :teardown => []
        }
      end

      protected

      # Suite level callbacks
      def suite_started(&block)
        ::Test::Unit::TestCase._testbelt_suite_callbacks[:started] << block
      end
      alias :on_suite_started :suite_started

      def suite_finished(&block)
        ::Test::Unit::TestCase._testbelt_suite_callbacks[:finished] << block
      end
      alias :on_suite_finished :suite_finished

      # TestCase level callbacks
      def setup_once(&block)
        _testbelt_testcase_callbacks[:setup] << block
      end
      alias :before_once :setup_once

      def teardown_once(&block)
        _testbelt_testcase_callbacks[:teardown] << block
      end
      alias :after_once :teardown_once

    end
  end


  # override the TestSuite with TestCase callbacks
  class TestSuite
    alias_method :run_without_testbelt_callbacks, :run

    def run(*args, &block) # :nodoc:
      if !tests.empty? && (testclass = tests.first).kind_of?(::Test::Unit::TestCase)
        tests.first.class._testbelt_testcase_callbacks[:setup].each do |callback|
          callback.call
        end
      end
      run_without_testbelt_callbacks *args, &block
      if !tests.empty? && (testclass = tests.first).kind_of?(::Test::Unit::TestCase)
        tests.first.class._testbelt_testcase_callbacks[:teardown].reverse.each do |callback|
          callback.call
        end
      end
    end
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
test-belt-0.2.1 lib/test_belt/test_unit/context.rb
test-belt-0.2.0 lib/test_belt/test_unit/context.rb
test-belt-0.1.2 lib/test_belt/test_unit/context.rb
test-belt-0.1.1 lib/test_belt/test_unit/context.rb
test-belt-0.1.0 lib/test_belt/test_unit/context.rb