[前][次][番号順一覧][スレッド一覧]

ruby-changes:21053

From: ryan <ko1@a...>
Date: Sun, 28 Aug 2011 05:31:38 +0900 (JST)
Subject: [ruby-changes:21053] ryan:r33102 (trunk): Imported minitest 2.5.1 (r6596)

ryan	2011-08-28 05:30:57 +0900 (Sun, 28 Aug 2011)

  New Revision: 33102

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=33102

  Log:
    Imported minitest 2.5.1 (r6596)

  Modified files:
    trunk/ChangeLog
    trunk/lib/minitest/spec.rb
    trunk/lib/minitest/unit.rb
    trunk/test/minitest/test_minitest_spec.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 33101)
+++ ChangeLog	(revision 33102)
@@ -1,3 +1,8 @@
+Sun Aug 28 05:29:50 2011  Ryan Davis  <ryand-ruby@z...>
+
+	* lib/minitest/*: Imported minitest 2.5.1 (r6596)
+	* test/minitest/*: ditto
+
 Sat Aug 27 20:46:05 2011  Kazuki Tsujimoto  <kazuki@c...>
 
 	* vm.c (rb_vm_rewrite_dfp_in_errinfo): change return type
Index: lib/minitest/unit.rb
===================================================================
--- lib/minitest/unit.rb	(revision 33101)
+++ lib/minitest/unit.rb	(revision 33102)
@@ -620,7 +620,7 @@
   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:
Index: lib/minitest/spec.rb
===================================================================
--- lib/minitest/spec.rb	(revision 33101)
+++ lib/minitest/spec.rb	(revision 33102)
@@ -94,11 +94,27 @@
   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 @@
   #     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 = []
Index: test/minitest/test_minitest_spec.rb
===================================================================
--- test/minitest/test_minitest_spec.rb	(revision 33101)
+++ test/minitest/test_minitest_spec.rb	(revision 33102)
@@ -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 @@
     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
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]