minitest 5.25.5 → 6.0.1
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 +132 -0
- data/Manifest.txt +13 -4
- data/README.rdoc +18 -98
- data/Rakefile +7 -2
- data/bin/minitest +5 -0
- data/design_rationale.rb +21 -19
- data/lib/hoe/minitest.rb +2 -1
- data/lib/minitest/assertions.rb +37 -74
- data/lib/minitest/autorun.rb +3 -4
- data/lib/minitest/benchmark.rb +3 -3
- data/lib/minitest/bisect.rb +306 -0
- data/lib/minitest/complete.rb +56 -0
- data/lib/minitest/find_minimal_combination.rb +127 -0
- data/lib/minitest/hell.rb +1 -1
- data/lib/minitest/manual_plugins.rb +4 -16
- data/lib/minitest/parallel.rb +5 -3
- data/lib/minitest/path_expander.rb +425 -0
- data/lib/minitest/pride.rb +2 -2
- data/lib/minitest/pride_plugin.rb +1 -1
- data/lib/minitest/server.rb +45 -0
- data/lib/minitest/server_plugin.rb +84 -0
- data/lib/minitest/spec.rb +11 -37
- data/lib/minitest/sprint.rb +104 -0
- data/lib/minitest/sprint_plugin.rb +39 -0
- data/lib/minitest/test.rb +8 -13
- data/lib/minitest/test_task.rb +44 -20
- data/lib/minitest.rb +99 -107
- data/test/minitest/metametameta.rb +1 -1
- data/test/minitest/test_bisect.rb +235 -0
- data/test/minitest/test_find_minimal_combination.rb +138 -0
- data/test/minitest/test_minitest_assertions.rb +51 -108
- data/test/minitest/test_minitest_benchmark.rb +14 -0
- data/test/minitest/test_minitest_reporter.rb +6 -5
- data/test/minitest/test_minitest_spec.rb +60 -128
- data/test/minitest/test_minitest_test.rb +22 -101
- data/test/minitest/test_path_expander.rb +229 -0
- data/test/minitest/test_server.rb +149 -0
- data.tar.gz.sig +0 -0
- metadata +58 -25
- metadata.gz.sig +0 -0
- data/.autotest +0 -34
- data/lib/minitest/mock.rb +0 -347
- data/lib/minitest/unit.rb +0 -42
- data/test/minitest/test_minitest_mock.rb +0 -1218
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#!/usr/bin/ruby -w
|
|
2
|
+
|
|
3
|
+
$: << "." << "lib"
|
|
4
|
+
|
|
5
|
+
require "minitest/autorun"
|
|
6
|
+
require "minitest/find_minimal_combination"
|
|
7
|
+
|
|
8
|
+
describe Array, :find_minimal_combination do
|
|
9
|
+
def check(*bad)
|
|
10
|
+
lambda { |sample| bad & sample == bad }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def record_and_check(tests, *bad)
|
|
14
|
+
lambda { |test| tests << test.join; bad & test == bad }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def parse_trials s
|
|
18
|
+
s.lines.map { |s| s.chomp.sub(/#.*/, '').delete " " }.reject(&:empty?)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def assert_steps input, bad, exp
|
|
22
|
+
tests = []
|
|
23
|
+
|
|
24
|
+
found = input.find_minimal_combination(&record_and_check(tests, *bad))
|
|
25
|
+
|
|
26
|
+
assert_equal bad, found, "algorithm is bad"
|
|
27
|
+
|
|
28
|
+
assert_equal parse_trials(exp), tests
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
HEX = "0123456789ABCDEF".chars.to_a
|
|
32
|
+
|
|
33
|
+
# lvl collection
|
|
34
|
+
#
|
|
35
|
+
# 0 | A
|
|
36
|
+
# 1 | B C
|
|
37
|
+
# 2 | D E F G
|
|
38
|
+
# 3 | H I J K L M N O
|
|
39
|
+
# |
|
|
40
|
+
# 4 | 0123456789ABCDEF
|
|
41
|
+
|
|
42
|
+
def test_ordering_best_case_1
|
|
43
|
+
ary = HEX
|
|
44
|
+
bad = %w[0]
|
|
45
|
+
exp = <<~EOT
|
|
46
|
+
#123456789ABCDEF
|
|
47
|
+
01234567 # HIT! -- level 1 = B, C
|
|
48
|
+
0123 # HIT! -- level 2 = D, E
|
|
49
|
+
01 # HIT! -- level 3 = H, I
|
|
50
|
+
0 # HIT!
|
|
51
|
+
EOT
|
|
52
|
+
|
|
53
|
+
assert_steps ary, bad, exp
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_ordering_best_case_2
|
|
57
|
+
ary = HEX
|
|
58
|
+
bad = %w[0 1]
|
|
59
|
+
exp = <<~EOT
|
|
60
|
+
01234567 # HIT! -- level 1 = B, C
|
|
61
|
+
0123 # HIT! -- level 2 = D, E
|
|
62
|
+
01 # HIT! -- level 3 = H, I
|
|
63
|
+
0 # miss -- level 4 = 0, 1, n_combos = 1
|
|
64
|
+
1 # miss
|
|
65
|
+
01 # HIT! -- level 3 = H, n_combos = 2
|
|
66
|
+
EOT
|
|
67
|
+
|
|
68
|
+
assert_steps ary, bad, exp
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_ordering
|
|
72
|
+
ary = HEX
|
|
73
|
+
bad = %w[1 F]
|
|
74
|
+
exp = <<~EOT
|
|
75
|
+
01234567 # miss -- level 1 = B, C
|
|
76
|
+
89ABCDEF # miss
|
|
77
|
+
0123 89AB # miss -- level 2 = DF, DG, EF, EG
|
|
78
|
+
0123 CDEF # HIT!
|
|
79
|
+
01 CD # miss -- level 3 = HN, HO
|
|
80
|
+
01 EF # HIT!
|
|
81
|
+
0 E # miss -- level 4 = 0E, 0F, 1E, 1F
|
|
82
|
+
0 F # miss
|
|
83
|
+
1 E # miss
|
|
84
|
+
1 F # HIT!
|
|
85
|
+
EOT
|
|
86
|
+
|
|
87
|
+
assert_steps ary, bad, exp
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def self.test_find_minimal_combination max, *bad
|
|
91
|
+
define_method "%s_%s_%s" % [__method__, max, bad.join("_")] do
|
|
92
|
+
a = (1..max).to_a
|
|
93
|
+
|
|
94
|
+
assert_equal bad, a.find_minimal_combination(&check(*bad))
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.test_find_minimal_combination_and_count max, nsteps, *bad
|
|
99
|
+
define_method "%s_%s_%s_%s" % [__method__, max, nsteps, bad.join("_")] do
|
|
100
|
+
a = (1..max).to_a
|
|
101
|
+
|
|
102
|
+
found, count = a.find_minimal_combination_and_count(&check(*bad))
|
|
103
|
+
|
|
104
|
+
assert_equal bad, found
|
|
105
|
+
assert_equal nsteps, count
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
test_find_minimal_combination 8, 5
|
|
110
|
+
test_find_minimal_combination 8, 2, 7
|
|
111
|
+
test_find_minimal_combination 8, 1, 2, 7
|
|
112
|
+
test_find_minimal_combination 8, 1, 4, 7
|
|
113
|
+
test_find_minimal_combination 8, 1, 3, 5, 7
|
|
114
|
+
|
|
115
|
+
test_find_minimal_combination 9, 5
|
|
116
|
+
test_find_minimal_combination 9, 9
|
|
117
|
+
test_find_minimal_combination 9, 2, 7
|
|
118
|
+
test_find_minimal_combination 9, 1, 2, 7
|
|
119
|
+
test_find_minimal_combination 9, 1, 4, 7
|
|
120
|
+
test_find_minimal_combination 9, 1, 3, 5, 7
|
|
121
|
+
|
|
122
|
+
test_find_minimal_combination 1023, 5
|
|
123
|
+
test_find_minimal_combination 1023, 1005
|
|
124
|
+
test_find_minimal_combination 1023, 802, 907
|
|
125
|
+
test_find_minimal_combination 1023, 7, 15, 166, 1001
|
|
126
|
+
test_find_minimal_combination 1023, 1000, 1001, 1002
|
|
127
|
+
test_find_minimal_combination 1023, 1001, 1003, 1005, 1007
|
|
128
|
+
test_find_minimal_combination 1024, 1001, 1003, 1005, 1007
|
|
129
|
+
test_find_minimal_combination 1024, 1, 1024
|
|
130
|
+
|
|
131
|
+
test_find_minimal_combination_and_count 1024, 12, 1, 2
|
|
132
|
+
test_find_minimal_combination_and_count 1024, 23, 1, 1023
|
|
133
|
+
test_find_minimal_combination_and_count 1024, 24, 1, 1024
|
|
134
|
+
test_find_minimal_combination_and_count 1023, 26, 1, 1023
|
|
135
|
+
|
|
136
|
+
test_find_minimal_combination_and_count 1024, 93, 1001, 1003, 1005, 1007
|
|
137
|
+
test_find_minimal_combination_and_count 1023, 93, 1001, 1003, 1005, 1007
|
|
138
|
+
end
|
|
@@ -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
|
-
|
|
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
|
|
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
|
|
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
|
|
288
|
-
|
|
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
|
|
312
|
+
-"A\n
|
|
326
313
|
-B"
|
|
327
|
-
+"A\\
|
|
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,28 +960,6 @@ 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
|
|
985
|
-
end
|
|
986
|
-
end
|
|
987
|
-
|
|
988
963
|
def test_assert_silent
|
|
989
964
|
@assertion_count = 2
|
|
990
965
|
|
|
@@ -1074,48 +1049,24 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1074
1049
|
end
|
|
1075
1050
|
|
|
1076
1051
|
def test_assert_pattern
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
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
|
|
1052
|
+
@tc.assert_pattern do
|
|
1053
|
+
assert_output nil, "" do
|
|
1054
|
+
[1,2,3] => [Integer, Integer, Integer]
|
|
1095
1055
|
end
|
|
1096
1056
|
end
|
|
1097
1057
|
end
|
|
1098
1058
|
|
|
1099
1059
|
def test_assert_pattern_traps_nomatchingpatternerror
|
|
1100
|
-
|
|
1101
|
-
exp = if RUBY_VERSION.start_with? "3.0" then
|
|
1102
|
-
"[1, 2, 3]" # terrible error message!
|
|
1103
|
-
else
|
|
1104
|
-
/length mismatch/
|
|
1105
|
-
end
|
|
1060
|
+
exp = /length mismatch/
|
|
1106
1061
|
|
|
1107
1062
|
assert_triggered exp do
|
|
1108
1063
|
@tc.assert_pattern do
|
|
1109
|
-
|
|
1110
|
-
eval "[1,2,3] => [Integer, Integer]" # eval to escape parser for ruby<3
|
|
1111
|
-
end
|
|
1064
|
+
[1,2,3] => [Integer, Integer]
|
|
1112
1065
|
end
|
|
1113
1066
|
end
|
|
1114
1067
|
end
|
|
1115
1068
|
|
|
1116
1069
|
def test_assert_pattern_raises_other_exceptions
|
|
1117
|
-
skip unless RUBY_VERSION >= "3.0"
|
|
1118
|
-
|
|
1119
1070
|
@assertion_count = 0
|
|
1120
1071
|
|
|
1121
1072
|
assert_raises RuntimeError do
|
|
@@ -1126,8 +1077,6 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1126
1077
|
end
|
|
1127
1078
|
|
|
1128
1079
|
def test_assert_pattern_with_no_block
|
|
1129
|
-
skip unless RUBY_VERSION >= "3.0"
|
|
1130
|
-
|
|
1131
1080
|
assert_triggered "assert_pattern requires a block to capture errors." do
|
|
1132
1081
|
@tc.assert_pattern
|
|
1133
1082
|
end
|
|
@@ -1168,7 +1117,7 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1168
1117
|
|
|
1169
1118
|
# These don't have corresponding refutes _on purpose_. They're
|
|
1170
1119
|
# useless and will never be added, so don't bother.
|
|
1171
|
-
ignores = %w[assert_output assert_raises
|
|
1120
|
+
ignores = %w[assert_output assert_raises
|
|
1172
1121
|
assert_silent assert_throws assert_mock]
|
|
1173
1122
|
|
|
1174
1123
|
ignores += %w[assert_allocations] # for minitest-gcstats
|
|
@@ -1280,12 +1229,16 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1280
1229
|
end
|
|
1281
1230
|
|
|
1282
1231
|
def test_refute_in_epsilon_triggered
|
|
1283
|
-
assert_triggered "Expected |10000 -
|
|
1284
|
-
@tc.refute_in_epsilon 10_000,
|
|
1232
|
+
assert_triggered "Expected |10000 - 9991| (9) to not be <= 9.991." do
|
|
1233
|
+
@tc.refute_in_epsilon 10_000, 9991
|
|
1285
1234
|
flunk
|
|
1286
1235
|
end
|
|
1287
1236
|
end
|
|
1288
1237
|
|
|
1238
|
+
def test_refute_in_epsilon_minimum
|
|
1239
|
+
@tc.refute_in_epsilon 10_000, 9990
|
|
1240
|
+
end
|
|
1241
|
+
|
|
1289
1242
|
def test_refute_includes
|
|
1290
1243
|
@assertion_count = 2
|
|
1291
1244
|
|
|
@@ -1365,10 +1318,14 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1365
1318
|
end
|
|
1366
1319
|
|
|
1367
1320
|
def test_refute_operator
|
|
1321
|
+
@assertion_count += 1
|
|
1322
|
+
|
|
1368
1323
|
@tc.refute_operator 2, :<, 1
|
|
1369
1324
|
end
|
|
1370
1325
|
|
|
1371
1326
|
def test_refute_operator_bad_object
|
|
1327
|
+
@assertion_count += 1
|
|
1328
|
+
|
|
1372
1329
|
bad = Object.new
|
|
1373
1330
|
def bad.== _; true end
|
|
1374
1331
|
|
|
@@ -1376,44 +1333,28 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1376
1333
|
end
|
|
1377
1334
|
|
|
1378
1335
|
def test_refute_operator_triggered
|
|
1336
|
+
@assertion_count += 1
|
|
1337
|
+
|
|
1379
1338
|
assert_triggered "Expected 2 to not be > 1." do
|
|
1380
1339
|
@tc.refute_operator 2, :>, 1
|
|
1381
1340
|
end
|
|
1382
1341
|
end
|
|
1383
1342
|
|
|
1384
1343
|
def test_refute_pattern
|
|
1385
|
-
|
|
1386
|
-
|
|
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
|
|
1344
|
+
@tc.refute_pattern do
|
|
1345
|
+
[1,2,3] => [Integer, Integer, String]
|
|
1399
1346
|
end
|
|
1400
1347
|
end
|
|
1401
1348
|
|
|
1402
1349
|
def test_refute_pattern_expects_nomatchingpatternerror
|
|
1403
|
-
skip unless RUBY_VERSION > "3"
|
|
1404
|
-
|
|
1405
1350
|
assert_triggered(/NoMatchingPatternError expected, but nothing was raised./) do
|
|
1406
1351
|
@tc.refute_pattern do
|
|
1407
|
-
|
|
1408
|
-
eval "[1,2,3] => [Integer, Integer, Integer]"
|
|
1409
|
-
end
|
|
1352
|
+
[1,2,3] => [Integer, Integer, Integer]
|
|
1410
1353
|
end
|
|
1411
1354
|
end
|
|
1412
1355
|
end
|
|
1413
1356
|
|
|
1414
1357
|
def test_refute_pattern_raises_other_exceptions
|
|
1415
|
-
skip unless RUBY_VERSION >= "3.0"
|
|
1416
|
-
|
|
1417
1358
|
@assertion_count = 0
|
|
1418
1359
|
|
|
1419
1360
|
assert_raises RuntimeError do
|
|
@@ -1424,18 +1365,20 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1424
1365
|
end
|
|
1425
1366
|
|
|
1426
1367
|
def test_refute_pattern_with_no_block
|
|
1427
|
-
skip unless RUBY_VERSION >= "3.0"
|
|
1428
|
-
|
|
1429
1368
|
assert_triggered "refute_pattern requires a block to capture errors." do
|
|
1430
1369
|
@tc.refute_pattern
|
|
1431
1370
|
end
|
|
1432
1371
|
end
|
|
1433
1372
|
|
|
1434
1373
|
def test_refute_predicate
|
|
1374
|
+
@assertion_count += 1
|
|
1375
|
+
|
|
1435
1376
|
@tc.refute_predicate "42", :empty?
|
|
1436
1377
|
end
|
|
1437
1378
|
|
|
1438
1379
|
def test_refute_predicate_triggered
|
|
1380
|
+
@assertion_count += 1
|
|
1381
|
+
|
|
1439
1382
|
assert_triggered 'Expected "" to not be empty?.' do
|
|
1440
1383
|
@tc.refute_predicate "", :empty?
|
|
1441
1384
|
end
|
|
@@ -1611,10 +1554,10 @@ class TestMinitestAssertionHelpers < Minitest::Test
|
|
|
1611
1554
|
assert_equal "blah1.\nblah2.", message("blah1") { "blah2" }.call
|
|
1612
1555
|
|
|
1613
1556
|
message = proc { "blah1" }
|
|
1614
|
-
assert_equal "blah1
|
|
1557
|
+
assert_equal "blah1", message(message) { "blah2" }.call
|
|
1615
1558
|
|
|
1616
1559
|
message = message { "blah1" }
|
|
1617
|
-
assert_equal "blah1
|
|
1560
|
+
assert_equal "blah1.", message(message) { "blah2" }.call
|
|
1618
1561
|
end
|
|
1619
1562
|
|
|
1620
1563
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
91
|
+
unless @st then
|
|
91
92
|
@st = FakeTest.new :woot
|
|
92
93
|
@st.failures << begin
|
|
93
94
|
raise Minitest::Skip
|