diff options
author | ryan <ryan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-03-28 01:37:07 +0000 |
---|---|---|
committer | ryan <ryan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-03-28 01:37:07 +0000 |
commit | 1392791a9e1b046f9e14711a24e51a4e5875c100 (patch) | |
tree | dc430b7d65c51511ab98feb2bc9831cb937f1c08 /lib/minitest/spec.rb | |
parent | d8cc6ccb566a4f302bd85c7a568eda0e434dd8d1 (diff) | |
download | ruby-1392791a9e1b046f9e14711a24e51a4e5875c100.tar.gz |
Imported minitest 1.6.0 r5717.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27076 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/minitest/spec.rb')
-rw-r--r-- | lib/minitest/spec.rb | 190 |
1 files changed, 174 insertions, 16 deletions
diff --git a/lib/minitest/spec.rb b/lib/minitest/spec.rb index e730e205e8..59b4c6536c 100644 --- a/lib/minitest/spec.rb +++ b/lib/minitest/spec.rb @@ -64,6 +64,14 @@ class Object end module Kernel + ## + # Describe a series of expectations for a given target +desc+. + # + # TODO: find good tutorial url. + # + # Defines a test class subclassing from either + # MiniTest::Unit::TestCase or from the surrounding describe's class. + def describe desc, &block stack = MiniTest::Spec.describe_stack name = desc.to_s.split(/\W+/).map { |s| s.capitalize }.join + "Spec" @@ -80,28 +88,36 @@ module Kernel private :describe end +class Module + def classes type = Object # :nodoc: + constants.map { |n| const_get n }.find_all { |c| + c.class == Class and type > c + } - [self] + end +end + class MiniTest::Spec < MiniTest::Unit::TestCase @@describe_stack = [MiniTest::Spec] - def self.describe_stack + def self.describe_stack # :nodoc: @@describe_stack end - def self.current + def self.current # :nodoc: @@current_spec end - def initialize name + def initialize name # :nodoc: super @@current_spec = self end - def self.nuke_test_methods! + def self.nuke_test_methods! # :nodoc: self.public_instance_methods.grep(/^test_/).each do |name| self.send :undef_method, name end end - def self.define_inheritable_method name, &block + def self.define_inheritable_method name, &block # :nodoc: super_method = self.superclass.instance_method name define_method name do @@ -110,25 +126,167 @@ class MiniTest::Spec < MiniTest::Unit::TestCase end end - def self.before(type = :each, &block) - if type == :all - warn "change before :all to before :each" - type = :each - end + ## + # Define a 'before' action. Inherits the way normal methods should. + # + # NOTE: +type+ is ignored and is only there to make porting easier. + # + # Equivalent to MiniTest::Unit::TestCase#setup. + + def self.before type = :each, &block raise "unsupported before type: #{type}" unless type == :each define_inheritable_method :setup, &block end - def self.after(type = :each, &block) - if type == :all # REFACTOR - warn "change before :all to before :each" - type = :each - end + ## + # Define an 'after' action. Inherits the way normal methods should. + # + # NOTE: +type+ is ignored and is only there to make porting easier. + # + # Equivalent to MiniTest::Unit::TestCase#teardown. + + def self.after type = :each, &block raise "unsupported after type: #{type}" unless type == :each define_inheritable_method :teardown, &block end + ## + # Define an expectation with name +desc+. Name gets morphed to a + # proper test method name. For some freakish reason, people who + # write specs don't like class inheritence, so this goes way out of + # its way to make sure that expectations aren't inherited. + # + # Hint: If you _do_ want inheritence, use minitest/unit. You can mix + # and match between assertions and expectations as much as you want. + def self.it desc, &block - define_method "test_#{desc.gsub(/\W+/, '_').downcase}", &block + block ||= proc { skip "(no tests defined)" } + + @specs ||= 0 + @specs += 1 + + name = "test_%04d_%s" % [ @specs, desc.gsub(/\W+/, '_').downcase ] + + define_method name, &block + + classes(MiniTest::Spec).each do |mod| + mod.send :undef_method, name if mod.respond_to? name + end end + + ## + # :method: must_be + # See MiniTest::Assertions#assert + + ## + # :method: must_be_close_to + # See MiniTest::Assertions#assert_in_delta + + ## + # :method: must_be_empty + # See MiniTest::Assertions#assert_empty + + ## + # :method: must_be_instance_of + # See MiniTest::Assertions#assert_instance_of + + ## + # :method: must_be_kind_of + # See MiniTest::Assertions#assert_kind_of + + ## + # :method: must_be_nil + # See MiniTest::Assertions#assert_nil + + ## + # :method: must_be_same_as + # See MiniTest::Assertions#assert_same + + ## + # :method: must_be_within_delta + # See MiniTest::Assertions#assert_in_delta + + ## + # :method: must_be_within_epsilon + # See MiniTest::Assertions#assert_in_epsilon + + ## + # :method: must_equal + # See MiniTest::Assertions#assert_equal + + ## + # :method: must_include + # See MiniTest::Assertions#assert_includes + + ## + # :method: must_match + # See MiniTest::Assertions#assert_match + + ## + # :method: must_raise + # See MiniTest::Assertions#assert_raises + + ## + # :method: must_respond_to + # See MiniTest::Assertions#assert_respond_to + + ## + # :method: must_send + # See MiniTest::Assertions#assert_send + + ## + # :method: must_throw + # See MiniTest::Assertions#assert_throw + + ## + # :method: wont_be + # See MiniTest::Assertions#refute + + ## + # :method: wont_be_close_to + # See MiniTest::Assertions#refute_in_delta + + ## + # :method: wont_be_empty + # See MiniTest::Assertions#refute_empty + + ## + # :method: wont_be_instance_of + # See MiniTest::Assertions#refute_instance_of + + ## + # :method: wont_be_kind_of + # See MiniTest::Assertions#refute_kind_of + + ## + # :method: wont_be_nil + # See MiniTest::Assertions#refute_nil + + ## + # :method: wont_be_same_as + # See MiniTest::Assertions#refute_same + + ## + # :method: wont_be_within_delta + # See MiniTest::Assertions#refute_in_delta + + ## + # :method: wont_be_within_epsilon + # See MiniTest::Assertions#refute_in_epsilon + + ## + # :method: wont_equal + # See MiniTest::Assertions#refute_equal + + ## + # :method: wont_include + # See MiniTest::Assertions#refute_includes + + ## + # :method: wont_match + # See MiniTest::Assertions#refute_match + + ## + # :method: wont_respond_to + # See MiniTest::Assertions#refute_respond_to end |