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.
@@ -1,12 +1,12 @@
1
1
  begin
2
- require 'rubygems'
3
- gem 'minitest'
2
+ require "rubygems"
3
+ gem "minitest"
4
4
  rescue Gem::LoadError
5
5
  # do nothing
6
6
  end
7
7
 
8
- require 'minitest/unit'
9
- require 'minitest/spec'
10
- require 'minitest/mock'
8
+ require "minitest"
9
+ require "minitest/spec"
10
+ require "minitest/mock"
11
11
 
12
- MiniTest::Unit.autorun
12
+ Minitest.autorun
@@ -1,16 +1,32 @@
1
1
  require 'minitest/unit'
2
2
  require 'minitest/spec'
3
3
 
4
- class MiniTest::Unit # :nodoc:
5
- def run_benchmarks # :nodoc:
6
- _run_anything :benchmark
7
- end
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
- def benchmark_suite_header suite # :nodoc:
10
- "\n#{suite}\t#{suite.bench_range.join("\t")}"
11
- end
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 "#{__name__}"
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
- class MiniTest::Spec
345
- ##
346
- # This is used to define a new benchmark method. You usually don't
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
- def self.bench name, &block
353
- define_method "bench_#{name.gsub(/\W+/, '_')}", &block
354
- end
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
- # Specifies the ranges used for benchmarking for that class.
358
- #
359
- # bench_range do
360
- # bench_exp(2, 16, 2)
361
- # end
362
- #
363
- # See Unit::TestCase.bench_range for more details.
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
- def self.bench_range &block
366
- return super unless block
369
+ def self.bench_range &block
370
+ return super unless block
367
371
 
368
- meta = (class << self; self; end)
369
- meta.send :define_method, "bench_range", &block
370
- end
372
+ meta = (class << self; self; end)
373
+ meta.send :define_method, "bench_range", &block
374
+ end
371
375
 
372
- ##
373
- # Create a benchmark that verifies that the performance is linear.
374
- #
375
- # describe "my class" do
376
- # bench_performance_linear "fast_algorithm", 0.9999 do |n|
377
- # @obj.fast_algorithm(n)
378
- # end
379
- # end
380
-
381
- def self.bench_performance_linear name, threshold = 0.99, &work
382
- bench name do
383
- assert_performance_linear threshold, &work
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
- # Create a benchmark that verifies that the performance is constant.
389
- #
390
- # describe "my class" do
391
- # bench_performance_constant "zoom_algorithm!" do |n|
392
- # @obj.zoom_algorithm!(n)
393
- # end
394
- # end
395
-
396
- def self.bench_performance_constant name, threshold = 0.99, &work
397
- bench name do
398
- assert_performance_constant threshold, &work
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
- # Create a benchmark that verifies that the performance is exponential.
404
- #
405
- # describe "my class" do
406
- # bench_performance_exponential "algorithm" do |n|
407
- # @obj.algorithm(n)
408
- # end
409
- # end
410
-
411
- def self.bench_performance_exponential name, threshold = 0.99, &work
412
- bench name do
413
- assert_performance_exponential threshold, &work
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