minitest 4.7.5 → 5.0.0
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.
- data.tar.gz.sig +0 -0
- data/.autotest +1 -2
- data/History.txt +72 -21
- data/Manifest.txt +6 -0
- data/README.txt +57 -60
- data/design_rationale.rb +1 -1
- data/lib/hoe/minitest.rb +9 -5
- data/lib/minitest.rb +639 -0
- data/lib/minitest/assertions.rb +643 -0
- data/lib/minitest/autorun.rb +6 -6
- data/lib/minitest/benchmark.rb +92 -85
- data/lib/minitest/expectations.rb +268 -0
- data/lib/minitest/hell.rb +3 -5
- data/lib/minitest/mock.rb +3 -4
- data/lib/minitest/parallel_each.rb +59 -12
- data/lib/minitest/pride.rb +3 -111
- data/lib/minitest/pride_plugin.rb +143 -0
- data/lib/minitest/spec.rb +44 -312
- data/lib/minitest/test.rb +287 -0
- data/lib/minitest/unit.rb +33 -1407
- data/test/minitest/metametameta.rb +33 -30
- data/test/minitest/test_minitest_benchmark.rb +11 -9
- data/test/minitest/test_minitest_mock.rb +46 -48
- data/test/minitest/test_minitest_reporter.rb +245 -0
- data/test/minitest/test_minitest_spec.rb +46 -63
- data/test/minitest/test_minitest_unit.rb +213 -232
- metadata +12 -5
- metadata.gz.sig +0 -0
data/lib/minitest/autorun.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
begin
|
2
|
-
require
|
3
|
-
gem
|
2
|
+
require "rubygems"
|
3
|
+
gem "minitest"
|
4
4
|
rescue Gem::LoadError
|
5
5
|
# do nothing
|
6
6
|
end
|
7
7
|
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
8
|
+
require "minitest"
|
9
|
+
require "minitest/spec"
|
10
|
+
require "minitest/mock"
|
11
11
|
|
12
|
-
|
12
|
+
Minitest.autorun
|
data/lib/minitest/benchmark.rb
CHANGED
@@ -1,16 +1,32 @@
|
|
1
1
|
require 'minitest/unit'
|
2
2
|
require 'minitest/spec'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
module Minitest
|
5
|
+
##
|
6
|
+
# Subclass Benchmark to create your own benchmark runs. Methods
|
7
|
+
# starting with "bench_" get executed on a per-class.
|
8
|
+
#
|
9
|
+
# See Minitest::Assertions
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
class Benchmark < Test
|
12
|
+
def self.io # :nodoc:
|
13
|
+
@io
|
14
|
+
end
|
15
|
+
|
16
|
+
def io # :nodoc:
|
17
|
+
self.class.io
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.run reporter, options = {} # :nodoc:
|
21
|
+
# NOTE: this is truly horrible... but I don't see a way around this ATM.
|
22
|
+
@io = reporter.reporters.first.io
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.runnable_methods # :nodoc:
|
27
|
+
methods_matching(/^bench_/)
|
28
|
+
end
|
12
29
|
|
13
|
-
class TestCase
|
14
30
|
##
|
15
31
|
# Returns a set of ranges stepped exponentially from +min+ to
|
16
32
|
# +max+ by powers of +base+. Eg:
|
@@ -36,21 +52,6 @@ class MiniTest::Unit # :nodoc:
|
|
36
52
|
r = []; (min..max).step(step) { |n| r << n }; r
|
37
53
|
end
|
38
54
|
|
39
|
-
##
|
40
|
-
# Returns the benchmark methods (methods that start with bench_)
|
41
|
-
# for that class.
|
42
|
-
|
43
|
-
def self.benchmark_methods # :nodoc:
|
44
|
-
public_instance_methods(true).grep(/^bench_/).map { |m| m.to_s }.sort
|
45
|
-
end
|
46
|
-
|
47
|
-
##
|
48
|
-
# Returns all test suites that have benchmark methods.
|
49
|
-
|
50
|
-
def self.benchmark_suites
|
51
|
-
TestCase.test_suites.reject { |s| s.benchmark_methods.empty? }
|
52
|
-
end
|
53
|
-
|
54
55
|
##
|
55
56
|
# Specifies the ranges used for benchmarking for that class.
|
56
57
|
# Defaults to exponential growth from 1 to 10k by powers of 10.
|
@@ -83,7 +84,7 @@ class MiniTest::Unit # :nodoc:
|
|
83
84
|
def assert_performance validation, &work
|
84
85
|
range = self.class.bench_range
|
85
86
|
|
86
|
-
io.print "#{
|
87
|
+
io.print "#{self.name}"
|
87
88
|
|
88
89
|
times = []
|
89
90
|
|
@@ -341,76 +342,82 @@ class MiniTest::Unit # :nodoc:
|
|
341
342
|
end
|
342
343
|
end
|
343
344
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
# use this directly and is intended for those needing to write new
|
348
|
-
# performance curve fits (eg: you need a specific polynomial fit).
|
349
|
-
#
|
350
|
-
# See ::bench_performance_linear for an example of how to use this.
|
345
|
+
module Minitest
|
346
|
+
class BenchSpec < Benchmark
|
347
|
+
extend Minitest::Spec::DSL
|
351
348
|
|
352
|
-
|
353
|
-
|
354
|
-
|
349
|
+
##
|
350
|
+
# This is used to define a new benchmark method. You usually don't
|
351
|
+
# use this directly and is intended for those needing to write new
|
352
|
+
# performance curve fits (eg: you need a specific polynomial fit).
|
353
|
+
#
|
354
|
+
# See ::bench_performance_linear for an example of how to use this.
|
355
355
|
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
356
|
+
def self.bench name, &block
|
357
|
+
define_method "bench_#{name.gsub(/\W+/, '_')}", &block
|
358
|
+
end
|
359
|
+
|
360
|
+
##
|
361
|
+
# Specifies the ranges used for benchmarking for that class.
|
362
|
+
#
|
363
|
+
# bench_range do
|
364
|
+
# bench_exp(2, 16, 2)
|
365
|
+
# end
|
366
|
+
#
|
367
|
+
# See Minitest::Benchmark#bench_range for more details.
|
364
368
|
|
365
|
-
|
366
|
-
|
369
|
+
def self.bench_range &block
|
370
|
+
return super unless block
|
367
371
|
|
368
|
-
|
369
|
-
|
370
|
-
|
372
|
+
meta = (class << self; self; end)
|
373
|
+
meta.send :define_method, "bench_range", &block
|
374
|
+
end
|
371
375
|
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
376
|
+
##
|
377
|
+
# Create a benchmark that verifies that the performance is linear.
|
378
|
+
#
|
379
|
+
# describe "my class" do
|
380
|
+
# bench_performance_linear "fast_algorithm", 0.9999 do |n|
|
381
|
+
# @obj.fast_algorithm(n)
|
382
|
+
# end
|
383
|
+
# end
|
384
|
+
|
385
|
+
def self.bench_performance_linear name, threshold = 0.99, &work
|
386
|
+
bench name do
|
387
|
+
assert_performance_linear threshold, &work
|
388
|
+
end
|
384
389
|
end
|
385
|
-
end
|
386
390
|
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
391
|
+
##
|
392
|
+
# Create a benchmark that verifies that the performance is constant.
|
393
|
+
#
|
394
|
+
# describe "my class" do
|
395
|
+
# bench_performance_constant "zoom_algorithm!" do |n|
|
396
|
+
# @obj.zoom_algorithm!(n)
|
397
|
+
# end
|
398
|
+
# end
|
399
|
+
|
400
|
+
def self.bench_performance_constant name, threshold = 0.99, &work
|
401
|
+
bench name do
|
402
|
+
assert_performance_constant threshold, &work
|
403
|
+
end
|
399
404
|
end
|
400
|
-
end
|
401
405
|
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
406
|
+
##
|
407
|
+
# Create a benchmark that verifies that the performance is exponential.
|
408
|
+
#
|
409
|
+
# describe "my class" do
|
410
|
+
# bench_performance_exponential "algorithm" do |n|
|
411
|
+
# @obj.algorithm(n)
|
412
|
+
# end
|
413
|
+
# end
|
414
|
+
|
415
|
+
def self.bench_performance_exponential name, threshold = 0.99, &work
|
416
|
+
bench name do
|
417
|
+
assert_performance_exponential threshold, &work
|
418
|
+
end
|
414
419
|
end
|
415
420
|
end
|
421
|
+
|
422
|
+
Minitest::Spec.register_spec_type(/Bench(mark)?$/, Minitest::BenchSpec)
|
416
423
|
end
|
@@ -0,0 +1,268 @@
|
|
1
|
+
##
|
2
|
+
# It's where you hide your "assertions".
|
3
|
+
|
4
|
+
module Minitest::Expectations
|
5
|
+
##
|
6
|
+
# See Minitest::Assertions#assert_empty.
|
7
|
+
#
|
8
|
+
# collection.must_be_empty
|
9
|
+
#
|
10
|
+
# :method: must_be_empty
|
11
|
+
|
12
|
+
infect_an_assertion :assert_empty, :must_be_empty, :unary
|
13
|
+
|
14
|
+
##
|
15
|
+
# See Minitest::Assertions#assert_equal
|
16
|
+
#
|
17
|
+
# a.must_equal b
|
18
|
+
#
|
19
|
+
# :method: must_equal
|
20
|
+
|
21
|
+
infect_an_assertion :assert_equal, :must_equal
|
22
|
+
|
23
|
+
##
|
24
|
+
# See Minitest::Assertions#assert_in_delta
|
25
|
+
#
|
26
|
+
# n.must_be_close_to m [, delta]
|
27
|
+
#
|
28
|
+
# :method: must_be_close_to
|
29
|
+
|
30
|
+
infect_an_assertion :assert_in_delta, :must_be_close_to
|
31
|
+
|
32
|
+
alias :must_be_within_delta :must_be_close_to # :nodoc:
|
33
|
+
|
34
|
+
##
|
35
|
+
# See Minitest::Assertions#assert_in_epsilon
|
36
|
+
#
|
37
|
+
# n.must_be_within_epsilon m [, epsilon]
|
38
|
+
#
|
39
|
+
# :method: must_be_within_epsilon
|
40
|
+
|
41
|
+
infect_an_assertion :assert_in_epsilon, :must_be_within_epsilon
|
42
|
+
|
43
|
+
##
|
44
|
+
# See Minitest::Assertions#assert_includes
|
45
|
+
#
|
46
|
+
# collection.must_include obj
|
47
|
+
#
|
48
|
+
# :method: must_include
|
49
|
+
|
50
|
+
infect_an_assertion :assert_includes, :must_include, :reverse
|
51
|
+
|
52
|
+
##
|
53
|
+
# See Minitest::Assertions#assert_instance_of
|
54
|
+
#
|
55
|
+
# obj.must_be_instance_of klass
|
56
|
+
#
|
57
|
+
# :method: must_be_instance_of
|
58
|
+
|
59
|
+
infect_an_assertion :assert_instance_of, :must_be_instance_of
|
60
|
+
|
61
|
+
##
|
62
|
+
# See Minitest::Assertions#assert_kind_of
|
63
|
+
#
|
64
|
+
# obj.must_be_kind_of mod
|
65
|
+
#
|
66
|
+
# :method: must_be_kind_of
|
67
|
+
|
68
|
+
infect_an_assertion :assert_kind_of, :must_be_kind_of
|
69
|
+
|
70
|
+
##
|
71
|
+
# See Minitest::Assertions#assert_match
|
72
|
+
#
|
73
|
+
# a.must_match b
|
74
|
+
#
|
75
|
+
# :method: must_match
|
76
|
+
|
77
|
+
infect_an_assertion :assert_match, :must_match
|
78
|
+
|
79
|
+
##
|
80
|
+
# See Minitest::Assertions#assert_nil
|
81
|
+
#
|
82
|
+
# obj.must_be_nil
|
83
|
+
#
|
84
|
+
# :method: must_be_nil
|
85
|
+
|
86
|
+
infect_an_assertion :assert_nil, :must_be_nil, :unary
|
87
|
+
|
88
|
+
##
|
89
|
+
# See Minitest::Assertions#assert_operator
|
90
|
+
#
|
91
|
+
# n.must_be :<=, 42
|
92
|
+
#
|
93
|
+
# This can also do predicates:
|
94
|
+
#
|
95
|
+
# str.must_be :empty?
|
96
|
+
#
|
97
|
+
# :method: must_be
|
98
|
+
|
99
|
+
infect_an_assertion :assert_operator, :must_be, :reverse
|
100
|
+
|
101
|
+
##
|
102
|
+
# See Minitest::Assertions#assert_output
|
103
|
+
#
|
104
|
+
# proc { ... }.must_output out_or_nil [, err]
|
105
|
+
#
|
106
|
+
# :method: must_output
|
107
|
+
|
108
|
+
infect_an_assertion :assert_output, :must_output
|
109
|
+
|
110
|
+
##
|
111
|
+
# See Minitest::Assertions#assert_raises
|
112
|
+
#
|
113
|
+
# proc { ... }.must_raise exception
|
114
|
+
#
|
115
|
+
# :method: must_raise
|
116
|
+
|
117
|
+
infect_an_assertion :assert_raises, :must_raise
|
118
|
+
|
119
|
+
##
|
120
|
+
# See Minitest::Assertions#assert_respond_to
|
121
|
+
#
|
122
|
+
# obj.must_respond_to msg
|
123
|
+
#
|
124
|
+
# :method: must_respond_to
|
125
|
+
|
126
|
+
infect_an_assertion :assert_respond_to, :must_respond_to, :reverse
|
127
|
+
|
128
|
+
##
|
129
|
+
# See Minitest::Assertions#assert_same
|
130
|
+
#
|
131
|
+
# a.must_be_same_as b
|
132
|
+
#
|
133
|
+
# :method: must_be_same_as
|
134
|
+
|
135
|
+
infect_an_assertion :assert_same, :must_be_same_as
|
136
|
+
|
137
|
+
##
|
138
|
+
# See Minitest::Assertions#assert_silent
|
139
|
+
#
|
140
|
+
# proc { ... }.must_be_silent
|
141
|
+
#
|
142
|
+
# :method: must_be_silent
|
143
|
+
|
144
|
+
infect_an_assertion :assert_silent, :must_be_silent
|
145
|
+
|
146
|
+
##
|
147
|
+
# See Minitest::Assertions#assert_throws
|
148
|
+
#
|
149
|
+
# proc { ... }.must_throw sym
|
150
|
+
#
|
151
|
+
# :method: must_throw
|
152
|
+
|
153
|
+
infect_an_assertion :assert_throws, :must_throw
|
154
|
+
|
155
|
+
##
|
156
|
+
# See Minitest::Assertions#refute_empty
|
157
|
+
#
|
158
|
+
# collection.wont_be_empty
|
159
|
+
#
|
160
|
+
# :method: wont_be_empty
|
161
|
+
|
162
|
+
infect_an_assertion :refute_empty, :wont_be_empty, :unary
|
163
|
+
|
164
|
+
##
|
165
|
+
# See Minitest::Assertions#refute_equal
|
166
|
+
#
|
167
|
+
# a.wont_equal b
|
168
|
+
#
|
169
|
+
# :method: wont_equal
|
170
|
+
|
171
|
+
infect_an_assertion :refute_equal, :wont_equal
|
172
|
+
|
173
|
+
##
|
174
|
+
# See Minitest::Assertions#refute_in_delta
|
175
|
+
#
|
176
|
+
# n.wont_be_close_to m [, delta]
|
177
|
+
#
|
178
|
+
# :method: wont_be_close_to
|
179
|
+
|
180
|
+
infect_an_assertion :refute_in_delta, :wont_be_close_to
|
181
|
+
|
182
|
+
alias :wont_be_within_delta :wont_be_close_to # :nodoc:
|
183
|
+
|
184
|
+
##
|
185
|
+
# See Minitest::Assertions#refute_in_epsilon
|
186
|
+
#
|
187
|
+
# n.wont_be_within_epsilon m [, epsilon]
|
188
|
+
#
|
189
|
+
# :method: wont_be_within_epsilon
|
190
|
+
|
191
|
+
infect_an_assertion :refute_in_epsilon, :wont_be_within_epsilon
|
192
|
+
|
193
|
+
##
|
194
|
+
# See Minitest::Assertions#refute_includes
|
195
|
+
#
|
196
|
+
# collection.wont_include obj
|
197
|
+
#
|
198
|
+
# :method: wont_include
|
199
|
+
|
200
|
+
infect_an_assertion :refute_includes, :wont_include, :reverse
|
201
|
+
|
202
|
+
##
|
203
|
+
# See Minitest::Assertions#refute_instance_of
|
204
|
+
#
|
205
|
+
# obj.wont_be_instance_of klass
|
206
|
+
#
|
207
|
+
# :method: wont_be_instance_of
|
208
|
+
|
209
|
+
infect_an_assertion :refute_instance_of, :wont_be_instance_of
|
210
|
+
|
211
|
+
##
|
212
|
+
# See Minitest::Assertions#refute_kind_of
|
213
|
+
#
|
214
|
+
# obj.wont_be_kind_of mod
|
215
|
+
#
|
216
|
+
# :method: wont_be_kind_of
|
217
|
+
|
218
|
+
infect_an_assertion :refute_kind_of, :wont_be_kind_of
|
219
|
+
|
220
|
+
##
|
221
|
+
# See Minitest::Assertions#refute_match
|
222
|
+
#
|
223
|
+
# a.wont_match b
|
224
|
+
#
|
225
|
+
# :method: wont_match
|
226
|
+
|
227
|
+
infect_an_assertion :refute_match, :wont_match
|
228
|
+
|
229
|
+
##
|
230
|
+
# See Minitest::Assertions#refute_nil
|
231
|
+
#
|
232
|
+
# obj.wont_be_nil
|
233
|
+
#
|
234
|
+
# :method: wont_be_nil
|
235
|
+
|
236
|
+
infect_an_assertion :refute_nil, :wont_be_nil, :unary
|
237
|
+
|
238
|
+
##
|
239
|
+
# See Minitest::Assertions#refute_operator
|
240
|
+
#
|
241
|
+
# n.wont_be :<=, 42
|
242
|
+
#
|
243
|
+
# This can also do predicates:
|
244
|
+
#
|
245
|
+
# str.wont_be :empty?
|
246
|
+
#
|
247
|
+
# :method: wont_be
|
248
|
+
|
249
|
+
infect_an_assertion :refute_operator, :wont_be, :reverse
|
250
|
+
|
251
|
+
##
|
252
|
+
# See Minitest::Assertions#refute_respond_to
|
253
|
+
#
|
254
|
+
# obj.wont_respond_to msg
|
255
|
+
#
|
256
|
+
# :method: wont_respond_to
|
257
|
+
|
258
|
+
infect_an_assertion :refute_respond_to, :wont_respond_to, :reverse
|
259
|
+
|
260
|
+
##
|
261
|
+
# See Minitest::Assertions#refute_same
|
262
|
+
#
|
263
|
+
# a.wont_be_same_as b
|
264
|
+
#
|
265
|
+
# :method: wont_be_same_as
|
266
|
+
|
267
|
+
infect_an_assertion :refute_same, :wont_be_same_as
|
268
|
+
end
|