summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--lib/minitest/spec.rb31
-rw-r--r--lib/minitest/unit.rb2
-rw-r--r--test/minitest/test_minitest_spec.rb37
4 files changed, 71 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 79f4cf60a6..3d8e5d0c6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Aug 28 05:29:50 2011 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * backport r33102 from trunk.
+
+ * lib/minitest/*: Imported minitest 2.5.1 (r6596)
+ * test/minitest/*: ditto
+
Sat Aug 27 20:54:54 2011 Kazuki Tsujimoto <kazuki@callcc.net>
* backport r33099 from trunk.
diff --git a/lib/minitest/spec.rb b/lib/minitest/spec.rb
index 7b414e324a..a70bbdd405 100644
--- a/lib/minitest/spec.rb
+++ b/lib/minitest/spec.rb
@@ -94,11 +94,27 @@ class MiniTest::Spec < MiniTest::Unit::TestCase
TYPES = [[//, MiniTest::Spec]]
##
- # Register a new type of spec that matches the spec's description. Eg:
+ # Register a new type of spec that matches the spec's description.
+ # This method can take either a Regexp and a spec class or a spec
+ # class and a block that takes the description and returns true if
+ # it matches.
#
- # register_spec_plugin(/Controller$/, MiniTest::Spec::Rails)
+ # Eg:
+ #
+ # register_spec_type(/Controller$/, MiniTest::Spec::Rails)
+ #
+ # or:
+ #
+ # register_spec_type(MiniTest::Spec::RailsModel) do |desc|
+ # desc.superclass == ActiveRecord::Base
+ # end
- def self.register_spec_type matcher, klass
+ def self.register_spec_type(*args, &block)
+ if block then
+ matcher, klass = block, args.first
+ else
+ matcher, klass = *args
+ end
TYPES.unshift [matcher, klass]
end
@@ -108,8 +124,13 @@ class MiniTest::Spec < MiniTest::Unit::TestCase
# spec_type("BlahController") # => MiniTest::Spec::Rails
def self.spec_type desc
- desc = desc.to_s
- TYPES.find { |re, klass| re === desc }.last
+ TYPES.find { |matcher, klass|
+ if matcher.respond_to? :call then
+ matcher.call desc
+ else
+ matcher === desc.to_s
+ end
+ }.last
end
@@describe_stack = []
diff --git a/lib/minitest/unit.rb b/lib/minitest/unit.rb
index 7fda1a0e22..922ef70183 100644
--- a/lib/minitest/unit.rb
+++ b/lib/minitest/unit.rb
@@ -620,7 +620,7 @@ module MiniTest
end
class Unit
- VERSION = "2.5.0" # :nodoc:
+ VERSION = "2.5.1" # :nodoc:
attr_accessor :report, :failures, :errors, :skips # :nodoc:
attr_accessor :test_count, :assertion_count # :nodoc:
diff --git a/test/minitest/test_minitest_spec.rb b/test/minitest/test_minitest_spec.rb
index 26dd4ec46a..d9f6368a80 100644
--- a/test/minitest/test_minitest_spec.rb
+++ b/test/minitest/test_minitest_spec.rb
@@ -7,6 +7,11 @@
require 'minitest/autorun'
require 'stringio'
+class MiniSpecA < MiniTest::Spec; end
+class MiniSpecB < MiniTest::Spec; end
+class ExampleA; end
+class ExampleB < ExampleA; end
+
describe MiniTest::Spec do
before do
@assertion_count = 4
@@ -279,6 +284,38 @@ class TestMeta < MiniTest::Unit::TestCase
return x, y, z, before_list, after_list
end
+ def test_register_spec_type
+ original_types = MiniTest::Spec::TYPES.dup
+
+ assert_equal [[//, MiniTest::Spec]], MiniTest::Spec::TYPES
+
+ MiniTest::Spec.register_spec_type(/woot/, TestMeta)
+
+ p = lambda do |x| true end
+ MiniTest::Spec.register_spec_type TestMeta, &p
+
+ keys = MiniTest::Spec::TYPES.map(&:first)
+
+ assert_includes keys, /woot/
+ assert_includes keys, p
+ ensure
+ MiniTest::Spec::TYPES.replace original_types
+ end
+
+ def test_spec_type
+ original_types = MiniTest::Spec::TYPES.dup
+
+ MiniTest::Spec.register_spec_type(/A$/, MiniSpecA)
+ MiniTest::Spec.register_spec_type MiniSpecB do |desc|
+ desc.superclass == ExampleA
+ end
+
+ assert_equal MiniSpecA, MiniTest::Spec.spec_type(ExampleA)
+ assert_equal MiniSpecB, MiniTest::Spec.spec_type(ExampleB)
+ ensure
+ MiniTest::Spec::TYPES.replace original_types
+ end
+
def test_structure
x, y, z, * = util_structure