minitest 5.27.0 → 6.0.6
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 +2 -4
- data/History.rdoc +128 -0
- data/Manifest.txt +13 -4
- data/README.rdoc +8 -90
- data/Rakefile +7 -15
- data/bin/minitest +5 -0
- data/lib/minitest/assertions.rb +34 -63
- data/lib/minitest/autorun.rb +0 -1
- data/lib/minitest/benchmark.rb +1 -1
- data/lib/minitest/bisect.rb +304 -0
- data/lib/minitest/complete.rb +56 -0
- data/lib/minitest/find_minimal_combination.rb +127 -0
- data/lib/minitest/manual_plugins.rb +4 -16
- data/lib/minitest/parallel.rb +3 -3
- data/lib/minitest/path_expander.rb +432 -0
- data/lib/minitest/pride.rb +1 -1
- data/lib/minitest/server.rb +49 -0
- data/lib/minitest/server_plugin.rb +88 -0
- data/lib/minitest/spec.rb +2 -31
- data/lib/minitest/sprint.rb +105 -0
- data/lib/minitest/sprint_plugin.rb +39 -0
- data/lib/minitest/test.rb +5 -11
- data/lib/minitest/test_task.rb +16 -9
- data/lib/minitest.rb +69 -87
- data/test/minitest/metametameta.rb +1 -1
- data/test/minitest/test_bisect.rb +249 -0
- data/test/minitest/test_find_minimal_combination.rb +138 -0
- data/test/minitest/test_minitest_assertions.rb +96 -44
- data/test/minitest/test_minitest_benchmark.rb +14 -0
- data/test/minitest/test_minitest_spec.rb +38 -102
- data/test/minitest/test_minitest_test.rb +20 -99
- data/test/minitest/test_path_expander.rb +229 -0
- data/test/minitest/test_server.rb +146 -0
- data.tar.gz.sig +0 -0
- metadata +87 -41
- metadata.gz.sig +0 -0
- data/.autotest +0 -34
- data/lib/minitest/mock.rb +0 -327
- data/lib/minitest/unit.rb +0 -42
- data/test/minitest/test_minitest_mock.rb +0 -1213
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
require "minitest/autorun"
|
|
2
|
+
require "minitest/bisect"
|
|
3
|
+
|
|
4
|
+
module TestMinitest; end
|
|
5
|
+
|
|
6
|
+
class TestMinitest::TestBisect < Minitest::Test
|
|
7
|
+
attr_accessor :bisect
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
self.bisect = Minitest::Bisect.new
|
|
11
|
+
bisect.reset
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_class_run
|
|
15
|
+
skip "Need to write test_class_run"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_bisect_files
|
|
19
|
+
skip "Need to write test_bisect_files"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_bisect_methods
|
|
23
|
+
skip "Need to write test_bisect_methods"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_build_files_cmd
|
|
27
|
+
files = %w[a.rb b.rb c.rb]
|
|
28
|
+
rb = %w[-Ilib:test]
|
|
29
|
+
mt = %w[--seed 42]
|
|
30
|
+
|
|
31
|
+
exp = "minitest -Ilib:test a.rb b.rb c.rb --seed 42"
|
|
32
|
+
act = bisect.build_files_cmd(files, rb, mt, cmd:"minitest")
|
|
33
|
+
|
|
34
|
+
assert_equal exp, act
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_build_methods_cmd
|
|
38
|
+
cmd = "cmd"
|
|
39
|
+
assert_equal "cmd", bisect.build_methods_cmd(cmd)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_build_methods_cmd_verify
|
|
43
|
+
cmd = "cmd"
|
|
44
|
+
cul = []
|
|
45
|
+
bad = %w[A#test_1 B#test_2]
|
|
46
|
+
|
|
47
|
+
exp = "cmd -n \"/^(?:A#(?:test_1)|B#(?:test_2))$/\""
|
|
48
|
+
|
|
49
|
+
assert_equal exp, bisect.build_methods_cmd(cmd, cul, bad)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_build_methods_cmd_verify_same
|
|
53
|
+
cmd = "cmd"
|
|
54
|
+
cul = []
|
|
55
|
+
bad = %w[C#test_5 C#test_6]
|
|
56
|
+
|
|
57
|
+
exp = "cmd -n \"/^(?:C#(?:test_5|test_6))$/\""
|
|
58
|
+
|
|
59
|
+
assert_equal exp, bisect.build_methods_cmd(cmd, cul, bad)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_build_methods_cmd_full
|
|
63
|
+
cmd = "cmd"
|
|
64
|
+
cul = %w[A#test_1 A#test_2 B#test_3 B#test_4]
|
|
65
|
+
bad = %w[C#test_5 C#test_6]
|
|
66
|
+
|
|
67
|
+
a = "A#(?:test_1|test_2)"
|
|
68
|
+
b = "B#(?:test_3|test_4)"
|
|
69
|
+
c = "C#(?:test_5|test_6)"
|
|
70
|
+
exp = "cmd -n \"/^(?:#{a}|#{b}|#{c})$/\""
|
|
71
|
+
|
|
72
|
+
assert_equal exp, bisect.build_methods_cmd(cmd, cul, bad)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_build_re
|
|
76
|
+
bad = %w[A#test_1 B#test_2]
|
|
77
|
+
|
|
78
|
+
exp = "/^(?:A#(?:test_1)|B#(?:test_2))$/"
|
|
79
|
+
|
|
80
|
+
assert_equal exp, bisect.build_re(bad)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_build_re_same
|
|
84
|
+
bad = %w[C#test_5 C#test_6]
|
|
85
|
+
|
|
86
|
+
exp = "/^(?:C#(?:test_5|test_6))$/"
|
|
87
|
+
|
|
88
|
+
assert_equal exp, bisect.build_re(bad)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def test_build_re_class_escaping
|
|
92
|
+
bad = ["{}#[]"]
|
|
93
|
+
|
|
94
|
+
exp = "/^(?:\\{\\}#(?:\\[\\]))$/"
|
|
95
|
+
|
|
96
|
+
assert_equal exp, bisect.build_re(bad)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_build_re_method_escaping
|
|
100
|
+
bad = ["Some Class#It shouldn't care what the name is"]
|
|
101
|
+
|
|
102
|
+
exp = "/^(?:Some Class#(?:It shouldn\\'t care what the name is))$/"
|
|
103
|
+
|
|
104
|
+
assert_equal exp, bisect.build_re(bad)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_map_failures
|
|
108
|
+
bisect.failures =
|
|
109
|
+
{
|
|
110
|
+
"file.rb" => { "Class" => %w[test_method1 test_method2] },
|
|
111
|
+
"blah.rb" => { "Apple" => %w[test_method3 test_method4] },
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
exp = %w[
|
|
115
|
+
Apple#test_method3
|
|
116
|
+
Apple#test_method4
|
|
117
|
+
Class#test_method1
|
|
118
|
+
Class#test_method2
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
assert_equal exp, bisect.map_failures
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_minitest_result
|
|
125
|
+
bisect.minitest_result "file.rb", "TestClass", "test_method", [], 1, 1
|
|
126
|
+
|
|
127
|
+
assert_equal false, bisect.tainted
|
|
128
|
+
assert_empty bisect.failures
|
|
129
|
+
assert_equal ["TestClass#test_method"], bisect.culprits
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def test_minitest_result_skip
|
|
133
|
+
fail = Minitest::Skip.new("woot")
|
|
134
|
+
|
|
135
|
+
bisect.minitest_result "file.rb", "TestClass", "test_method", [fail], 1, 1
|
|
136
|
+
|
|
137
|
+
assert_equal false, bisect.tainted
|
|
138
|
+
assert_empty bisect.failures
|
|
139
|
+
assert_equal ["TestClass#test_method"], bisect.culprits
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def test_minitest_result_fail
|
|
143
|
+
fail = Minitest::Assertion.new "msg"
|
|
144
|
+
|
|
145
|
+
bisect.minitest_result "file.rb", "TestClass", "test_method", [fail], 1, 1
|
|
146
|
+
|
|
147
|
+
exp = {"file.rb" => {"TestClass" => ["test_method"] }}
|
|
148
|
+
|
|
149
|
+
assert_equal true, bisect.tainted
|
|
150
|
+
assert_equal exp, bisect.failures
|
|
151
|
+
assert_empty bisect.culprits
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_minitest_result_error
|
|
155
|
+
fail = Minitest::UnexpectedError.new RuntimeError.new("woot")
|
|
156
|
+
|
|
157
|
+
bisect.minitest_result "file.rb", "TestClass", "test_method", [fail], 1, 1
|
|
158
|
+
|
|
159
|
+
exp = {"file.rb" => {"TestClass" => ["test_method"] }}
|
|
160
|
+
|
|
161
|
+
assert_equal true, bisect.tainted
|
|
162
|
+
assert_equal exp, bisect.failures
|
|
163
|
+
assert_empty bisect.culprits
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def test_minitest_start
|
|
167
|
+
bisect.failures["file.rb"]["Class"] << "test_bad1"
|
|
168
|
+
|
|
169
|
+
bisect.minitest_start
|
|
170
|
+
|
|
171
|
+
assert_empty bisect.failures
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def test_reset
|
|
175
|
+
bisect.seen_bad = true
|
|
176
|
+
bisect.tainted = true
|
|
177
|
+
bisect.failures["file.rb"]["Class"] << "test_bad1"
|
|
178
|
+
bisect.culprits << "A#test_1" << "B#test_2"
|
|
179
|
+
|
|
180
|
+
bisect.reset
|
|
181
|
+
|
|
182
|
+
assert_equal false, bisect.seen_bad
|
|
183
|
+
assert_equal false, bisect.tainted
|
|
184
|
+
assert_empty bisect.failures
|
|
185
|
+
assert_equal %w[A#test_1 B#test_2], bisect.culprits
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def test_run
|
|
189
|
+
skip "Need to write test_run"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def test_time_it
|
|
193
|
+
exp = /\Ado stuff: in 0.\d\d sec\n\z/
|
|
194
|
+
|
|
195
|
+
assert_output exp, "" do
|
|
196
|
+
bisect.time_it "do stuff:", "echo you should not see me"
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
class TestMinitest::TestBisect::TestPathExpander < Minitest::Test
|
|
202
|
+
def setup
|
|
203
|
+
@orig_i = $LOAD_PATH.dup
|
|
204
|
+
@orig_w = $VERBOSE
|
|
205
|
+
@orig_d = $DEBUG
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def teardown
|
|
209
|
+
$LOAD_PATH.replace @orig_i
|
|
210
|
+
$VERBOSE = @orig_w
|
|
211
|
+
$DEBUG = @orig_d
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def test_sanity
|
|
215
|
+
args = %w[1 -Iblah 2 -d 3 -w 4 5 6 lib/hoe] # lib to not have any test files
|
|
216
|
+
|
|
217
|
+
mtbpe = Minitest::Bisect::PathExpander
|
|
218
|
+
expander = mtbpe.new args
|
|
219
|
+
|
|
220
|
+
files = expander.process.to_a # to_a forces process -> files
|
|
221
|
+
|
|
222
|
+
assert_empty files
|
|
223
|
+
assert_empty $LOAD_PATH - @orig_i
|
|
224
|
+
assert_equal %w[-Iblah -d -w], expander.rb_flags
|
|
225
|
+
assert_equal %w[1 2 3 4 5 6], args
|
|
226
|
+
assert_same mtbpe::TEST_GLOB, expander.glob
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def test_process_flags
|
|
230
|
+
args = %w[1 -Iblah 2 -d 3 -w 4 5 6]
|
|
231
|
+
|
|
232
|
+
expander = Minitest::Bisect::PathExpander.new args
|
|
233
|
+
|
|
234
|
+
exp_files = %w[1 2 3 4 5 6]
|
|
235
|
+
exp_flags = %w[-Iblah -d -w]
|
|
236
|
+
|
|
237
|
+
files = expander.process_flags(args)
|
|
238
|
+
|
|
239
|
+
assert_equal files, exp_files
|
|
240
|
+
|
|
241
|
+
# process_flags only filters and does not mutate args
|
|
242
|
+
assert_same args, expander.args
|
|
243
|
+
refute_equal args, exp_files
|
|
244
|
+
refute_equal files, args
|
|
245
|
+
|
|
246
|
+
# separates rb_flags out for separate handling
|
|
247
|
+
assert_equal exp_flags, expander.rb_flags
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -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
|
|
@@ -165,14 +165,20 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
165
165
|
end
|
|
166
166
|
end
|
|
167
167
|
|
|
168
|
-
def
|
|
168
|
+
def test_assert_equal_string_message
|
|
169
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
|
|
170
176
|
@tc.assert_equal 1, 2, message { "whoops" }
|
|
171
177
|
end
|
|
172
178
|
end
|
|
173
179
|
|
|
174
180
|
def test_assert_equal_different_lambda
|
|
175
|
-
assert_triggered "whoops
|
|
181
|
+
assert_triggered "whoops" do
|
|
176
182
|
@tc.assert_equal 1, 2, lambda { "whoops" }
|
|
177
183
|
end
|
|
178
184
|
end
|
|
@@ -283,26 +289,8 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
283
289
|
end
|
|
284
290
|
|
|
285
291
|
def test_assert_equal_does_not_allow_lhs_nil
|
|
286
|
-
if
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
@assertion_count += 1
|
|
290
|
-
assert_triggered(/Use assert_nil if expecting nil/) do
|
|
291
|
-
@tc.assert_equal nil, nil
|
|
292
|
-
end
|
|
293
|
-
else
|
|
294
|
-
err_re = /.*?test_minitest_\w+.rb:\d+: warning: DEPRECATED: Use assert_nil if expecting nil. This will fail in Minitest 6./
|
|
295
|
-
err_re = "" if $-w.nil?
|
|
296
|
-
|
|
297
|
-
assert_deprecation err_re do
|
|
298
|
-
@tc.assert_equal nil, nil
|
|
299
|
-
end
|
|
300
|
-
end
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
def test_assert_equal_does_not_allow_lhs_nil_triggered
|
|
304
|
-
assert_triggered "Expected: nil\n Actual: false" do
|
|
305
|
-
@tc.assert_equal nil, false
|
|
292
|
+
assert_triggered(/Use assert_nil if expecting nil/) do
|
|
293
|
+
@tc.assert_equal nil, nil
|
|
306
294
|
end
|
|
307
295
|
end
|
|
308
296
|
|
|
@@ -525,10 +513,14 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
525
513
|
end
|
|
526
514
|
|
|
527
515
|
def test_assert_operator
|
|
516
|
+
@assertion_count += 1
|
|
517
|
+
|
|
528
518
|
@tc.assert_operator 2, :>, 1
|
|
529
519
|
end
|
|
530
520
|
|
|
531
521
|
def test_assert_operator_bad_object
|
|
522
|
+
@assertion_count += 1
|
|
523
|
+
|
|
532
524
|
bad = Object.new
|
|
533
525
|
def bad.== _; true end
|
|
534
526
|
|
|
@@ -536,6 +528,8 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
536
528
|
end
|
|
537
529
|
|
|
538
530
|
def test_assert_operator_triggered
|
|
531
|
+
@assertion_count += 1
|
|
532
|
+
|
|
539
533
|
assert_triggered "Expected 2 to be < 1." do
|
|
540
534
|
@tc.assert_operator 2, :<, 1
|
|
541
535
|
end
|
|
@@ -717,10 +711,14 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
717
711
|
end
|
|
718
712
|
|
|
719
713
|
def test_assert_predicate
|
|
714
|
+
@assertion_count += 1
|
|
715
|
+
|
|
720
716
|
@tc.assert_predicate "", :empty?
|
|
721
717
|
end
|
|
722
718
|
|
|
723
719
|
def test_assert_predicate_triggered
|
|
720
|
+
@assertion_count += 1
|
|
721
|
+
|
|
724
722
|
assert_triggered 'Expected "blah" to be empty?.' do
|
|
725
723
|
@tc.assert_predicate "blah", :empty?
|
|
726
724
|
end
|
|
@@ -812,6 +810,66 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
812
810
|
end
|
|
813
811
|
end
|
|
814
812
|
|
|
813
|
+
def test_assert_raises__string_msg
|
|
814
|
+
e = assert_raises Minitest::Assertion do
|
|
815
|
+
@tc.assert_raises RuntimeError, "assertion message" do
|
|
816
|
+
raise SomeError, "blah"
|
|
817
|
+
end
|
|
818
|
+
end
|
|
819
|
+
|
|
820
|
+
expected = <<~EOM.chomp
|
|
821
|
+
assertion message.
|
|
822
|
+
[RuntimeError] exception expected, not
|
|
823
|
+
Class: <SomeError>
|
|
824
|
+
Message: <"blah">
|
|
825
|
+
---Backtrace---
|
|
826
|
+
FILE:LINE:in 'block in test_assert_raises__string_msg'
|
|
827
|
+
---------------
|
|
828
|
+
EOM
|
|
829
|
+
|
|
830
|
+
actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
|
|
831
|
+
actual.gsub! RE_LEVELS, "" unless jruby?
|
|
832
|
+
actual.gsub!(/[`']block in (?:TestMinitestAssertions#)?/, "'block in ")
|
|
833
|
+
|
|
834
|
+
assert_equal expected, actual
|
|
835
|
+
end
|
|
836
|
+
|
|
837
|
+
def test_assert_raises__regexp_err
|
|
838
|
+
@assertion_count = 0
|
|
839
|
+
|
|
840
|
+
e = assert_raises TypeError do
|
|
841
|
+
@tc.assert_raises RuntimeError, %r%does not work%, "assertion message" do
|
|
842
|
+
raise SomeError, "blah"
|
|
843
|
+
end
|
|
844
|
+
end
|
|
845
|
+
|
|
846
|
+
expected = <<~EOM.chomp
|
|
847
|
+
class or module required for rescue clause. Got [RuntimeError, /does not work/]
|
|
848
|
+
EOM
|
|
849
|
+
|
|
850
|
+
actual = e.message
|
|
851
|
+
|
|
852
|
+
assert_equal expected, actual
|
|
853
|
+
end
|
|
854
|
+
|
|
855
|
+
def test_assert_raises__regexp_err_default
|
|
856
|
+
@assertion_count = 0
|
|
857
|
+
|
|
858
|
+
e = assert_raises TypeError do
|
|
859
|
+
@tc.assert_raises %r%does not work% do
|
|
860
|
+
raise "blah"
|
|
861
|
+
end
|
|
862
|
+
end
|
|
863
|
+
|
|
864
|
+
expected = <<~EOM.chomp
|
|
865
|
+
class or module required for rescue clause. Got [/does not work/]
|
|
866
|
+
EOM
|
|
867
|
+
|
|
868
|
+
actual = e.message
|
|
869
|
+
|
|
870
|
+
assert_equal expected, actual
|
|
871
|
+
end
|
|
872
|
+
|
|
815
873
|
def test_assert_raises_subclass
|
|
816
874
|
@tc.assert_raises StandardError do
|
|
817
875
|
raise AnError
|
|
@@ -962,25 +1020,9 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
962
1020
|
end
|
|
963
1021
|
end
|
|
964
1022
|
|
|
965
|
-
def
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
@tc.assert_send [1, :<, 2]
|
|
969
|
-
end
|
|
970
|
-
end
|
|
971
|
-
|
|
972
|
-
def test_assert_send_bad
|
|
973
|
-
if error_on_warn? then
|
|
974
|
-
@assertion_count = 0
|
|
975
|
-
assert_deprecation(/DEPRECATED: assert_send/) do
|
|
976
|
-
@tc.assert_send [1, :>, 2]
|
|
977
|
-
end
|
|
978
|
-
else
|
|
979
|
-
assert_triggered "Expected 1.>(*[2]) to return true." do
|
|
980
|
-
assert_deprecation(/DEPRECATED: assert_send/) do
|
|
981
|
-
@tc.assert_send [1, :>, 2]
|
|
982
|
-
end
|
|
983
|
-
end
|
|
1023
|
+
def test_assert_same__does_not_allow_lhs_nil
|
|
1024
|
+
assert_triggered(/Use assert_nil if expecting nil/) do
|
|
1025
|
+
@tc.assert_same nil, nil
|
|
984
1026
|
end
|
|
985
1027
|
end
|
|
986
1028
|
|
|
@@ -1141,7 +1183,7 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1141
1183
|
|
|
1142
1184
|
# These don't have corresponding refutes _on purpose_. They're
|
|
1143
1185
|
# useless and will never be added, so don't bother.
|
|
1144
|
-
ignores = %w[assert_output assert_raises
|
|
1186
|
+
ignores = %w[assert_output assert_raises
|
|
1145
1187
|
assert_silent assert_throws assert_mock]
|
|
1146
1188
|
|
|
1147
1189
|
ignores += %w[assert_allocations] # for minitest-gcstats
|
|
@@ -1342,10 +1384,14 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1342
1384
|
end
|
|
1343
1385
|
|
|
1344
1386
|
def test_refute_operator
|
|
1387
|
+
@assertion_count += 1
|
|
1388
|
+
|
|
1345
1389
|
@tc.refute_operator 2, :<, 1
|
|
1346
1390
|
end
|
|
1347
1391
|
|
|
1348
1392
|
def test_refute_operator_bad_object
|
|
1393
|
+
@assertion_count += 1
|
|
1394
|
+
|
|
1349
1395
|
bad = Object.new
|
|
1350
1396
|
def bad.== _; true end
|
|
1351
1397
|
|
|
@@ -1353,6 +1399,8 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1353
1399
|
end
|
|
1354
1400
|
|
|
1355
1401
|
def test_refute_operator_triggered
|
|
1402
|
+
@assertion_count += 1
|
|
1403
|
+
|
|
1356
1404
|
assert_triggered "Expected 2 to not be > 1." do
|
|
1357
1405
|
@tc.refute_operator 2, :>, 1
|
|
1358
1406
|
end
|
|
@@ -1389,10 +1437,14 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1389
1437
|
end
|
|
1390
1438
|
|
|
1391
1439
|
def test_refute_predicate
|
|
1440
|
+
@assertion_count += 1
|
|
1441
|
+
|
|
1392
1442
|
@tc.refute_predicate "42", :empty?
|
|
1393
1443
|
end
|
|
1394
1444
|
|
|
1395
1445
|
def test_refute_predicate_triggered
|
|
1446
|
+
@assertion_count += 1
|
|
1447
|
+
|
|
1396
1448
|
assert_triggered 'Expected "" to not be empty?.' do
|
|
1397
1449
|
@tc.refute_predicate "", :empty?
|
|
1398
1450
|
end
|
|
@@ -1568,10 +1620,10 @@ class TestMinitestAssertionHelpers < Minitest::Test
|
|
|
1568
1620
|
assert_equal "blah1.\nblah2.", message("blah1") { "blah2" }.call
|
|
1569
1621
|
|
|
1570
1622
|
message = proc { "blah1" }
|
|
1571
|
-
assert_equal "blah1
|
|
1623
|
+
assert_equal "blah1", message(message) { "blah2" }.call
|
|
1572
1624
|
|
|
1573
1625
|
message = message { "blah1" }
|
|
1574
|
-
assert_equal "blah1
|
|
1626
|
+
assert_equal "blah1.", message(message) { "blah2" }.call
|
|
1575
1627
|
end
|
|
1576
1628
|
|
|
1577
1629
|
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
|