minitest 5.24.0 → 5.25.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +21 -0
- data/lib/hoe/minitest.rb +2 -1
- data/lib/minitest/assertions.rb +64 -69
- data/lib/minitest/benchmark.rb +6 -9
- data/lib/minitest/compress.rb +10 -10
- data/lib/minitest/error_on_warning.rb +3 -3
- data/lib/minitest/mock.rb +13 -13
- data/lib/minitest/parallel.rb +4 -4
- data/lib/minitest/pride_plugin.rb +10 -14
- data/lib/minitest/spec.rb +5 -5
- data/lib/minitest/test.rb +10 -22
- data/lib/minitest/test_task.rb +9 -9
- data/lib/minitest.rb +61 -54
- data/test/minitest/metametameta.rb +6 -9
- data/test/minitest/test_minitest_assertions.rb +113 -113
- data/test/minitest/test_minitest_benchmark.rb +1 -1
- data/test/minitest/test_minitest_mock.rb +67 -64
- data/test/minitest/test_minitest_reporter.rb +11 -15
- data/test/minitest/test_minitest_spec.rb +35 -38
- data/test/minitest/test_minitest_test.rb +80 -99
- data/test/minitest/test_minitest_test_task.rb +11 -8
- data.tar.gz.sig +0 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6e090130753c1fb650b32bb10042b89b676ce100ceba25021cd3a7351d9114df
         | 
| 4 | 
            +
              data.tar.gz: 729687628f500bc5b2153864f723491b72a98afcc6fd50da27fc48a5ed952def
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9a0d599badcfe81e3cf63bc030b39cfa6ff0388f9d732ab145002c8e5c1b1b83dbeb8d51878d977a717528afefb4616ce9ba23922795b05bcc4d30983bbbc577
         | 
| 7 | 
            +
              data.tar.gz: c3693a94e10968dd1f0a89a0217d83612978baf5471d9b37e184a0fd3e8ba0ee513f79c51f99fee0af468539d636d9aa8f4724de629fc02599c5a8141ee74c1c
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data/History.rdoc
    CHANGED
    
    | @@ -1,3 +1,24 @@ | |
| 1 | 
            +
            === 5.25.0 / 2024-08-13
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * 2 minor enhancements:
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              * Fixed some inefficiencies filtering and matching (mostly backtraces).
         | 
| 6 | 
            +
              * Refactored siginfo handler to reduce runtime costs. Saved ~30%!
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            * 5 bug fixes:
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              * Added missing rdoc to get back to 100% coverage.
         | 
| 11 | 
            +
              * Cleaning up ancient code checking for defined?(Encoding) and the like.
         | 
| 12 | 
            +
              * Disambiguated some shadowed variables in minitest/compress.
         | 
| 13 | 
            +
              * Fixed an ironic bug if using string-literals AND Werror.
         | 
| 14 | 
            +
              * Improve description of test:slow task. (stomar)
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            === 5.24.1 / 2024-06-29
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            * 1 bug fix:
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              * Fix the error message when an extension is invalid value. (y-yagi)
         | 
| 21 | 
            +
             | 
| 1 22 | 
             
            === 5.24.0 / 2024-06-18
         | 
| 2 23 |  | 
| 3 24 | 
             
            * 2 minor enhancements:
         | 
    
        data/lib/hoe/minitest.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            # :stopdoc:
         | 
| 2 2 |  | 
| 3 3 | 
             
            class Hoe
         | 
| 4 | 
            +
              # empty
         | 
| 4 5 | 
             
            end
         | 
| 5 6 |  | 
| 6 7 | 
             
            module Hoe::Minitest
         | 
| @@ -16,7 +17,7 @@ module Hoe::Minitest | |
| 16 17 |  | 
| 17 18 | 
             
                gem "minitest"
         | 
| 18 19 | 
             
                require "minitest"
         | 
| 19 | 
            -
                version = Minitest::VERSION.split( | 
| 20 | 
            +
                version = Minitest::VERSION.split(".").first(2).join "."
         | 
| 20 21 |  | 
| 21 22 | 
             
                dependency "minitest", "~> #{version}", :development unless
         | 
| 22 23 | 
             
                  minitest? or ENV["MT_NO_ISOLATE"]
         | 
    
        data/lib/minitest/assertions.rb
    CHANGED
    
    | @@ -1,5 +1,3 @@ | |
| 1 | 
            -
            # encoding: UTF-8
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            require "rbconfig"
         | 
| 4 2 | 
             
            require "tempfile"
         | 
| 5 3 | 
             
            require "stringio"
         | 
| @@ -29,12 +27,12 @@ module Minitest | |
| 29 27 | 
             
                def self.diff
         | 
| 30 28 | 
             
                  return @diff if defined? @diff
         | 
| 31 29 |  | 
| 32 | 
            -
                  @diff = if (RbConfig::CONFIG["host_os"] =~ /mswin|mingw/  | 
| 33 | 
            -
                              system | 
| 30 | 
            +
                  @diff = if (RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ and
         | 
| 31 | 
            +
                              system "diff.exe", __FILE__, __FILE__) then
         | 
| 34 32 | 
             
                            "diff.exe -u"
         | 
| 35 | 
            -
                          elsif system | 
| 33 | 
            +
                          elsif system "gdiff", __FILE__, __FILE__ then
         | 
| 36 34 | 
             
                            "gdiff -u" # solaris and kin suck
         | 
| 37 | 
            -
                          elsif system | 
| 35 | 
            +
                          elsif system "diff", __FILE__, __FILE__ then
         | 
| 38 36 | 
             
                            "diff -u"
         | 
| 39 37 | 
             
                          else
         | 
| 40 38 | 
             
                            nil
         | 
| @@ -59,16 +57,16 @@ module Minitest | |
| 59 57 | 
             
                def diff exp, act
         | 
| 60 58 | 
             
                  result = nil
         | 
| 61 59 |  | 
| 62 | 
            -
                  expect, butwas = things_to_diff | 
| 60 | 
            +
                  expect, butwas = things_to_diff exp, act
         | 
| 63 61 |  | 
| 64 62 | 
             
                  return "Expected: #{mu_pp exp}\n  Actual: #{mu_pp act}" unless
         | 
| 65 63 | 
             
                    expect
         | 
| 66 64 |  | 
| 67 | 
            -
                  Tempfile.open | 
| 65 | 
            +
                  Tempfile.open "expect" do |a|
         | 
| 68 66 | 
             
                    a.puts expect
         | 
| 69 67 | 
             
                    a.flush
         | 
| 70 68 |  | 
| 71 | 
            -
                    Tempfile.open | 
| 69 | 
            +
                    Tempfile.open "butwas" do |b|
         | 
| 72 70 | 
             
                      b.puts butwas
         | 
| 73 71 | 
             
                      b.flush
         | 
| 74 72 |  | 
| @@ -79,10 +77,10 @@ module Minitest | |
| 79 77 | 
             
                      if result.empty? then
         | 
| 80 78 | 
             
                        klass = exp.class
         | 
| 81 79 | 
             
                        result = [
         | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 80 | 
            +
                                   "No visible difference in the #{klass}#inspect output.\n",
         | 
| 81 | 
            +
                                   "You should look at the implementation of #== on ",
         | 
| 82 | 
            +
                                   "#{klass} or its members.\n",
         | 
| 83 | 
            +
                                   expect,
         | 
| 86 84 | 
             
                                 ].join
         | 
| 87 85 | 
             
                      end
         | 
| 88 86 | 
             
                    end
         | 
| @@ -127,20 +125,15 @@ module Minitest | |
| 127 125 | 
             
                # See Minitest::Test.make_my_diffs_pretty!
         | 
| 128 126 |  | 
| 129 127 | 
             
                def mu_pp obj
         | 
| 130 | 
            -
                  s = obj.inspect
         | 
| 128 | 
            +
                  s = obj.inspect.encode Encoding.default_external
         | 
| 131 129 |  | 
| 132 | 
            -
                   | 
| 133 | 
            -
                     | 
| 130 | 
            +
                  return s unless String === obj &&
         | 
| 131 | 
            +
                    (obj.encoding != Encoding.default_external || !obj.valid_encoding?)
         | 
| 134 132 |  | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
                      enc = "# encoding: #{obj.encoding}"
         | 
| 138 | 
            -
                      val = "#    valid: #{obj.valid_encoding?}"
         | 
| 139 | 
            -
                      s = "#{enc}\n#{val}\n#{s}"
         | 
| 140 | 
            -
                    end
         | 
| 141 | 
            -
                  end
         | 
| 133 | 
            +
                  enc = "# encoding: #{obj.encoding}"
         | 
| 134 | 
            +
                  val = "#    valid: #{obj.valid_encoding?}"
         | 
| 142 135 |  | 
| 143 | 
            -
                  s
         | 
| 136 | 
            +
                  [enc, val, s].join "\n"
         | 
| 144 137 | 
             
                end
         | 
| 145 138 |  | 
| 146 139 | 
             
                ##
         | 
| @@ -153,8 +146,8 @@ module Minitest | |
| 153 146 | 
             
                  str = mu_pp obj
         | 
| 154 147 |  | 
| 155 148 | 
             
                  # both '\n' & '\\n' (_after_ mu_pp (aka inspect))
         | 
| 156 | 
            -
                  single =  | 
| 157 | 
            -
                  double =  | 
| 149 | 
            +
                  single = str.match?(/(?<!\\|^)\\n/)
         | 
| 150 | 
            +
                  double = str.match?(/(?<=\\|^)\\n/)
         | 
| 158 151 |  | 
| 159 152 | 
             
                  process =
         | 
| 160 153 | 
             
                    if single ^ double then
         | 
| @@ -167,9 +160,9 @@ module Minitest | |
| 167 160 | 
             
                      :itself                                     # leave it alone
         | 
| 168 161 | 
             
                    end
         | 
| 169 162 |  | 
| 170 | 
            -
                  str | 
| 171 | 
            -
                    gsub(/\\?\\n/, &process) | 
| 172 | 
            -
                    gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX") # anonymize hex values
         | 
| 163 | 
            +
                  str
         | 
| 164 | 
            +
                    .gsub(/\\?\\n/, &process)
         | 
| 165 | 
            +
                    .gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX") # anonymize hex values
         | 
| 173 166 | 
             
                end
         | 
| 174 167 |  | 
| 175 168 | 
             
                ##
         | 
| @@ -193,14 +186,14 @@ module Minitest | |
| 193 186 | 
             
                # Fails unless +obj+ is empty.
         | 
| 194 187 |  | 
| 195 188 | 
             
                def assert_empty obj, msg = nil
         | 
| 196 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 189 | 
            +
                  msg = message(msg) { "Expected #{mu_pp obj} to be empty" }
         | 
| 197 190 | 
             
                  assert_respond_to obj, :empty?
         | 
| 198 191 | 
             
                  assert obj.empty?, msg
         | 
| 199 192 | 
             
                end
         | 
| 200 193 |  | 
| 201 194 | 
             
                def _where # :nodoc:
         | 
| 202 | 
            -
                   | 
| 203 | 
            -
             | 
| 195 | 
            +
                  Minitest.filter_backtrace(caller).first
         | 
| 196 | 
            +
                    .split(":in ", 2).first # clean up noise
         | 
| 204 197 | 
             
                end
         | 
| 205 198 |  | 
| 206 199 | 
             
                E = "" # :nodoc:
         | 
| @@ -223,7 +216,7 @@ module Minitest | |
| 223 216 | 
             
                  result = assert exp == act, msg
         | 
| 224 217 |  | 
| 225 218 | 
             
                  if nil == exp then
         | 
| 226 | 
            -
                    if Minitest::VERSION  | 
| 219 | 
            +
                    if Minitest::VERSION >= "6" then
         | 
| 227 220 | 
             
                      refute_nil exp, "Use assert_nil if expecting nil."
         | 
| 228 221 | 
             
                    else
         | 
| 229 222 | 
             
                      warn "DEPRECATED: Use assert_nil if expecting nil from #{_where}. This will fail in Minitest 6."
         | 
| @@ -260,7 +253,7 @@ module Minitest | |
| 260 253 |  | 
| 261 254 | 
             
                def assert_includes collection, obj, msg = nil
         | 
| 262 255 | 
             
                  msg = message(msg) {
         | 
| 263 | 
            -
                    "Expected #{mu_pp | 
| 256 | 
            +
                    "Expected #{mu_pp collection} to include #{mu_pp obj}"
         | 
| 264 257 | 
             
                  }
         | 
| 265 258 | 
             
                  assert_respond_to collection, :include?
         | 
| 266 259 | 
             
                  assert collection.include?(obj), msg
         | 
| @@ -271,7 +264,7 @@ module Minitest | |
| 271 264 |  | 
| 272 265 | 
             
                def assert_instance_of cls, obj, msg = nil
         | 
| 273 266 | 
             
                  msg = message(msg) {
         | 
| 274 | 
            -
                    "Expected #{mu_pp | 
| 267 | 
            +
                    "Expected #{mu_pp obj} to be an instance of #{cls}, not #{obj.class}"
         | 
| 275 268 | 
             
                  }
         | 
| 276 269 |  | 
| 277 270 | 
             
                  assert obj.instance_of?(cls), msg
         | 
| @@ -282,7 +275,8 @@ module Minitest | |
| 282 275 |  | 
| 283 276 | 
             
                def assert_kind_of cls, obj, msg = nil
         | 
| 284 277 | 
             
                  msg = message(msg) {
         | 
| 285 | 
            -
                    "Expected #{mu_pp | 
| 278 | 
            +
                    "Expected #{mu_pp obj} to be a kind of #{cls}, not #{obj.class}"
         | 
| 279 | 
            +
                  }
         | 
| 286 280 |  | 
| 287 281 | 
             
                  assert obj.kind_of?(cls), msg
         | 
| 288 282 | 
             
                end
         | 
| @@ -292,7 +286,7 @@ module Minitest | |
| 292 286 |  | 
| 293 287 | 
             
                def assert_match matcher, obj, msg = nil
         | 
| 294 288 | 
             
                  msg = message(msg) { "Expected #{mu_pp matcher} to match #{mu_pp obj}" }
         | 
| 295 | 
            -
                  assert_respond_to matcher,  | 
| 289 | 
            +
                  assert_respond_to matcher, :=~
         | 
| 296 290 | 
             
                  matcher = Regexp.new Regexp.escape matcher if String === matcher
         | 
| 297 291 | 
             
                  assert matcher =~ obj, msg
         | 
| 298 292 |  | 
| @@ -303,7 +297,7 @@ module Minitest | |
| 303 297 | 
             
                # Fails unless +obj+ is nil
         | 
| 304 298 |  | 
| 305 299 | 
             
                def assert_nil obj, msg = nil
         | 
| 306 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 300 | 
            +
                  msg = message(msg) { "Expected #{mu_pp obj} to be nil" }
         | 
| 307 301 | 
             
                  assert obj.nil?, msg
         | 
| 308 302 | 
             
                end
         | 
| 309 303 |  | 
| @@ -314,7 +308,7 @@ module Minitest | |
| 314 308 |  | 
| 315 309 | 
             
                def assert_operator o1, op, o2 = UNDEFINED, msg = nil
         | 
| 316 310 | 
             
                  return assert_predicate o1, op, msg if UNDEFINED == o2
         | 
| 317 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 311 | 
            +
                  msg = message(msg) { "Expected #{mu_pp o1} to be #{op} #{mu_pp o2}" }
         | 
| 318 312 | 
             
                  assert o1.__send__(op, o2), msg
         | 
| 319 313 | 
             
                end
         | 
| 320 314 |  | 
| @@ -395,7 +389,7 @@ module Minitest | |
| 395 389 | 
             
                #   str.must_be :empty?
         | 
| 396 390 |  | 
| 397 391 | 
             
                def assert_predicate o1, op, msg = nil
         | 
| 398 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 392 | 
            +
                  msg = message(msg) { "Expected #{mu_pp o1} to be #{op}" }
         | 
| 399 393 | 
             
                  assert o1.__send__(op), msg
         | 
| 400 394 | 
             
                end
         | 
| 401 395 |  | 
| @@ -440,13 +434,13 @@ module Minitest | |
| 440 434 | 
             
                    raise
         | 
| 441 435 | 
             
                  rescue Exception => e
         | 
| 442 436 | 
             
                    flunk proc {
         | 
| 443 | 
            -
                      exception_details(e, "#{msg}#{mu_pp | 
| 437 | 
            +
                      exception_details(e, "#{msg}#{mu_pp exp} exception expected, not")
         | 
| 444 438 | 
             
                    }
         | 
| 445 439 | 
             
                  end
         | 
| 446 440 |  | 
| 447 441 | 
             
                  exp = exp.first if exp.size == 1
         | 
| 448 442 |  | 
| 449 | 
            -
                  flunk "#{msg}#{mu_pp | 
| 443 | 
            +
                  flunk "#{msg}#{mu_pp exp} expected but nothing was raised."
         | 
| 450 444 | 
             
                end
         | 
| 451 445 |  | 
| 452 446 | 
             
                ##
         | 
| @@ -455,7 +449,7 @@ module Minitest | |
| 455 449 |  | 
| 456 450 | 
             
                def assert_respond_to obj, meth, msg = nil, include_all: false
         | 
| 457 451 | 
             
                  msg = message(msg) {
         | 
| 458 | 
            -
                    "Expected #{mu_pp | 
| 452 | 
            +
                    "Expected #{mu_pp obj} (#{obj.class}) to respond to ##{meth}"
         | 
| 459 453 | 
             
                  }
         | 
| 460 454 | 
             
                  assert obj.respond_to?(meth, include_all), msg
         | 
| 461 455 | 
             
                end
         | 
| @@ -481,7 +475,8 @@ module Minitest | |
| 481 475 |  | 
| 482 476 | 
             
                  recv, msg, *args = send_ary
         | 
| 483 477 | 
             
                  m = message(m) {
         | 
| 484 | 
            -
                    "Expected #{mu_pp | 
| 478 | 
            +
                    "Expected #{mu_pp recv}.#{msg}(*#{mu_pp args}) to return true"
         | 
| 479 | 
            +
                  }
         | 
| 485 480 | 
             
                  assert recv.__send__(msg, *args), m
         | 
| 486 481 | 
             
                end
         | 
| 487 482 |  | 
| @@ -500,15 +495,15 @@ module Minitest | |
| 500 495 | 
             
                # Fails unless the block throws +sym+
         | 
| 501 496 |  | 
| 502 497 | 
             
                def assert_throws sym, msg = nil
         | 
| 503 | 
            -
                  default = "Expected #{mu_pp | 
| 498 | 
            +
                  default = "Expected #{mu_pp sym} to have been thrown"
         | 
| 504 499 | 
             
                  caught = true
         | 
| 505 | 
            -
                  value = catch | 
| 500 | 
            +
                  value = catch sym do
         | 
| 506 501 | 
             
                    begin
         | 
| 507 502 | 
             
                      yield
         | 
| 508 503 | 
             
                    rescue ThreadError => e       # wtf?!? 1.8 + threads == suck
         | 
| 509 | 
            -
                      default += ", not  | 
| 504 | 
            +
                      default += ", not :#{e.message[/uncaught throw \`(\w+?)\'/, 1]}"
         | 
| 510 505 | 
             
                    rescue ArgumentError => e     # 1.9 exception
         | 
| 511 | 
            -
                      raise e unless e.message.include? | 
| 506 | 
            +
                      raise e unless e.message.include? "uncaught throw"
         | 
| 512 507 | 
             
                      default += ", not #{e.message.split(/ /).last}"
         | 
| 513 508 | 
             
                    rescue NameError => e         # 1.8 exception
         | 
| 514 509 | 
             
                      raise e unless e.name == sym
         | 
| @@ -607,12 +602,12 @@ module Minitest | |
| 607 602 |  | 
| 608 603 | 
             
                def exception_details e, msg
         | 
| 609 604 | 
             
                  [
         | 
| 610 | 
            -
             | 
| 611 | 
            -
             | 
| 612 | 
            -
             | 
| 613 | 
            -
             | 
| 614 | 
            -
             | 
| 615 | 
            -
             | 
| 605 | 
            +
                    msg,
         | 
| 606 | 
            +
                    "Class: <#{e.class}>",
         | 
| 607 | 
            +
                    "Message: <#{e.message.inspect}>",
         | 
| 608 | 
            +
                    "---Backtrace---",
         | 
| 609 | 
            +
                    Minitest.filter_backtrace(e.backtrace),
         | 
| 610 | 
            +
                    "---------------",
         | 
| 616 611 | 
             
                  ].join "\n"
         | 
| 617 612 | 
             
                end
         | 
| 618 613 |  | 
| @@ -621,7 +616,7 @@ module Minitest | |
| 621 616 | 
             
                # you to put time-bombs in your tests if you need to keep
         | 
| 622 617 | 
             
                # something around until a later date lest you forget about it.
         | 
| 623 618 |  | 
| 624 | 
            -
                def fail_after y,m,d,msg
         | 
| 619 | 
            +
                def fail_after y, m, d, msg
         | 
| 625 620 | 
             
                  flunk msg if Time.now > Time.local(y, m, d)
         | 
| 626 621 | 
             
                end
         | 
| 627 622 |  | 
| @@ -655,7 +650,7 @@ module Minitest | |
| 655 650 | 
             
                # Fails if +test+ is truthy.
         | 
| 656 651 |  | 
| 657 652 | 
             
                def refute test, msg = nil
         | 
| 658 | 
            -
                  msg ||= message { "Expected #{mu_pp | 
| 653 | 
            +
                  msg ||= message { "Expected #{mu_pp test} to not be truthy" }
         | 
| 659 654 | 
             
                  assert !test, msg
         | 
| 660 655 | 
             
                end
         | 
| 661 656 |  | 
| @@ -663,7 +658,7 @@ module Minitest | |
| 663 658 | 
             
                # Fails if +obj+ is empty.
         | 
| 664 659 |  | 
| 665 660 | 
             
                def refute_empty obj, msg = nil
         | 
| 666 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 661 | 
            +
                  msg = message(msg) { "Expected #{mu_pp obj} to not be empty" }
         | 
| 667 662 | 
             
                  assert_respond_to obj, :empty?
         | 
| 668 663 | 
             
                  refute obj.empty?, msg
         | 
| 669 664 | 
             
                end
         | 
| @@ -675,7 +670,7 @@ module Minitest | |
| 675 670 |  | 
| 676 671 | 
             
                def refute_equal exp, act, msg = nil
         | 
| 677 672 | 
             
                  msg = message(msg) {
         | 
| 678 | 
            -
                    "Expected #{mu_pp | 
| 673 | 
            +
                    "Expected #{mu_pp act} to not be equal to #{mu_pp exp}"
         | 
| 679 674 | 
             
                  }
         | 
| 680 675 | 
             
                  refute exp == act, msg
         | 
| 681 676 | 
             
                end
         | 
| @@ -706,7 +701,7 @@ module Minitest | |
| 706 701 |  | 
| 707 702 | 
             
                def refute_includes collection, obj, msg = nil
         | 
| 708 703 | 
             
                  msg = message(msg) {
         | 
| 709 | 
            -
                    "Expected #{mu_pp | 
| 704 | 
            +
                    "Expected #{mu_pp collection} to not include #{mu_pp obj}"
         | 
| 710 705 | 
             
                  }
         | 
| 711 706 | 
             
                  assert_respond_to collection, :include?
         | 
| 712 707 | 
             
                  refute collection.include?(obj), msg
         | 
| @@ -717,7 +712,7 @@ module Minitest | |
| 717 712 |  | 
| 718 713 | 
             
                def refute_instance_of cls, obj, msg = nil
         | 
| 719 714 | 
             
                  msg = message(msg) {
         | 
| 720 | 
            -
                    "Expected #{mu_pp | 
| 715 | 
            +
                    "Expected #{mu_pp obj} to not be an instance of #{cls}"
         | 
| 721 716 | 
             
                  }
         | 
| 722 717 | 
             
                  refute obj.instance_of?(cls), msg
         | 
| 723 718 | 
             
                end
         | 
| @@ -726,7 +721,7 @@ module Minitest | |
| 726 721 | 
             
                # Fails if +obj+ is a kind of +cls+.
         | 
| 727 722 |  | 
| 728 723 | 
             
                def refute_kind_of cls, obj, msg = nil
         | 
| 729 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 724 | 
            +
                  msg = message(msg) { "Expected #{mu_pp obj} to not be a kind of #{cls}" }
         | 
| 730 725 | 
             
                  refute obj.kind_of?(cls), msg
         | 
| 731 726 | 
             
                end
         | 
| 732 727 |  | 
| @@ -735,7 +730,7 @@ module Minitest | |
| 735 730 |  | 
| 736 731 | 
             
                def refute_match matcher, obj, msg = nil
         | 
| 737 732 | 
             
                  msg = message(msg) { "Expected #{mu_pp matcher} to not match #{mu_pp obj}" }
         | 
| 738 | 
            -
                  assert_respond_to matcher,  | 
| 733 | 
            +
                  assert_respond_to matcher, :=~
         | 
| 739 734 | 
             
                  matcher = Regexp.new Regexp.escape matcher if String === matcher
         | 
| 740 735 | 
             
                  refute matcher =~ obj, msg
         | 
| 741 736 | 
             
                end
         | 
| @@ -744,7 +739,7 @@ module Minitest | |
| 744 739 | 
             
                # Fails if +obj+ is nil.
         | 
| 745 740 |  | 
| 746 741 | 
             
                def refute_nil obj, msg = nil
         | 
| 747 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 742 | 
            +
                  msg = message(msg) { "Expected #{mu_pp obj} to not be nil" }
         | 
| 748 743 | 
             
                  refute obj.nil?, msg
         | 
| 749 744 | 
             
                end
         | 
| 750 745 |  | 
| @@ -766,7 +761,7 @@ module Minitest | |
| 766 761 |  | 
| 767 762 | 
             
                  begin
         | 
| 768 763 | 
             
                    yield
         | 
| 769 | 
            -
                    flunk | 
| 764 | 
            +
                    flunk "NoMatchingPatternError expected, but nothing was raised."
         | 
| 770 765 | 
             
                  rescue NoMatchingPatternError
         | 
| 771 766 | 
             
                    pass
         | 
| 772 767 | 
             
                  end
         | 
| @@ -780,7 +775,7 @@ module Minitest | |
| 780 775 |  | 
| 781 776 | 
             
                def refute_operator o1, op, o2 = UNDEFINED, msg = nil
         | 
| 782 777 | 
             
                  return refute_predicate o1, op, msg if UNDEFINED == o2
         | 
| 783 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 778 | 
            +
                  msg = message(msg) { "Expected #{mu_pp o1} to not be #{op} #{mu_pp o2}" }
         | 
| 784 779 | 
             
                  refute o1.__send__(op, o2), msg
         | 
| 785 780 | 
             
                end
         | 
| 786 781 |  | 
| @@ -802,7 +797,7 @@ module Minitest | |
| 802 797 | 
             
                #   str.wont_be :empty?
         | 
| 803 798 |  | 
| 804 799 | 
             
                def refute_predicate o1, op, msg = nil
         | 
| 805 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 800 | 
            +
                  msg = message(msg) { "Expected #{mu_pp o1} to not be #{op}" }
         | 
| 806 801 | 
             
                  refute o1.__send__(op), msg
         | 
| 807 802 | 
             
                end
         | 
| 808 803 |  | 
| @@ -811,7 +806,7 @@ module Minitest | |
| 811 806 | 
             
                # include_all defaults to false to match Object#respond_to?
         | 
| 812 807 |  | 
| 813 808 | 
             
                def refute_respond_to obj, meth, msg = nil, include_all: false
         | 
| 814 | 
            -
                  msg = message(msg) { "Expected #{mu_pp | 
| 809 | 
            +
                  msg = message(msg) { "Expected #{mu_pp obj} to not respond to #{meth}" }
         | 
| 815 810 |  | 
| 816 811 | 
             
                  refute obj.respond_to?(meth, include_all), msg
         | 
| 817 812 | 
             
                end
         | 
| @@ -844,9 +839,9 @@ module Minitest | |
| 844 839 | 
             
                # date, but still holds you accountable and prevents you from
         | 
| 845 840 | 
             
                # forgetting it.
         | 
| 846 841 |  | 
| 847 | 
            -
                def skip_until y,m,d,msg
         | 
| 842 | 
            +
                def skip_until y, m, d, msg
         | 
| 848 843 | 
             
                  skip msg if Time.now < Time.local(y, m, d)
         | 
| 849 | 
            -
                  where = caller.first.rpartition( | 
| 844 | 
            +
                  where = caller(1..1).first.rpartition(":in").reject(&:empty?).first
         | 
| 850 845 | 
             
                  warn "Stale skip_until %p at %s" % [msg, where]
         | 
| 851 846 | 
             
                end
         | 
| 852 847 |  | 
    
        data/lib/minitest/benchmark.rb
    CHANGED
    
    | @@ -47,8 +47,6 @@ module Minitest | |
| 47 47 |  | 
| 48 48 | 
             
                def self.bench_linear min, max, step = 10
         | 
| 49 49 | 
             
                  (min..max).step(step).to_a
         | 
| 50 | 
            -
                rescue LocalJumpError # 1.8.6
         | 
| 51 | 
            -
                  r = []; (min..max).step(step) { |n| r << n }; r
         | 
| 52 50 | 
             
                end
         | 
| 53 51 |  | 
| 54 52 | 
             
                ##
         | 
| @@ -83,7 +81,7 @@ module Minitest | |
| 83 81 | 
             
                def assert_performance validation, &work
         | 
| 84 82 | 
             
                  range = self.class.bench_range
         | 
| 85 83 |  | 
| 86 | 
            -
                  io.print  | 
| 84 | 
            +
                  io.print self.name
         | 
| 87 85 |  | 
| 88 86 | 
             
                  times = []
         | 
| 89 87 |  | 
| @@ -236,7 +234,7 @@ module Minitest | |
| 236 234 |  | 
| 237 235 | 
             
                def fit_exponential xs, ys
         | 
| 238 236 | 
             
                  n     = xs.size
         | 
| 239 | 
            -
                  xys   = xs.zip | 
| 237 | 
            +
                  xys   = xs.zip ys
         | 
| 240 238 | 
             
                  sxlny = sigma(xys) { |x, y| x * Math.log(y) }
         | 
| 241 239 | 
             
                  slny  = sigma(xys) { |_, y| Math.log(y)     }
         | 
| 242 240 | 
             
                  sx2   = sigma(xys) { |x, _| x * x           }
         | 
| @@ -258,7 +256,7 @@ module Minitest | |
| 258 256 |  | 
| 259 257 | 
             
                def fit_logarithmic xs, ys
         | 
| 260 258 | 
             
                  n     = xs.size
         | 
| 261 | 
            -
                  xys   = xs.zip | 
| 259 | 
            +
                  xys   = xs.zip ys
         | 
| 262 260 | 
             
                  slnx2 = sigma(xys) { |x, _| Math.log(x) ** 2 }
         | 
| 263 261 | 
             
                  slnx  = sigma(xys) { |x, _| Math.log(x)      }
         | 
| 264 262 | 
             
                  sylnx = sigma(xys) { |x, y| y * Math.log(x)  }
         | 
| @@ -280,7 +278,7 @@ module Minitest | |
| 280 278 |  | 
| 281 279 | 
             
                def fit_linear xs, ys
         | 
| 282 280 | 
             
                  n   = xs.size
         | 
| 283 | 
            -
                  xys = xs.zip | 
| 281 | 
            +
                  xys = xs.zip ys
         | 
| 284 282 | 
             
                  sx  = sigma xs
         | 
| 285 283 | 
             
                  sy  = sigma ys
         | 
| 286 284 | 
             
                  sx2 = sigma(xs)  { |x|   x ** 2 }
         | 
| @@ -302,7 +300,7 @@ module Minitest | |
| 302 300 |  | 
| 303 301 | 
             
                def fit_power xs, ys
         | 
| 304 302 | 
             
                  n       = xs.size
         | 
| 305 | 
            -
                  xys     = xs.zip | 
| 303 | 
            +
                  xys     = xs.zip ys
         | 
| 306 304 | 
             
                  slnxlny = sigma(xys) { |x, y| Math.log(x) * Math.log(y) }
         | 
| 307 305 | 
             
                  slnx    = sigma(xs)  { |x   | Math.log(x)               }
         | 
| 308 306 | 
             
                  slny    = sigma(ys)  { |   y| Math.log(y)               }
         | 
| @@ -323,7 +321,7 @@ module Minitest | |
| 323 321 |  | 
| 324 322 | 
             
                def sigma enum, &block
         | 
| 325 323 | 
             
                  enum = enum.map(&block) if block
         | 
| 326 | 
            -
                  enum. | 
| 324 | 
            +
                  enum.sum
         | 
| 327 325 | 
             
                end
         | 
| 328 326 |  | 
| 329 327 | 
             
                ##
         | 
| @@ -419,7 +417,6 @@ module Minitest | |
| 419 417 | 
             
                  end
         | 
| 420 418 | 
             
                end
         | 
| 421 419 |  | 
| 422 | 
            -
             | 
| 423 420 | 
             
                ##
         | 
| 424 421 | 
             
                # Create a benchmark that verifies that the performance is logarithmic.
         | 
| 425 422 | 
             
                #
         | 
    
        data/lib/minitest/compress.rb
    CHANGED
    
    | @@ -11,12 +11,12 @@ module Minitest | |
| 11 11 | 
             
                def compress orig
         | 
| 12 12 | 
             
                  ary = orig
         | 
| 13 13 |  | 
| 14 | 
            -
                  eswo = ->( | 
| 14 | 
            +
                  eswo = ->(a, n, off) { # each_slice_with_offset
         | 
| 15 15 | 
             
                    if off.zero? then
         | 
| 16 | 
            -
                       | 
| 16 | 
            +
                      a.each_slice n
         | 
| 17 17 | 
             
                    else
         | 
| 18 18 | 
             
                      # [ ...off... [...n...] [...n...] ... ]
         | 
| 19 | 
            -
                      front, back =  | 
| 19 | 
            +
                      front, back = a.take(off), a.drop(off)
         | 
| 20 20 | 
             
                      [front].chain back.each_slice n
         | 
| 21 21 | 
             
                    end
         | 
| 22 22 | 
             
                  }
         | 
| @@ -29,16 +29,16 @@ module Minitest | |
| 29 29 |  | 
| 30 30 | 
             
                    order = index
         | 
| 31 31 | 
             
                      .reject { |k, v| v.size == 1 }          # { b: [1 3 5], c: [2 4 6] }
         | 
| 32 | 
            -
                      .sort_by { |k,  | 
| 33 | 
            -
                        d =  | 
| 34 | 
            -
                        [-d,  | 
| 32 | 
            +
                      .sort_by { |k, a1|                      ### sort by max dist + min offset
         | 
| 33 | 
            +
                        d = a1.each_cons(2).sum { |a2, b| b-a2 }
         | 
| 34 | 
            +
                        [-d, a1.first]
         | 
| 35 35 | 
             
                      }                                       # b: [1 3 5] c: [2 4 6]
         | 
| 36 36 |  | 
| 37 37 | 
             
                    ranges = order
         | 
| 38 | 
            -
                      .map { |k,  | 
| 39 | 
            -
                         | 
| 38 | 
            +
                      .map { |k, a1|                          # [[1..2 3..4] [2..3 4..5]]
         | 
| 39 | 
            +
                        a1
         | 
| 40 40 | 
             
                          .each_cons(2)
         | 
| 41 | 
            -
                          .map { | | 
| 41 | 
            +
                          .map { |a2, b| a2..b-1 }
         | 
| 42 42 | 
             
                      }
         | 
| 43 43 |  | 
| 44 44 | 
             
                    big_ranges = ranges
         | 
| @@ -50,7 +50,7 @@ module Minitest | |
| 50 50 | 
             
                    culprits = big_ranges
         | 
| 51 51 | 
             
                      .map { |r|
         | 
| 52 52 | 
             
                        eswo[ary, r.size, r.begin]            # [o1 s1 s1 s2 s2]
         | 
| 53 | 
            -
                          .chunk_while { |a,b| a == b } | 
| 53 | 
            +
                          .chunk_while { |a, b| a == b }      # [[o1] [s1 s1] [s2 s2]]
         | 
| 54 54 | 
             
                          .map { |a| [a.size, a.first] }      # [[1 o1] [2 s1] [2 s2]]
         | 
| 55 55 | 
             
                      }
         | 
| 56 56 | 
             
                      .select { |chunks|
         | 
| @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            module Minitest
         | 
| 2 2 |  | 
| 3 | 
            -
              module ErrorOnWarning
         | 
| 4 | 
            -
                def warn | 
| 3 | 
            +
              module ErrorOnWarning # :nodoc:
         | 
| 4 | 
            +
                def warn message, category: nil
         | 
| 5 5 | 
             
                  message = "[#{category}] #{message}" if category
         | 
| 6 6 | 
             
                  raise UnexpectedWarning, message
         | 
| 7 7 | 
             
                end
         | 
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 | 
            -
              ::Warning.singleton_class.prepend | 
| 10 | 
            +
              ::Warning.singleton_class.prepend ErrorOnWarning
         | 
| 11 11 | 
             
            end
         | 
    
        data/lib/minitest/mock.rb
    CHANGED
    
    | @@ -8,7 +8,7 @@ module Minitest # :nodoc: | |
| 8 8 | 
             
              # All mock objects are an instance of Mock
         | 
| 9 9 |  | 
| 10 10 | 
             
              class Mock
         | 
| 11 | 
            -
                alias  | 
| 11 | 
            +
                alias __respond_to? respond_to?
         | 
| 12 12 |  | 
| 13 13 | 
             
                overridden_methods = %i[
         | 
| 14 14 | 
             
                  ===
         | 
| @@ -93,7 +93,7 @@ module Minitest # :nodoc: | |
| 93 93 | 
             
                def expect name, retval, args = [], **kwargs, &blk
         | 
| 94 94 | 
             
                  name = name.to_sym
         | 
| 95 95 |  | 
| 96 | 
            -
                  if  | 
| 96 | 
            +
                  if blk then
         | 
| 97 97 | 
             
                    raise ArgumentError, "args ignored when block given" unless args.empty?
         | 
| 98 98 | 
             
                    raise ArgumentError, "kwargs ignored when block given" unless kwargs.empty?
         | 
| 99 99 | 
             
                    @expected_calls[name] << { :retval => retval, :block => blk }
         | 
| @@ -106,7 +106,7 @@ module Minitest # :nodoc: | |
| 106 106 | 
             
                        kwargs = args.pop
         | 
| 107 107 | 
             
                      else
         | 
| 108 108 | 
             
                        unless @@KW_WARNED then
         | 
| 109 | 
            -
                          from = caller.first
         | 
| 109 | 
            +
                          from = caller(1..1).first
         | 
| 110 110 | 
             
                          warn "Using MT_KWARGS_HAC\K yet passing kwargs. From #{from}"
         | 
| 111 111 | 
             
                          @@KW_WARNED = true
         | 
| 112 112 | 
             
                        end
         | 
| @@ -141,7 +141,7 @@ module Minitest # :nodoc: | |
| 141 141 |  | 
| 142 142 | 
             
                def verify
         | 
| 143 143 | 
             
                  @expected_calls.each do |name, expected|
         | 
| 144 | 
            -
                    actual = @actual_calls.fetch | 
| 144 | 
            +
                    actual = @actual_calls.fetch name, nil # defaults to []
         | 
| 145 145 | 
             
                    raise MockExpectationError, "expected #{__call name, expected[0]}" unless actual
         | 
| 146 146 | 
             
                    raise MockExpectationError, "expected #{__call name, expected[actual.size]}, got [#{__call name, actual}]" if
         | 
| 147 147 | 
             
                      actual.size < expected.size
         | 
| @@ -150,7 +150,7 @@ module Minitest # :nodoc: | |
| 150 150 | 
             
                end
         | 
| 151 151 |  | 
| 152 152 | 
             
                def method_missing sym, *args, **kwargs, &block # :nodoc:
         | 
| 153 | 
            -
                  unless @expected_calls.key? | 
| 153 | 
            +
                  unless @expected_calls.key? sym then
         | 
| 154 154 | 
             
                    if @delegator && @delegator.respond_to?(sym)
         | 
| 155 155 | 
             
                      if kwargs.empty? then # FIX: drop this after 2.7 dead
         | 
| 156 156 | 
             
                        return @delegator.public_send(sym, *args, &block)
         | 
| @@ -172,9 +172,9 @@ module Minitest # :nodoc: | |
| 172 172 | 
             
                  end
         | 
| 173 173 |  | 
| 174 174 | 
             
                  expected_args, expected_kwargs, retval, val_block =
         | 
| 175 | 
            -
                    expected_call.values_at | 
| 175 | 
            +
                    expected_call.values_at :args, :kwargs, :retval, :block
         | 
| 176 176 |  | 
| 177 | 
            -
                  expected_kwargs = kwargs. | 
| 177 | 
            +
                  expected_kwargs = kwargs.to_h { |ak, av| [ak, Object] } if
         | 
| 178 178 | 
             
                    Hash == expected_kwargs
         | 
| 179 179 |  | 
| 180 180 | 
             
                  if val_block then
         | 
| @@ -197,7 +197,7 @@ module Minitest # :nodoc: | |
| 197 197 | 
             
                      [sym, expected_kwargs.size, kwargs]
         | 
| 198 198 | 
             
                  end
         | 
| 199 199 |  | 
| 200 | 
            -
                  zipped_args = expected_args.zip | 
| 200 | 
            +
                  zipped_args = expected_args.zip args
         | 
| 201 201 | 
             
                  fully_matched = zipped_args.all? { |mod, a|
         | 
| 202 202 | 
             
                    mod === a or mod == a
         | 
| 203 203 | 
             
                  }
         | 
| @@ -212,10 +212,10 @@ module Minitest # :nodoc: | |
| 212 212 | 
             
                    raise MockExpectationError, fmt % [sym, expected_kwargs.keys, kwargs.keys]
         | 
| 213 213 | 
             
                  end
         | 
| 214 214 |  | 
| 215 | 
            -
                  zipped_kwargs = expected_kwargs. | 
| 215 | 
            +
                  zipped_kwargs = expected_kwargs.to_h { |ek, ev|
         | 
| 216 216 | 
             
                    av = kwargs[ek]
         | 
| 217 217 | 
             
                    [ek, [ev, av]]
         | 
| 218 | 
            -
                  } | 
| 218 | 
            +
                  }
         | 
| 219 219 |  | 
| 220 220 | 
             
                  fully_matched = zipped_kwargs.all? { |ek, (ev, av)|
         | 
| 221 221 | 
             
                    ev === av or ev == av
         | 
| @@ -228,8 +228,8 @@ module Minitest # :nodoc: | |
| 228 228 |  | 
| 229 229 | 
             
                  @actual_calls[sym] << {
         | 
| 230 230 | 
             
                    :retval => retval,
         | 
| 231 | 
            -
                    :args | 
| 232 | 
            -
                    :kwargs => zipped_kwargs. | 
| 231 | 
            +
                    :args   => zipped_args.map { |e, a| e === a ? e : a },
         | 
| 232 | 
            +
                    :kwargs => zipped_kwargs.to_h { |k, (e, a)| [k, e === a ? e : a] },
         | 
| 233 233 | 
             
                  }
         | 
| 234 234 |  | 
| 235 235 | 
             
                  retval
         | 
| @@ -238,7 +238,7 @@ module Minitest # :nodoc: | |
| 238 238 | 
             
                def respond_to? sym, include_private = false # :nodoc:
         | 
| 239 239 | 
             
                  return true if @expected_calls.key? sym.to_sym
         | 
| 240 240 | 
             
                  return true if @delegator && @delegator.respond_to?(sym, include_private)
         | 
| 241 | 
            -
                  __respond_to? | 
| 241 | 
            +
                  __respond_to? sym, include_private
         | 
| 242 242 | 
             
                end
         | 
| 243 243 | 
             
              end
         | 
| 244 244 | 
             
            end
         |