minitest 4.7.5 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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