minitest 5.27.0 → 6.0.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 +108 -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 +26 -55
- 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 +36 -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 +2 -3
- 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
|
|
@@ -962,25 +960,9 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
962
960
|
end
|
|
963
961
|
end
|
|
964
962
|
|
|
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
|
|
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
|
|
984
966
|
end
|
|
985
967
|
end
|
|
986
968
|
|
|
@@ -1141,7 +1123,7 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1141
1123
|
|
|
1142
1124
|
# These don't have corresponding refutes _on purpose_. They're
|
|
1143
1125
|
# useless and will never be added, so don't bother.
|
|
1144
|
-
ignores = %w[assert_output assert_raises
|
|
1126
|
+
ignores = %w[assert_output assert_raises
|
|
1145
1127
|
assert_silent assert_throws assert_mock]
|
|
1146
1128
|
|
|
1147
1129
|
ignores += %w[assert_allocations] # for minitest-gcstats
|
|
@@ -1342,10 +1324,14 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1342
1324
|
end
|
|
1343
1325
|
|
|
1344
1326
|
def test_refute_operator
|
|
1327
|
+
@assertion_count += 1
|
|
1328
|
+
|
|
1345
1329
|
@tc.refute_operator 2, :<, 1
|
|
1346
1330
|
end
|
|
1347
1331
|
|
|
1348
1332
|
def test_refute_operator_bad_object
|
|
1333
|
+
@assertion_count += 1
|
|
1334
|
+
|
|
1349
1335
|
bad = Object.new
|
|
1350
1336
|
def bad.== _; true end
|
|
1351
1337
|
|
|
@@ -1353,6 +1339,8 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1353
1339
|
end
|
|
1354
1340
|
|
|
1355
1341
|
def test_refute_operator_triggered
|
|
1342
|
+
@assertion_count += 1
|
|
1343
|
+
|
|
1356
1344
|
assert_triggered "Expected 2 to not be > 1." do
|
|
1357
1345
|
@tc.refute_operator 2, :>, 1
|
|
1358
1346
|
end
|
|
@@ -1389,10 +1377,14 @@ class TestMinitestAssertions < Minitest::Test
|
|
|
1389
1377
|
end
|
|
1390
1378
|
|
|
1391
1379
|
def test_refute_predicate
|
|
1380
|
+
@assertion_count += 1
|
|
1381
|
+
|
|
1392
1382
|
@tc.refute_predicate "42", :empty?
|
|
1393
1383
|
end
|
|
1394
1384
|
|
|
1395
1385
|
def test_refute_predicate_triggered
|
|
1386
|
+
@assertion_count += 1
|
|
1387
|
+
|
|
1396
1388
|
assert_triggered 'Expected "" to not be empty?.' do
|
|
1397
1389
|
@tc.refute_predicate "", :empty?
|
|
1398
1390
|
end
|
|
@@ -1568,10 +1560,10 @@ class TestMinitestAssertionHelpers < Minitest::Test
|
|
|
1568
1560
|
assert_equal "blah1.\nblah2.", message("blah1") { "blah2" }.call
|
|
1569
1561
|
|
|
1570
1562
|
message = proc { "blah1" }
|
|
1571
|
-
assert_equal "blah1
|
|
1563
|
+
assert_equal "blah1", message(message) { "blah2" }.call
|
|
1572
1564
|
|
|
1573
1565
|
message = message { "blah1" }
|
|
1574
|
-
assert_equal "blah1
|
|
1566
|
+
assert_equal "blah1.", message(message) { "blah2" }.call
|
|
1575
1567
|
end
|
|
1576
1568
|
|
|
1577
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
|