From 58cfb41d2a5f5f42def95ac02ed0089e852cba2a Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 18 Jun 2009 07:31:39 +0000 Subject: Imported minitest 1.4.0 r5083. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23731 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/minitest/autorun.rb | 2 ++ lib/minitest/spec.rb | 33 +++++++++++++++++++++++++++++---- lib/minitest/unit.rb | 12 ++++++------ 3 files changed, 37 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/minitest/autorun.rb b/lib/minitest/autorun.rb index a9f9c67166..5bf35f6ab8 100644 --- a/lib/minitest/autorun.rb +++ b/lib/minitest/autorun.rb @@ -5,5 +5,7 @@ ############################################################ require 'minitest/unit' +require 'minitest/spec' +require 'minitest/mock' MiniTest::Unit.autorun diff --git a/lib/minitest/spec.rb b/lib/minitest/spec.rb index 2158ec0d7b..81bd08867a 100644 --- a/lib/minitest/spec.rb +++ b/lib/minitest/spec.rb @@ -55,15 +55,25 @@ end module Kernel def describe desc, &block - cls = Class.new(MiniTest::Spec) - Object.const_set desc.to_s.split(/\W+/).map { |s| s.capitalize }.join, cls + stack = MiniTest::Spec.describe_stack + name = desc.to_s.split(/\W+/).map { |s| s.capitalize }.join + "Spec" + cls = Object.class_eval "class #{name} < #{stack.last}; end; #{name}" + cls.nuke_test_methods! + + stack.push cls cls.class_eval(&block) + stack.pop end private :describe end class MiniTest::Spec < MiniTest::Unit::TestCase + @@describe_stack = [MiniTest::Spec] + def self.describe_stack + @@describe_stack + end + def self.current @@current_spec end @@ -73,14 +83,29 @@ class MiniTest::Spec < MiniTest::Unit::TestCase @@current_spec = self end + def self.nuke_test_methods! + self.public_instance_methods.grep(/^test_/).each do |name| + send :remove_method, name rescue nil + end + end + + def self.define_inheritable_method name, &block + super_method = self.superclass.instance_method name + + define_method name do + super_method.bind(self).call if super_method # regular super() warns + instance_eval(&block) + end + end + def self.before(type = :each, &block) raise "unsupported before type: #{type}" unless type == :each - define_method :setup, &block + define_inheritable_method :setup, &block end def self.after(type = :each, &block) raise "unsupported after type: #{type}" unless type == :each - define_method :teardown, &block + define_inheritable_method :teardown, &block end def self.it desc, &block diff --git a/lib/minitest/unit.rb b/lib/minitest/unit.rb index df7d6f5d43..3ac89b5fbd 100644 --- a/lib/minitest/unit.rb +++ b/lib/minitest/unit.rb @@ -343,7 +343,7 @@ module MiniTest def location e last_before_assertion = "" e.backtrace.reverse_each do |s| - break if s =~ /in .(assert|refute|flunk|pass|fail|raise)/ + break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/ last_before_assertion = s end last_before_assertion.sub(/:in .*$/, '') @@ -430,30 +430,30 @@ module MiniTest end class TestCase - attr_reader :name + attr_reader :__name__ def run runner result = '.' begin @passed = nil self.setup - self.__send__ self.name + self.__send__ self.__name__ @passed = true rescue Exception => e @passed = false - result = runner.puke(self.class, self.name, e) + result = runner.puke(self.class, self.__name__, e) ensure begin self.teardown rescue Exception => e - result = runner.puke(self.class, self.name, e) + result = runner.puke(self.class, self.__name__, e) end end result end def initialize name - @name = name + @__name__ = name @passed = nil end -- cgit v1.2.3