minitest 4.3.3 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,15 @@
1
+ === 4.4.0 / 2013-01-07
2
+
3
+ * 3 minor enhancements:
4
+
5
+ * Added fit_logarithic and assert_performance_logarithmic. (ktheory)
6
+ * Merge processed options so others can mess with defaults. (tenderlove)
7
+ * TestCase#message can now take another proc to defer custom message cost. (ordinaryzelig/bhenderson)
8
+
9
+ * 1 bug fix:
10
+
11
+ * TestCase#passed? now true if test is skipped. (qanhd)
12
+
1
13
  === 4.3.3 / 2012-12-06
2
14
 
3
15
  * 1 bug fix:
data/README.txt CHANGED
@@ -319,6 +319,7 @@ minitest-reporters :: Create customizable MiniTest output formats
319
319
  minitest-rg :: redgreen minitest
320
320
  minitest-shouldify :: Adding all manner of shoulds to MiniTest (bad idea)
321
321
  minitest-spec-magic :: Minitest::Spec extensions for Rails and beyond
322
+ minitest-spec-rails :: Drop in MiniTest::Spec superclass for ActiveSupport::TestCase.
322
323
  minitest-tags :: add tags for minitest
323
324
  minitest-wscolor :: Yet another test colorizer.
324
325
  minitest_owrapper :: Get tests results as a TestResult object.
@@ -347,7 +348,6 @@ Authors... Please send me a pull request with a description of your minitest ext
347
348
  * minitest-rails-shoulda
348
349
  * minitest-spec
349
350
  * minitest-spec-context
350
- * minitest-spec-rails
351
351
  * minitest-spec-should
352
352
  * minitest-sugar
353
353
  * minitest_should
@@ -154,6 +154,26 @@ class MiniTest::Unit # :nodoc:
154
154
  assert_performance validation_for_fit(:exponential, threshold), &work
155
155
  end
156
156
 
157
+ ##
158
+ # Runs the given +work+ and asserts that the times gathered fit to
159
+ # match a logarithmic curve within a given error +threshold+.
160
+ #
161
+ # Fit is calculated by #fit_logarithmic.
162
+ #
163
+ # Ranges are specified by ::bench_range.
164
+ #
165
+ # Eg:
166
+ #
167
+ # def bench_algorithm
168
+ # assert_performance_logarithmic 0.9999 do |n|
169
+ # @obj.algorithm(n)
170
+ # end
171
+ # end
172
+
173
+ def assert_performance_logarithmic threshold = 0.99, &work
174
+ assert_performance validation_for_fit(:logarithmic, threshold), &work
175
+ end
176
+
157
177
  ##
158
178
  # Runs the given +work+ and asserts that the times gathered fit to
159
179
  # match a straight line within a given error +threshold+.
@@ -229,6 +249,29 @@ class MiniTest::Unit # :nodoc:
229
249
  return Math.exp(a), b, fit_error(xys) { |x| Math.exp(a + b * x) }
230
250
  end
231
251
 
252
+ ##
253
+ # To fit a functional form: y = a + b*ln(x).
254
+ #
255
+ # Takes x and y values and returns [a, b, r^2].
256
+ #
257
+ # See: http://mathworld.wolfram.com/LeastSquaresFittingLogarithmic.html
258
+
259
+ def fit_logarithmic xs, ys
260
+ n = xs.size
261
+ xys = xs.zip(ys)
262
+ slnx2 = sigma(xys) { |x,y| Math.log(x) ** 2 }
263
+ slnx = sigma(xys) { |x,y| Math.log(x) }
264
+ sylnx = sigma(xys) { |x,y| y * Math.log(x) }
265
+ sy = sigma(xys) { |x,y| y }
266
+
267
+ c = n * slnx2 - slnx ** 2
268
+ b = ( n * sylnx - sy * slnx ) / c
269
+ a = (sy - b * slnx) / n
270
+
271
+ return a, b, fit_error(xys) { |x| a + b * Math.log(x) }
272
+ end
273
+
274
+
232
275
  ##
233
276
  # Fits the functional form: a + bx.
234
277
  #
@@ -1,4 +1,4 @@
1
- class Minitest::Unit::TestCase
1
+ class Minitest::Unit::TestCase # :nodoc:
2
2
  class << self
3
3
  alias :old_test_order :test_order
4
4
 
@@ -1,9 +1,21 @@
1
+ ##
2
+ # Provides a parallel #each that lets you enumerate using N threads.
3
+ # Use environment variable N to customize. Defaults to 2. Enumerable,
4
+ # so all the goodies come along (tho not all are wrapped yet to
5
+ # return another ParallelEach instance).
6
+
1
7
  class ParallelEach
2
8
  require 'thread'
3
9
  include Enumerable
4
10
 
11
+ ##
12
+ # How many Threads to use for this parallel #each.
13
+
5
14
  N = (ENV['N'] || 2).to_i
6
15
 
16
+ ##
17
+ # Create a new ParallelEach instance over +list+.
18
+
7
19
  def initialize list
8
20
  @queue = Queue.new # *sigh*... the Queue api sucks sooo much...
9
21
 
@@ -11,10 +23,14 @@ class ParallelEach
11
23
  N.times { @queue << nil }
12
24
  end
13
25
 
14
- def grep pattern
26
+ def grep pattern # :nodoc:
15
27
  self.class.new super
16
28
  end
17
29
 
30
+ ##
31
+ # Starts N threads that yield each element to your block. Joins the
32
+ # threads at the end.
33
+
18
34
  def each
19
35
  threads = N.times.map {
20
36
  Thread.new do
@@ -179,7 +179,7 @@ class MiniTest::Spec < MiniTest::Unit::TestCase
179
179
  ##
180
180
  # Define an expectation with name +desc+. Name gets morphed to a
181
181
  # proper test method name. For some freakish reason, people who
182
- # write specs don't like class inheritence, so this goes way out of
182
+ # write specs don't like class inheritance, so this goes way out of
183
183
  # its way to make sure that expectations aren't inherited.
184
184
  #
185
185
  # This is also aliased to #specify and doesn't require a +desc+ arg.
@@ -33,6 +33,9 @@ module MiniTest
33
33
  class Skip < Assertion; end
34
34
 
35
35
  class << self
36
+ ##
37
+ # Filter object for backtraces.
38
+
36
39
  attr_accessor :backtrace_filter
37
40
  end
38
41
 
@@ -555,6 +558,7 @@ module MiniTest
555
558
 
556
559
  def message msg = nil, ending = ".", &default
557
560
  proc {
561
+ msg = msg.call.chomp(".") if Proc === msg
558
562
  custom_message = "#{msg}.\n" unless msg.nil? or msg.to_s.empty?
559
563
  "#{custom_message}#{default.call}#{ending}"
560
564
  }
@@ -730,7 +734,7 @@ module MiniTest
730
734
  end
731
735
 
732
736
  class Unit # :nodoc:
733
- VERSION = "4.3.3" # :nodoc:
737
+ VERSION = "4.4.0" # :nodoc:
734
738
 
735
739
  attr_accessor :report, :failures, :errors, :skips # :nodoc:
736
740
  attr_accessor :test_count, :assertion_count # :nodoc:
@@ -1032,7 +1036,7 @@ module MiniTest
1032
1036
  # Top level driver, controls all output and filtering.
1033
1037
 
1034
1038
  def _run args = []
1035
- self.options = process_args args
1039
+ self.options.merge! process_args args
1036
1040
 
1037
1041
  puts "Run options: #{help}"
1038
1042
 
@@ -1299,7 +1303,7 @@ module MiniTest
1299
1303
  rescue *PASSTHROUGH_EXCEPTIONS
1300
1304
  raise
1301
1305
  rescue Exception => e
1302
- @passed = false
1306
+ @passed = Skip === e
1303
1307
  time = Time.now - start_time
1304
1308
  runner.record self.class, self.__name__, self._assertions, time, e
1305
1309
  result = runner.puke self.class, self.__name__, e
@@ -1325,11 +1329,11 @@ module MiniTest
1325
1329
  @__name__ = name
1326
1330
  @__io__ = nil
1327
1331
  @passed = nil
1328
- @@current = self
1332
+ @@current = self # FIX: make thread local
1329
1333
  end
1330
1334
 
1331
1335
  def self.current # :nodoc:
1332
- @@current
1336
+ @@current # FIX: make thread local
1333
1337
  end
1334
1338
 
1335
1339
  ##
@@ -44,6 +44,22 @@ class TestMiniTestBenchmark < MiniTest::Unit::TestCase
44
44
  assert_fit :exponential, x, y, 0.95, 13.81148, -0.1820
45
45
  end
46
46
 
47
+ def test_fit_logarithmic_clean
48
+ x = [1.0, 2.0, 3.0, 4.0, 5.0]
49
+ y = x.map { |n| 1.1 + 2.1 * Math.log(n) }
50
+
51
+ assert_fit :logarithmic, x, y, 1.0, 1.1, 2.1
52
+ end
53
+
54
+ def test_fit_logarithmic_noisy
55
+ x = [1.0, 2.0, 3.0, 4.0, 5.0]
56
+ # Generated with
57
+ # y = x.map { |n| jitter = 0.999 + 0.002 * rand; (Math.log(n) ) * jitter }
58
+ y = [0.0, 0.6935, 1.0995, 1.3873, 1.6097]
59
+
60
+ assert_fit :logarithmic, x, y, 0.95, 0, 1
61
+ end
62
+
47
63
  def test_fit_constant_clean
48
64
  x = (1..5).to_a
49
65
  y = [5.0, 5.0, 5.0, 5.0, 5.0]
@@ -172,42 +172,22 @@ class TestMiniTestUnit < MetaMetaMetaTestCase
172
172
  assert_instance_of MiniTest::Unit, MiniTest::Unit.runner
173
173
  end
174
174
 
175
- def with_overridden_include
176
- Class.class_eval do
177
- def inherited_with_hacks klass
178
- throw :inherited_hook
179
- end
180
175
 
181
- alias inherited_without_hacks inherited
182
- alias inherited inherited_with_hacks
183
- alias IGNORE_ME! inherited # 1.8 bug. god I love venture bros
184
- end
185
-
186
- yield
187
- ensure
188
- Class.class_eval do
189
- alias inherited inherited_without_hacks
190
-
191
- undef_method :inherited_with_hacks
192
- undef_method :inherited_without_hacks
176
+ def test_passed_eh_teardown_good
177
+ test_class = Class.new MiniTest::Unit::TestCase do
178
+ def teardown; assert true; end
179
+ def test_omg; assert true; end
193
180
  end
194
181
 
195
- refute_respond_to Class, :inherited_with_hacks
196
- refute_respond_to Class, :inherited_without_hacks
197
- end
198
-
199
- def test_inherited_hook_plays_nice_with_others
200
- with_overridden_include do
201
- assert_throws :inherited_hook do
202
- Class.new MiniTest::Unit::TestCase
203
- end
204
- end
182
+ test = test_class.new :test_omg
183
+ test.run @tu
184
+ assert test.passed?
205
185
  end
206
186
 
207
- def test_passed_eh_teardown_good
187
+ def test_passed_eh_teardown_skipped
208
188
  test_class = Class.new MiniTest::Unit::TestCase do
209
189
  def teardown; assert true; end
210
- def test_omg; assert true; end
190
+ def test_omg; skip "bork"; end
211
191
  end
212
192
 
213
193
  test = test_class.new :test_omg
@@ -235,6 +215,40 @@ class TestMiniTestUnit < MetaMetaMetaTestCase
235
215
  end
236
216
  end
237
217
 
218
+ class TestMiniTestUnitInherited < MetaMetaMetaTestCase
219
+ def with_overridden_include
220
+ Class.class_eval do
221
+ def inherited_with_hacks klass
222
+ throw :inherited_hook
223
+ end
224
+
225
+ alias inherited_without_hacks inherited
226
+ alias inherited inherited_with_hacks
227
+ alias IGNORE_ME! inherited # 1.8 bug. god I love venture bros
228
+ end
229
+
230
+ yield
231
+ ensure
232
+ Class.class_eval do
233
+ alias inherited inherited_without_hacks
234
+
235
+ undef_method :inherited_with_hacks
236
+ undef_method :inherited_without_hacks
237
+ end
238
+
239
+ refute_respond_to Class, :inherited_with_hacks
240
+ refute_respond_to Class, :inherited_without_hacks
241
+ end
242
+
243
+ def test_inherited_hook_plays_nice_with_others
244
+ with_overridden_include do
245
+ assert_throws :inherited_hook do
246
+ Class.new MiniTest::Unit::TestCase
247
+ end
248
+ end
249
+ end
250
+ end
251
+
238
252
  class TestMiniTestRunner < MetaMetaMetaTestCase
239
253
  # do not parallelize this suite... it just can't handle it.
240
254
 
@@ -658,7 +672,9 @@ class TestMiniTestUnitOrder < MetaMetaMetaTestCase
658
672
  end
659
673
 
660
674
  class TestMiniTestUnitTestCase < MiniTest::Unit::TestCase
661
- parallelize_me!
675
+ # do not call parallelize_me! - teardown accesses @tc._assertions
676
+ # which is not threadsafe. Nearly every method in here is an
677
+ # assertion test so it isn't worth splitting it out further.
662
678
 
663
679
  RUBY18 = ! defined? Encoding
664
680
 
@@ -1402,6 +1418,36 @@ class TestMiniTestUnitTestCase < MiniTest::Unit::TestCase
1402
1418
  assert_equal "blah2.", @tc.message("") { "blah2" }.call
1403
1419
  assert_equal "blah1.\nblah2.", @tc.message(:blah1) { "blah2" }.call
1404
1420
  assert_equal "blah1.\nblah2.", @tc.message("blah1") { "blah2" }.call
1421
+
1422
+ message = proc { "blah1" }
1423
+ assert_equal "blah1.\nblah2.", @tc.message(message) { "blah2" }.call
1424
+
1425
+ message = @tc.message { "blah1" }
1426
+ assert_equal "blah1.\nblah2.", @tc.message(message) { "blah2" }.call
1427
+ end
1428
+
1429
+ def test_message_message
1430
+ util_assert_triggered "whoops.\nExpected: 1\n Actual: 2" do
1431
+ @tc.assert_equal 1, 2, message { "whoops" }
1432
+ end
1433
+ end
1434
+
1435
+ def test_message_lambda
1436
+ util_assert_triggered "whoops.\nExpected: 1\n Actual: 2" do
1437
+ @tc.assert_equal 1, 2, lambda { "whoops" }
1438
+ end
1439
+ end
1440
+
1441
+ def test_message_deferred
1442
+ @assertion_count, var = 0, nil
1443
+
1444
+ msg = message { var = "blah" }
1445
+
1446
+ assert_nil var
1447
+
1448
+ msg.call
1449
+
1450
+ assert_equal "blah", var
1405
1451
  end
1406
1452
 
1407
1453
  def test_pass
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest
3
3
  version: !ruby/object:Gem::Version
4
- hash: 53
4
+ hash: 47
5
5
  prerelease:
6
6
  segments:
7
7
  - 4
8
- - 3
9
- - 3
10
- version: 4.3.3
8
+ - 4
9
+ - 0
10
+ version: 4.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Davis
@@ -36,7 +36,7 @@ cert_chain:
36
36
  FBHgymkyj/AOSqKRIpXPhjC6
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2012-12-07 00:00:00 Z
39
+ date: 2013-01-08 00:00:00 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rdoc
@@ -61,11 +61,11 @@ dependencies:
61
61
  requirements:
62
62
  - - ~>
63
63
  - !ruby/object:Gem::Version
64
- hash: 1
64
+ hash: 15
65
65
  segments:
66
66
  - 3
67
- - 3
68
- version: "3.3"
67
+ - 4
68
+ version: "3.4"
69
69
  type: :development
70
70
  version_requirements: *id002
71
71
  description: |-
metadata.gz.sig CHANGED
Binary file