minitest 5.25.5 → 6.0.4

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +2 -4
  3. data/History.rdoc +156 -0
  4. data/Manifest.txt +13 -4
  5. data/README.rdoc +21 -100
  6. data/Rakefile +10 -2
  7. data/bin/minitest +5 -0
  8. data/design_rationale.rb +21 -19
  9. data/lib/hoe/minitest.rb +2 -1
  10. data/lib/minitest/assertions.rb +39 -73
  11. data/lib/minitest/autorun.rb +3 -4
  12. data/lib/minitest/benchmark.rb +3 -3
  13. data/lib/minitest/bisect.rb +304 -0
  14. data/lib/minitest/complete.rb +56 -0
  15. data/lib/minitest/find_minimal_combination.rb +127 -0
  16. data/lib/minitest/hell.rb +1 -1
  17. data/lib/minitest/manual_plugins.rb +4 -16
  18. data/lib/minitest/parallel.rb +5 -3
  19. data/lib/minitest/path_expander.rb +432 -0
  20. data/lib/minitest/pride.rb +2 -2
  21. data/lib/minitest/pride_plugin.rb +1 -1
  22. data/lib/minitest/server.rb +49 -0
  23. data/lib/minitest/server_plugin.rb +88 -0
  24. data/lib/minitest/spec.rb +11 -37
  25. data/lib/minitest/sprint.rb +105 -0
  26. data/lib/minitest/sprint_plugin.rb +39 -0
  27. data/lib/minitest/test.rb +8 -13
  28. data/lib/minitest/test_task.rb +44 -20
  29. data/lib/minitest.rb +104 -107
  30. data/test/minitest/metametameta.rb +1 -1
  31. data/test/minitest/test_bisect.rb +249 -0
  32. data/test/minitest/test_find_minimal_combination.rb +138 -0
  33. data/test/minitest/test_minitest_assertions.rb +54 -105
  34. data/test/minitest/test_minitest_benchmark.rb +14 -0
  35. data/test/minitest/test_minitest_reporter.rb +6 -5
  36. data/test/minitest/test_minitest_spec.rb +60 -128
  37. data/test/minitest/test_minitest_test.rb +22 -101
  38. data/test/minitest/test_path_expander.rb +229 -0
  39. data/test/minitest/test_server.rb +146 -0
  40. data.tar.gz.sig +0 -0
  41. metadata +92 -33
  42. metadata.gz.sig +0 -0
  43. data/.autotest +0 -34
  44. data/lib/minitest/mock.rb +0 -347
  45. data/lib/minitest/unit.rb +0 -42
  46. data/test/minitest/test_minitest_mock.rb +0 -1218
@@ -142,8 +142,7 @@ class TestMinitestAssertions < Minitest::Test
142
142
  exp[1] = Object.new
143
143
  act[1] = Object.new
144
144
  act_obj = act[1]
145
- # TODO: switch to endless when 2.7 is dropped
146
- act_obj.define_singleton_method(:inspect) { "#<Object:0xXXXXXX>" }
145
+ def act_obj.inspect = "#<Object:0xXXXXXX>"
147
146
  msg = <<~EOM.chomp % [act]
148
147
  No visible difference in the Hash#inspect output.
149
148
  You should look at the implementation of #== on Hash or its members.
@@ -166,14 +165,20 @@ class TestMinitestAssertions < Minitest::Test
166
165
  end
167
166
  end
168
167
 
169
- def test_assert_equal_different_message
168
+ def test_assert_equal_string_message
170
169
  assert_triggered "whoops.\nExpected: 1\n Actual: 2" do
170
+ @tc.assert_equal 1, 2, "whoops"
171
+ end
172
+ end
173
+
174
+ def test_assert_equal_different_message
175
+ assert_triggered "whoops." do
171
176
  @tc.assert_equal 1, 2, message { "whoops" }
172
177
  end
173
178
  end
174
179
 
175
180
  def test_assert_equal_different_lambda
176
- assert_triggered "whoops.\nExpected: 1\n Actual: 2" do
181
+ assert_triggered "whoops" do
177
182
  @tc.assert_equal 1, 2, lambda { "whoops" }
178
183
  end
179
184
  end
@@ -284,26 +289,8 @@ class TestMinitestAssertions < Minitest::Test
284
289
  end
285
290
 
286
291
  def test_assert_equal_does_not_allow_lhs_nil
287
- if Minitest::VERSION >= "6" then
288
- warn "Time to strip the MT5 test"
289
-
290
- @assertion_count += 1
291
- assert_triggered(/Use assert_nil if expecting nil/) do
292
- @tc.assert_equal nil, nil
293
- end
294
- else
295
- err_re = /Use assert_nil if expecting nil from .*test_minitest_\w+.rb/
296
- err_re = "" if $-w.nil?
297
-
298
- assert_deprecation err_re do
299
- @tc.assert_equal nil, nil
300
- end
301
- end
302
- end
303
-
304
- def test_assert_equal_does_not_allow_lhs_nil_triggered
305
- assert_triggered "Expected: nil\n Actual: false" do
306
- @tc.assert_equal nil, false
292
+ assert_triggered(/Use assert_nil if expecting nil/) do
293
+ @tc.assert_equal nil, nil
307
294
  end
308
295
  end
309
296
 
@@ -318,13 +305,13 @@ class TestMinitestAssertions < Minitest::Test
318
305
  end
319
306
 
320
307
  def test_assert_equal_string_both_escaped_unescaped_newlines
321
- msg = <<~EOM
308
+ msg = <<~'EOM' # NOTE: single quotes on heredoc
322
309
  --- expected
323
310
  +++ actual
324
311
  @@ -1,2 +1 @@
325
- -"A\\n
312
+ -"A\n
326
313
  -B"
327
- +"A\\n\\\\nB"
314
+ +"A\n\\nB"
328
315
  EOM
329
316
 
330
317
  assert_triggered msg do
@@ -526,10 +513,14 @@ class TestMinitestAssertions < Minitest::Test
526
513
  end
527
514
 
528
515
  def test_assert_operator
516
+ @assertion_count += 1
517
+
529
518
  @tc.assert_operator 2, :>, 1
530
519
  end
531
520
 
532
521
  def test_assert_operator_bad_object
522
+ @assertion_count += 1
523
+
533
524
  bad = Object.new
534
525
  def bad.== _; true end
535
526
 
@@ -537,6 +528,8 @@ class TestMinitestAssertions < Minitest::Test
537
528
  end
538
529
 
539
530
  def test_assert_operator_triggered
531
+ @assertion_count += 1
532
+
540
533
  assert_triggered "Expected 2 to be < 1." do
541
534
  @tc.assert_operator 2, :<, 1
542
535
  end
@@ -718,10 +711,14 @@ class TestMinitestAssertions < Minitest::Test
718
711
  end
719
712
 
720
713
  def test_assert_predicate
714
+ @assertion_count += 1
715
+
721
716
  @tc.assert_predicate "", :empty?
722
717
  end
723
718
 
724
719
  def test_assert_predicate_triggered
720
+ @assertion_count += 1
721
+
725
722
  assert_triggered 'Expected "blah" to be empty?.' do
726
723
  @tc.assert_predicate "blah", :empty?
727
724
  end
@@ -963,25 +960,9 @@ class TestMinitestAssertions < Minitest::Test
963
960
  end
964
961
  end
965
962
 
966
- def test_assert_send
967
- @assertion_count = 0 if error_on_warn?
968
- assert_deprecation(/DEPRECATED: assert_send/) do
969
- @tc.assert_send [1, :<, 2]
970
- end
971
- end
972
-
973
- def test_assert_send_bad
974
- if error_on_warn? then
975
- @assertion_count = 0
976
- assert_deprecation(/DEPRECATED: assert_send/) do
977
- @tc.assert_send [1, :>, 2]
978
- end
979
- else
980
- assert_triggered "Expected 1.>(*[2]) to return true." do
981
- assert_deprecation(/DEPRECATED: assert_send/) do
982
- @tc.assert_send [1, :>, 2]
983
- end
984
- end
963
+ def test_assert_same__does_not_allow_lhs_nil
964
+ assert_triggered(/Use assert_nil if expecting nil/) do
965
+ @tc.assert_same nil, nil
985
966
  end
986
967
  end
987
968
 
@@ -1074,48 +1055,24 @@ class TestMinitestAssertions < Minitest::Test
1074
1055
  end
1075
1056
 
1076
1057
  def test_assert_pattern
1077
- if RUBY_VERSION > "3" then
1078
- @tc.assert_pattern do
1079
- exp = if RUBY_VERSION.start_with? "3.0"
1080
- "(eval):1: warning: One-line pattern matching is experimental, and the behavior may change in future versions of Ruby!\n"
1081
- else
1082
- ""
1083
- end
1084
- assert_output nil, exp do
1085
- eval "[1,2,3] => [Integer, Integer, Integer]" # eval to escape parser for ruby<3
1086
- end
1087
- end
1088
- else
1089
- @assertion_count = 0
1090
-
1091
- assert_raises NotImplementedError do
1092
- @tc.assert_pattern do
1093
- # do nothing
1094
- end
1058
+ @tc.assert_pattern do
1059
+ assert_output nil, "" do
1060
+ [1,2,3] => [Integer, Integer, Integer]
1095
1061
  end
1096
1062
  end
1097
1063
  end
1098
1064
 
1099
1065
  def test_assert_pattern_traps_nomatchingpatternerror
1100
- skip unless RUBY_VERSION > "3"
1101
- exp = if RUBY_VERSION.start_with? "3.0" then
1102
- "[1, 2, 3]" # terrible error message!
1103
- else
1104
- /length mismatch/
1105
- end
1066
+ exp = /length mismatch/
1106
1067
 
1107
1068
  assert_triggered exp do
1108
1069
  @tc.assert_pattern do
1109
- capture_io do # 3.0 is noisy
1110
- eval "[1,2,3] => [Integer, Integer]" # eval to escape parser for ruby<3
1111
- end
1070
+ [1,2,3] => [Integer, Integer]
1112
1071
  end
1113
1072
  end
1114
1073
  end
1115
1074
 
1116
1075
  def test_assert_pattern_raises_other_exceptions
1117
- skip unless RUBY_VERSION >= "3.0"
1118
-
1119
1076
  @assertion_count = 0
1120
1077
 
1121
1078
  assert_raises RuntimeError do
@@ -1126,8 +1083,6 @@ class TestMinitestAssertions < Minitest::Test
1126
1083
  end
1127
1084
 
1128
1085
  def test_assert_pattern_with_no_block
1129
- skip unless RUBY_VERSION >= "3.0"
1130
-
1131
1086
  assert_triggered "assert_pattern requires a block to capture errors." do
1132
1087
  @tc.assert_pattern
1133
1088
  end
@@ -1168,7 +1123,7 @@ class TestMinitestAssertions < Minitest::Test
1168
1123
 
1169
1124
  # These don't have corresponding refutes _on purpose_. They're
1170
1125
  # useless and will never be added, so don't bother.
1171
- ignores = %w[assert_output assert_raises assert_send
1126
+ ignores = %w[assert_output assert_raises
1172
1127
  assert_silent assert_throws assert_mock]
1173
1128
 
1174
1129
  ignores += %w[assert_allocations] # for minitest-gcstats
@@ -1280,12 +1235,16 @@ class TestMinitestAssertions < Minitest::Test
1280
1235
  end
1281
1236
 
1282
1237
  def test_refute_in_epsilon_triggered
1283
- assert_triggered "Expected |10000 - 9990| (10) to not be <= 10.0." do
1284
- @tc.refute_in_epsilon 10_000, 9990
1238
+ assert_triggered "Expected |10000 - 9991| (9) to not be <= 9.991." do
1239
+ @tc.refute_in_epsilon 10_000, 9991
1285
1240
  flunk
1286
1241
  end
1287
1242
  end
1288
1243
 
1244
+ def test_refute_in_epsilon_minimum
1245
+ @tc.refute_in_epsilon 10_000, 9990
1246
+ end
1247
+
1289
1248
  def test_refute_includes
1290
1249
  @assertion_count = 2
1291
1250
 
@@ -1365,10 +1324,14 @@ class TestMinitestAssertions < Minitest::Test
1365
1324
  end
1366
1325
 
1367
1326
  def test_refute_operator
1327
+ @assertion_count += 1
1328
+
1368
1329
  @tc.refute_operator 2, :<, 1
1369
1330
  end
1370
1331
 
1371
1332
  def test_refute_operator_bad_object
1333
+ @assertion_count += 1
1334
+
1372
1335
  bad = Object.new
1373
1336
  def bad.== _; true end
1374
1337
 
@@ -1376,44 +1339,28 @@ class TestMinitestAssertions < Minitest::Test
1376
1339
  end
1377
1340
 
1378
1341
  def test_refute_operator_triggered
1342
+ @assertion_count += 1
1343
+
1379
1344
  assert_triggered "Expected 2 to not be > 1." do
1380
1345
  @tc.refute_operator 2, :>, 1
1381
1346
  end
1382
1347
  end
1383
1348
 
1384
1349
  def test_refute_pattern
1385
- if RUBY_VERSION >= "3.0"
1386
- @tc.refute_pattern do
1387
- capture_io do # 3.0 is noisy
1388
- eval "[1,2,3] => [Integer, Integer, String]"
1389
- end
1390
- end
1391
- else
1392
- @assertion_count = 0
1393
-
1394
- assert_raises NotImplementedError do
1395
- @tc.refute_pattern do
1396
- eval "[1,2,3] => [Integer, Integer, String]"
1397
- end
1398
- end
1350
+ @tc.refute_pattern do
1351
+ [1,2,3] => [Integer, Integer, String]
1399
1352
  end
1400
1353
  end
1401
1354
 
1402
1355
  def test_refute_pattern_expects_nomatchingpatternerror
1403
- skip unless RUBY_VERSION > "3"
1404
-
1405
1356
  assert_triggered(/NoMatchingPatternError expected, but nothing was raised./) do
1406
1357
  @tc.refute_pattern do
1407
- capture_io do # 3.0 is noisy
1408
- eval "[1,2,3] => [Integer, Integer, Integer]"
1409
- end
1358
+ [1,2,3] => [Integer, Integer, Integer]
1410
1359
  end
1411
1360
  end
1412
1361
  end
1413
1362
 
1414
1363
  def test_refute_pattern_raises_other_exceptions
1415
- skip unless RUBY_VERSION >= "3.0"
1416
-
1417
1364
  @assertion_count = 0
1418
1365
 
1419
1366
  assert_raises RuntimeError do
@@ -1424,18 +1371,20 @@ class TestMinitestAssertions < Minitest::Test
1424
1371
  end
1425
1372
 
1426
1373
  def test_refute_pattern_with_no_block
1427
- skip unless RUBY_VERSION >= "3.0"
1428
-
1429
1374
  assert_triggered "refute_pattern requires a block to capture errors." do
1430
1375
  @tc.refute_pattern
1431
1376
  end
1432
1377
  end
1433
1378
 
1434
1379
  def test_refute_predicate
1380
+ @assertion_count += 1
1381
+
1435
1382
  @tc.refute_predicate "42", :empty?
1436
1383
  end
1437
1384
 
1438
1385
  def test_refute_predicate_triggered
1386
+ @assertion_count += 1
1387
+
1439
1388
  assert_triggered 'Expected "" to not be empty?.' do
1440
1389
  @tc.refute_predicate "", :empty?
1441
1390
  end
@@ -1611,10 +1560,10 @@ class TestMinitestAssertionHelpers < Minitest::Test
1611
1560
  assert_equal "blah1.\nblah2.", message("blah1") { "blah2" }.call
1612
1561
 
1613
1562
  message = proc { "blah1" }
1614
- assert_equal "blah1.\nblah2.", message(message) { "blah2" }.call
1563
+ assert_equal "blah1", message(message) { "blah2" }.call
1615
1564
 
1616
1565
  message = message { "blah1" }
1617
- assert_equal "blah1.\nblah2.", message(message) { "blah2" }.call
1566
+ assert_equal "blah1.", message(message) { "blah2" }.call
1618
1567
  end
1619
1568
 
1620
1569
  def test_message_deferred
@@ -25,6 +25,20 @@ class TestMinitestBenchmark < Minitest::Test
25
25
  assert_equal ["bench_blah"], c.runnable_methods
26
26
  end
27
27
 
28
+ def test_cls_run
29
+ c = Class.new Minitest::Benchmark do
30
+ def bench_dummy
31
+ assert true
32
+ end
33
+ end
34
+
35
+ reporter = Minitest::StatisticsReporter.new(StringIO.new(+""))
36
+
37
+ c.run c, "bench_dummy", reporter
38
+
39
+ assert_equal 1, reporter.count
40
+ end
41
+
28
42
  def test_cls_bench_range
29
43
  assert_equal [1, 10, 100, 1_000, 10_000], Minitest::Benchmark.bench_range
30
44
  end
@@ -1,5 +1,5 @@
1
1
  require "minitest/autorun"
2
- require "minitest/metametameta"
2
+ require_relative "metametameta"
3
3
  require "forwardable"
4
4
 
5
5
  class FakeTest < Minitest::Test
@@ -29,10 +29,11 @@ class TestMinitestReporter < MetaMetaMetaTestCase
29
29
  super
30
30
  self.io = StringIO.new(+"")
31
31
  self.r = new_composite_reporter
32
+ @et = @ft = @pt = @st = @sse = nil
32
33
  end
33
34
 
34
35
  def error_test
35
- unless defined? @et then
36
+ unless @et then
36
37
  @et = FakeTest.new :woot
37
38
  @et.failures << Minitest::UnexpectedError.new(begin
38
39
  raise "no"
@@ -45,7 +46,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
45
46
  end
46
47
 
47
48
  def system_stack_error_test
48
- unless defined? @sse then
49
+ unless @sse then
49
50
 
50
51
  ex = SystemStackError.new
51
52
 
@@ -64,7 +65,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
64
65
  end
65
66
 
66
67
  def fail_test
67
- unless defined? @ft then
68
+ unless @ft then
68
69
  @ft = FakeTest.new :woot
69
70
  @ft.failures << begin
70
71
  raise Minitest::Assertion, "boo"
@@ -87,7 +88,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
87
88
  end
88
89
 
89
90
  def skip_test
90
- unless defined? @st then
91
+ unless @st then
91
92
  @st = FakeTest.new :woot
92
93
  @st.failures << begin
93
94
  raise Minitest::Skip