minitest 5.11.3 → 5.22.3
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 +280 -4
- data/Manifest.txt +4 -0
- data/README.rdoc +104 -17
- data/Rakefile +5 -16
- data/lib/hoe/minitest.rb +0 -4
- data/lib/minitest/assertions.rb +209 -42
- data/lib/minitest/benchmark.rb +7 -7
- data/lib/minitest/compress.rb +94 -0
- data/lib/minitest/expectations.rb +72 -35
- data/lib/minitest/mock.rb +123 -34
- data/lib/minitest/pride_plugin.rb +8 -11
- data/lib/minitest/spec.rb +27 -9
- data/lib/minitest/test.rb +48 -19
- data/lib/minitest/test_task.rb +301 -0
- data/lib/minitest/unit.rb +5 -8
- data/lib/minitest.rb +247 -69
- data/test/minitest/metametameta.rb +52 -12
- data/test/minitest/test_minitest_assertions.rb +1721 -0
- data/test/minitest/test_minitest_benchmark.rb +2 -2
- data/test/minitest/test_minitest_mock.rb +289 -17
- data/test/minitest/test_minitest_reporter.rb +160 -19
- data/test/minitest/test_minitest_spec.rb +314 -155
- data/test/minitest/test_minitest_test.rb +429 -1196
- data/test/minitest/test_minitest_test_task.rb +48 -0
- data.tar.gz.sig +0 -0
- metadata +38 -23
- metadata.gz.sig +0 -0
| @@ -15,11 +15,6 @@ if defined? Encoding then | |
| 15 15 | 
             
              end
         | 
| 16 16 | 
             
            end
         | 
| 17 17 |  | 
| 18 | 
            -
            module MyModule; end
         | 
| 19 | 
            -
            class AnError < StandardError; include MyModule; end
         | 
| 20 | 
            -
            class ImmutableString < String; def inspect; super.freeze; end; end
         | 
| 21 | 
            -
            SomeError = Class.new Exception
         | 
| 22 | 
            -
             | 
| 23 18 | 
             
            class Minitest::Runnable
         | 
| 24 19 | 
             
              def whatever # faked for testing
         | 
| 25 20 | 
             
                assert true
         | 
| @@ -33,33 +28,35 @@ class TestMinitestUnit < MetaMetaMetaTestCase | |
| 33 28 | 
             
              basedir = Pathname.new(File.expand_path "lib/minitest") + "mini"
         | 
| 34 29 | 
             
              basedir = basedir.relative_path_from(pwd).to_s
         | 
| 35 30 | 
             
              MINITEST_BASE_DIR = basedir[/\A\./] ? basedir : "./#{basedir}"
         | 
| 36 | 
            -
              BT_MIDDLE = ["#{MINITEST_BASE_DIR}/test.rb:161:in  | 
| 37 | 
            -
                           "#{MINITEST_BASE_DIR}/test.rb:158:in  | 
| 38 | 
            -
                           "#{MINITEST_BASE_DIR}/test.rb:139:in  | 
| 39 | 
            -
                           "#{MINITEST_BASE_DIR}/test.rb:106:in  | 
| 31 | 
            +
              BT_MIDDLE = ["#{MINITEST_BASE_DIR}/test.rb:161:in 'each'",
         | 
| 32 | 
            +
                           "#{MINITEST_BASE_DIR}/test.rb:158:in 'each'",
         | 
| 33 | 
            +
                           "#{MINITEST_BASE_DIR}/test.rb:139:in 'run'",
         | 
| 34 | 
            +
                           "#{MINITEST_BASE_DIR}/test.rb:106:in 'run'"]
         | 
| 40 35 |  | 
| 41 36 | 
             
              def test_filter_backtrace
         | 
| 42 37 | 
             
                # this is a semi-lame mix of relative paths.
         | 
| 43 38 | 
             
                # I cheated by making the autotest parts not have ./
         | 
| 44 | 
            -
                bt = (["lib/autotest.rb:571:in  | 
| 45 | 
            -
                       "test/test_autotest.rb:62:in  | 
| 46 | 
            -
                       "#{MINITEST_BASE_DIR}/test.rb:165:in  | 
| 39 | 
            +
                bt = (["lib/autotest.rb:571:in 'add_exception'",
         | 
| 40 | 
            +
                       "test/test_autotest.rb:62:in 'test_add_exception'",
         | 
| 41 | 
            +
                       "#{MINITEST_BASE_DIR}/test.rb:165:in '__send__'"] +
         | 
| 47 42 | 
             
                      BT_MIDDLE +
         | 
| 48 43 | 
             
                      ["#{MINITEST_BASE_DIR}/test.rb:29",
         | 
| 49 44 | 
             
                       "test/test_autotest.rb:422"])
         | 
| 50 45 | 
             
                bt = util_expand_bt bt
         | 
| 51 46 |  | 
| 52 | 
            -
                ex = ["lib/autotest.rb:571:in  | 
| 53 | 
            -
                      "test/test_autotest.rb:62:in  | 
| 47 | 
            +
                ex = ["lib/autotest.rb:571:in 'add_exception'",
         | 
| 48 | 
            +
                      "test/test_autotest.rb:62:in 'test_add_exception'"]
         | 
| 54 49 | 
             
                ex = util_expand_bt ex
         | 
| 55 50 |  | 
| 56 | 
            -
                 | 
| 51 | 
            +
                Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
         | 
| 52 | 
            +
                  fu = Minitest.filter_backtrace(bt)
         | 
| 57 53 |  | 
| 58 | 
            -
             | 
| 54 | 
            +
                  assert_equal ex, fu
         | 
| 55 | 
            +
                end
         | 
| 59 56 | 
             
              end
         | 
| 60 57 |  | 
| 61 58 | 
             
              def test_filter_backtrace_all_unit
         | 
| 62 | 
            -
                bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in  | 
| 59 | 
            +
                bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in '__send__'"] +
         | 
| 63 60 | 
             
                      BT_MIDDLE +
         | 
| 64 61 | 
             
                      ["#{MINITEST_BASE_DIR}/test.rb:29"])
         | 
| 65 62 | 
             
                ex = bt.clone
         | 
| @@ -68,7 +65,7 @@ class TestMinitestUnit < MetaMetaMetaTestCase | |
| 68 65 | 
             
              end
         | 
| 69 66 |  | 
| 70 67 | 
             
              def test_filter_backtrace_unit_starts
         | 
| 71 | 
            -
                bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in  | 
| 68 | 
            +
                bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in '__send__'"] +
         | 
| 72 69 | 
             
                      BT_MIDDLE +
         | 
| 73 70 | 
             
                      ["#{MINITEST_BASE_DIR}/mini/test.rb:29",
         | 
| 74 71 | 
             
                       "-e:1"])
         | 
| @@ -76,13 +73,19 @@ class TestMinitestUnit < MetaMetaMetaTestCase | |
| 76 73 | 
             
                bt = util_expand_bt bt
         | 
| 77 74 |  | 
| 78 75 | 
             
                ex = ["-e:1"]
         | 
| 79 | 
            -
                 | 
| 80 | 
            -
             | 
| 76 | 
            +
                Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
         | 
| 77 | 
            +
                  fu = Minitest.filter_backtrace bt
         | 
| 78 | 
            +
                  assert_equal ex, fu
         | 
| 79 | 
            +
                end
         | 
| 81 80 | 
             
              end
         | 
| 82 81 |  | 
| 83 | 
            -
               | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 82 | 
            +
              def test_filter_backtrace__empty
         | 
| 83 | 
            +
                with_empty_backtrace_filter do
         | 
| 84 | 
            +
                  bt = %w[first second third]
         | 
| 85 | 
            +
                  fu = Minitest.filter_backtrace bt.dup
         | 
| 86 | 
            +
                  assert_equal bt, fu
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
              end
         | 
| 86 89 |  | 
| 87 90 | 
             
              def test_infectious_binary_encoding
         | 
| 88 91 | 
             
                @tu = Class.new FakeNamedTest do
         | 
| @@ -96,24 +99,26 @@ class TestMinitestUnit < MetaMetaMetaTestCase | |
| 96 99 | 
             
                end
         | 
| 97 100 |  | 
| 98 101 | 
             
                expected = clean <<-EOM
         | 
| 99 | 
            -
                   | 
| 102 | 
            +
                  FE
         | 
| 100 103 |  | 
| 101 104 | 
             
                  Finished in 0.00
         | 
| 102 105 |  | 
| 103 | 
            -
                    1)  | 
| 104 | 
            -
                  FakeNamedTestXX#test_this_is_non_ascii_failure_message:
         | 
| 105 | 
            -
                  RuntimeError: ЁЁЁ
         | 
| 106 | 
            -
                      FILE:LINE:in `test_this_is_non_ascii_failure_message'
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                    2) Failure:
         | 
| 106 | 
            +
                    1) Failure:
         | 
| 109 107 | 
             
                  FakeNamedTestXX#test_this_is_not_ascii_assertion [FILE:LINE]:
         | 
| 110 108 | 
             
                  Expected: \"ЁЁЁ\"
         | 
| 111 109 | 
             
                    Actual: \"ёёё\"
         | 
| 112 110 |  | 
| 111 | 
            +
                    2) Error:
         | 
| 112 | 
            +
                  FakeNamedTestXX#test_this_is_non_ascii_failure_message:
         | 
| 113 | 
            +
                  RuntimeError: ЁЁЁ
         | 
| 114 | 
            +
                      FILE:LINE:in 'test_this_is_non_ascii_failure_message'
         | 
| 115 | 
            +
             | 
| 113 116 | 
             
                  2 runs, 1 assertions, 1 failures, 1 errors, 0 skips
         | 
| 114 117 | 
             
                EOM
         | 
| 115 118 |  | 
| 116 | 
            -
                 | 
| 119 | 
            +
                Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
         | 
| 120 | 
            +
                  assert_report expected
         | 
| 121 | 
            +
                end
         | 
| 117 122 | 
             
              end
         | 
| 118 123 |  | 
| 119 124 | 
             
              def test_passed_eh_teardown_good
         | 
| @@ -159,11 +164,7 @@ class TestMinitestUnit < MetaMetaMetaTestCase | |
| 159 164 | 
             
              end
         | 
| 160 165 |  | 
| 161 166 | 
             
              def util_expand_bt bt
         | 
| 162 | 
            -
                 | 
| 163 | 
            -
                  bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
         | 
| 164 | 
            -
                else
         | 
| 165 | 
            -
                  bt
         | 
| 166 | 
            -
                end
         | 
| 167 | 
            +
                bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
         | 
| 167 168 | 
             
              end
         | 
| 168 169 | 
             
            end
         | 
| 169 170 |  | 
| @@ -255,14 +256,14 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 255 256 | 
             
                end
         | 
| 256 257 |  | 
| 257 258 | 
             
                expected = clean <<-EOM
         | 
| 258 | 
            -
                  E | 
| 259 | 
            +
                  .E
         | 
| 259 260 |  | 
| 260 261 | 
             
                  Finished in 0.00
         | 
| 261 262 |  | 
| 262 263 | 
             
                    1) Error:
         | 
| 263 264 | 
             
                  FakeNamedTestXX#test_error:
         | 
| 264 265 | 
             
                  RuntimeError: unhandled exception
         | 
| 265 | 
            -
                      FILE:LINE:in  | 
| 266 | 
            +
                      FILE:LINE:in \'test_error\'
         | 
| 266 267 |  | 
| 267 268 | 
             
                  2 runs, 1 assertions, 0 failures, 1 errors, 0 skips
         | 
| 268 269 | 
             
                EOM
         | 
| @@ -290,7 +291,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 290 291 | 
             
                    1) Error:
         | 
| 291 292 | 
             
                  FakeNamedTestXX#test_something:
         | 
| 292 293 | 
             
                  RuntimeError: unhandled exception
         | 
| 293 | 
            -
                      FILE:LINE:in  | 
| 294 | 
            +
                      FILE:LINE:in \'teardown\'
         | 
| 294 295 |  | 
| 295 296 | 
             
                  1 runs, 1 assertions, 0 failures, 1 errors, 0 skips
         | 
| 296 297 | 
             
                EOM
         | 
| @@ -302,7 +303,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 302 303 | 
             
                setup_basic_tu
         | 
| 303 304 |  | 
| 304 305 | 
             
                expected = clean <<-EOM
         | 
| 305 | 
            -
                  F | 
| 306 | 
            +
                  .F
         | 
| 306 307 |  | 
| 307 308 | 
             
                  Finished in 0.00
         | 
| 308 309 |  | 
| @@ -329,6 +330,10 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 329 330 | 
             
                end
         | 
| 330 331 | 
             
              end
         | 
| 331 332 |  | 
| 333 | 
            +
              def test_seed # this is set for THIS run, so I'm not testing it's actual value
         | 
| 334 | 
            +
                assert_instance_of Integer, Minitest.seed
         | 
| 335 | 
            +
              end
         | 
| 336 | 
            +
             | 
| 332 337 | 
             
              def test_run_failing_filtered
         | 
| 333 338 | 
             
                setup_basic_tu
         | 
| 334 339 |  | 
| @@ -486,7 +491,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 486 491 | 
             
                end
         | 
| 487 492 |  | 
| 488 493 | 
             
                expected = clean <<-EOM
         | 
| 489 | 
            -
                  S | 
| 494 | 
            +
                  .S
         | 
| 490 495 |  | 
| 491 496 | 
             
                  Finished in 0.00
         | 
| 492 497 |  | 
| @@ -513,8 +518,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 513 518 | 
             
                end
         | 
| 514 519 |  | 
| 515 520 | 
             
                expected = clean <<-EOM
         | 
| 516 | 
            -
                  FakeNamedTestXX#test_skip = 0.00 s = S
         | 
| 517 521 | 
             
                  FakeNamedTestXX#test_something = 0.00 s = .
         | 
| 522 | 
            +
                  FakeNamedTestXX#test_skip = 0.00 s = S
         | 
| 518 523 |  | 
| 519 524 | 
             
                  Finished in 0.00
         | 
| 520 525 |  | 
| @@ -528,6 +533,33 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 528 533 | 
             
                assert_report expected, %w[--seed 42 --verbose]
         | 
| 529 534 | 
             
              end
         | 
| 530 535 |  | 
| 536 | 
            +
              def test_run_skip_show_skips
         | 
| 537 | 
            +
                @tu =
         | 
| 538 | 
            +
                Class.new FakeNamedTest do
         | 
| 539 | 
            +
                  def test_something
         | 
| 540 | 
            +
                    assert true
         | 
| 541 | 
            +
                  end
         | 
| 542 | 
            +
             | 
| 543 | 
            +
                  def test_skip
         | 
| 544 | 
            +
                    skip "not yet"
         | 
| 545 | 
            +
                  end
         | 
| 546 | 
            +
                end
         | 
| 547 | 
            +
             | 
| 548 | 
            +
                expected = clean <<-EOM
         | 
| 549 | 
            +
                  .S
         | 
| 550 | 
            +
             | 
| 551 | 
            +
                  Finished in 0.00
         | 
| 552 | 
            +
             | 
| 553 | 
            +
                    1) Skipped:
         | 
| 554 | 
            +
                  FakeNamedTestXX#test_skip [FILE:LINE]:
         | 
| 555 | 
            +
                  not yet
         | 
| 556 | 
            +
             | 
| 557 | 
            +
                  2 runs, 1 assertions, 0 failures, 0 errors, 1 skips
         | 
| 558 | 
            +
                EOM
         | 
| 559 | 
            +
             | 
| 560 | 
            +
                assert_report expected, %w[--seed 42 --show-skips]
         | 
| 561 | 
            +
              end
         | 
| 562 | 
            +
             | 
| 531 563 | 
             
              def test_run_with_other_runner
         | 
| 532 564 | 
             
                @tu =
         | 
| 533 565 | 
             
                Class.new FakeNamedTest do
         | 
| @@ -587,8 +619,6 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 587 619 | 
             
              end
         | 
| 588 620 |  | 
| 589 621 | 
             
              def test_run_parallel
         | 
| 590 | 
            -
                skip "I don't have ParallelEach debugged yet" if maglev?
         | 
| 591 | 
            -
             | 
| 592 622 | 
             
                test_count = 2
         | 
| 593 623 | 
             
                test_latch = Latch.new test_count
         | 
| 594 624 | 
             
                wait_latch = Latch.new test_count
         | 
| @@ -630,6 +660,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase | |
| 630 660 | 
             
                  2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
         | 
| 631 661 | 
             
                EOM
         | 
| 632 662 |  | 
| 663 | 
            +
                skip if Minitest.parallel_executor.size < 2 # locks up test runner if 1 CPU
         | 
| 664 | 
            +
             | 
| 633 665 | 
             
                assert_report(expected) do |reporter|
         | 
| 634 666 | 
             
                  reporter.extend(Module.new {
         | 
| 635 667 | 
             
                    define_method("record") do |result|
         | 
| @@ -754,6 +786,13 @@ class TestMinitestUnitOrder < MetaMetaMetaTestCase | |
| 754 786 | 
             
              end
         | 
| 755 787 | 
             
            end
         | 
| 756 788 |  | 
| 789 | 
            +
            class BetterError < RuntimeError # like better_error w/o infecting RuntimeError
         | 
| 790 | 
            +
              def set_backtrace bt
         | 
| 791 | 
            +
                super
         | 
| 792 | 
            +
                @bad_ivar = binding
         | 
| 793 | 
            +
              end
         | 
| 794 | 
            +
            end
         | 
| 795 | 
            +
             | 
| 757 796 | 
             
            class TestMinitestRunnable < Minitest::Test
         | 
| 758 797 | 
             
              def setup_marshal klass
         | 
| 759 798 | 
             
                tc = klass.new "whatever"
         | 
| @@ -806,6 +845,146 @@ class TestMinitestRunnable < Minitest::Test | |
| 806 845 | 
             
                assert_equal @tc.failures,   over_the_wire.failures
         | 
| 807 846 | 
             
                assert_equal @tc.klass,      over_the_wire.klass
         | 
| 808 847 | 
             
              end
         | 
| 848 | 
            +
             | 
| 849 | 
            +
              def test_spec_marshal_with_exception
         | 
| 850 | 
            +
                klass = describe("whatever") {
         | 
| 851 | 
            +
                  it("raises, badly") {
         | 
| 852 | 
            +
                    raise Class.new(StandardError), "this is bad!"
         | 
| 853 | 
            +
                  }
         | 
| 854 | 
            +
                }
         | 
| 855 | 
            +
             | 
| 856 | 
            +
                rm = klass.runnable_methods.first
         | 
| 857 | 
            +
             | 
| 858 | 
            +
                # Run the test
         | 
| 859 | 
            +
                @tc = klass.new(rm).run
         | 
| 860 | 
            +
             | 
| 861 | 
            +
                assert_kind_of Minitest::Result, @tc
         | 
| 862 | 
            +
                assert_instance_of Minitest::UnexpectedError, @tc.failure
         | 
| 863 | 
            +
             | 
| 864 | 
            +
                msg = @tc.failure.error.message
         | 
| 865 | 
            +
                assert_includes msg, "Neutered Exception #<Class:"
         | 
| 866 | 
            +
                assert_includes msg, "this is bad!"
         | 
| 867 | 
            +
             | 
| 868 | 
            +
                # Pass it over the wire
         | 
| 869 | 
            +
                over_the_wire = Marshal.load Marshal.dump @tc
         | 
| 870 | 
            +
             | 
| 871 | 
            +
                assert_equal @tc.time,       over_the_wire.time
         | 
| 872 | 
            +
                assert_equal @tc.name,       over_the_wire.name
         | 
| 873 | 
            +
                assert_equal @tc.assertions, over_the_wire.assertions
         | 
| 874 | 
            +
                assert_equal @tc.failures,   over_the_wire.failures
         | 
| 875 | 
            +
                assert_equal @tc.klass,      over_the_wire.klass
         | 
| 876 | 
            +
              end
         | 
| 877 | 
            +
             | 
| 878 | 
            +
              def test_spec_marshal_with_exception_nameerror
         | 
| 879 | 
            +
                klass = describe("whatever") {
         | 
| 880 | 
            +
                  it("raises nameerror") {
         | 
| 881 | 
            +
                    NOPE::does_not_exist
         | 
| 882 | 
            +
                  }
         | 
| 883 | 
            +
                }
         | 
| 884 | 
            +
             | 
| 885 | 
            +
                rm = klass.runnable_methods.first
         | 
| 886 | 
            +
             | 
| 887 | 
            +
                # Run the test
         | 
| 888 | 
            +
                @tc = klass.new(rm).run
         | 
| 889 | 
            +
             | 
| 890 | 
            +
                assert_kind_of Minitest::Result, @tc
         | 
| 891 | 
            +
                assert_instance_of Minitest::UnexpectedError, @tc.failure
         | 
| 892 | 
            +
             | 
| 893 | 
            +
                msg = @tc.failure.error.message
         | 
| 894 | 
            +
                assert_includes msg, "uninitialized constant TestMinitestRunnable::NOPE"
         | 
| 895 | 
            +
             | 
| 896 | 
            +
                # Pass it over the wire
         | 
| 897 | 
            +
                over_the_wire = Marshal.load Marshal.dump @tc
         | 
| 898 | 
            +
             | 
| 899 | 
            +
                assert_equal @tc.time,       over_the_wire.time
         | 
| 900 | 
            +
                assert_equal @tc.name,       over_the_wire.name
         | 
| 901 | 
            +
                assert_equal @tc.assertions, over_the_wire.assertions
         | 
| 902 | 
            +
                assert_equal @tc.failures,   over_the_wire.failures
         | 
| 903 | 
            +
                assert_equal @tc.klass,      over_the_wire.klass
         | 
| 904 | 
            +
              end
         | 
| 905 | 
            +
             | 
| 906 | 
            +
              def with_runtime_error klass
         | 
| 907 | 
            +
                old_runtime = RuntimeError
         | 
| 908 | 
            +
                Object.send :remove_const, :RuntimeError
         | 
| 909 | 
            +
                Object.const_set :RuntimeError, klass
         | 
| 910 | 
            +
                yield
         | 
| 911 | 
            +
              ensure
         | 
| 912 | 
            +
                Object.send :remove_const, :RuntimeError
         | 
| 913 | 
            +
                Object.const_set :RuntimeError, old_runtime
         | 
| 914 | 
            +
              end
         | 
| 915 | 
            +
             | 
| 916 | 
            +
              def test_spec_marshal_with_exception__better_error_typeerror
         | 
| 917 | 
            +
                klass = describe("whatever") {
         | 
| 918 | 
            +
                  it("raises with binding") {
         | 
| 919 | 
            +
                    raise BetterError, "boom"
         | 
| 920 | 
            +
                  }
         | 
| 921 | 
            +
                }
         | 
| 922 | 
            +
             | 
| 923 | 
            +
                rm = klass.runnable_methods.first
         | 
| 924 | 
            +
             | 
| 925 | 
            +
                # Run the test
         | 
| 926 | 
            +
                @tc = with_runtime_error BetterError do
         | 
| 927 | 
            +
                  klass.new(rm).run
         | 
| 928 | 
            +
                end
         | 
| 929 | 
            +
             | 
| 930 | 
            +
                assert_kind_of Minitest::Result, @tc
         | 
| 931 | 
            +
                assert_instance_of Minitest::UnexpectedError, @tc.failure
         | 
| 932 | 
            +
             | 
| 933 | 
            +
                msg = @tc.failure.error.message
         | 
| 934 | 
            +
                assert_equal "Neutered Exception BetterError: boom", msg
         | 
| 935 | 
            +
             | 
| 936 | 
            +
                # Pass it over the wire
         | 
| 937 | 
            +
                over_the_wire = Marshal.load Marshal.dump @tc
         | 
| 938 | 
            +
             | 
| 939 | 
            +
                assert_equal @tc.time,       over_the_wire.time
         | 
| 940 | 
            +
                assert_equal @tc.name,       over_the_wire.name
         | 
| 941 | 
            +
                assert_equal @tc.assertions, over_the_wire.assertions
         | 
| 942 | 
            +
                assert_equal @tc.failures,   over_the_wire.failures
         | 
| 943 | 
            +
                assert_equal @tc.klass,      over_the_wire.klass
         | 
| 944 | 
            +
              end
         | 
| 945 | 
            +
             | 
| 946 | 
            +
              def test_spec_marshal_with_exception__worse_error_typeerror
         | 
| 947 | 
            +
                worse_error_klass = Class.new(StandardError) do
         | 
| 948 | 
            +
                  # problem #1: anonymous subclass can'tmarshal, fails sanitize_exception
         | 
| 949 | 
            +
                  def initialize(record = nil)
         | 
| 950 | 
            +
             | 
| 951 | 
            +
                    super(record.first)
         | 
| 952 | 
            +
                  end
         | 
| 953 | 
            +
                end
         | 
| 954 | 
            +
             | 
| 955 | 
            +
                klass = describe("whatever") {
         | 
| 956 | 
            +
                  it("raises with NoMethodError") {
         | 
| 957 | 
            +
                    # problem #2: instantiated with a NON-string argument
         | 
| 958 | 
            +
                    #
         | 
| 959 | 
            +
                    # problem #3: arg responds to #first, but it becomes message
         | 
| 960 | 
            +
                    #             which gets passed back in via new_exception
         | 
| 961 | 
            +
                    #             that passes a string to worse_error_klass#initialize
         | 
| 962 | 
            +
                    #             which calls first on it, which raises NoMethodError
         | 
| 963 | 
            +
                    raise worse_error_klass.new(["boom"])
         | 
| 964 | 
            +
                  }
         | 
| 965 | 
            +
                }
         | 
| 966 | 
            +
             | 
| 967 | 
            +
                rm = klass.runnable_methods.first
         | 
| 968 | 
            +
             | 
| 969 | 
            +
                # Run the test
         | 
| 970 | 
            +
                @tc = klass.new(rm).run
         | 
| 971 | 
            +
             | 
| 972 | 
            +
                assert_kind_of Minitest::Result, @tc
         | 
| 973 | 
            +
                assert_instance_of Minitest::UnexpectedError, @tc.failure
         | 
| 974 | 
            +
             | 
| 975 | 
            +
                msg = @tc.failure.error.message.gsub(/0x[A-Fa-f0-9]+/, "0xXXX")
         | 
| 976 | 
            +
             | 
| 977 | 
            +
                assert_equal "Neutered Exception #<Class:0xXXX>: boom", msg
         | 
| 978 | 
            +
             | 
| 979 | 
            +
                # Pass it over the wire
         | 
| 980 | 
            +
                over_the_wire = Marshal.load Marshal.dump @tc
         | 
| 981 | 
            +
             | 
| 982 | 
            +
                assert_equal @tc.time,       over_the_wire.time
         | 
| 983 | 
            +
                assert_equal @tc.name,       over_the_wire.name
         | 
| 984 | 
            +
                assert_equal @tc.assertions, over_the_wire.assertions
         | 
| 985 | 
            +
                assert_equal @tc.failures,   over_the_wire.failures
         | 
| 986 | 
            +
                assert_equal @tc.klass,      over_the_wire.klass
         | 
| 987 | 
            +
              end
         | 
| 809 988 | 
             
            end
         | 
| 810 989 |  | 
| 811 990 | 
             
            class TestMinitestTest < TestMinitestRunnable
         | 
| @@ -851,1209 +1030,170 @@ class TestMinitestUnitTestCase < Minitest::Test | |
| 851 1030 | 
             
                $VERBOSE = orig_verbose
         | 
| 852 1031 | 
             
              end
         | 
| 853 1032 |  | 
| 854 | 
            -
              def  | 
| 855 | 
            -
                 | 
| 856 | 
            -
             | 
| 857 | 
            -
             | 
| 858 | 
            -
             | 
| 859 | 
            -
             | 
| 860 | 
            -
             | 
| 861 | 
            -
                assert_triggered "Expected false to be truthy." do
         | 
| 862 | 
            -
                  @tc.assert false
         | 
| 863 | 
            -
                end
         | 
| 1033 | 
            +
              def sample_test_case(rand)
         | 
| 1034 | 
            +
                srand rand
         | 
| 1035 | 
            +
                Class.new FakeNamedTest do
         | 
| 1036 | 
            +
                  100.times do |i|
         | 
| 1037 | 
            +
                    define_method("test_#{i}") { assert true }
         | 
| 1038 | 
            +
                  end
         | 
| 1039 | 
            +
                end.runnable_methods
         | 
| 864 1040 | 
             
              end
         | 
| 865 1041 |  | 
| 866 | 
            -
               | 
| 867 | 
            -
             | 
| 868 | 
            -
             | 
| 869 | 
            -
                end
         | 
| 870 | 
            -
              end
         | 
| 1042 | 
            +
              # srand varies with OS
         | 
| 1043 | 
            +
              def test_runnable_methods_random
         | 
| 1044 | 
            +
                @assertion_count = 0
         | 
| 871 1045 |  | 
| 872 | 
            -
             | 
| 873 | 
            -
                 | 
| 1046 | 
            +
                random_tests_1 = sample_test_case 42
         | 
| 1047 | 
            +
                random_tests_2 = sample_test_case 42
         | 
| 1048 | 
            +
                random_tests_3 = sample_test_case 1_000
         | 
| 874 1049 |  | 
| 875 | 
            -
                 | 
| 1050 | 
            +
                assert_equal random_tests_1, random_tests_2
         | 
| 1051 | 
            +
                assert_equal random_tests_1, random_tests_3
         | 
| 876 1052 | 
             
              end
         | 
| 877 1053 |  | 
| 878 | 
            -
              def  | 
| 879 | 
            -
                @assertion_count =  | 
| 1054 | 
            +
              def test_runnable_methods_sorted
         | 
| 1055 | 
            +
                @assertion_count = 0
         | 
| 880 1056 |  | 
| 881 | 
            -
                 | 
| 882 | 
            -
                   | 
| 1057 | 
            +
                sample_test_case = Class.new FakeNamedTest do
         | 
| 1058 | 
            +
                  def self.test_order; :sorted end
         | 
| 1059 | 
            +
                  def test_test3; assert "does not matter" end
         | 
| 1060 | 
            +
                  def test_test2; assert "does not matter" end
         | 
| 1061 | 
            +
                  def test_test1; assert "does not matter" end
         | 
| 883 1062 | 
             
                end
         | 
| 884 | 
            -
              end
         | 
| 885 1063 |  | 
| 886 | 
            -
             | 
| 887 | 
            -
                 | 
| 1064 | 
            +
                expected = %w[test_test1 test_test2 test_test3]
         | 
| 1065 | 
            +
                assert_equal expected, sample_test_case.runnable_methods
         | 
| 888 1066 | 
             
              end
         | 
| 889 1067 |  | 
| 890 | 
            -
              def  | 
| 891 | 
            -
                 | 
| 892 | 
            -
             | 
| 893 | 
            -
                 | 
| 894 | 
            -
                       You should look at the implementation of #== on Array or its members.
         | 
| 895 | 
            -
                       [#<Object:0xXXXXXX>]".gsub(/^ +/, "")
         | 
| 896 | 
            -
                assert_triggered msg do
         | 
| 897 | 
            -
                  @tc.assert_equal [object1], [object2]
         | 
| 898 | 
            -
                end
         | 
| 899 | 
            -
              end
         | 
| 1068 | 
            +
              def test_i_suck_and_my_tests_are_order_dependent_bang_sets_test_order_alpha
         | 
| 1069 | 
            +
                @assertion_count = 0
         | 
| 1070 | 
            +
             | 
| 1071 | 
            +
                shitty_test_case = Class.new FakeNamedTest
         | 
| 900 1072 |  | 
| 901 | 
            -
             | 
| 902 | 
            -
                h1, h2 = {}, {}
         | 
| 903 | 
            -
                h1[1] = Object.new
         | 
| 904 | 
            -
                h2[1] = Object.new
         | 
| 905 | 
            -
                msg = "No visible difference in the Hash#inspect output.
         | 
| 906 | 
            -
                       You should look at the implementation of #== on Hash or its members.
         | 
| 907 | 
            -
                       {1=>#<Object:0xXXXXXX>}".gsub(/^ +/, "")
         | 
| 1073 | 
            +
                shitty_test_case.i_suck_and_my_tests_are_order_dependent!
         | 
| 908 1074 |  | 
| 909 | 
            -
                 | 
| 910 | 
            -
                  @tc.assert_equal h1, h2
         | 
| 911 | 
            -
                end
         | 
| 1075 | 
            +
                assert_equal :alpha, shitty_test_case.test_order
         | 
| 912 1076 | 
             
              end
         | 
| 913 1077 |  | 
| 914 | 
            -
              def  | 
| 915 | 
            -
                 | 
| 916 | 
            -
                      --- expected
         | 
| 917 | 
            -
                      +++ actual
         | 
| 918 | 
            -
                      @@ -1 +1,2 @@
         | 
| 919 | 
            -
                      +# encoding: ASCII-8BIT
         | 
| 920 | 
            -
                       "bad-utf8-\\xF1.txt"
         | 
| 921 | 
            -
                      EOM
         | 
| 922 | 
            -
             | 
| 923 | 
            -
                assert_triggered msg do
         | 
| 924 | 
            -
                  x = "bad-utf8-\xF1.txt"
         | 
| 925 | 
            -
                  y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped
         | 
| 926 | 
            -
                  @tc.assert_equal x, y
         | 
| 927 | 
            -
                end
         | 
| 928 | 
            -
              end unless RUBY18
         | 
| 929 | 
            -
             | 
| 930 | 
            -
              def test_assert_equal_string_encodings_both_different
         | 
| 931 | 
            -
                msg = <<-EOM.gsub(/^ {10}/, "")
         | 
| 932 | 
            -
                      --- expected
         | 
| 933 | 
            -
                      +++ actual
         | 
| 934 | 
            -
                      @@ -1,2 +1,2 @@
         | 
| 935 | 
            -
                      -# encoding: US-ASCII
         | 
| 936 | 
            -
                      +# encoding: ASCII-8BIT
         | 
| 937 | 
            -
                       "bad-utf8-\\xF1.txt"
         | 
| 938 | 
            -
                      EOM
         | 
| 939 | 
            -
             | 
| 940 | 
            -
                assert_triggered msg do
         | 
| 941 | 
            -
                  x = "bad-utf8-\xF1.txt".force_encoding "ASCII"
         | 
| 942 | 
            -
                  y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped
         | 
| 943 | 
            -
                  @tc.assert_equal x, y
         | 
| 944 | 
            -
                end
         | 
| 945 | 
            -
              end unless RUBY18
         | 
| 1078 | 
            +
              def test_i_suck_and_my_tests_are_order_dependent_bang_does_not_warn
         | 
| 1079 | 
            +
                @assertion_count = 0
         | 
| 946 1080 |  | 
| 947 | 
            -
             | 
| 948 | 
            -
                skip "https://github.com/MagLev/maglev/issues/209" if maglev?
         | 
| 1081 | 
            +
                shitty_test_case = Class.new FakeNamedTest
         | 
| 949 1082 |  | 
| 950 | 
            -
                 | 
| 951 | 
            -
                  assert_triggered util_msg("haha" * 10, "blah" * 10) do
         | 
| 952 | 
            -
                    o1 = "haha" * 10
         | 
| 953 | 
            -
                    o2 = "blah" * 10
         | 
| 1083 | 
            +
                def shitty_test_case.test_order; :lol end
         | 
| 954 1084 |  | 
| 955 | 
            -
             | 
| 956 | 
            -
                   | 
| 1085 | 
            +
                assert_silent do
         | 
| 1086 | 
            +
                  shitty_test_case.i_suck_and_my_tests_are_order_dependent!
         | 
| 957 1087 | 
             
                end
         | 
| 958 1088 | 
             
              end
         | 
| 959 1089 |  | 
| 960 | 
            -
              def  | 
| 961 | 
            -
                 | 
| 962 | 
            -
             | 
| 963 | 
            -
                 | 
| 964 | 
            -
             | 
| 965 | 
            -
                o1 = c.new "a"
         | 
| 966 | 
            -
                o2 = c.new "b"
         | 
| 967 | 
            -
                msg = "--- expected
         | 
| 968 | 
            -
                       +++ actual
         | 
| 969 | 
            -
                       @@ -1 +1 @@
         | 
| 970 | 
            -
                       -#<#<Class:0xXXXXXX>:0xXXXXXX @name=\"a\">
         | 
| 971 | 
            -
                       +#<#<Class:0xXXXXXX>:0xXXXXXX @name=\"b\">
         | 
| 972 | 
            -
                       ".gsub(/^ +/, "")
         | 
| 973 | 
            -
             | 
| 974 | 
            -
                assert_triggered msg do
         | 
| 975 | 
            -
                  @tc.assert_equal o1, o2
         | 
| 976 | 
            -
                end
         | 
| 1090 | 
            +
              def test_autorun_does_not_affect_fork_success_status
         | 
| 1091 | 
            +
                @assertion_count = 0
         | 
| 1092 | 
            +
                skip "windows doesn't have fork" unless Process.respond_to?(:fork)
         | 
| 1093 | 
            +
                Process.waitpid(fork {})
         | 
| 1094 | 
            +
                assert_equal true, $?.success?
         | 
| 977 1095 | 
             
              end
         | 
| 978 1096 |  | 
| 979 | 
            -
              def  | 
| 980 | 
            -
                 | 
| 981 | 
            -
                 | 
| 982 | 
            -
             | 
| 983 | 
            -
                 | 
| 984 | 
            -
                       You should look at the implementation of #== on Object or its members.
         | 
| 985 | 
            -
                       #<Object:0xXXXXXX>".gsub(/^ +/, "")
         | 
| 986 | 
            -
             | 
| 987 | 
            -
                assert_triggered msg do
         | 
| 988 | 
            -
                  @tc.assert_equal o1, o2
         | 
| 989 | 
            -
                end
         | 
| 1097 | 
            +
              def test_autorun_does_not_affect_fork_exit_status
         | 
| 1098 | 
            +
                @assertion_count = 0
         | 
| 1099 | 
            +
                skip "windows doesn't have fork" unless Process.respond_to?(:fork)
         | 
| 1100 | 
            +
                Process.waitpid(fork { exit 42 })
         | 
| 1101 | 
            +
                assert_equal 42, $?.exitstatus
         | 
| 990 1102 | 
             
              end
         | 
| 991 1103 |  | 
| 992 | 
            -
              def  | 
| 993 | 
            -
                 | 
| 994 | 
            -
             | 
| 995 | 
            -
             | 
| 996 | 
            -
             | 
| 997 | 
            -
             | 
| 998 | 
            -
             | 
| 999 | 
            -
             | 
| 1000 | 
            -
                assert_triggered msg do
         | 
| 1001 | 
            -
                  o1 = "haha" * 10
         | 
| 1002 | 
            -
                  o2 = "blah" * 10
         | 
| 1003 | 
            -
             | 
| 1004 | 
            -
                  @tc.assert_equal o1, o2
         | 
| 1005 | 
            -
                end
         | 
| 1104 | 
            +
              def test_autorun_optionally_can_affect_fork_exit_status
         | 
| 1105 | 
            +
                @assertion_count = 0
         | 
| 1106 | 
            +
                skip "windows doesn't have fork" unless Process.respond_to?(:fork)
         | 
| 1107 | 
            +
                Minitest.allow_fork = true
         | 
| 1108 | 
            +
                Process.waitpid(fork { exit 42 })
         | 
| 1109 | 
            +
                refute_equal 42, $?.exitstatus
         | 
| 1110 | 
            +
              ensure
         | 
| 1111 | 
            +
                Minitest.allow_fork = false
         | 
| 1006 1112 | 
             
              end
         | 
| 1113 | 
            +
            end
         | 
| 1007 1114 |  | 
| 1008 | 
            -
             | 
| 1009 | 
            -
             | 
| 1010 | 
            -
                       You should look at the implementation of #== on String or its members.
         | 
| 1011 | 
            -
                       \"blahblahblahblahblahblahblahblahblahblah\"".gsub(/^ +/, "")
         | 
| 1115 | 
            +
            class TestMinitestGuard < Minitest::Test
         | 
| 1116 | 
            +
              parallelize_me!
         | 
| 1012 1117 |  | 
| 1013 | 
            -
             | 
| 1014 | 
            -
             | 
| 1015 | 
            -
             | 
| 1016 | 
            -
                  def o1.== _
         | 
| 1017 | 
            -
                    false
         | 
| 1018 | 
            -
                  end
         | 
| 1019 | 
            -
                  @tc.assert_equal o1, o2
         | 
| 1020 | 
            -
                end
         | 
| 1118 | 
            +
              def test_mri_eh
         | 
| 1119 | 
            +
                assert self.class.mri? "ruby blah"
         | 
| 1120 | 
            +
                assert self.mri? "ruby blah"
         | 
| 1021 1121 | 
             
              end
         | 
| 1022 1122 |  | 
| 1023 | 
            -
              def  | 
| 1024 | 
            -
                 | 
| 1025 | 
            -
             | 
| 1026 | 
            -
                       +++ actual
         | 
| 1027 | 
            -
                       @@ -1 +1 @@
         | 
| 1028 | 
            -
                       -\"hahahahahahahahahahahahahahahahahahahaha\"
         | 
| 1029 | 
            -
                       +\"blahblahblahblahblahblahblahblahblahblah\"
         | 
| 1030 | 
            -
                       ".gsub(/^ +/, "")
         | 
| 1031 | 
            -
             | 
| 1032 | 
            -
                assert_triggered msg do
         | 
| 1033 | 
            -
                  o1 = "haha" * 10
         | 
| 1034 | 
            -
                  o2 = "blah" * 10
         | 
| 1035 | 
            -
                  @tc.assert_equal o1, o2, "message"
         | 
| 1036 | 
            -
                end
         | 
| 1123 | 
            +
              def test_jruby_eh
         | 
| 1124 | 
            +
                assert self.class.jruby? "java"
         | 
| 1125 | 
            +
                assert self.jruby? "java"
         | 
| 1037 1126 | 
             
              end
         | 
| 1038 1127 |  | 
| 1039 | 
            -
              def  | 
| 1040 | 
            -
                 | 
| 1041 | 
            -
                   | 
| 1128 | 
            +
              def test_rubinius_eh
         | 
| 1129 | 
            +
                assert_output "", /DEPRECATED/ do
         | 
| 1130 | 
            +
                  assert self.class.rubinius? "rbx"
         | 
| 1042 1131 | 
             
                end
         | 
| 1043 | 
            -
             | 
| 1044 | 
            -
             | 
| 1045 | 
            -
              def test_assert_equal_different_short_msg
         | 
| 1046 | 
            -
                assert_triggered util_msg(1, 2, "message") do
         | 
| 1047 | 
            -
                  @tc.assert_equal 1, 2, "message"
         | 
| 1132 | 
            +
                assert_output "", /DEPRECATED/ do
         | 
| 1133 | 
            +
                  assert self.rubinius? "rbx"
         | 
| 1048 1134 | 
             
                end
         | 
| 1049 1135 | 
             
              end
         | 
| 1050 1136 |  | 
| 1051 | 
            -
              def  | 
| 1052 | 
            -
                 | 
| 1053 | 
            -
             | 
| 1054 | 
            -
                  @tc.assert_equal "a\nb", "a\nc"
         | 
| 1137 | 
            +
              def test_maglev_eh
         | 
| 1138 | 
            +
                assert_output "", /DEPRECATED/ do
         | 
| 1139 | 
            +
                  assert self.class.maglev? "maglev"
         | 
| 1055 1140 | 
             
                end
         | 
| 1056 | 
            -
             | 
| 1057 | 
            -
             | 
| 1058 | 
            -
              def test_assert_equal_does_not_allow_lhs_nil
         | 
| 1059 | 
            -
                if Minitest::VERSION =~ /^6/ then
         | 
| 1060 | 
            -
                  warn "Time to strip the MT5 test"
         | 
| 1061 | 
            -
             | 
| 1062 | 
            -
                  @assertion_count += 1
         | 
| 1063 | 
            -
                  assert_triggered(/Use assert_nil if expecting nil/) do
         | 
| 1064 | 
            -
                    @tc.assert_equal nil, nil
         | 
| 1065 | 
            -
                  end
         | 
| 1066 | 
            -
                else
         | 
| 1067 | 
            -
                  err_re = /Use assert_nil if expecting nil from .*test_minitest_test.rb/
         | 
| 1068 | 
            -
                  err_re = "" if $-w.nil?
         | 
| 1069 | 
            -
             | 
| 1070 | 
            -
                  assert_output "", err_re do
         | 
| 1071 | 
            -
                    @tc.assert_equal nil, nil
         | 
| 1072 | 
            -
                  end
         | 
| 1141 | 
            +
                assert_output "", /DEPRECATED/ do
         | 
| 1142 | 
            +
                  assert self.maglev? "maglev"
         | 
| 1073 1143 | 
             
                end
         | 
| 1074 1144 | 
             
              end
         | 
| 1075 1145 |  | 
| 1076 | 
            -
              def  | 
| 1077 | 
            -
                 | 
| 1078 | 
            -
             | 
| 1079 | 
            -
                end
         | 
| 1146 | 
            +
              def test_osx_eh
         | 
| 1147 | 
            +
                assert self.class.osx? "darwin"
         | 
| 1148 | 
            +
                assert self.osx? "darwin"
         | 
| 1080 1149 | 
             
              end
         | 
| 1081 1150 |  | 
| 1082 | 
            -
              def  | 
| 1083 | 
            -
                 | 
| 1151 | 
            +
              def test_windows_eh
         | 
| 1152 | 
            +
                assert self.class.windows? "mswin"
         | 
| 1153 | 
            +
                assert self.windows? "mswin"
         | 
| 1084 1154 | 
             
              end
         | 
| 1155 | 
            +
            end
         | 
| 1156 | 
            +
             | 
| 1157 | 
            +
            class TestMinitestUnitRecording < MetaMetaMetaTestCase
         | 
| 1158 | 
            +
              # do not parallelize this suite... it just can't handle it.
         | 
| 1159 | 
            +
             | 
| 1160 | 
            +
              def assert_run_record *expected, &block
         | 
| 1161 | 
            +
                @tu = Class.new FakeNamedTest, &block
         | 
| 1085 1162 |  | 
| 1086 | 
            -
             | 
| 1087 | 
            -
                @assertion_count = 2
         | 
| 1163 | 
            +
                run_tu_with_fresh_reporter
         | 
| 1088 1164 |  | 
| 1089 | 
            -
                 | 
| 1165 | 
            +
                recorded = first_reporter.results.map(&:failures).flatten.map { |f| f.error.class }
         | 
| 1090 1166 |  | 
| 1091 | 
            -
                 | 
| 1092 | 
            -
                  @tc.refute_in_delta 0, 1, 1
         | 
| 1093 | 
            -
                end
         | 
| 1167 | 
            +
                assert_equal expected, recorded
         | 
| 1094 1168 | 
             
              end
         | 
| 1095 1169 |  | 
| 1096 | 
            -
              def  | 
| 1097 | 
            -
                 | 
| 1098 | 
            -
                 | 
| 1099 | 
            -
             | 
| 1170 | 
            +
              def test_run_with_bogus_reporter
         | 
| 1171 | 
            +
                # https://github.com/seattlerb/minitest/issues/659
         | 
| 1172 | 
            +
                # TODO: remove test for minitest 6
         | 
| 1173 | 
            +
                @tu = Class.new FakeNamedTest do
         | 
| 1174 | 
            +
                  def test_method
         | 
| 1175 | 
            +
                    assert true
         | 
| 1176 | 
            +
                  end
         | 
| 1100 1177 | 
             
                end
         | 
| 1101 | 
            -
              end
         | 
| 1102 1178 |  | 
| 1103 | 
            -
             | 
| 1104 | 
            -
             | 
| 1179 | 
            +
                bogus_reporter = Class.new do      # doesn't subclass AbstractReporter
         | 
| 1180 | 
            +
                  def start; @success = false; end
         | 
| 1181 | 
            +
                  # def prerecord klass, name; end # doesn't define full API
         | 
| 1182 | 
            +
                  def record result; @success = true; end
         | 
| 1183 | 
            +
                  def report; end
         | 
| 1184 | 
            +
                  def passed?; end
         | 
| 1185 | 
            +
                  def results; end
         | 
| 1186 | 
            +
                  def success?; @success; end
         | 
| 1187 | 
            +
                end.new
         | 
| 1188 | 
            +
             | 
| 1189 | 
            +
                self.reporter = Minitest::CompositeReporter.new
         | 
| 1190 | 
            +
                reporter << bogus_reporter
         | 
| 1105 1191 |  | 
| 1106 | 
            -
                 | 
| 1107 | 
            -
                @tc.assert_in_epsilon 9991, 10_000
         | 
| 1108 | 
            -
                @tc.assert_in_epsilon 1.0, 1.001
         | 
| 1109 | 
            -
                @tc.assert_in_epsilon 1.001, 1.0
         | 
| 1192 | 
            +
                Minitest::Runnable.runnables.delete @tu
         | 
| 1110 1193 |  | 
| 1111 | 
            -
                @ | 
| 1112 | 
            -
                @tc.assert_in_epsilon 9999.1, 10_000, 0.0001
         | 
| 1113 | 
            -
                @tc.assert_in_epsilon 1.0, 1.0001, 0.0001
         | 
| 1114 | 
            -
                @tc.assert_in_epsilon 1.0001, 1.0, 0.0001
         | 
| 1194 | 
            +
                @tu.run reporter, {}
         | 
| 1115 1195 |  | 
| 1116 | 
            -
                 | 
| 1117 | 
            -
                @tc.assert_in_epsilon(-10_000, -9991)
         | 
| 1118 | 
            -
              end
         | 
| 1119 | 
            -
             | 
| 1120 | 
            -
              def test_epsilon_consistency
         | 
| 1121 | 
            -
                @assertion_count = 2
         | 
| 1122 | 
            -
             | 
| 1123 | 
            -
                @tc.assert_in_epsilon 1.0, 1.001
         | 
| 1124 | 
            -
             | 
| 1125 | 
            -
                msg = "Expected |1.0 - 1.001| (0.000999xxx) to not be <= 0.001."
         | 
| 1126 | 
            -
                assert_triggered msg do
         | 
| 1127 | 
            -
                  @tc.refute_in_epsilon 1.0, 1.001
         | 
| 1128 | 
            -
                end
         | 
| 1129 | 
            -
              end
         | 
| 1130 | 
            -
             | 
| 1131 | 
            -
              def test_assert_in_epsilon_triggered
         | 
| 1132 | 
            -
                assert_triggered "Expected |10000 - 9990| (10) to be <= 9.99." do
         | 
| 1133 | 
            -
                  @tc.assert_in_epsilon 10_000, 9990
         | 
| 1134 | 
            -
                end
         | 
| 1135 | 
            -
              end
         | 
| 1136 | 
            -
             | 
| 1137 | 
            -
              def test_assert_in_epsilon_triggered_negative_case
         | 
| 1138 | 
            -
                x = (RUBY18 and not maglev?) ? "0.1" : "0.100000xxx"
         | 
| 1139 | 
            -
                y = maglev? ? "0.100000xxx" : "0.1"
         | 
| 1140 | 
            -
                assert_triggered "Expected |-1.1 - -1| (#{x}) to be <= #{y}." do
         | 
| 1141 | 
            -
                  @tc.assert_in_epsilon(-1.1, -1, 0.1)
         | 
| 1142 | 
            -
                end
         | 
| 1143 | 
            -
              end
         | 
| 1144 | 
            -
             | 
| 1145 | 
            -
              def test_assert_includes
         | 
| 1146 | 
            -
                @assertion_count = 2
         | 
| 1147 | 
            -
             | 
| 1148 | 
            -
                @tc.assert_includes [true], true
         | 
| 1149 | 
            -
              end
         | 
| 1150 | 
            -
             | 
| 1151 | 
            -
              def test_assert_includes_triggered
         | 
| 1152 | 
            -
                @assertion_count = 3
         | 
| 1153 | 
            -
             | 
| 1154 | 
            -
                e = @tc.assert_raises Minitest::Assertion do
         | 
| 1155 | 
            -
                  @tc.assert_includes [true], false
         | 
| 1156 | 
            -
                end
         | 
| 1157 | 
            -
             | 
| 1158 | 
            -
                expected = "Expected [true] to include false."
         | 
| 1159 | 
            -
                assert_equal expected, e.message
         | 
| 1160 | 
            -
              end
         | 
| 1161 | 
            -
             | 
| 1162 | 
            -
              def test_assert_instance_of
         | 
| 1163 | 
            -
                @tc.assert_instance_of String, "blah"
         | 
| 1164 | 
            -
              end
         | 
| 1165 | 
            -
             | 
| 1166 | 
            -
              def test_assert_instance_of_triggered
         | 
| 1167 | 
            -
                assert_triggered 'Expected "blah" to be an instance of Array, not String.' do
         | 
| 1168 | 
            -
                  @tc.assert_instance_of Array, "blah"
         | 
| 1169 | 
            -
                end
         | 
| 1170 | 
            -
              end
         | 
| 1171 | 
            -
             | 
| 1172 | 
            -
              def test_assert_kind_of
         | 
| 1173 | 
            -
                @tc.assert_kind_of String, "blah"
         | 
| 1174 | 
            -
              end
         | 
| 1175 | 
            -
             | 
| 1176 | 
            -
              def test_assert_kind_of_triggered
         | 
| 1177 | 
            -
                assert_triggered 'Expected "blah" to be a kind of Array, not String.' do
         | 
| 1178 | 
            -
                  @tc.assert_kind_of Array, "blah"
         | 
| 1179 | 
            -
                end
         | 
| 1180 | 
            -
              end
         | 
| 1181 | 
            -
             | 
| 1182 | 
            -
              def test_assert_match
         | 
| 1183 | 
            -
                @assertion_count = 2
         | 
| 1184 | 
            -
                @tc.assert_match(/\w+/, "blah blah blah")
         | 
| 1185 | 
            -
              end
         | 
| 1186 | 
            -
             | 
| 1187 | 
            -
              def test_assert_match_matcher_object
         | 
| 1188 | 
            -
                @assertion_count = 2
         | 
| 1189 | 
            -
             | 
| 1190 | 
            -
                pattern = Object.new
         | 
| 1191 | 
            -
                def pattern.=~ _; true end
         | 
| 1192 | 
            -
             | 
| 1193 | 
            -
                @tc.assert_match pattern, 5
         | 
| 1194 | 
            -
              end
         | 
| 1195 | 
            -
             | 
| 1196 | 
            -
              def test_assert_match_matchee_to_str
         | 
| 1197 | 
            -
                @assertion_count = 2
         | 
| 1198 | 
            -
             | 
| 1199 | 
            -
                obj = Object.new
         | 
| 1200 | 
            -
                def obj.to_str; "blah" end
         | 
| 1201 | 
            -
             | 
| 1202 | 
            -
                @tc.assert_match "blah", obj
         | 
| 1203 | 
            -
              end
         | 
| 1204 | 
            -
             | 
| 1205 | 
            -
              def test_assert_match_object_triggered
         | 
| 1206 | 
            -
                @assertion_count = 2
         | 
| 1207 | 
            -
             | 
| 1208 | 
            -
                pattern = Object.new
         | 
| 1209 | 
            -
                def pattern.=~ _; false end
         | 
| 1210 | 
            -
                def pattern.inspect; "[Object]" end
         | 
| 1211 | 
            -
             | 
| 1212 | 
            -
                assert_triggered "Expected [Object] to match 5." do
         | 
| 1213 | 
            -
                  @tc.assert_match pattern, 5
         | 
| 1214 | 
            -
                end
         | 
| 1215 | 
            -
              end
         | 
| 1216 | 
            -
             | 
| 1217 | 
            -
              def test_assert_match_triggered
         | 
| 1218 | 
            -
                @assertion_count = 2
         | 
| 1219 | 
            -
                assert_triggered 'Expected /\d+/ to match "blah blah blah".' do
         | 
| 1220 | 
            -
                  @tc.assert_match(/\d+/, "blah blah blah")
         | 
| 1221 | 
            -
                end
         | 
| 1222 | 
            -
              end
         | 
| 1223 | 
            -
             | 
| 1224 | 
            -
              def test_assert_nil
         | 
| 1225 | 
            -
                @tc.assert_nil nil
         | 
| 1226 | 
            -
              end
         | 
| 1227 | 
            -
             | 
| 1228 | 
            -
              def test_assert_nil_triggered
         | 
| 1229 | 
            -
                assert_triggered "Expected 42 to be nil." do
         | 
| 1230 | 
            -
                  @tc.assert_nil 42
         | 
| 1231 | 
            -
                end
         | 
| 1232 | 
            -
              end
         | 
| 1233 | 
            -
             | 
| 1234 | 
            -
              def test_assert_operator
         | 
| 1235 | 
            -
                @tc.assert_operator 2, :>, 1
         | 
| 1236 | 
            -
              end
         | 
| 1237 | 
            -
             | 
| 1238 | 
            -
              def test_assert_operator_bad_object
         | 
| 1239 | 
            -
                bad = Object.new
         | 
| 1240 | 
            -
                def bad.== _; true end
         | 
| 1241 | 
            -
             | 
| 1242 | 
            -
                @tc.assert_operator bad, :equal?, bad
         | 
| 1243 | 
            -
              end
         | 
| 1244 | 
            -
             | 
| 1245 | 
            -
              def test_assert_operator_triggered
         | 
| 1246 | 
            -
                assert_triggered "Expected 2 to be < 1." do
         | 
| 1247 | 
            -
                  @tc.assert_operator 2, :<, 1
         | 
| 1248 | 
            -
                end
         | 
| 1249 | 
            -
              end
         | 
| 1250 | 
            -
             | 
| 1251 | 
            -
              def test_assert_output_both
         | 
| 1252 | 
            -
                @assertion_count = 2
         | 
| 1253 | 
            -
             | 
| 1254 | 
            -
                @tc.assert_output "yay", "blah" do
         | 
| 1255 | 
            -
                  print "yay"
         | 
| 1256 | 
            -
                  $stderr.print "blah"
         | 
| 1257 | 
            -
                end
         | 
| 1258 | 
            -
              end
         | 
| 1259 | 
            -
             | 
| 1260 | 
            -
              def test_assert_output_both_regexps
         | 
| 1261 | 
            -
                @assertion_count = 4
         | 
| 1262 | 
            -
             | 
| 1263 | 
            -
                @tc.assert_output(/y.y/, /bl.h/) do
         | 
| 1264 | 
            -
                  print "yay"
         | 
| 1265 | 
            -
                  $stderr.print "blah"
         | 
| 1266 | 
            -
                end
         | 
| 1267 | 
            -
              end
         | 
| 1268 | 
            -
             | 
| 1269 | 
            -
              def test_assert_output_err
         | 
| 1270 | 
            -
                @tc.assert_output nil, "blah" do
         | 
| 1271 | 
            -
                  $stderr.print "blah"
         | 
| 1272 | 
            -
                end
         | 
| 1273 | 
            -
              end
         | 
| 1274 | 
            -
             | 
| 1275 | 
            -
              def test_assert_output_neither
         | 
| 1276 | 
            -
                @assertion_count = 0
         | 
| 1277 | 
            -
             | 
| 1278 | 
            -
                @tc.assert_output do
         | 
| 1279 | 
            -
                  # do nothing
         | 
| 1280 | 
            -
                end
         | 
| 1281 | 
            -
              end
         | 
| 1282 | 
            -
             | 
| 1283 | 
            -
              def test_assert_output_out
         | 
| 1284 | 
            -
                @tc.assert_output "blah" do
         | 
| 1285 | 
            -
                  print "blah"
         | 
| 1286 | 
            -
                end
         | 
| 1287 | 
            -
              end
         | 
| 1288 | 
            -
             | 
| 1289 | 
            -
              def test_assert_output_triggered_both
         | 
| 1290 | 
            -
                assert_triggered util_msg("blah", "blah blah", "In stderr") do
         | 
| 1291 | 
            -
                  @tc.assert_output "yay", "blah" do
         | 
| 1292 | 
            -
                    print "boo"
         | 
| 1293 | 
            -
                    $stderr.print "blah blah"
         | 
| 1294 | 
            -
                  end
         | 
| 1295 | 
            -
                end
         | 
| 1296 | 
            -
              end
         | 
| 1297 | 
            -
             | 
| 1298 | 
            -
              def test_assert_output_triggered_err
         | 
| 1299 | 
            -
                assert_triggered util_msg("blah", "blah blah", "In stderr") do
         | 
| 1300 | 
            -
                  @tc.assert_output nil, "blah" do
         | 
| 1301 | 
            -
                    $stderr.print "blah blah"
         | 
| 1302 | 
            -
                  end
         | 
| 1303 | 
            -
                end
         | 
| 1304 | 
            -
              end
         | 
| 1305 | 
            -
             | 
| 1306 | 
            -
              def test_assert_output_triggered_out
         | 
| 1307 | 
            -
                assert_triggered util_msg("blah", "blah blah", "In stdout") do
         | 
| 1308 | 
            -
                  @tc.assert_output "blah" do
         | 
| 1309 | 
            -
                    print "blah blah"
         | 
| 1310 | 
            -
                  end
         | 
| 1311 | 
            -
                end
         | 
| 1312 | 
            -
              end
         | 
| 1313 | 
            -
             | 
| 1314 | 
            -
              def test_assert_predicate
         | 
| 1315 | 
            -
                @tc.assert_predicate "", :empty?
         | 
| 1316 | 
            -
              end
         | 
| 1317 | 
            -
             | 
| 1318 | 
            -
              def test_assert_predicate_triggered
         | 
| 1319 | 
            -
                assert_triggered 'Expected "blah" to be empty?.' do
         | 
| 1320 | 
            -
                  @tc.assert_predicate "blah", :empty?
         | 
| 1321 | 
            -
                end
         | 
| 1322 | 
            -
              end
         | 
| 1323 | 
            -
             | 
| 1324 | 
            -
              def test_assert_raises
         | 
| 1325 | 
            -
                @tc.assert_raises RuntimeError do
         | 
| 1326 | 
            -
                  raise "blah"
         | 
| 1327 | 
            -
                end
         | 
| 1328 | 
            -
              end
         | 
| 1329 | 
            -
             | 
| 1330 | 
            -
              def test_assert_raises_default
         | 
| 1331 | 
            -
                @tc.assert_raises do
         | 
| 1332 | 
            -
                  raise StandardError, "blah"
         | 
| 1333 | 
            -
                end
         | 
| 1334 | 
            -
              end
         | 
| 1335 | 
            -
             | 
| 1336 | 
            -
              def test_assert_raises_default_triggered
         | 
| 1337 | 
            -
                e = assert_raises Minitest::Assertion do
         | 
| 1338 | 
            -
                  @tc.assert_raises do
         | 
| 1339 | 
            -
                    raise SomeError, "blah"
         | 
| 1340 | 
            -
                  end
         | 
| 1341 | 
            -
                end
         | 
| 1342 | 
            -
             | 
| 1343 | 
            -
                expected = clean <<-EOM.chomp
         | 
| 1344 | 
            -
                  [StandardError] exception expected, not
         | 
| 1345 | 
            -
                  Class: <SomeError>
         | 
| 1346 | 
            -
                  Message: <\"blah\">
         | 
| 1347 | 
            -
                  ---Backtrace---
         | 
| 1348 | 
            -
                  FILE:LINE:in \`test_assert_raises_default_triggered\'
         | 
| 1349 | 
            -
                  ---------------
         | 
| 1350 | 
            -
                EOM
         | 
| 1351 | 
            -
             | 
| 1352 | 
            -
                actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
         | 
| 1353 | 
            -
                actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
         | 
| 1354 | 
            -
             | 
| 1355 | 
            -
                assert_equal expected, actual
         | 
| 1356 | 
            -
              end
         | 
| 1357 | 
            -
             | 
| 1358 | 
            -
              def test_assert_raises_module
         | 
| 1359 | 
            -
                @tc.assert_raises MyModule do
         | 
| 1360 | 
            -
                  raise AnError
         | 
| 1361 | 
            -
                end
         | 
| 1362 | 
            -
              end
         | 
| 1363 | 
            -
             | 
| 1364 | 
            -
              ##
         | 
| 1365 | 
            -
              # *sigh* This is quite an odd scenario, but it is from real (albeit
         | 
| 1366 | 
            -
              # ugly) test code in ruby-core:
         | 
| 1367 | 
            -
              #
         | 
| 1368 | 
            -
              # http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29259
         | 
| 1369 | 
            -
             | 
| 1370 | 
            -
              def test_assert_raises_skip
         | 
| 1371 | 
            -
                @assertion_count = 0
         | 
| 1372 | 
            -
             | 
| 1373 | 
            -
                assert_triggered "skipped", Minitest::Skip do
         | 
| 1374 | 
            -
                  @tc.assert_raises ArgumentError do
         | 
| 1375 | 
            -
                    begin
         | 
| 1376 | 
            -
                      raise "blah"
         | 
| 1377 | 
            -
                    rescue
         | 
| 1378 | 
            -
                      skip "skipped"
         | 
| 1379 | 
            -
                    end
         | 
| 1380 | 
            -
                  end
         | 
| 1381 | 
            -
                end
         | 
| 1382 | 
            -
              end
         | 
| 1383 | 
            -
             | 
| 1384 | 
            -
              def test_assert_raises_triggered_different
         | 
| 1385 | 
            -
                e = assert_raises Minitest::Assertion do
         | 
| 1386 | 
            -
                  @tc.assert_raises RuntimeError do
         | 
| 1387 | 
            -
                    raise SyntaxError, "icky"
         | 
| 1388 | 
            -
                  end
         | 
| 1389 | 
            -
                end
         | 
| 1390 | 
            -
             | 
| 1391 | 
            -
                expected = clean <<-EOM.chomp
         | 
| 1392 | 
            -
                  [RuntimeError] exception expected, not
         | 
| 1393 | 
            -
                  Class: <SyntaxError>
         | 
| 1394 | 
            -
                  Message: <\"icky\">
         | 
| 1395 | 
            -
                  ---Backtrace---
         | 
| 1396 | 
            -
                  FILE:LINE:in \`test_assert_raises_triggered_different\'
         | 
| 1397 | 
            -
                  ---------------
         | 
| 1398 | 
            -
                EOM
         | 
| 1399 | 
            -
             | 
| 1400 | 
            -
                actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
         | 
| 1401 | 
            -
                actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
         | 
| 1402 | 
            -
             | 
| 1403 | 
            -
                assert_equal expected, actual
         | 
| 1404 | 
            -
              end
         | 
| 1405 | 
            -
             | 
| 1406 | 
            -
              def test_assert_raises_triggered_different_msg
         | 
| 1407 | 
            -
                e = assert_raises Minitest::Assertion do
         | 
| 1408 | 
            -
                  @tc.assert_raises RuntimeError, "XXX" do
         | 
| 1409 | 
            -
                    raise SyntaxError, "icky"
         | 
| 1410 | 
            -
                  end
         | 
| 1411 | 
            -
                end
         | 
| 1412 | 
            -
             | 
| 1413 | 
            -
                expected = clean <<-EOM
         | 
| 1414 | 
            -
                  XXX.
         | 
| 1415 | 
            -
                  [RuntimeError] exception expected, not
         | 
| 1416 | 
            -
                  Class: <SyntaxError>
         | 
| 1417 | 
            -
                  Message: <\"icky\">
         | 
| 1418 | 
            -
                  ---Backtrace---
         | 
| 1419 | 
            -
                  FILE:LINE:in \`test_assert_raises_triggered_different_msg\'
         | 
| 1420 | 
            -
                  ---------------
         | 
| 1421 | 
            -
                EOM
         | 
| 1422 | 
            -
             | 
| 1423 | 
            -
                actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
         | 
| 1424 | 
            -
                actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
         | 
| 1425 | 
            -
             | 
| 1426 | 
            -
                assert_equal expected.chomp, actual
         | 
| 1427 | 
            -
              end
         | 
| 1428 | 
            -
             | 
| 1429 | 
            -
              def test_assert_raises_triggered_none
         | 
| 1430 | 
            -
                e = assert_raises Minitest::Assertion do
         | 
| 1431 | 
            -
                  @tc.assert_raises Minitest::Assertion do
         | 
| 1432 | 
            -
                    # do nothing
         | 
| 1433 | 
            -
                  end
         | 
| 1434 | 
            -
                end
         | 
| 1435 | 
            -
             | 
| 1436 | 
            -
                expected = "Minitest::Assertion expected but nothing was raised."
         | 
| 1437 | 
            -
             | 
| 1438 | 
            -
                assert_equal expected, e.message
         | 
| 1439 | 
            -
              end
         | 
| 1440 | 
            -
             | 
| 1441 | 
            -
              def test_assert_raises_triggered_none_msg
         | 
| 1442 | 
            -
                e = assert_raises Minitest::Assertion do
         | 
| 1443 | 
            -
                  @tc.assert_raises Minitest::Assertion, "XXX" do
         | 
| 1444 | 
            -
                    # do nothing
         | 
| 1445 | 
            -
                  end
         | 
| 1446 | 
            -
                end
         | 
| 1447 | 
            -
             | 
| 1448 | 
            -
                expected = "XXX.\nMinitest::Assertion expected but nothing was raised."
         | 
| 1449 | 
            -
             | 
| 1450 | 
            -
                assert_equal expected, e.message
         | 
| 1451 | 
            -
              end
         | 
| 1452 | 
            -
             | 
| 1453 | 
            -
              def test_assert_raises_subclass
         | 
| 1454 | 
            -
                @tc.assert_raises StandardError do
         | 
| 1455 | 
            -
                  raise AnError
         | 
| 1456 | 
            -
                end
         | 
| 1457 | 
            -
              end
         | 
| 1458 | 
            -
             | 
| 1459 | 
            -
              def test_assert_raises_subclass_triggered
         | 
| 1460 | 
            -
                e = assert_raises Minitest::Assertion do
         | 
| 1461 | 
            -
                  @tc.assert_raises SomeError do
         | 
| 1462 | 
            -
                    raise AnError, "some message"
         | 
| 1463 | 
            -
                  end
         | 
| 1464 | 
            -
                end
         | 
| 1465 | 
            -
             | 
| 1466 | 
            -
                expected = clean <<-EOM
         | 
| 1467 | 
            -
                  [SomeError] exception expected, not
         | 
| 1468 | 
            -
                  Class: <AnError>
         | 
| 1469 | 
            -
                  Message: <\"some message\">
         | 
| 1470 | 
            -
                  ---Backtrace---
         | 
| 1471 | 
            -
                  FILE:LINE:in \`test_assert_raises_subclass_triggered\'
         | 
| 1472 | 
            -
                  ---------------
         | 
| 1473 | 
            -
                EOM
         | 
| 1474 | 
            -
             | 
| 1475 | 
            -
                actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
         | 
| 1476 | 
            -
                actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
         | 
| 1477 | 
            -
             | 
| 1478 | 
            -
                assert_equal expected.chomp, actual
         | 
| 1479 | 
            -
              end
         | 
| 1480 | 
            -
             | 
| 1481 | 
            -
              def test_assert_raises_exit
         | 
| 1482 | 
            -
                @tc.assert_raises SystemExit do
         | 
| 1483 | 
            -
                  exit 1
         | 
| 1484 | 
            -
                end
         | 
| 1485 | 
            -
              end
         | 
| 1486 | 
            -
             | 
| 1487 | 
            -
              def test_assert_raises_signals
         | 
| 1488 | 
            -
                @tc.assert_raises SignalException do
         | 
| 1489 | 
            -
                  raise SignalException, :INT
         | 
| 1490 | 
            -
                end
         | 
| 1491 | 
            -
              end
         | 
| 1492 | 
            -
             | 
| 1493 | 
            -
              def test_assert_respond_to
         | 
| 1494 | 
            -
                @tc.assert_respond_to "blah", :empty?
         | 
| 1495 | 
            -
              end
         | 
| 1496 | 
            -
             | 
| 1497 | 
            -
              def test_assert_respond_to_triggered
         | 
| 1498 | 
            -
                assert_triggered 'Expected "blah" (String) to respond to #rawr!.' do
         | 
| 1499 | 
            -
                  @tc.assert_respond_to "blah", :rawr!
         | 
| 1500 | 
            -
                end
         | 
| 1501 | 
            -
              end
         | 
| 1502 | 
            -
             | 
| 1503 | 
            -
              def test_assert_same
         | 
| 1504 | 
            -
                @assertion_count = 3
         | 
| 1505 | 
            -
             | 
| 1506 | 
            -
                o = "blah"
         | 
| 1507 | 
            -
                @tc.assert_same 1, 1
         | 
| 1508 | 
            -
                @tc.assert_same :blah, :blah
         | 
| 1509 | 
            -
                @tc.assert_same o, o
         | 
| 1510 | 
            -
              end
         | 
| 1511 | 
            -
             | 
| 1512 | 
            -
              def test_assert_same_triggered
         | 
| 1513 | 
            -
                @assertion_count = 2
         | 
| 1514 | 
            -
             | 
| 1515 | 
            -
                assert_triggered "Expected 2 (oid=N) to be the same as 1 (oid=N)." do
         | 
| 1516 | 
            -
                  @tc.assert_same 1, 2
         | 
| 1517 | 
            -
                end
         | 
| 1518 | 
            -
             | 
| 1519 | 
            -
                s1 = "blah"
         | 
| 1520 | 
            -
                s2 = "blah"
         | 
| 1521 | 
            -
             | 
| 1522 | 
            -
                assert_triggered 'Expected "blah" (oid=N) to be the same as "blah" (oid=N).' do
         | 
| 1523 | 
            -
                  @tc.assert_same s1, s2
         | 
| 1524 | 
            -
                end
         | 
| 1525 | 
            -
              end
         | 
| 1526 | 
            -
             | 
| 1527 | 
            -
              def assert_deprecated name
         | 
| 1528 | 
            -
                dep = /DEPRECATED: #{name}. From #{__FILE__}:\d+(?::.*)?/
         | 
| 1529 | 
            -
                dep = "" if $-w.nil?
         | 
| 1530 | 
            -
             | 
| 1531 | 
            -
                assert_output nil, dep do
         | 
| 1532 | 
            -
                  yield
         | 
| 1533 | 
            -
                end
         | 
| 1534 | 
            -
              end
         | 
| 1535 | 
            -
             | 
| 1536 | 
            -
              def test_assert_send
         | 
| 1537 | 
            -
                assert_deprecated :assert_send do
         | 
| 1538 | 
            -
                  @tc.assert_send [1, :<, 2]
         | 
| 1539 | 
            -
                end
         | 
| 1540 | 
            -
              end
         | 
| 1541 | 
            -
             | 
| 1542 | 
            -
              def test_assert_send_bad
         | 
| 1543 | 
            -
                assert_deprecated :assert_send do
         | 
| 1544 | 
            -
                  assert_triggered "Expected 1.>(*[2]) to return true." do
         | 
| 1545 | 
            -
                    @tc.assert_send [1, :>, 2]
         | 
| 1546 | 
            -
                  end
         | 
| 1547 | 
            -
                end
         | 
| 1548 | 
            -
              end
         | 
| 1549 | 
            -
             | 
| 1550 | 
            -
              def test_assert_silent
         | 
| 1551 | 
            -
                @assertion_count = 2
         | 
| 1552 | 
            -
             | 
| 1553 | 
            -
                @tc.assert_silent do
         | 
| 1554 | 
            -
                  # do nothing
         | 
| 1555 | 
            -
                end
         | 
| 1556 | 
            -
              end
         | 
| 1557 | 
            -
             | 
| 1558 | 
            -
              def test_assert_silent_triggered_err
         | 
| 1559 | 
            -
                assert_triggered util_msg("", "blah blah", "In stderr") do
         | 
| 1560 | 
            -
                  @tc.assert_silent do
         | 
| 1561 | 
            -
                    $stderr.print "blah blah"
         | 
| 1562 | 
            -
                  end
         | 
| 1563 | 
            -
                end
         | 
| 1564 | 
            -
              end
         | 
| 1565 | 
            -
             | 
| 1566 | 
            -
              def test_assert_silent_triggered_out
         | 
| 1567 | 
            -
                @assertion_count = 2
         | 
| 1568 | 
            -
             | 
| 1569 | 
            -
                assert_triggered util_msg("", "blah blah", "In stdout") do
         | 
| 1570 | 
            -
                  @tc.assert_silent do
         | 
| 1571 | 
            -
                    print "blah blah"
         | 
| 1572 | 
            -
                  end
         | 
| 1573 | 
            -
                end
         | 
| 1574 | 
            -
              end
         | 
| 1575 | 
            -
             | 
| 1576 | 
            -
              def test_assert_throws
         | 
| 1577 | 
            -
                @tc.assert_throws :blah do
         | 
| 1578 | 
            -
                  throw :blah
         | 
| 1579 | 
            -
                end
         | 
| 1580 | 
            -
              end
         | 
| 1581 | 
            -
             | 
| 1582 | 
            -
              def test_assert_throws_name_error
         | 
| 1583 | 
            -
                @tc.assert_raises NameError do
         | 
| 1584 | 
            -
                  @tc.assert_throws :blah do
         | 
| 1585 | 
            -
                    raise NameError
         | 
| 1586 | 
            -
                  end
         | 
| 1587 | 
            -
                end
         | 
| 1588 | 
            -
              end
         | 
| 1589 | 
            -
             | 
| 1590 | 
            -
              def test_assert_throws_argument_exception
         | 
| 1591 | 
            -
                @tc.assert_raises ArgumentError do
         | 
| 1592 | 
            -
                  @tc.assert_throws :blah do
         | 
| 1593 | 
            -
                    raise ArgumentError
         | 
| 1594 | 
            -
                  end
         | 
| 1595 | 
            -
                end
         | 
| 1596 | 
            -
              end
         | 
| 1597 | 
            -
             | 
| 1598 | 
            -
              def test_assert_throws_different
         | 
| 1599 | 
            -
                assert_triggered "Expected :blah to have been thrown, not :not_blah." do
         | 
| 1600 | 
            -
                  @tc.assert_throws :blah do
         | 
| 1601 | 
            -
                    throw :not_blah
         | 
| 1602 | 
            -
                  end
         | 
| 1603 | 
            -
                end
         | 
| 1604 | 
            -
              end
         | 
| 1605 | 
            -
             | 
| 1606 | 
            -
              def test_assert_throws_unthrown
         | 
| 1607 | 
            -
                assert_triggered "Expected :blah to have been thrown." do
         | 
| 1608 | 
            -
                  @tc.assert_throws :blah do
         | 
| 1609 | 
            -
                    # do nothing
         | 
| 1610 | 
            -
                  end
         | 
| 1611 | 
            -
                end
         | 
| 1612 | 
            -
              end
         | 
| 1613 | 
            -
             | 
| 1614 | 
            -
              def test_capture_io
         | 
| 1615 | 
            -
                @assertion_count = 0
         | 
| 1616 | 
            -
             | 
| 1617 | 
            -
                non_verbose do
         | 
| 1618 | 
            -
                  out, err = capture_io do
         | 
| 1619 | 
            -
                    puts "hi"
         | 
| 1620 | 
            -
                    $stderr.puts "bye!"
         | 
| 1621 | 
            -
                  end
         | 
| 1622 | 
            -
             | 
| 1623 | 
            -
                  assert_equal "hi\n", out
         | 
| 1624 | 
            -
                  assert_equal "bye!\n", err
         | 
| 1625 | 
            -
                end
         | 
| 1626 | 
            -
              end
         | 
| 1627 | 
            -
             | 
| 1628 | 
            -
              def test_capture_subprocess_io
         | 
| 1629 | 
            -
                @assertion_count = 0
         | 
| 1630 | 
            -
             | 
| 1631 | 
            -
                non_verbose do
         | 
| 1632 | 
            -
                  out, err = capture_subprocess_io do
         | 
| 1633 | 
            -
                    system("echo hi")
         | 
| 1634 | 
            -
                    system("echo bye! 1>&2")
         | 
| 1635 | 
            -
                  end
         | 
| 1636 | 
            -
             | 
| 1637 | 
            -
                  assert_equal "hi\n", out
         | 
| 1638 | 
            -
                  assert_equal "bye!", err.strip
         | 
| 1639 | 
            -
                end
         | 
| 1640 | 
            -
              end
         | 
| 1641 | 
            -
             | 
| 1642 | 
            -
              def test_class_asserts_match_refutes
         | 
| 1643 | 
            -
                @assertion_count = 0
         | 
| 1644 | 
            -
             | 
| 1645 | 
            -
                methods = Minitest::Assertions.public_instance_methods
         | 
| 1646 | 
            -
                methods.map!(&:to_s) if Symbol === methods.first
         | 
| 1647 | 
            -
             | 
| 1648 | 
            -
                # These don't have corresponding refutes _on purpose_. They're
         | 
| 1649 | 
            -
                # useless and will never be added, so don't bother.
         | 
| 1650 | 
            -
                ignores = %w[assert_output assert_raises assert_send
         | 
| 1651 | 
            -
                             assert_silent assert_throws assert_mock]
         | 
| 1652 | 
            -
             | 
| 1653 | 
            -
                # These are test/unit methods. I'm not actually sure why they're still here
         | 
| 1654 | 
            -
                ignores += %w[assert_no_match assert_not_equal assert_not_nil
         | 
| 1655 | 
            -
                              assert_not_same assert_nothing_raised
         | 
| 1656 | 
            -
                              assert_nothing_thrown assert_raise]
         | 
| 1657 | 
            -
             | 
| 1658 | 
            -
                asserts = methods.grep(/^assert/).sort - ignores
         | 
| 1659 | 
            -
                refutes = methods.grep(/^refute/).sort - ignores
         | 
| 1660 | 
            -
             | 
| 1661 | 
            -
                assert_empty refutes.map { |n| n.sub(/^refute/, "assert") } - asserts
         | 
| 1662 | 
            -
                assert_empty asserts.map { |n| n.sub(/^assert/, "refute") } - refutes
         | 
| 1663 | 
            -
              end
         | 
| 1664 | 
            -
             | 
| 1665 | 
            -
              def test_flunk
         | 
| 1666 | 
            -
                assert_triggered "Epic Fail!" do
         | 
| 1667 | 
            -
                  @tc.flunk
         | 
| 1668 | 
            -
                end
         | 
| 1669 | 
            -
              end
         | 
| 1670 | 
            -
             | 
| 1671 | 
            -
              def test_flunk_message
         | 
| 1672 | 
            -
                assert_triggered @zomg do
         | 
| 1673 | 
            -
                  @tc.flunk @zomg
         | 
| 1674 | 
            -
                end
         | 
| 1675 | 
            -
              end
         | 
| 1676 | 
            -
             | 
| 1677 | 
            -
              def test_message
         | 
| 1678 | 
            -
                @assertion_count = 0
         | 
| 1679 | 
            -
             | 
| 1680 | 
            -
                assert_equal "blah2.",         @tc.message          { "blah2" }.call
         | 
| 1681 | 
            -
                assert_equal "blah2.",         @tc.message("")      { "blah2" }.call
         | 
| 1682 | 
            -
                assert_equal "blah1.\nblah2.", @tc.message(:blah1)  { "blah2" }.call
         | 
| 1683 | 
            -
                assert_equal "blah1.\nblah2.", @tc.message("blah1") { "blah2" }.call
         | 
| 1684 | 
            -
             | 
| 1685 | 
            -
                message = proc { "blah1" }
         | 
| 1686 | 
            -
                assert_equal "blah1.\nblah2.", @tc.message(message) { "blah2" }.call
         | 
| 1687 | 
            -
             | 
| 1688 | 
            -
                message = @tc.message { "blah1" }
         | 
| 1689 | 
            -
                assert_equal "blah1.\nblah2.", @tc.message(message) { "blah2" }.call
         | 
| 1690 | 
            -
              end
         | 
| 1691 | 
            -
             | 
| 1692 | 
            -
              def test_message_message
         | 
| 1693 | 
            -
                assert_triggered "whoops.\nExpected: 1\n  Actual: 2" do
         | 
| 1694 | 
            -
                  @tc.assert_equal 1, 2, message { "whoops" }
         | 
| 1695 | 
            -
                end
         | 
| 1696 | 
            -
              end
         | 
| 1697 | 
            -
             | 
| 1698 | 
            -
              def test_message_lambda
         | 
| 1699 | 
            -
                assert_triggered "whoops.\nExpected: 1\n  Actual: 2" do
         | 
| 1700 | 
            -
                  @tc.assert_equal 1, 2, lambda { "whoops" }
         | 
| 1701 | 
            -
                end
         | 
| 1702 | 
            -
              end
         | 
| 1703 | 
            -
             | 
| 1704 | 
            -
              def test_message_deferred
         | 
| 1705 | 
            -
                @assertion_count, var = 0, nil
         | 
| 1706 | 
            -
             | 
| 1707 | 
            -
                msg = message { var = "blah" }
         | 
| 1708 | 
            -
             | 
| 1709 | 
            -
                assert_nil var
         | 
| 1710 | 
            -
             | 
| 1711 | 
            -
                msg.call
         | 
| 1712 | 
            -
             | 
| 1713 | 
            -
                assert_equal "blah", var
         | 
| 1714 | 
            -
              end
         | 
| 1715 | 
            -
             | 
| 1716 | 
            -
              def test_pass
         | 
| 1717 | 
            -
                @tc.pass
         | 
| 1718 | 
            -
              end
         | 
| 1719 | 
            -
             | 
| 1720 | 
            -
              def test_prints
         | 
| 1721 | 
            -
                printer = Class.new { extend Minitest::Assertions }
         | 
| 1722 | 
            -
                @tc.assert_equal '"test"', printer.mu_pp(ImmutableString.new "test")
         | 
| 1723 | 
            -
              end
         | 
| 1724 | 
            -
             | 
| 1725 | 
            -
              def test_refute
         | 
| 1726 | 
            -
                @assertion_count = 2
         | 
| 1727 | 
            -
             | 
| 1728 | 
            -
                @tc.assert_equal false, @tc.refute(false), "returns false on success"
         | 
| 1729 | 
            -
              end
         | 
| 1730 | 
            -
             | 
| 1731 | 
            -
              def test_refute_empty
         | 
| 1732 | 
            -
                @assertion_count = 2
         | 
| 1733 | 
            -
             | 
| 1734 | 
            -
                @tc.refute_empty [1]
         | 
| 1735 | 
            -
              end
         | 
| 1736 | 
            -
             | 
| 1737 | 
            -
              def test_refute_empty_triggered
         | 
| 1738 | 
            -
                @assertion_count = 2
         | 
| 1739 | 
            -
             | 
| 1740 | 
            -
                assert_triggered "Expected [] to not be empty." do
         | 
| 1741 | 
            -
                  @tc.refute_empty []
         | 
| 1742 | 
            -
                end
         | 
| 1743 | 
            -
              end
         | 
| 1744 | 
            -
             | 
| 1745 | 
            -
              def test_refute_equal
         | 
| 1746 | 
            -
                @tc.refute_equal "blah", "yay"
         | 
| 1747 | 
            -
              end
         | 
| 1748 | 
            -
             | 
| 1749 | 
            -
              def test_refute_equal_triggered
         | 
| 1750 | 
            -
                assert_triggered 'Expected "blah" to not be equal to "blah".' do
         | 
| 1751 | 
            -
                  @tc.refute_equal "blah", "blah"
         | 
| 1752 | 
            -
                end
         | 
| 1753 | 
            -
              end
         | 
| 1754 | 
            -
             | 
| 1755 | 
            -
              def test_refute_in_delta
         | 
| 1756 | 
            -
                @tc.refute_in_delta 0.0, 1.0 / 1000, 0.000001
         | 
| 1757 | 
            -
              end
         | 
| 1758 | 
            -
             | 
| 1759 | 
            -
              def test_refute_in_delta_triggered
         | 
| 1760 | 
            -
                x = maglev? ? "0.100000xxx" : "0.1"
         | 
| 1761 | 
            -
                assert_triggered "Expected |0.0 - 0.001| (0.001) to not be <= #{x}." do
         | 
| 1762 | 
            -
                  @tc.refute_in_delta 0.0, 1.0 / 1000, 0.1
         | 
| 1763 | 
            -
                end
         | 
| 1764 | 
            -
              end
         | 
| 1765 | 
            -
             | 
| 1766 | 
            -
              def test_refute_in_epsilon
         | 
| 1767 | 
            -
                @tc.refute_in_epsilon 10_000, 9990-1
         | 
| 1768 | 
            -
              end
         | 
| 1769 | 
            -
             | 
| 1770 | 
            -
              def test_refute_in_epsilon_triggered
         | 
| 1771 | 
            -
                assert_triggered "Expected |10000 - 9990| (10) to not be <= 10.0." do
         | 
| 1772 | 
            -
                  @tc.refute_in_epsilon 10_000, 9990
         | 
| 1773 | 
            -
                  flunk
         | 
| 1774 | 
            -
                end
         | 
| 1775 | 
            -
              end
         | 
| 1776 | 
            -
             | 
| 1777 | 
            -
              def test_refute_includes
         | 
| 1778 | 
            -
                @assertion_count = 2
         | 
| 1779 | 
            -
             | 
| 1780 | 
            -
                @tc.refute_includes [true], false
         | 
| 1781 | 
            -
              end
         | 
| 1782 | 
            -
             | 
| 1783 | 
            -
              def test_refute_includes_triggered
         | 
| 1784 | 
            -
                @assertion_count = 3
         | 
| 1785 | 
            -
             | 
| 1786 | 
            -
                e = @tc.assert_raises Minitest::Assertion do
         | 
| 1787 | 
            -
                  @tc.refute_includes [true], true
         | 
| 1788 | 
            -
                end
         | 
| 1789 | 
            -
             | 
| 1790 | 
            -
                expected = "Expected [true] to not include true."
         | 
| 1791 | 
            -
                assert_equal expected, e.message
         | 
| 1792 | 
            -
              end
         | 
| 1793 | 
            -
             | 
| 1794 | 
            -
              def test_refute_instance_of
         | 
| 1795 | 
            -
                @tc.refute_instance_of Array, "blah"
         | 
| 1796 | 
            -
              end
         | 
| 1797 | 
            -
             | 
| 1798 | 
            -
              def test_refute_instance_of_triggered
         | 
| 1799 | 
            -
                assert_triggered 'Expected "blah" to not be an instance of String.' do
         | 
| 1800 | 
            -
                  @tc.refute_instance_of String, "blah"
         | 
| 1801 | 
            -
                end
         | 
| 1802 | 
            -
              end
         | 
| 1803 | 
            -
             | 
| 1804 | 
            -
              def test_refute_kind_of
         | 
| 1805 | 
            -
                @tc.refute_kind_of Array, "blah"
         | 
| 1806 | 
            -
              end
         | 
| 1807 | 
            -
             | 
| 1808 | 
            -
              def test_refute_kind_of_triggered
         | 
| 1809 | 
            -
                assert_triggered 'Expected "blah" to not be a kind of String.' do
         | 
| 1810 | 
            -
                  @tc.refute_kind_of String, "blah"
         | 
| 1811 | 
            -
                end
         | 
| 1812 | 
            -
              end
         | 
| 1813 | 
            -
             | 
| 1814 | 
            -
              def test_refute_match
         | 
| 1815 | 
            -
                @assertion_count = 2
         | 
| 1816 | 
            -
                @tc.refute_match(/\d+/, "blah blah blah")
         | 
| 1817 | 
            -
              end
         | 
| 1818 | 
            -
             | 
| 1819 | 
            -
              def test_refute_match_matcher_object
         | 
| 1820 | 
            -
                @assertion_count = 2
         | 
| 1821 | 
            -
                @tc.refute_match Object.new, 5 # default #=~ returns false
         | 
| 1822 | 
            -
              end
         | 
| 1823 | 
            -
             | 
| 1824 | 
            -
              def test_refute_match_object_triggered
         | 
| 1825 | 
            -
                @assertion_count = 2
         | 
| 1826 | 
            -
             | 
| 1827 | 
            -
                pattern = Object.new
         | 
| 1828 | 
            -
                def pattern.=~ _; true end
         | 
| 1829 | 
            -
                def pattern.inspect; "[Object]" end
         | 
| 1830 | 
            -
             | 
| 1831 | 
            -
                assert_triggered "Expected [Object] to not match 5." do
         | 
| 1832 | 
            -
                  @tc.refute_match pattern, 5
         | 
| 1833 | 
            -
                end
         | 
| 1834 | 
            -
              end
         | 
| 1835 | 
            -
             | 
| 1836 | 
            -
              def test_refute_match_triggered
         | 
| 1837 | 
            -
                @assertion_count = 2
         | 
| 1838 | 
            -
                assert_triggered 'Expected /\w+/ to not match "blah blah blah".' do
         | 
| 1839 | 
            -
                  @tc.refute_match(/\w+/, "blah blah blah")
         | 
| 1840 | 
            -
                end
         | 
| 1841 | 
            -
              end
         | 
| 1842 | 
            -
             | 
| 1843 | 
            -
              def test_refute_nil
         | 
| 1844 | 
            -
                @tc.refute_nil 42
         | 
| 1845 | 
            -
              end
         | 
| 1846 | 
            -
             | 
| 1847 | 
            -
              def test_refute_nil_triggered
         | 
| 1848 | 
            -
                assert_triggered "Expected nil to not be nil." do
         | 
| 1849 | 
            -
                  @tc.refute_nil nil
         | 
| 1850 | 
            -
                end
         | 
| 1851 | 
            -
              end
         | 
| 1852 | 
            -
             | 
| 1853 | 
            -
              def test_refute_predicate
         | 
| 1854 | 
            -
                @tc.refute_predicate "42", :empty?
         | 
| 1855 | 
            -
              end
         | 
| 1856 | 
            -
             | 
| 1857 | 
            -
              def test_refute_predicate_triggered
         | 
| 1858 | 
            -
                assert_triggered 'Expected "" to not be empty?.' do
         | 
| 1859 | 
            -
                  @tc.refute_predicate "", :empty?
         | 
| 1860 | 
            -
                end
         | 
| 1861 | 
            -
              end
         | 
| 1862 | 
            -
             | 
| 1863 | 
            -
              def test_refute_operator
         | 
| 1864 | 
            -
                @tc.refute_operator 2, :<, 1
         | 
| 1865 | 
            -
              end
         | 
| 1866 | 
            -
             | 
| 1867 | 
            -
              def test_refute_operator_bad_object
         | 
| 1868 | 
            -
                bad = Object.new
         | 
| 1869 | 
            -
                def bad.== _; true end
         | 
| 1870 | 
            -
             | 
| 1871 | 
            -
                @tc.refute_operator true, :equal?, bad
         | 
| 1872 | 
            -
              end
         | 
| 1873 | 
            -
             | 
| 1874 | 
            -
              def test_refute_operator_triggered
         | 
| 1875 | 
            -
                assert_triggered "Expected 2 to not be > 1." do
         | 
| 1876 | 
            -
                  @tc.refute_operator 2, :>, 1
         | 
| 1877 | 
            -
                end
         | 
| 1878 | 
            -
              end
         | 
| 1879 | 
            -
             | 
| 1880 | 
            -
              def test_refute_respond_to
         | 
| 1881 | 
            -
                @tc.refute_respond_to "blah", :rawr!
         | 
| 1882 | 
            -
              end
         | 
| 1883 | 
            -
             | 
| 1884 | 
            -
              def test_refute_respond_to_triggered
         | 
| 1885 | 
            -
                assert_triggered 'Expected "blah" to not respond to empty?.' do
         | 
| 1886 | 
            -
                  @tc.refute_respond_to "blah", :empty?
         | 
| 1887 | 
            -
                end
         | 
| 1888 | 
            -
              end
         | 
| 1889 | 
            -
             | 
| 1890 | 
            -
              def test_refute_same
         | 
| 1891 | 
            -
                @tc.refute_same 1, 2
         | 
| 1892 | 
            -
              end
         | 
| 1893 | 
            -
             | 
| 1894 | 
            -
              def test_refute_same_triggered
         | 
| 1895 | 
            -
                assert_triggered "Expected 1 (oid=N) to not be the same as 1 (oid=N)." do
         | 
| 1896 | 
            -
                  @tc.refute_same 1, 1
         | 
| 1897 | 
            -
                end
         | 
| 1898 | 
            -
              end
         | 
| 1899 | 
            -
             | 
| 1900 | 
            -
              def test_skip
         | 
| 1901 | 
            -
                @assertion_count = 0
         | 
| 1902 | 
            -
             | 
| 1903 | 
            -
                assert_triggered "haha!", Minitest::Skip do
         | 
| 1904 | 
            -
                  @tc.skip "haha!"
         | 
| 1905 | 
            -
                end
         | 
| 1906 | 
            -
              end
         | 
| 1907 | 
            -
             | 
| 1908 | 
            -
              def test_runnable_methods_random
         | 
| 1909 | 
            -
                @assertion_count = 0
         | 
| 1910 | 
            -
             | 
| 1911 | 
            -
                sample_test_case = Class.new FakeNamedTest do
         | 
| 1912 | 
            -
                  def self.test_order; :random; end
         | 
| 1913 | 
            -
                  def test_test1; assert "does not matter" end
         | 
| 1914 | 
            -
                  def test_test2; assert "does not matter" end
         | 
| 1915 | 
            -
                  def test_test3; assert "does not matter" end
         | 
| 1916 | 
            -
                end
         | 
| 1917 | 
            -
             | 
| 1918 | 
            -
                srand 42
         | 
| 1919 | 
            -
                expected = case
         | 
| 1920 | 
            -
                           when maglev? then
         | 
| 1921 | 
            -
                             %w[test_test2 test_test3 test_test1]
         | 
| 1922 | 
            -
                           else
         | 
| 1923 | 
            -
                             %w[test_test2 test_test1 test_test3]
         | 
| 1924 | 
            -
                           end
         | 
| 1925 | 
            -
                assert_equal expected, sample_test_case.runnable_methods
         | 
| 1926 | 
            -
              end
         | 
| 1927 | 
            -
             | 
| 1928 | 
            -
              def test_runnable_methods_sorted
         | 
| 1929 | 
            -
                @assertion_count = 0
         | 
| 1930 | 
            -
             | 
| 1931 | 
            -
                sample_test_case = Class.new FakeNamedTest do
         | 
| 1932 | 
            -
                  def self.test_order; :sorted end
         | 
| 1933 | 
            -
                  def test_test3; assert "does not matter" end
         | 
| 1934 | 
            -
                  def test_test2; assert "does not matter" end
         | 
| 1935 | 
            -
                  def test_test1; assert "does not matter" end
         | 
| 1936 | 
            -
                end
         | 
| 1937 | 
            -
             | 
| 1938 | 
            -
                expected = %w[test_test1 test_test2 test_test3]
         | 
| 1939 | 
            -
                assert_equal expected, sample_test_case.runnable_methods
         | 
| 1940 | 
            -
              end
         | 
| 1941 | 
            -
             | 
| 1942 | 
            -
              def test_i_suck_and_my_tests_are_order_dependent_bang_sets_test_order_alpha
         | 
| 1943 | 
            -
                @assertion_count = 0
         | 
| 1944 | 
            -
             | 
| 1945 | 
            -
                shitty_test_case = Class.new FakeNamedTest
         | 
| 1946 | 
            -
             | 
| 1947 | 
            -
                shitty_test_case.i_suck_and_my_tests_are_order_dependent!
         | 
| 1948 | 
            -
             | 
| 1949 | 
            -
                assert_equal :alpha, shitty_test_case.test_order
         | 
| 1950 | 
            -
              end
         | 
| 1951 | 
            -
             | 
| 1952 | 
            -
              def test_i_suck_and_my_tests_are_order_dependent_bang_does_not_warn
         | 
| 1953 | 
            -
                @assertion_count = 0
         | 
| 1954 | 
            -
             | 
| 1955 | 
            -
                shitty_test_case = Class.new FakeNamedTest
         | 
| 1956 | 
            -
             | 
| 1957 | 
            -
                def shitty_test_case.test_order; :lol end
         | 
| 1958 | 
            -
             | 
| 1959 | 
            -
                assert_silent do
         | 
| 1960 | 
            -
                  shitty_test_case.i_suck_and_my_tests_are_order_dependent!
         | 
| 1961 | 
            -
                end
         | 
| 1962 | 
            -
              end
         | 
| 1963 | 
            -
             | 
| 1964 | 
            -
              def assert_triggered expected, klass = Minitest::Assertion
         | 
| 1965 | 
            -
                e = assert_raises klass do
         | 
| 1966 | 
            -
                  yield
         | 
| 1967 | 
            -
                end
         | 
| 1968 | 
            -
             | 
| 1969 | 
            -
                msg = e.message.sub(/(---Backtrace---).*/m, '\1')
         | 
| 1970 | 
            -
                msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)")
         | 
| 1971 | 
            -
                msg.gsub!(/(\d\.\d{6})\d+/, '\1xxx') # normalize: ruby version, impl, platform
         | 
| 1972 | 
            -
             | 
| 1973 | 
            -
                assert_msg = Regexp === expected ? :assert_match : :assert_equal
         | 
| 1974 | 
            -
                self.send assert_msg, expected, msg
         | 
| 1975 | 
            -
              end
         | 
| 1976 | 
            -
             | 
| 1977 | 
            -
              def util_msg exp, act, msg = nil
         | 
| 1978 | 
            -
                s = "Expected: #{exp.inspect}\n  Actual: #{act.inspect}"
         | 
| 1979 | 
            -
                s = "#{msg}.\n#{s}" if msg
         | 
| 1980 | 
            -
                s
         | 
| 1981 | 
            -
              end
         | 
| 1982 | 
            -
             | 
| 1983 | 
            -
              def without_diff
         | 
| 1984 | 
            -
                old_diff = Minitest::Assertions.diff
         | 
| 1985 | 
            -
                Minitest::Assertions.diff = nil
         | 
| 1986 | 
            -
             | 
| 1987 | 
            -
                yield
         | 
| 1988 | 
            -
              ensure
         | 
| 1989 | 
            -
                Minitest::Assertions.diff = old_diff
         | 
| 1990 | 
            -
              end
         | 
| 1991 | 
            -
            end
         | 
| 1992 | 
            -
             | 
| 1993 | 
            -
            class TestMinitestGuard < Minitest::Test
         | 
| 1994 | 
            -
              parallelize_me!
         | 
| 1995 | 
            -
             | 
| 1996 | 
            -
              def test_mri_eh
         | 
| 1997 | 
            -
                assert self.class.mri? "ruby blah"
         | 
| 1998 | 
            -
                assert self.mri? "ruby blah"
         | 
| 1999 | 
            -
              end
         | 
| 2000 | 
            -
             | 
| 2001 | 
            -
              def test_jruby_eh
         | 
| 2002 | 
            -
                assert self.class.jruby? "java"
         | 
| 2003 | 
            -
                assert self.jruby? "java"
         | 
| 2004 | 
            -
              end
         | 
| 2005 | 
            -
             | 
| 2006 | 
            -
              def test_rubinius_eh
         | 
| 2007 | 
            -
                assert self.class.rubinius? "rbx"
         | 
| 2008 | 
            -
                assert self.rubinius? "rbx"
         | 
| 2009 | 
            -
              end
         | 
| 2010 | 
            -
             | 
| 2011 | 
            -
              def test_windows_eh
         | 
| 2012 | 
            -
                assert self.class.windows? "mswin"
         | 
| 2013 | 
            -
                assert self.windows? "mswin"
         | 
| 2014 | 
            -
              end
         | 
| 2015 | 
            -
            end
         | 
| 2016 | 
            -
             | 
| 2017 | 
            -
            class TestMinitestUnitRecording < MetaMetaMetaTestCase
         | 
| 2018 | 
            -
              # do not parallelize this suite... it just can't handle it.
         | 
| 2019 | 
            -
             | 
| 2020 | 
            -
              def assert_run_record *expected, &block
         | 
| 2021 | 
            -
                @tu = Class.new FakeNamedTest, &block
         | 
| 2022 | 
            -
             | 
| 2023 | 
            -
                run_tu_with_fresh_reporter
         | 
| 2024 | 
            -
             | 
| 2025 | 
            -
                recorded = first_reporter.results.map(&:failures).flatten.map { |f| f.error.class }
         | 
| 2026 | 
            -
             | 
| 2027 | 
            -
                assert_equal expected, recorded
         | 
| 2028 | 
            -
              end
         | 
| 2029 | 
            -
             | 
| 2030 | 
            -
              def test_run_with_bogus_reporter
         | 
| 2031 | 
            -
                # https://github.com/seattlerb/minitest/issues/659
         | 
| 2032 | 
            -
                # TODO: remove test for minitest 6
         | 
| 2033 | 
            -
                @tu = Class.new FakeNamedTest do
         | 
| 2034 | 
            -
                  def test_method
         | 
| 2035 | 
            -
                    assert true
         | 
| 2036 | 
            -
                  end
         | 
| 2037 | 
            -
                end
         | 
| 2038 | 
            -
             | 
| 2039 | 
            -
                bogus_reporter = Class.new do      # doesn't subclass AbstractReporter
         | 
| 2040 | 
            -
                  def start; @success = false; end
         | 
| 2041 | 
            -
                  # def prerecord klass, name; end # doesn't define full API
         | 
| 2042 | 
            -
                  def record result; @success = true; end
         | 
| 2043 | 
            -
                  def report; end
         | 
| 2044 | 
            -
                  def passed?; end
         | 
| 2045 | 
            -
                  def results; end
         | 
| 2046 | 
            -
                  def success?; @success; end
         | 
| 2047 | 
            -
                end.new
         | 
| 2048 | 
            -
             | 
| 2049 | 
            -
                self.reporter = Minitest::CompositeReporter.new
         | 
| 2050 | 
            -
                reporter << bogus_reporter
         | 
| 2051 | 
            -
             | 
| 2052 | 
            -
                Minitest::Runnable.runnables.delete @tu
         | 
| 2053 | 
            -
             | 
| 2054 | 
            -
                @tu.run reporter, {}
         | 
| 2055 | 
            -
             | 
| 2056 | 
            -
                assert_predicate bogus_reporter, :success?
         | 
| 1196 | 
            +
                assert_predicate bogus_reporter, :success?
         | 
| 2057 1197 | 
             
              end
         | 
| 2058 1198 |  | 
| 2059 1199 | 
             
              def test_record_passing
         | 
| @@ -2121,12 +1261,12 @@ class TestMinitestUnitRecording < MetaMetaMetaTestCase | |
| 2121 1261 | 
             
                  Error:
         | 
| 2122 1262 | 
             
                  FakeNamedTestXX#test_method:
         | 
| 2123 1263 | 
             
                  AnError: AnError
         | 
| 2124 | 
            -
                      FILE:LINE:in  | 
| 1264 | 
            +
                      FILE:LINE:in 'test_method'
         | 
| 2125 1265 |  | 
| 2126 1266 | 
             
                  Error:
         | 
| 2127 1267 | 
             
                  FakeNamedTestXX#test_method:
         | 
| 2128 1268 | 
             
                  RuntimeError: unhandled exception
         | 
| 2129 | 
            -
                      FILE:LINE:in  | 
| 1269 | 
            +
                      FILE:LINE:in 'teardown'
         | 
| 2130 1270 | 
             
                "
         | 
| 2131 1271 |  | 
| 2132 1272 | 
             
                assert_equal exp.strip, normalize_output(first_reporter.results.first.to_s).strip
         | 
| @@ -2140,3 +1280,96 @@ class TestMinitestUnitRecording < MetaMetaMetaTestCase | |
| 2140 1280 | 
             
                end
         | 
| 2141 1281 | 
             
              end
         | 
| 2142 1282 | 
             
            end
         | 
| 1283 | 
            +
             | 
| 1284 | 
            +
            class TestUnexpectedError < Minitest::Test
         | 
| 1285 | 
            +
              def assert_compress exp, input
         | 
| 1286 | 
            +
                e = Minitest::UnexpectedError.new RuntimeError.new
         | 
| 1287 | 
            +
             | 
| 1288 | 
            +
                exp = exp.lines.map(&:chomp) if String === exp
         | 
| 1289 | 
            +
                act = e.compress input
         | 
| 1290 | 
            +
             | 
| 1291 | 
            +
                assert_equal exp, act
         | 
| 1292 | 
            +
              end
         | 
| 1293 | 
            +
             | 
| 1294 | 
            +
              ACT1 = %w[ a b c b c b c b c d ]
         | 
| 1295 | 
            +
             | 
| 1296 | 
            +
              def test_normal
         | 
| 1297 | 
            +
                assert_compress <<~EXP, %w[ a b c b c b c b c d ]
         | 
| 1298 | 
            +
                      a
         | 
| 1299 | 
            +
                       +->> 4 cycles of 2 lines:
         | 
| 1300 | 
            +
                       | b
         | 
| 1301 | 
            +
                       | c
         | 
| 1302 | 
            +
                       +-<<
         | 
| 1303 | 
            +
                      d
         | 
| 1304 | 
            +
                    EXP
         | 
| 1305 | 
            +
              end
         | 
| 1306 | 
            +
             | 
| 1307 | 
            +
              def test_normal2
         | 
| 1308 | 
            +
                assert_compress <<~EXP, %w[ a b c b c b c b c ]
         | 
| 1309 | 
            +
                      a
         | 
| 1310 | 
            +
                       +->> 4 cycles of 2 lines:
         | 
| 1311 | 
            +
                       | b
         | 
| 1312 | 
            +
                       | c
         | 
| 1313 | 
            +
                       +-<<
         | 
| 1314 | 
            +
                    EXP
         | 
| 1315 | 
            +
              end
         | 
| 1316 | 
            +
             | 
| 1317 | 
            +
              def test_longer_c_than_b
         | 
| 1318 | 
            +
                # the extra c in the front makes the overall length longer sorting it first
         | 
| 1319 | 
            +
                assert_compress <<~EXP, %w[ c a b c b c b c b c b d ]
         | 
| 1320 | 
            +
                      c
         | 
| 1321 | 
            +
                      a
         | 
| 1322 | 
            +
                      b
         | 
| 1323 | 
            +
                       +->> 4 cycles of 2 lines:
         | 
| 1324 | 
            +
                       | c
         | 
| 1325 | 
            +
                       | b
         | 
| 1326 | 
            +
                       +-<<
         | 
| 1327 | 
            +
                      d
         | 
| 1328 | 
            +
                    EXP
         | 
| 1329 | 
            +
              end
         | 
| 1330 | 
            +
             | 
| 1331 | 
            +
              def test_1_line_cycles
         | 
| 1332 | 
            +
                assert_compress <<~EXP, %w[ c a b c b c b c b c b b b d ]
         | 
| 1333 | 
            +
                      c
         | 
| 1334 | 
            +
                      a
         | 
| 1335 | 
            +
                       +->> 4 cycles of 2 lines:
         | 
| 1336 | 
            +
                       | b
         | 
| 1337 | 
            +
                       | c
         | 
| 1338 | 
            +
                       +-<<
         | 
| 1339 | 
            +
                       +->> 3 cycles of 1 lines:
         | 
| 1340 | 
            +
                       | b
         | 
| 1341 | 
            +
                       +-<<
         | 
| 1342 | 
            +
                      d
         | 
| 1343 | 
            +
                    EXP
         | 
| 1344 | 
            +
              end
         | 
| 1345 | 
            +
             | 
| 1346 | 
            +
              def test_sanity3
         | 
| 1347 | 
            +
                pre  = ("aa".."am").to_a
         | 
| 1348 | 
            +
                mid  = ("a".."z").to_a * 67
         | 
| 1349 | 
            +
                post = ("aa".."am").to_a
         | 
| 1350 | 
            +
                ary  = pre + mid + post
         | 
| 1351 | 
            +
             | 
| 1352 | 
            +
                exp = pre +
         | 
| 1353 | 
            +
                  [" +->> 67 cycles of 26 lines:"] +
         | 
| 1354 | 
            +
                  ("a".."z").map { |s| " | #{s}" } +
         | 
| 1355 | 
            +
                  [" +-<<"] +
         | 
| 1356 | 
            +
                  post
         | 
| 1357 | 
            +
             | 
| 1358 | 
            +
                assert_compress exp, ary
         | 
| 1359 | 
            +
              end
         | 
| 1360 | 
            +
             | 
| 1361 | 
            +
              def test_absurd_patterns
         | 
| 1362 | 
            +
                assert_compress <<~EXP, %w[ a b c b c a b c b c a b c ]
         | 
| 1363 | 
            +
                       +->> 2 cycles of 5 lines:
         | 
| 1364 | 
            +
                       | a
         | 
| 1365 | 
            +
                       |  +->> 2 cycles of 2 lines:
         | 
| 1366 | 
            +
                       |  | b
         | 
| 1367 | 
            +
                       |  | c
         | 
| 1368 | 
            +
                       |  +-<<
         | 
| 1369 | 
            +
                       +-<<
         | 
| 1370 | 
            +
                      a
         | 
| 1371 | 
            +
                      b
         | 
| 1372 | 
            +
                      c
         | 
| 1373 | 
            +
                    EXP
         | 
| 1374 | 
            +
              end
         | 
| 1375 | 
            +
            end
         |