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

ruby-changes:67868

From: Hiroshi <ko1@a...>
Date: Sat, 11 Sep 2021 08:48:18 +0900 (JST)
Subject: [ruby-changes:67868] 1bec4f251d (master): Move MiniTest::Assertions to Test::Unit::Assertions

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

From 1bec4f251d2dbf5578a884a8fb96c773ffa5e451 Mon Sep 17 00:00:00 2001
From: Hiroshi SHIBATA <hsbt@r...>
Date: Mon, 6 Sep 2021 22:17:40 +0900
Subject: Move MiniTest::Assertions to Test::Unit::Assertions

---
 tool/lib/core_assertions.rb      |  19 +-
 tool/lib/minitest/unit.rb        | 685 ---------------------------------------
 tool/lib/test/unit/assertions.rb | 603 +++++++++++++++++++++++++++++++++-
 tool/lib/test/unit/testcase.rb   |   2 +-
 4 files changed, 607 insertions(+), 702 deletions(-)

diff --git a/tool/lib/core_assertions.rb b/tool/lib/core_assertions.rb
index a670c77..fd3c187 100644
--- a/tool/lib/core_assertions.rb
+++ b/tool/lib/core_assertions.rb
@@ -26,19 +26,16 @@ module Test https://github.com/ruby/ruby/blob/trunk/tool/lib/core_assertions.rb#L26
     module CoreAssertions
       require_relative 'envutil'
 
-      if defined?(MiniTest)
-        # for ruby core testing
-        include MiniTest::Assertions
-      else
+      unless defined?(MiniTest)
         module MiniTest
           class Assertion < Exception; end
           class Skip < Assertion; end
         end
-
-        require 'pp'
-        include Test::Unit::Assertions
       end
 
+      require 'pp'
+      include Test::Unit::Assertions
+
       def mu_pp(obj) #:nodoc:
         obj.pretty_inspect.chomp
       end
@@ -733,6 +730,14 @@ eom https://github.com/ruby/ruby/blob/trunk/tool/lib/core_assertions.rb#L730
       end
       alias all_assertions assert_all_assertions
 
+      def assert_all_assertions_foreach(msg = nil, *keys, &block)
+        all = AllFailures.new
+        all.foreach(*keys, &block)
+      ensure
+        assert(all.pass?, message(msg) {all.message.chomp(".")})
+      end
+      alias all_assertions_foreach assert_all_assertions_foreach
+
       def message(msg = nil, *args, &default) # :nodoc:
         if Proc === msg
           super(nil, *args) do
diff --git a/tool/lib/minitest/unit.rb b/tool/lib/minitest/unit.rb
index 2cda29a..60cc613 100644
--- a/tool/lib/minitest/unit.rb
+++ b/tool/lib/minitest/unit.rb
@@ -69,690 +69,6 @@ module MiniTest https://github.com/ruby/ruby/blob/trunk/tool/lib/minitest/unit.rb#L69
     backtrace_filter.filter bt
   end
 
-  ##
-  # MiniTest Assertions.  All assertion methods accept a +msg+ which is
-  # printed if the assertion fails.
-
-  module Assertions
-    ##
-    # Returns the diff command to use in #diff. Tries to intelligently
-    # figure out what diff to use.
-
-    def self.diff
-      unless defined? @diff
-        exe = RbConfig::CONFIG['EXEEXT']
-        @diff = %W"gdiff#{exe} diff#{exe}".find do |diff|
-          if system(diff, "-u", __FILE__, __FILE__)
-            break "#{diff} -u"
-          end
-        end
-      end
-
-      @diff
-    end
-
-    ##
-    # Set the diff command to use in #diff.
-
-    def self.diff= o
-      @diff = o
-    end
-
-    ##
-    # Returns a diff between +exp+ and +act+. If there is no known
-    # diff command or if it doesn't make sense to diff the output
-    # (single line, short output), then it simply returns a basic
-    # comparison between the two.
-
-    def diff exp, act
-      require "tempfile"
-
-      expect = mu_pp_for_diff exp
-      butwas = mu_pp_for_diff act
-      result = nil
-
-      need_to_diff =
-        MiniTest::Assertions.diff &&
-        (expect.include?("\n")    ||
-         butwas.include?("\n")    ||
-         expect.size > 30         ||
-         butwas.size > 30         ||
-         expect == butwas)
-
-      return "Expected: #{mu_pp exp}\n  Actual: #{mu_pp act}" unless
-        need_to_diff
-
-      tempfile_a = nil
-      tempfile_b = nil
-
-      Tempfile.open("expect") do |a|
-        tempfile_a = a
-        a.puts expect
-        a.flush
-
-        Tempfile.open("butwas") do |b|
-          tempfile_b = b
-          b.puts butwas
-          b.flush
-
-          result = `#{MiniTest::Assertions.diff} #{a.path} #{b.path}`
-          result.sub!(/^\-\-\- .+/, "--- expected")
-          result.sub!(/^\+\+\+ .+/, "+++ actual")
-
-          if result.empty? then
-            klass = exp.class
-            result = [
-                      "No visible difference in the #{klass}#inspect output.\n",
-                      "You should look at the implementation of #== on ",
-                      "#{klass} or its members.\n",
-                      expect,
-                     ].join
-          end
-        end
-      end
-
-      result
-    ensure
-      tempfile_a.close! if tempfile_a
-      tempfile_b.close! if tempfile_b
-    end
-
-    ##
-    # This returns a human-readable version of +obj+. By default
-    # #inspect is called. You can override this to use #pretty_print
-    # if you want.
-
-    def mu_pp obj
-      s = obj.inspect
-      s = s.encode Encoding.default_external if defined? Encoding
-      s
-    end
-
-    ##
-    # This returns a diff-able human-readable version of +obj+. This
-    # differs from the regular mu_pp because it expands escaped
-    # newlines and makes hex-values generic (like object_ids). This
-    # uses mu_pp to do the first pass and then cleans it up.
-
-    def mu_pp_for_diff obj
-      mu_pp(obj).gsub(/(?<!\\)(?:\\\\)*\K\\n/, "\n").gsub(/:0x[a-fA-F0-9]{4,}/m, ':0xXXXXXX')
-    end
-
-    def _assertions= n # :nodoc:
-      @_assertions = n
-    end
-    alias assertions= _assertions=
-
-    def _assertions # :nodoc:
-      @_assertions ||= 0
-    end
-    alias assertions _assertions
-
-    ##
-    # Fails unless +test+ is a true value.
-
-    def assert test, msg = nil
-      msg ||= "Failed assertion, no message given."
-      self._assertions += 1
-      unless test then
-        msg = msg.call if Proc === msg
-        raise MiniTest::Assertion, msg
-      end
-      true
-    end
-
-    ##
-    # Fails unless +obj+ is empty.
-
-    def assert_empty obj, msg = nil
-      msg = message(msg) { "Expected #{mu_pp(obj)} to be empty" }
-      assert_respond_to obj, :empty?
-      assert obj.empty?, msg
-    end
-
-    ##
-    # Fails unless <tt>exp == act</tt> printing the difference between
-    # the two, if possible.
-    #
-    # If there is no visible difference but the assertion fails, you
-    # should suspect that your #== is buggy, or your inspect output is
-    # missing crucial details.
-    #
-    # For floats use assert_in_delta.
-    #
-    # See also: MiniTest::Assertions.diff
-
-    def assert_equal exp, act, msg = nil
-      msg = message(msg, "") { diff exp, act }
-      assert exp == act, msg
-    end
-
-    ##
-    # For comparing Floats.  Fails unless +exp+ and +act+ are within +delta+
-    # of each other.
-    #
-    #   assert_in_delta Math::PI, (22.0 / 7.0), 0.01
-
-    def assert_in_delta exp, act, delta = 0.001, msg = nil
-      n = (exp - act).abs
-      msg = message(msg) {
-        "Expected |#{exp} - #{act}| (#{n}) to be <= #{delta}"
-      }
-      assert delta >= n, msg
-    end
-
-    ##
-    # For comparing Floats.  Fails unless +exp+ and +act+ have a relative
-    # error less than +epsilon+.
-
-    def assert_in_epsilon a, b, epsilon = 0.001, msg = nil
-      assert_in_delta a, b, [a.abs, b.abs].min * epsilon, msg
-    end
-
-    ##
-    # Fails unless +collection+ includes +obj+.
-
-    def assert_includes collection, obj, msg = nil
-      msg = message(msg) {
-        "Expected #{mu_pp(collection)} to include #{mu_pp(obj)}"
-      }
-      assert_respond_to collection, :include?
-      assert collection.include?(obj), msg
-    end
-
-    ##
-    # Fails unless +obj+ is an instance of +cls+.
-
-    def assert_instance_of cls, obj, msg = nil
-      msg = message(msg) {
-        "Expected #{mu_pp(obj)} to be an instance of #{cls}, not #{obj.class}"
-      }
-
-      assert obj.instance_of?(cls), msg
-    end
-
-    ##
-    # Fails unless +obj+ is a kind of +cls+.
-
-    def assert_kind_of cls, obj, msg = nil # TODO: merge with instance_of
-      msg = message(msg) {
-        "Expected #{mu_pp(obj)} to be a kind of #{cls}, not #{obj.class}" }
-
-      assert obj.kind_of?(cls), msg
-    end
-
-    ##
-    # Fails unless +matcher+ <tt>=~</tt> +obj+.
-
-    def assert_match matcher, obj, msg = nil
-      msg = message(msg) { "Expected #{mu_pp matcher} to match #{mu_pp obj}" }
-      assert_respond_to matcher, :"=~"
-      matcher = Regexp.new Regexp.escape matcher if String === matcher
-      assert matcher =~ obj, msg
-    end
-
-    ##
-    # Fails unless +obj+ is nil
-
-    def assert_nil obj, msg = nil
-      msg = message(msg) { "Expected #{mu_pp(obj)} to be nil" }
-      assert obj.nil?, msg
-    end
-
-    ##
-    # For testing with binary operators.
-    #
-    #   assert_operator 5, :<=, 4
-
-    def assert_operator o1, op, o2 = (predicate = true; nil), msg = nil
-      return assert_predicate o1, op, msg if predicate
-      msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op} #{mu_pp(o2)}" }
-      assert o1.__send__(op, o2), msg
-    end
-
-    ##
-    # Fails if stdout or stderr do not output the expected results.
-    # Pass in nil if you don't care about that streams output. Pass in
-    # "" if you require it to be silent. Pass in a regexp if you want
-    # to pattern match.
-    #
-    # NOTE: this uses #capture_io, not #capture_subprocess_io.
-    #
-    # See also: #assert_silent
-
-    def assert_output stdout = nil, stderr = nil
-      out, err = capture_io do
-        yield
-      end
-
-      err_msg = Regexp === stderr ? :assert_match : :assert_equal if stderr
-      out_msg = Regexp === stdout ? :assert_match : :assert_equal if stdout
-
-      y = send err_msg, stderr, err, "In stderr" if err_msg
-      x = send out_msg, stdout, out, "In stdout" if out_msg
-
-      (!stdout || x) && (!stderr || y)
-    end
-
-    ##
-    # For testing with predicates.
-    #
-    #   assert_predicate str, :empty?
-    #
-    # This is really meant for specs and is front-ended by assert_operator:
-    #
-    #   str.must_be :empty?
-
-    def assert_predicate o1, op, msg = nil
-      msg = message(m (... truncated)

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

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