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

ruby-changes:66269

From: Hiroshi <ko1@a...>
Date: Wed, 19 May 2021 14:24:54 +0900 (JST)
Subject: [ruby-changes:66269] adcbae8d49 (master): Removed minitest/mock

https://git.ruby-lang.org/ruby.git/commit/?id=adcbae8d49

From adcbae8d49ec04d365ce13274783b1495c3c7d0e Mon Sep 17 00:00:00 2001
From: Hiroshi SHIBATA <hsbt@r...>
Date: Wed, 19 May 2021 14:24:01 +0900
Subject: Removed minitest/mock

---
 test/resolv/test_dns.rb                  |  31 ++-
 tool/lib/minitest/mock.rb                | 196 ---------------
 tool/test/minitest/test_minitest_mock.rb | 404 -------------------------------
 3 files changed, 30 insertions(+), 601 deletions(-)
 delete mode 100644 tool/lib/minitest/mock.rb
 delete mode 100644 tool/test/minitest/test_minitest_mock.rb

diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb
index 1f1555f..5171604 100644
--- a/test/resolv/test_dns.rb
+++ b/test/resolv/test_dns.rb
@@ -3,7 +3,36 @@ require 'test/unit' https://github.com/ruby/ruby/blob/trunk/test/resolv/test_dns.rb#L3
 require 'resolv'
 require 'socket'
 require 'tempfile'
-require 'minitest/mock'
+
+class Object # :nodoc:
+  def stub name, val_or_callable, &block
+    new_name = "__minitest_stub__#{name}"
+
+    metaclass = class << self; self; end
+
+    if respond_to? name and not methods.map(&:to_s).include? name.to_s then
+      metaclass.send :define_method, name do |*args|
+        super(*args)
+      end
+    end
+
+    metaclass.send :alias_method, new_name, name
+
+    metaclass.send :define_method, name do |*args|
+      if val_or_callable.respond_to? :call then
+        val_or_callable.call(*args)
+      else
+        val_or_callable
+      end
+    end
+
+    yield self
+  ensure
+    metaclass.send :undef_method, name
+    metaclass.send :alias_method, name, new_name
+    metaclass.send :undef_method, new_name
+  end unless method_defined?(:stub) # lib/rubygems/test_case.rb also has the same method definition
+end
 
 class TestResolvDNS < Test::Unit::TestCase
   def setup
diff --git a/tool/lib/minitest/mock.rb b/tool/lib/minitest/mock.rb
deleted file mode 100644
index a723084..0000000
--- a/tool/lib/minitest/mock.rb
+++ /dev/null
@@ -1,196 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/test/resolv/test_dns.rb#L0
-# encoding: utf-8
-# frozen_string_literal: true
-
-class MockExpectationError < StandardError; end # :nodoc:
-
-##
-# A simple and clean mock object framework.
-
-module MiniTest # :nodoc:
-
-  ##
-  # All mock objects are an instance of Mock
-
-  class Mock
-    alias :__respond_to? :respond_to?
-
-    skip_methods = %w(object_id respond_to_missing? inspect === to_s)
-
-    instance_methods.each do |m|
-      undef_method m unless skip_methods.include?(m.to_s) || m =~ /^__/
-    end
-
-    def initialize # :nodoc:
-      @expected_calls = Hash.new { |calls, name| calls[name] = [] }
-      @actual_calls   = Hash.new { |calls, name| calls[name] = [] }
-    end
-
-    ##
-    # Expect that method +name+ is called, optionally with +args+ or a
-    # +blk+, and returns +retval+.
-    #
-    #   @mock.expect(:meaning_of_life, 42)
-    #   @mock.meaning_of_life # => 42
-    #
-    #   @mock.expect(:do_something_with, true, [some_obj, true])
-    #   @mock.do_something_with(some_obj, true) # => true
-    #
-    #   @mock.expect(:do_something_else, true) do |a1, a2|
-    #     a1 == "buggs" && a2 == :bunny
-    #   end
-    #
-    # +args+ is compared to the expected args using case equality (ie, the
-    # '===' operator), allowing for less specific expectations.
-    #
-    #   @mock.expect(:uses_any_string, true, [String])
-    #   @mock.uses_any_string("foo") # => true
-    #   @mock.verify  # => true
-    #
-    #   @mock.expect(:uses_one_string, true, ["foo"]
-    #   @mock.uses_one_string("bar") # => true
-    #   @mock.verify  # => raises MockExpectationError
-
-    def expect(name, retval, args=[], &blk)
-      if block_given?
-        raise ArgumentError, "args ignored when block given" unless args.empty?
-        @expected_calls[name] << { :retval => retval, :block => blk }
-      else
-        raise ArgumentError, "args must be an array" unless Array === args
-        @expected_calls[name] << { :retval => retval, :args => args }
-      end
-      self
-    end
-
-    def __call name, data # :nodoc:
-      case data
-      when Hash then
-        "#{name}(#{data[:args].inspect[1..-2]}) => #{data[:retval].inspect}"
-      else
-        data.map { |d| __call name, d }.join ", "
-      end
-    end
-
-    ##
-    # Verify that all methods were called as expected. Raises
-    # +MockExpectationError+ if the mock object was not called as
-    # expected.
-
-    def verify
-      @expected_calls.each do |name, calls|
-        calls.each do |expected|
-          msg1 = "expected #{__call name, expected}"
-          msg2 = "#{msg1}, got [#{__call name, @actual_calls[name]}]"
-
-          raise MockExpectationError, msg2 if
-            @actual_calls.has_key?(name) and
-            not @actual_calls[name].include?(expected)
-
-          raise MockExpectationError, msg1 unless
-            @actual_calls.has_key?(name) and
-            @actual_calls[name].include?(expected)
-        end
-      end
-      true
-    end
-
-    def method_missing(sym, *args) # :nodoc:
-      unless @expected_calls.has_key?(sym) then
-        raise NoMethodError, "unmocked method %p, expected one of %p" %
-          [sym, @expected_calls.keys.sort_by(&:to_s)]
-      end
-
-      index = @actual_calls[sym].length
-      expected_call = @expected_calls[sym][index]
-
-      unless expected_call then
-        raise MockExpectationError, "No more expects available for %p: %p" %
-          [sym, args]
-      end
-
-      expected_args, retval, val_block =
-        expected_call.values_at(:args, :retval, :block)
-
-      if val_block then
-        raise MockExpectationError, "mocked method %p failed block w/ %p" %
-          [sym, args] unless val_block.call(args)
-
-        # keep "verify" happy
-        @actual_calls[sym] << expected_call
-        return retval
-      end
-
-      if expected_args.size != args.size then
-        raise ArgumentError, "mocked method %p expects %d arguments, got %d" %
-          [sym, expected_args.size, args.size]
-      end
-
-      fully_matched = expected_args.zip(args).all? { |mod, a|
-        mod === a or mod == a
-      }
-
-      unless fully_matched then
-        raise MockExpectationError, "mocked method %p called with unexpected arguments %p" %
-          [sym, args]
-      end
-
-      @actual_calls[sym] << {
-        :retval => retval,
-        :args => expected_args.zip(args).map { |mod, a| mod === a ? mod : a }
-      }
-
-      retval
-    end
-
-    def respond_to?(sym, include_private = false) # :nodoc:
-      return true if @expected_calls.has_key?(sym.to_sym)
-      return __respond_to?(sym, include_private)
-    end
-  end
-end
-
-class Object # :nodoc:
-
-  ##
-  # Add a temporary stubbed method replacing +name+ for the duration
-  # of the +block+. If +val_or_callable+ responds to #call, then it
-  # returns the result of calling it, otherwise returns the value
-  # as-is. Cleans up the stub at the end of the +block+. The method
-  # +name+ must exist before stubbing.
-  #
-  #     def test_stale_eh
-  #       obj_under_test = Something.new
-  #       refute obj_under_test.stale?
-  #
-  #       Time.stub :now, Time.at(0) do
-  #         assert obj_under_test.stale?
-  #       end
-  #     end
-
-  def stub name, val_or_callable, &block
-    new_name = "__minitest_stub__#{name}"
-
-    metaclass = class << self; self; end
-
-    if respond_to? name and not methods.map(&:to_s).include? name.to_s then
-      metaclass.send :define_method, name do |*args|
-        super(*args)
-      end
-    end
-
-    metaclass.send :alias_method, new_name, name
-
-    metaclass.send :define_method, name do |*args|
-      if val_or_callable.respond_to? :call then
-        val_or_callable.call(*args)
-      else
-        val_or_callable
-      end
-    end
-
-    yield self
-  ensure
-    metaclass.send :undef_method, name
-    metaclass.send :alias_method, name, new_name
-    metaclass.send :undef_method, new_name
-  end unless method_defined?(:stub) # lib/rubygems/test_case.rb also has the same method definition
-end
diff --git a/tool/test/minitest/test_minitest_mock.rb b/tool/test/minitest/test_minitest_mock.rb
deleted file mode 100644
index fe9a62e..0000000
--- a/tool/test/minitest/test_minitest_mock.rb
+++ /dev/null
@@ -1,404 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/test/resolv/test_dns.rb#L0
-# encoding: utf-8
-# frozen_string_literal: false
-
-require 'minitest/mock'
-
-class TestMiniTestMock < MiniTest::Unit::TestCase
-  def setup
-    @mock = MiniTest::Mock.new.expect(:foo, nil)
-    @mock.expect(:meaning_of_life, 42)
-  end
-
-  def test_create_stub_method
-    assert_nil @mock.foo
-  end
-
-  def test_allow_return_value_specification
-    assert_equal 42, @mock.meaning_of_life
-  end
-
-  def test_blow_up_if_not_called
-    @mock.foo
-
-    util_verify_bad "expected meaning_of_life() => 42, got []"
-  end
-
-  def test_not_blow_up_if_everything_called
-    @mock.foo
-    @mock.meaning_of_life
-
-    assert @mock.verify
-  end
-
-  def test_allow_expectations_to_be_added_after_creation
-    @mock.expect(:bar, true)
-    assert @mock.bar
-  end
-
-  def test_not_verify_if_new_expected_method_is_not_called
-    @mock.foo
-    @mock.meaning_of_life
-    @mock.expect(:bar, true)
-
-    util_verify_bad "expected bar() => true, got []"
-  end
-
-  def test_blow_up_on_wrong_number_of_arguments
-    @mock.foo
-    @mock.meaning_of_life
-    @mock.expect(:sum, 3, [1, 2])
-
-    e = assert_raises ArgumentError do
-      @mock.sum
-    end
-
-    assert_equal "mocked method :sum expects 2 arguments, got 0", e.message
-  end
-
-  def test_return_mock_does_not_raise
-    retval = MiniTest::Mock.new
-    mock = MiniTest::Mock.new
-    mock.expect(:foo, retval)
-    mock.foo
-
-    assert mock.verify
-  end
-
-  def test_mock_args_does_not_raise
-    skip "non-opaque use of ==" if maglev?
-
-    arg = MiniTest::Mock.new
-    mock = MiniTest::Mock.new
-    mock.expect(:foo, nil, [arg])
-    mock.foo(arg)
-
-   (... truncated)

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

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