minitest 5.14.4 → 5.25.5
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 +283 -2
- data/Manifest.txt +5 -0
- data/README.rdoc +78 -36
- data/Rakefile +8 -1
- data/lib/hoe/minitest.rb +2 -5
- data/lib/minitest/assertions.rb +131 -83
- data/lib/minitest/autorun.rb +0 -7
- data/lib/minitest/benchmark.rb +11 -14
- data/lib/minitest/compress.rb +94 -0
- data/lib/minitest/error_on_warning.rb +11 -0
- data/lib/minitest/expectations.rb +18 -0
- data/lib/minitest/manual_plugins.rb +16 -0
- data/lib/minitest/mock.rb +148 -45
- data/lib/minitest/parallel.rb +5 -5
- data/lib/minitest/pride_plugin.rb +17 -24
- data/lib/minitest/spec.rb +20 -12
- data/lib/minitest/test.rb +51 -34
- data/lib/minitest/test_task.rb +307 -0
- data/lib/minitest/unit.rb +5 -8
- data/lib/minitest.rb +333 -154
- data/test/minitest/metametameta.rb +33 -19
- data/test/minitest/test_minitest_assertions.rb +292 -147
- data/test/minitest/test_minitest_benchmark.rb +3 -3
- data/test/minitest/test_minitest_mock.rb +396 -62
- data/test/minitest/test_minitest_reporter.rb +169 -32
- data/test/minitest/test_minitest_spec.rb +174 -72
- data/test/minitest/test_minitest_test.rb +420 -130
- data/test/minitest/test_minitest_test_task.rb +57 -0
- data.tar.gz.sig +0 -0
- metadata +23 -20
- metadata.gz.sig +0 -0
@@ -1,7 +1,8 @@
|
|
1
1
|
require "minitest/autorun"
|
2
2
|
require "minitest/metametameta"
|
3
|
+
require "forwardable"
|
3
4
|
|
4
|
-
class
|
5
|
+
class FakeTest < Minitest::Test
|
5
6
|
def woot
|
6
7
|
assert true
|
7
8
|
end
|
@@ -16,33 +17,23 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
16
17
|
reporter << Minitest::SummaryReporter.new(self.io)
|
17
18
|
reporter << Minitest::ProgressReporter.new(self.io)
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def reporter.results
|
24
|
-
first.results
|
25
|
-
end
|
26
|
-
|
27
|
-
def reporter.count
|
28
|
-
first.count
|
29
|
-
end
|
30
|
-
|
31
|
-
def reporter.assertions
|
32
|
-
first.assertions
|
33
|
-
end
|
20
|
+
# eg reporter.results -> reporters.first.results
|
21
|
+
reporter.extend Forwardable
|
22
|
+
reporter.delegate :first => :reporters
|
23
|
+
reporter.delegate %i[results count assertions options to_s] => :first
|
34
24
|
|
35
25
|
reporter
|
36
26
|
end
|
37
27
|
|
38
28
|
def setup
|
39
|
-
|
29
|
+
super
|
30
|
+
self.io = StringIO.new(+"")
|
40
31
|
self.r = new_composite_reporter
|
41
32
|
end
|
42
33
|
|
43
34
|
def error_test
|
44
35
|
unless defined? @et then
|
45
|
-
@et =
|
36
|
+
@et = FakeTest.new :woot
|
46
37
|
@et.failures << Minitest::UnexpectedError.new(begin
|
47
38
|
raise "no"
|
48
39
|
rescue => e
|
@@ -53,9 +44,28 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
53
44
|
@et
|
54
45
|
end
|
55
46
|
|
47
|
+
def system_stack_error_test
|
48
|
+
unless defined? @sse then
|
49
|
+
|
50
|
+
ex = SystemStackError.new
|
51
|
+
|
52
|
+
pre = ("a".."c").to_a
|
53
|
+
mid = ("aa".."ad").to_a * 67
|
54
|
+
post = ("d".."f").to_a
|
55
|
+
ary = pre + mid + post
|
56
|
+
|
57
|
+
ex.set_backtrace ary
|
58
|
+
|
59
|
+
@sse = FakeTest.new :woot
|
60
|
+
@sse.failures << Minitest::UnexpectedError.new(ex)
|
61
|
+
@sse = Minitest::Result.from @sse
|
62
|
+
end
|
63
|
+
@sse
|
64
|
+
end
|
65
|
+
|
56
66
|
def fail_test
|
57
67
|
unless defined? @ft then
|
58
|
-
@ft =
|
68
|
+
@ft = FakeTest.new :woot
|
59
69
|
@ft.failures << begin
|
60
70
|
raise Minitest::Assertion, "boo"
|
61
71
|
rescue Minitest::Assertion => e
|
@@ -67,12 +77,18 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
67
77
|
end
|
68
78
|
|
69
79
|
def passing_test
|
70
|
-
@pt ||= Minitest::Result.from
|
80
|
+
@pt ||= Minitest::Result.from FakeTest.new(:woot)
|
81
|
+
end
|
82
|
+
|
83
|
+
def passing_test_with_metadata
|
84
|
+
test = FakeTest.new :woot
|
85
|
+
test.metadata[:meta] = :data
|
86
|
+
@pt ||= Minitest::Result.from test
|
71
87
|
end
|
72
88
|
|
73
89
|
def skip_test
|
74
90
|
unless defined? @st then
|
75
|
-
@st =
|
91
|
+
@st = FakeTest.new :woot
|
76
92
|
@st.failures << begin
|
77
93
|
raise Minitest::Skip
|
78
94
|
rescue Minitest::Assertion => e
|
@@ -86,7 +102,25 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
86
102
|
def test_to_s
|
87
103
|
r.record passing_test
|
88
104
|
r.record fail_test
|
89
|
-
assert_match "woot", r.
|
105
|
+
assert_match "woot", r.to_s
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_options_skip_F
|
109
|
+
r.options[:skip] = "F"
|
110
|
+
|
111
|
+
r.record passing_test
|
112
|
+
r.record fail_test
|
113
|
+
|
114
|
+
refute_match "woot", r.to_s
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_options_skip_E
|
118
|
+
r.options[:skip] = "E"
|
119
|
+
|
120
|
+
r.record passing_test
|
121
|
+
r.record error_test
|
122
|
+
|
123
|
+
refute_match "RuntimeError: no", r.to_s
|
90
124
|
end
|
91
125
|
|
92
126
|
def test_passed_eh_empty
|
@@ -126,7 +160,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
126
160
|
end
|
127
161
|
|
128
162
|
def test_passed_eh_skipped_verbose
|
129
|
-
r.
|
163
|
+
r.options[:verbose] = true
|
130
164
|
|
131
165
|
r.start
|
132
166
|
r.results << skip_test
|
@@ -153,6 +187,29 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
153
187
|
assert_equal 0, r.assertions
|
154
188
|
end
|
155
189
|
|
190
|
+
def test_record_pass_with_metadata
|
191
|
+
reporter = self.r
|
192
|
+
|
193
|
+
def reporter.metadata
|
194
|
+
@metadata
|
195
|
+
end
|
196
|
+
|
197
|
+
def reporter.record result
|
198
|
+
super
|
199
|
+
@metadata = result.metadata if result.metadata?
|
200
|
+
end
|
201
|
+
|
202
|
+
r.record passing_test_with_metadata
|
203
|
+
|
204
|
+
exp = { :meta => :data }
|
205
|
+
assert_equal exp, reporter.metadata
|
206
|
+
|
207
|
+
assert_equal ".", io.string
|
208
|
+
assert_empty r.results
|
209
|
+
assert_equal 1, r.count
|
210
|
+
assert_equal 0, r.assertions
|
211
|
+
end
|
212
|
+
|
156
213
|
def test_record_fail
|
157
214
|
fail_test = self.fail_test
|
158
215
|
r.record fail_test
|
@@ -187,7 +244,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
187
244
|
r.start
|
188
245
|
r.report
|
189
246
|
|
190
|
-
exp =
|
247
|
+
exp = <<~EOM
|
191
248
|
Run options:
|
192
249
|
|
193
250
|
# Running:
|
@@ -207,7 +264,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
207
264
|
r.record passing_test
|
208
265
|
r.report
|
209
266
|
|
210
|
-
exp =
|
267
|
+
exp = <<~EOM
|
211
268
|
Run options:
|
212
269
|
|
213
270
|
# Running:
|
@@ -227,7 +284,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
227
284
|
r.record fail_test
|
228
285
|
r.report
|
229
286
|
|
230
|
-
exp =
|
287
|
+
exp = <<~EOM
|
231
288
|
Run options:
|
232
289
|
|
233
290
|
# Running:
|
@@ -237,7 +294,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
237
294
|
Finished in 0.00
|
238
295
|
|
239
296
|
1) Failure:
|
240
|
-
|
297
|
+
FakeTest#woot [FILE:LINE]:
|
241
298
|
boo
|
242
299
|
|
243
300
|
1 runs, 0 assertions, 1 failures, 0 errors, 0 skips
|
@@ -251,7 +308,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
251
308
|
r.record error_test
|
252
309
|
r.report
|
253
310
|
|
254
|
-
exp =
|
311
|
+
exp = <<~EOM
|
255
312
|
Run options:
|
256
313
|
|
257
314
|
# Running:
|
@@ -261,10 +318,46 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
261
318
|
Finished in 0.00
|
262
319
|
|
263
320
|
1) Error:
|
264
|
-
|
321
|
+
FakeTest#woot:
|
265
322
|
RuntimeError: no
|
266
|
-
FILE:LINE:in
|
267
|
-
FILE:LINE:in
|
323
|
+
FILE:LINE:in 'error_test'
|
324
|
+
FILE:LINE:in 'test_report_error'
|
325
|
+
|
326
|
+
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
|
327
|
+
EOM
|
328
|
+
|
329
|
+
assert_equal exp, normalize_output(io.string)
|
330
|
+
end
|
331
|
+
|
332
|
+
def test_report_error__sse
|
333
|
+
r.start
|
334
|
+
r.record system_stack_error_test
|
335
|
+
r.report
|
336
|
+
|
337
|
+
exp = <<~EOM
|
338
|
+
Run options:
|
339
|
+
|
340
|
+
# Running:
|
341
|
+
|
342
|
+
E
|
343
|
+
|
344
|
+
Finished in 0.00
|
345
|
+
|
346
|
+
1) Error:
|
347
|
+
FakeTest#woot:
|
348
|
+
SystemStackError: 274 -> 12
|
349
|
+
a
|
350
|
+
b
|
351
|
+
c
|
352
|
+
+->> 67 cycles of 4 lines:
|
353
|
+
| aa
|
354
|
+
| ab
|
355
|
+
| ac
|
356
|
+
| ad
|
357
|
+
+-<<
|
358
|
+
d
|
359
|
+
e
|
360
|
+
f
|
268
361
|
|
269
362
|
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
|
270
363
|
EOM
|
@@ -280,7 +373,7 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
280
373
|
r.report
|
281
374
|
end
|
282
375
|
|
283
|
-
exp =
|
376
|
+
exp = <<~EOM
|
284
377
|
Run options:
|
285
378
|
|
286
379
|
# Running:
|
@@ -296,4 +389,48 @@ class TestMinitestReporter < MetaMetaMetaTestCase
|
|
296
389
|
|
297
390
|
assert_equal exp, normalize_output(io.string)
|
298
391
|
end
|
392
|
+
|
393
|
+
def test_report_failure_uses_backtrace_filter
|
394
|
+
filter = Minitest::BacktraceFilter.new
|
395
|
+
def filter.filter _bt
|
396
|
+
["foo.rb:123:in 'foo'"]
|
397
|
+
end
|
398
|
+
|
399
|
+
with_backtrace_filter filter do
|
400
|
+
r.start
|
401
|
+
r.record fail_test
|
402
|
+
r.report
|
403
|
+
end
|
404
|
+
|
405
|
+
exp = "FakeTest#woot [foo.rb:123]"
|
406
|
+
|
407
|
+
assert_includes io.string, exp
|
408
|
+
end
|
409
|
+
|
410
|
+
def test_report_failure_uses_backtrace_filter_complex_sorbet
|
411
|
+
backtrace = <<~EOBT
|
412
|
+
/Users/user/.gem/ruby/3.2.2/gems/minitest-5.20.0/lib/minitest/assertions.rb:183:in 'assert'
|
413
|
+
example_test.rb:9:in 'assert_false'
|
414
|
+
/Users/user/.gem/ruby/3.2.2/gems/sorbet-runtime-0.5.11068/lib/types/private/methods/call_validation.rb:256:in 'bind_call'
|
415
|
+
/Users/user/.gem/ruby/3.2.2/gems/sorbet-runtime-0.5.11068/lib/types/private/methods/call_validation.rb:256:in 'validate_call'
|
416
|
+
/Users/user/.gem/ruby/3.2.2/gems/sorbet-runtime-0.5.11068/lib/types/private/methods/_methods.rb:275:in 'block in _on_method_added'
|
417
|
+
example_test.rb:25:in 'test_something'
|
418
|
+
/Users/user/.gem/ruby/3.2.2/gems/minitest-5.20.0/lib/minitest/test.rb:94:in 'block (3 levels) in run'
|
419
|
+
/Users/user/.gem/ruby/3.2.2/gems/minitest-5.20.0/lib/minitest/test.rb:191:in 'capture_exceptions'
|
420
|
+
/Users/user/.gem/ruby/3.2.2/gems/minitest-5.20.0/lib/minitest/test.rb:89:in 'block (2 levels) in run'
|
421
|
+
... so many lines ...
|
422
|
+
EOBT
|
423
|
+
|
424
|
+
filter = Minitest::BacktraceFilter.new %r%lib/minitest|gems/sorbet%
|
425
|
+
|
426
|
+
with_backtrace_filter filter do
|
427
|
+
begin
|
428
|
+
assert_equal 1, 2
|
429
|
+
rescue Minitest::Assertion => e
|
430
|
+
e.set_backtrace backtrace.lines.map(&:chomp)
|
431
|
+
|
432
|
+
assert_match "example_test.rb:25", e.location
|
433
|
+
end
|
434
|
+
end
|
435
|
+
end
|
299
436
|
end
|