test-unit 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +19 -0
- data/Manifest.txt +2 -0
- data/README.txt +3 -1
- data/TODO +1 -0
- data/lib/test/unit/assertions.rb +26 -12
- data/lib/test/unit/autorunner.rb +2 -0
- data/lib/test/unit/collector.rb +1 -1
- data/lib/test/unit/fixture.rb +5 -14
- data/lib/test/unit/priority.rb +17 -2
- data/lib/test/unit/testcase.rb +4 -5
- data/lib/test/unit/util/method-owner-finder.rb +28 -0
- data/lib/test/unit/version.rb +1 -1
- data/test/test-priority.rb +30 -0
- data/test/util/test-method-owner-finder.rb +38 -0
- metadata +5 -3
    
        data/History.txt
    CHANGED
    
    | @@ -1,3 +1,22 @@ | |
| 1 | 
            +
            === 2.0.2 / 2008-12-21
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * 2 major enhancements
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              * re-support ruby 1.8.5.
         | 
| 6 | 
            +
              * improve exception object comparison.
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            * 3 bug fixes
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              * [#22723]: collector fails on anonymous classes
         | 
| 11 | 
            +
              * [#22986]: Test names with '?' blow up on Windows
         | 
| 12 | 
            +
              * [#22988]: don't create .test-result on non-priority mode.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            * Thanks
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              * Erik Hollensbe
         | 
| 17 | 
            +
              * Daniel Berger
         | 
| 18 | 
            +
              * Bill Lear
         | 
| 19 | 
            +
             | 
| 1 20 | 
             
            === 2.0.1 / 2008-11-09
         | 
| 2 21 |  | 
| 3 22 | 
             
            * 19 major enhancements
         | 
    
        data/Manifest.txt
    CHANGED
    
    | @@ -41,6 +41,7 @@ lib/test/unit/ui/testrunner.rb | |
| 41 41 | 
             
            lib/test/unit/ui/testrunnermediator.rb
         | 
| 42 42 | 
             
            lib/test/unit/ui/testrunnerutilities.rb
         | 
| 43 43 | 
             
            lib/test/unit/util/backtracefilter.rb
         | 
| 44 | 
            +
            lib/test/unit/util/method-owner-finder.rb
         | 
| 44 45 | 
             
            lib/test/unit/util/observable.rb
         | 
| 45 46 | 
             
            lib/test/unit/util/procwrapper.rb
         | 
| 46 47 | 
             
            lib/test/unit/version.rb
         | 
| @@ -73,6 +74,7 @@ test/test_testresult.rb | |
| 73 74 | 
             
            test/test_testsuite.rb
         | 
| 74 75 | 
             
            test/testunit-test-util.rb
         | 
| 75 76 | 
             
            test/ui/test_testrunmediator.rb
         | 
| 77 | 
            +
            test/util/test-method-owner-finder.rb
         | 
| 76 78 | 
             
            test/util/test_backtracefilter.rb
         | 
| 77 79 | 
             
            test/util/test_observable.rb
         | 
| 78 80 | 
             
            test/util/test_procwrapper.rb
         | 
    
        data/README.txt
    CHANGED
    
    
    
        data/lib/test/unit/assertions.rb
    CHANGED
    
    | @@ -4,6 +4,7 @@ | |
| 4 4 |  | 
| 5 5 | 
             
            require 'test/unit/assertionfailederror'
         | 
| 6 6 | 
             
            require 'test/unit/util/backtracefilter'
         | 
| 7 | 
            +
            require 'test/unit/util/method-owner-finder'
         | 
| 7 8 | 
             
            require 'test/unit/diff'
         | 
| 8 9 |  | 
| 9 10 | 
             
            module Test
         | 
| @@ -909,9 +910,7 @@ EOM | |
| 909 910 | 
             
                      end
         | 
| 910 911 |  | 
| 911 912 | 
             
                      def inspect
         | 
| 912 | 
            -
                         | 
| 913 | 
            -
                        if inspect_method.respond_to?(:owner) and
         | 
| 914 | 
            -
                            inspect_method.owner == Exception
         | 
| 913 | 
            +
                        if default_inspect?
         | 
| 915 914 | 
             
                          "#{@exception.class.inspect}(#{@exception.message.inspect})"
         | 
| 916 915 | 
             
                        else
         | 
| 917 916 | 
             
                          @exception.inspect
         | 
| @@ -921,6 +920,18 @@ EOM | |
| 921 920 | 
             
                      def method_missing(name, *args, &block)
         | 
| 922 921 | 
             
                        @exception.send(name, *args, &block)
         | 
| 923 922 | 
             
                      end
         | 
| 923 | 
            +
             | 
| 924 | 
            +
                      private
         | 
| 925 | 
            +
                      def default_inspect?
         | 
| 926 | 
            +
                        inspect_method = @exception.method(:inspect)
         | 
| 927 | 
            +
                        if inspect_method.respond_to?(:owner) and
         | 
| 928 | 
            +
                            inspect_method.owner == Exception
         | 
| 929 | 
            +
                          true
         | 
| 930 | 
            +
                        else
         | 
| 931 | 
            +
                          default_inspect_method = Exception.instance_method(:inspect)
         | 
| 932 | 
            +
                          default_inspect_method.bind(@exception).call == @exception.inspect
         | 
| 933 | 
            +
                        end
         | 
| 934 | 
            +
                      end
         | 
| 924 935 | 
             
                    end
         | 
| 925 936 |  | 
| 926 937 | 
             
                    def initialize(test_case, expected_exceptions)
         | 
| @@ -987,15 +998,18 @@ EOM | |
| 987 998 |  | 
| 988 999 | 
             
                    def expected_object?(actual_exception)
         | 
| 989 1000 | 
             
                      @expected_objects.any? do |expected_object|
         | 
| 990 | 
            -
                         | 
| 991 | 
            -
             | 
| 992 | 
            -
             | 
| 993 | 
            -
             | 
| 994 | 
            -
             | 
| 995 | 
            -
             | 
| 996 | 
            -
             | 
| 997 | 
            -
             | 
| 998 | 
            -
                         | 
| 1001 | 
            +
                        expected_object == actual_exception or
         | 
| 1002 | 
            +
                          fallback_exception_object_equal(expected_object, actual_exception)
         | 
| 1003 | 
            +
                      end
         | 
| 1004 | 
            +
                    end
         | 
| 1005 | 
            +
             | 
| 1006 | 
            +
                    def fallback_exception_object_equal(expected_object, actual_exception)
         | 
| 1007 | 
            +
                      owner = Util::MethodOwnerFinder.find(expected_object, :==)
         | 
| 1008 | 
            +
                      if owner == Kernel or owner == Exception
         | 
| 1009 | 
            +
                        expected_object.class == actual_exception.class and
         | 
| 1010 | 
            +
                          expected_object.message == actual_exception.message
         | 
| 1011 | 
            +
                      else
         | 
| 1012 | 
            +
                        false
         | 
| 999 1013 | 
             
                      end
         | 
| 1000 1014 | 
             
                    end
         | 
| 1001 1015 | 
             
                  end
         | 
    
        data/lib/test/unit/autorunner.rb
    CHANGED
    
    | @@ -196,8 +196,10 @@ module Test | |
| 196 196 | 
             
                      o.on("--[no-]priority-mode",
         | 
| 197 197 | 
             
                           "Runs some tests based on their priority.") do |priority_mode|
         | 
| 198 198 | 
             
                        if priority_mode
         | 
| 199 | 
            +
                          Priority.enable
         | 
| 199 200 | 
             
                          @filters |= [priority_filter]
         | 
| 200 201 | 
             
                        else
         | 
| 202 | 
            +
                          Priority.disable
         | 
| 201 203 | 
             
                          @filters -= [priority_filter]
         | 
| 202 204 | 
             
                        end
         | 
| 203 205 | 
             
                      end
         | 
    
        data/lib/test/unit/collector.rb
    CHANGED
    
    
    
        data/lib/test/unit/fixture.rb
    CHANGED
    
    | @@ -90,17 +90,14 @@ module Test | |
| 90 90 | 
             
                    end
         | 
| 91 91 |  | 
| 92 92 | 
             
                    def add_fixture_method_name(how, variable_name, method_name)
         | 
| 93 | 
            -
                       | 
| 94 | 
            -
                        self.instance_variable_set(variable_name, [])
         | 
| 95 | 
            -
                      end
         | 
| 96 | 
            -
                      methods = self.instance_variable_get(variable_name)
         | 
| 93 | 
            +
                      methods = instance_eval("#{variable_name} ||= []")
         | 
| 97 94 |  | 
| 98 95 | 
             
                      if how == :prepend
         | 
| 99 96 | 
             
                        methods = [method_name] | methods
         | 
| 100 97 | 
             
                      else
         | 
| 101 98 | 
             
                        methods = methods | [method_name]
         | 
| 102 99 | 
             
                      end
         | 
| 103 | 
            -
                       | 
| 100 | 
            +
                      instance_variable_set(variable_name, methods)
         | 
| 104 101 | 
             
                    end
         | 
| 105 102 |  | 
| 106 103 | 
             
                    def registered_methods_variable_name(fixture, order)
         | 
| @@ -144,15 +141,9 @@ module Test | |
| 144 141 | 
             
                      interested_ancestors.inject([]) do |result, ancestor|
         | 
| 145 142 | 
             
                        if ancestor.is_a?(Class)
         | 
| 146 143 | 
             
                          ancestor.class_eval do
         | 
| 147 | 
            -
                            methods = []
         | 
| 148 | 
            -
                            unregistered_methods = | 
| 149 | 
            -
             | 
| 150 | 
            -
                              methods = instance_variable_get(methods_variable)
         | 
| 151 | 
            -
                            end
         | 
| 152 | 
            -
                            if instance_variable_defined?(unregistered_methods_variable)
         | 
| 153 | 
            -
                              unregistered_methods =
         | 
| 154 | 
            -
                                instance_variable_get(unregistered_methods_variable)
         | 
| 155 | 
            -
                            end
         | 
| 144 | 
            +
                            methods = instance_eval("#{methods_variable} ||= []")
         | 
| 145 | 
            +
                            unregistered_methods =
         | 
| 146 | 
            +
                              instance_eval("#{unregistered_methods_variable} ||= []")
         | 
| 156 147 | 
             
                            (result | methods) - unregistered_methods
         | 
| 157 148 | 
             
                          end
         | 
| 158 149 | 
             
                        else
         | 
    
        data/lib/test/unit/priority.rb
    CHANGED
    
    | @@ -13,6 +13,19 @@ module Test | |
| 13 13 | 
             
                        teardown :priority_teardown, :after => :append
         | 
| 14 14 | 
             
                      end
         | 
| 15 15 | 
             
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    @@enabled = false
         | 
| 18 | 
            +
                    def enabled?
         | 
| 19 | 
            +
                      @@enabled
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    def enable
         | 
| 23 | 
            +
                      @@enabled = true
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    def disable
         | 
| 27 | 
            +
                      @@enabled = false
         | 
| 28 | 
            +
                    end
         | 
| 16 29 | 
             
                  end
         | 
| 17 30 |  | 
| 18 31 | 
             
                  class Checker
         | 
| @@ -90,7 +103,7 @@ module Test | |
| 90 103 | 
             
                    def result_dir
         | 
| 91 104 | 
             
                      components = [".test-result",
         | 
| 92 105 | 
             
                                    @test.class.name || "AnonymousTestCase",
         | 
| 93 | 
            -
                                     | 
| 106 | 
            +
                                    escaped_method_name]
         | 
| 94 107 | 
             
                      parent_directories = [File.dirname($0), Dir.pwd]
         | 
| 95 108 | 
             
                      if Process.respond_to?(:uid)
         | 
| 96 109 | 
             
                        parent_directories << File.join(Dir.tmpdir, Process.uid.to_s)
         | 
| @@ -112,7 +125,7 @@ module Test | |
| 112 125 | 
             
                    end
         | 
| 113 126 |  | 
| 114 127 | 
             
                    def escaped_method_name
         | 
| 115 | 
            -
                      @method_name.to_s.gsub(/[!?=]$/) do |matched|
         | 
| 128 | 
            +
                      @test.method_name.to_s.gsub(/[!?=]$/) do |matched|
         | 
| 116 129 | 
             
                        case matched
         | 
| 117 130 | 
             
                        when "!"
         | 
| 118 131 | 
             
                          ".destructive"
         | 
| @@ -135,10 +148,12 @@ module Test | |
| 135 148 | 
             
                  end
         | 
| 136 149 |  | 
| 137 150 | 
             
                  def priority_setup
         | 
| 151 | 
            +
                    return unless Priority.enabled?
         | 
| 138 152 | 
             
                    Checker.new(self).setup
         | 
| 139 153 | 
             
                  end
         | 
| 140 154 |  | 
| 141 155 | 
             
                  def priority_teardown
         | 
| 156 | 
            +
                    return unless Priority.enabled?
         | 
| 142 157 | 
             
                    Checker.new(self).teardown
         | 
| 143 158 | 
             
                  end
         | 
| 144 159 | 
             
                end
         | 
    
        data/lib/test/unit/testcase.rb
    CHANGED
    
    | @@ -17,6 +17,7 @@ require 'test/unit/priority' | |
| 17 17 | 
             
            require 'test/unit/testsuite'
         | 
| 18 18 | 
             
            require 'test/unit/assertionfailederror'
         | 
| 19 19 | 
             
            require 'test/unit/util/backtracefilter'
         | 
| 20 | 
            +
            require 'test/unit/util/method-owner-finder'
         | 
| 20 21 |  | 
| 21 22 | 
             
            module Test
         | 
| 22 23 | 
             
              module Unit
         | 
| @@ -192,11 +193,9 @@ module Test | |
| 192 193 | 
             
                    throw :invalid_test unless respond_to?(test_method_name)
         | 
| 193 194 | 
             
                    test_method = method(test_method_name)
         | 
| 194 195 | 
             
                    throw :invalid_test if test_method.arity > 0
         | 
| 195 | 
            -
                     | 
| 196 | 
            -
             | 
| 197 | 
            -
             | 
| 198 | 
            -
                        throw :invalid_test
         | 
| 199 | 
            -
                      end
         | 
| 196 | 
            +
                    owner = Util::MethodOwnerFinder.find(self, test_method_name)
         | 
| 197 | 
            +
                    if owner.class != Module and self.class != owner
         | 
| 198 | 
            +
                      throw :invalid_test
         | 
| 200 199 | 
             
                    end
         | 
| 201 200 | 
             
                    @method_name = test_method_name
         | 
| 202 201 | 
             
                    @test_passed = true
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            module Test
         | 
| 2 | 
            +
              module Unit
         | 
| 3 | 
            +
                module Util
         | 
| 4 | 
            +
                  module MethodOwnerFinder
         | 
| 5 | 
            +
                    module_function
         | 
| 6 | 
            +
                    def find(object, method_name)
         | 
| 7 | 
            +
                      method = object.method(method_name)
         | 
| 8 | 
            +
                      return method.owner if method.respond_to?(:owner)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      if /\((.+?)\)\#/ =~ method.to_s
         | 
| 11 | 
            +
                        owner_name = $1
         | 
| 12 | 
            +
                        if /\A#</ =~ owner_name
         | 
| 13 | 
            +
                          ObjectSpace.each_object(Module) do |mod|
         | 
| 14 | 
            +
                            return mod if mod.to_s == owner_name
         | 
| 15 | 
            +
                          end
         | 
| 16 | 
            +
                        else
         | 
| 17 | 
            +
                          owner_name.split(/::/).inject(Object) do |parent, name|
         | 
| 18 | 
            +
                            parent.const_get(name)
         | 
| 19 | 
            +
                          end
         | 
| 20 | 
            +
                        end
         | 
| 21 | 
            +
                      else
         | 
| 22 | 
            +
                        object.class
         | 
| 23 | 
            +
                      end
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
    
        data/lib/test/unit/version.rb
    CHANGED
    
    
    
        data/test/test-priority.rb
    CHANGED
    
    | @@ -86,4 +86,34 @@ class TestUnitPriority < Test::Unit::TestCase | |
| 86 86 | 
             
                end
         | 
| 87 87 | 
             
                assert_in_delta(expected, n_need_to_run.to_f / n, delta)
         | 
| 88 88 | 
             
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
              class SpecialNameTestCase < Test::Unit::TestCase
         | 
| 91 | 
            +
                class << self
         | 
| 92 | 
            +
                  def suite
         | 
| 93 | 
            +
                    Test::Unit::TestSuite.new(name)
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                def test_question?
         | 
| 98 | 
            +
                end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                def test_exclamation!
         | 
| 101 | 
            +
                end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                def test_equal=
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
              def test_escaped?
         | 
| 108 | 
            +
                assert_escaped_name("test_question.predicate", "test_question?")
         | 
| 109 | 
            +
                assert_escaped_name("test_exclamation.destructive", "test_exclamation!")
         | 
| 110 | 
            +
                assert_escaped_name("test_equal.equal", "test_equal=")
         | 
| 111 | 
            +
              end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              def assert_escaped_name(expected, test_method_name)
         | 
| 114 | 
            +
                checker = Checker.new(SpecialNameTestCase.new(test_method_name))
         | 
| 115 | 
            +
                passed_file = checker.send(:passed_file)
         | 
| 116 | 
            +
                method_name_component = File.basename(File.dirname(passed_file))
         | 
| 117 | 
            +
                assert_equal(expected, method_name_component)
         | 
| 118 | 
            +
              end
         | 
| 89 119 | 
             
            end
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test/unit/util/method-owner-finder'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class TestUnitMethodOwnerFinder < Test::Unit::TestCase
         | 
| 6 | 
            +
              def test_find
         | 
| 7 | 
            +
                assert_equal(Exception, find(RuntimeError.new, :inspect))
         | 
| 8 | 
            +
                assert_equal(Exception, find(Exception.new, :inspect))
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                anonymous_class = Class.new do
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                assert_equal(Kernel, find(anonymous_class.new, :inspect))
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                anonymous_parent_class = Class.new do
         | 
| 15 | 
            +
                  def inspect
         | 
| 16 | 
            +
                    super + " by anonymous parent class"
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
                anonymous_sub_class = Class.new(anonymous_parent_class) do
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
                assert_equal(anonymous_parent_class, find(anonymous_sub_class.new, :inspect))
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                anonymous_module = Module.new do
         | 
| 24 | 
            +
                  def inspect
         | 
| 25 | 
            +
                    super + " by anonymous module"
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
                anonymous_include_class = Class.new do
         | 
| 29 | 
            +
                  include anonymous_module
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
                assert_equal(anonymous_module, find(anonymous_include_class.new, :inspect))
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              private
         | 
| 35 | 
            +
              def find(object, method_name)
         | 
| 36 | 
            +
                Test::Unit::Util::MethodOwnerFinder.find(object, method_name)
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: test-unit
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 2.0. | 
| 4 | 
            +
              version: 2.0.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Kouhei Sutou
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2008- | 
| 13 | 
            +
            date: 2008-12-21 00:00:00 +09:00
         | 
| 14 14 | 
             
            default_executable: 
         | 
| 15 15 | 
             
            dependencies: 
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -79,6 +79,7 @@ files: | |
| 79 79 | 
             
            - lib/test/unit/ui/testrunnermediator.rb
         | 
| 80 80 | 
             
            - lib/test/unit/ui/testrunnerutilities.rb
         | 
| 81 81 | 
             
            - lib/test/unit/util/backtracefilter.rb
         | 
| 82 | 
            +
            - lib/test/unit/util/method-owner-finder.rb
         | 
| 82 83 | 
             
            - lib/test/unit/util/observable.rb
         | 
| 83 84 | 
             
            - lib/test/unit/util/procwrapper.rb
         | 
| 84 85 | 
             
            - lib/test/unit/version.rb
         | 
| @@ -111,6 +112,7 @@ files: | |
| 111 112 | 
             
            - test/test_testsuite.rb
         | 
| 112 113 | 
             
            - test/testunit-test-util.rb
         | 
| 113 114 | 
             
            - test/ui/test_testrunmediator.rb
         | 
| 115 | 
            +
            - test/util/test-method-owner-finder.rb
         | 
| 114 116 | 
             
            - test/util/test_backtracefilter.rb
         | 
| 115 117 | 
             
            - test/util/test_observable.rb
         | 
| 116 118 | 
             
            - test/util/test_procwrapper.rb
         | 
| @@ -137,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 137 139 | 
             
            requirements: []
         | 
| 138 140 |  | 
| 139 141 | 
             
            rubyforge_project: test-unit
         | 
| 140 | 
            -
            rubygems_version: 1. | 
| 142 | 
            +
            rubygems_version: 1.3.1
         | 
| 141 143 | 
             
            signing_key: 
         | 
| 142 144 | 
             
            specification_version: 2
         | 
| 143 145 | 
             
            summary: Test::Unit 2.x - Improved version of Test::Unit bundled in Ruby 1.8.x
         |