minitest 5.23.1 → 5.25.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +48 -0
- data/lib/hoe/minitest.rb +2 -1
- data/lib/minitest/assertions.rb +64 -69
- data/lib/minitest/autorun.rb +0 -7
- data/lib/minitest/benchmark.rb +6 -9
- data/lib/minitest/compress.rb +10 -10
- data/lib/minitest/error_on_warning.rb +3 -3
- data/lib/minitest/mock.rb +16 -13
- data/lib/minitest/parallel.rb +4 -4
- data/lib/minitest/pride_plugin.rb +10 -14
- data/lib/minitest/spec.rb +13 -12
- data/lib/minitest/test.rb +10 -22
- data/lib/minitest/test_task.rb +16 -10
- data/lib/minitest.rb +181 -143
- data/test/minitest/metametameta.rb +6 -9
- data/test/minitest/test_minitest_assertions.rb +115 -115
- data/test/minitest/test_minitest_benchmark.rb +1 -1
- data/test/minitest/test_minitest_mock.rb +67 -64
- data/test/minitest/test_minitest_reporter.rb +17 -21
- data/test/minitest/test_minitest_spec.rb +52 -38
- data/test/minitest/test_minitest_test.rb +80 -99
- data/test/minitest/test_minitest_test_task.rb +18 -9
- data.tar.gz.sig +0 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9d178d895e1cb72094b322477fed0f7b4b5f9929bdd0d4260b034c1e8a0bd17
|
4
|
+
data.tar.gz: cdda22a6aa420566d37558cacc3a5db24765f45bc40823462dde18e7f87fa7da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65db034b716e4d5a3819b5e2cd113e9df95616955442bbedeff0905868a76c63660a78576cd3ef6a25dc4f0101d79c8af82abd48518e84ebf8f5f6c31c7ccb97
|
7
|
+
data.tar.gz: 2393a35302ceaa0b93f429c53af601b86be8abe8be02308e8a26f84f559511bf8b69ba0ee23a8a00ab77ba8aa90a600bfecbcad159b1fe0c83ddcc301b8a3938
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,3 +1,51 @@
|
|
1
|
+
=== 5.25.2 / 2024-11-21
|
2
|
+
|
3
|
+
* 4 bug fixes:
|
4
|
+
|
5
|
+
* Include class name in spec name. (thomasmarshall)
|
6
|
+
* Fixed 'redefining object_id' warning from ruby 3.4. (mattbrictson)
|
7
|
+
* Minitest top-level namespace no longer includes entire contents of README.rdoc. Too much!
|
8
|
+
* Refactored spec's describe to more cleanly determine the superclass and name
|
9
|
+
|
10
|
+
=== 5.25.1 / 2024-08-16
|
11
|
+
|
12
|
+
* 2 bug fixes:
|
13
|
+
|
14
|
+
* Fix incompatibility caused by minitest-hooks & rails invading minitest internals.
|
15
|
+
* Revert change from =~ to match? to allow for nil if $TERM undefined.
|
16
|
+
|
17
|
+
=== 5.25.0 / 2024-08-13
|
18
|
+
|
19
|
+
* 2 minor enhancements:
|
20
|
+
|
21
|
+
* Fixed some inefficiencies filtering and matching (mostly backtraces).
|
22
|
+
* Refactored siginfo handler to reduce runtime costs. Saved ~30%!
|
23
|
+
|
24
|
+
* 5 bug fixes:
|
25
|
+
|
26
|
+
* Added missing rdoc to get back to 100% coverage.
|
27
|
+
* Cleaning up ancient code checking for defined?(Encoding) and the like.
|
28
|
+
* Disambiguated some shadowed variables in minitest/compress.
|
29
|
+
* Fixed an ironic bug if using string-literals AND Werror.
|
30
|
+
* Improve description of test:slow task. (stomar)
|
31
|
+
|
32
|
+
=== 5.24.1 / 2024-06-29
|
33
|
+
|
34
|
+
* 1 bug fix:
|
35
|
+
|
36
|
+
* Fix the error message when an extension is invalid value. (y-yagi)
|
37
|
+
|
38
|
+
=== 5.24.0 / 2024-06-18
|
39
|
+
|
40
|
+
* 2 minor enhancements:
|
41
|
+
|
42
|
+
* Added Minitest.register_plugin.
|
43
|
+
* Extended plugin system to work with modules/classes for opt-out plugins.
|
44
|
+
|
45
|
+
* 1 bug fix:
|
46
|
+
|
47
|
+
* Removed anacronism, but allow load_plugins to exit gracefully if --disable=gems.
|
48
|
+
|
1
49
|
=== 5.23.1 / 2024-05-21
|
2
50
|
|
3
51
|
* 1 bug fix:
|
data/lib/hoe/minitest.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# :stopdoc:
|
2
2
|
|
3
3
|
class Hoe
|
4
|
+
# empty
|
4
5
|
end
|
5
6
|
|
6
7
|
module Hoe::Minitest
|
@@ -16,7 +17,7 @@ module Hoe::Minitest
|
|
16
17
|
|
17
18
|
gem "minitest"
|
18
19
|
require "minitest"
|
19
|
-
version = Minitest::VERSION.split(
|
20
|
+
version = Minitest::VERSION.split(".").first(2).join "."
|
20
21
|
|
21
22
|
dependency "minitest", "~> #{version}", :development unless
|
22
23
|
minitest? or ENV["MT_NO_ISOLATE"]
|
data/lib/minitest/assertions.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
1
|
require "rbconfig"
|
4
2
|
require "tempfile"
|
5
3
|
require "stringio"
|
@@ -29,12 +27,12 @@ module Minitest
|
|
29
27
|
def self.diff
|
30
28
|
return @diff if defined? @diff
|
31
29
|
|
32
|
-
@diff = if (RbConfig::CONFIG["host_os"] =~ /mswin|mingw/
|
33
|
-
system
|
30
|
+
@diff = if (RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ and
|
31
|
+
system "diff.exe", __FILE__, __FILE__) then
|
34
32
|
"diff.exe -u"
|
35
|
-
elsif system
|
33
|
+
elsif system "gdiff", __FILE__, __FILE__ then
|
36
34
|
"gdiff -u" # solaris and kin suck
|
37
|
-
elsif system
|
35
|
+
elsif system "diff", __FILE__, __FILE__ then
|
38
36
|
"diff -u"
|
39
37
|
else
|
40
38
|
nil
|
@@ -59,16 +57,16 @@ module Minitest
|
|
59
57
|
def diff exp, act
|
60
58
|
result = nil
|
61
59
|
|
62
|
-
expect, butwas = things_to_diff
|
60
|
+
expect, butwas = things_to_diff exp, act
|
63
61
|
|
64
62
|
return "Expected: #{mu_pp exp}\n Actual: #{mu_pp act}" unless
|
65
63
|
expect
|
66
64
|
|
67
|
-
Tempfile.open
|
65
|
+
Tempfile.open "expect" do |a|
|
68
66
|
a.puts expect
|
69
67
|
a.flush
|
70
68
|
|
71
|
-
Tempfile.open
|
69
|
+
Tempfile.open "butwas" do |b|
|
72
70
|
b.puts butwas
|
73
71
|
b.flush
|
74
72
|
|
@@ -79,10 +77,10 @@ module Minitest
|
|
79
77
|
if result.empty? then
|
80
78
|
klass = exp.class
|
81
79
|
result = [
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
80
|
+
"No visible difference in the #{klass}#inspect output.\n",
|
81
|
+
"You should look at the implementation of #== on ",
|
82
|
+
"#{klass} or its members.\n",
|
83
|
+
expect,
|
86
84
|
].join
|
87
85
|
end
|
88
86
|
end
|
@@ -127,20 +125,15 @@ module Minitest
|
|
127
125
|
# See Minitest::Test.make_my_diffs_pretty!
|
128
126
|
|
129
127
|
def mu_pp obj
|
130
|
-
s = obj.inspect
|
128
|
+
s = obj.inspect.encode Encoding.default_external
|
131
129
|
|
132
|
-
|
133
|
-
|
130
|
+
return s unless String === obj &&
|
131
|
+
(obj.encoding != Encoding.default_external || !obj.valid_encoding?)
|
134
132
|
|
135
|
-
|
136
|
-
|
137
|
-
enc = "# encoding: #{obj.encoding}"
|
138
|
-
val = "# valid: #{obj.valid_encoding?}"
|
139
|
-
s = "#{enc}\n#{val}\n#{s}"
|
140
|
-
end
|
141
|
-
end
|
133
|
+
enc = "# encoding: #{obj.encoding}"
|
134
|
+
val = "# valid: #{obj.valid_encoding?}"
|
142
135
|
|
143
|
-
s
|
136
|
+
[enc, val, s].join "\n"
|
144
137
|
end
|
145
138
|
|
146
139
|
##
|
@@ -153,8 +146,8 @@ module Minitest
|
|
153
146
|
str = mu_pp obj
|
154
147
|
|
155
148
|
# both '\n' & '\\n' (_after_ mu_pp (aka inspect))
|
156
|
-
single =
|
157
|
-
double =
|
149
|
+
single = str.match?(/(?<!\\|^)\\n/)
|
150
|
+
double = str.match?(/(?<=\\|^)\\n/)
|
158
151
|
|
159
152
|
process =
|
160
153
|
if single ^ double then
|
@@ -167,9 +160,9 @@ module Minitest
|
|
167
160
|
:itself # leave it alone
|
168
161
|
end
|
169
162
|
|
170
|
-
str
|
171
|
-
gsub(/\\?\\n/, &process)
|
172
|
-
gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX") # anonymize hex values
|
163
|
+
str
|
164
|
+
.gsub(/\\?\\n/, &process)
|
165
|
+
.gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX") # anonymize hex values
|
173
166
|
end
|
174
167
|
|
175
168
|
##
|
@@ -193,14 +186,14 @@ module Minitest
|
|
193
186
|
# Fails unless +obj+ is empty.
|
194
187
|
|
195
188
|
def assert_empty obj, msg = nil
|
196
|
-
msg = message(msg) { "Expected #{mu_pp
|
189
|
+
msg = message(msg) { "Expected #{mu_pp obj} to be empty" }
|
197
190
|
assert_respond_to obj, :empty?
|
198
191
|
assert obj.empty?, msg
|
199
192
|
end
|
200
193
|
|
201
194
|
def _where # :nodoc:
|
202
|
-
|
203
|
-
|
195
|
+
Minitest.filter_backtrace(caller).first
|
196
|
+
.split(":in ", 2).first # clean up noise
|
204
197
|
end
|
205
198
|
|
206
199
|
E = "" # :nodoc:
|
@@ -223,7 +216,7 @@ module Minitest
|
|
223
216
|
result = assert exp == act, msg
|
224
217
|
|
225
218
|
if nil == exp then
|
226
|
-
if Minitest::VERSION
|
219
|
+
if Minitest::VERSION >= "6" then
|
227
220
|
refute_nil exp, "Use assert_nil if expecting nil."
|
228
221
|
else
|
229
222
|
warn "DEPRECATED: Use assert_nil if expecting nil from #{_where}. This will fail in Minitest 6."
|
@@ -260,7 +253,7 @@ module Minitest
|
|
260
253
|
|
261
254
|
def assert_includes collection, obj, msg = nil
|
262
255
|
msg = message(msg) {
|
263
|
-
"Expected #{mu_pp
|
256
|
+
"Expected #{mu_pp collection} to include #{mu_pp obj}"
|
264
257
|
}
|
265
258
|
assert_respond_to collection, :include?
|
266
259
|
assert collection.include?(obj), msg
|
@@ -271,7 +264,7 @@ module Minitest
|
|
271
264
|
|
272
265
|
def assert_instance_of cls, obj, msg = nil
|
273
266
|
msg = message(msg) {
|
274
|
-
"Expected #{mu_pp
|
267
|
+
"Expected #{mu_pp obj} to be an instance of #{cls}, not #{obj.class}"
|
275
268
|
}
|
276
269
|
|
277
270
|
assert obj.instance_of?(cls), msg
|
@@ -282,7 +275,8 @@ module Minitest
|
|
282
275
|
|
283
276
|
def assert_kind_of cls, obj, msg = nil
|
284
277
|
msg = message(msg) {
|
285
|
-
"Expected #{mu_pp
|
278
|
+
"Expected #{mu_pp obj} to be a kind of #{cls}, not #{obj.class}"
|
279
|
+
}
|
286
280
|
|
287
281
|
assert obj.kind_of?(cls), msg
|
288
282
|
end
|
@@ -292,7 +286,7 @@ module Minitest
|
|
292
286
|
|
293
287
|
def assert_match matcher, obj, msg = nil
|
294
288
|
msg = message(msg) { "Expected #{mu_pp matcher} to match #{mu_pp obj}" }
|
295
|
-
assert_respond_to matcher,
|
289
|
+
assert_respond_to matcher, :=~
|
296
290
|
matcher = Regexp.new Regexp.escape matcher if String === matcher
|
297
291
|
assert matcher =~ obj, msg
|
298
292
|
|
@@ -303,7 +297,7 @@ module Minitest
|
|
303
297
|
# Fails unless +obj+ is nil
|
304
298
|
|
305
299
|
def assert_nil obj, msg = nil
|
306
|
-
msg = message(msg) { "Expected #{mu_pp
|
300
|
+
msg = message(msg) { "Expected #{mu_pp obj} to be nil" }
|
307
301
|
assert obj.nil?, msg
|
308
302
|
end
|
309
303
|
|
@@ -314,7 +308,7 @@ module Minitest
|
|
314
308
|
|
315
309
|
def assert_operator o1, op, o2 = UNDEFINED, msg = nil
|
316
310
|
return assert_predicate o1, op, msg if UNDEFINED == o2
|
317
|
-
msg = message(msg) { "Expected #{mu_pp
|
311
|
+
msg = message(msg) { "Expected #{mu_pp o1} to be #{op} #{mu_pp o2}" }
|
318
312
|
assert o1.__send__(op, o2), msg
|
319
313
|
end
|
320
314
|
|
@@ -395,7 +389,7 @@ module Minitest
|
|
395
389
|
# str.must_be :empty?
|
396
390
|
|
397
391
|
def assert_predicate o1, op, msg = nil
|
398
|
-
msg = message(msg) { "Expected #{mu_pp
|
392
|
+
msg = message(msg) { "Expected #{mu_pp o1} to be #{op}" }
|
399
393
|
assert o1.__send__(op), msg
|
400
394
|
end
|
401
395
|
|
@@ -440,13 +434,13 @@ module Minitest
|
|
440
434
|
raise
|
441
435
|
rescue Exception => e
|
442
436
|
flunk proc {
|
443
|
-
exception_details(e, "#{msg}#{mu_pp
|
437
|
+
exception_details(e, "#{msg}#{mu_pp exp} exception expected, not")
|
444
438
|
}
|
445
439
|
end
|
446
440
|
|
447
441
|
exp = exp.first if exp.size == 1
|
448
442
|
|
449
|
-
flunk "#{msg}#{mu_pp
|
443
|
+
flunk "#{msg}#{mu_pp exp} expected but nothing was raised."
|
450
444
|
end
|
451
445
|
|
452
446
|
##
|
@@ -455,7 +449,7 @@ module Minitest
|
|
455
449
|
|
456
450
|
def assert_respond_to obj, meth, msg = nil, include_all: false
|
457
451
|
msg = message(msg) {
|
458
|
-
"Expected #{mu_pp
|
452
|
+
"Expected #{mu_pp obj} (#{obj.class}) to respond to ##{meth}"
|
459
453
|
}
|
460
454
|
assert obj.respond_to?(meth, include_all), msg
|
461
455
|
end
|
@@ -481,7 +475,8 @@ module Minitest
|
|
481
475
|
|
482
476
|
recv, msg, *args = send_ary
|
483
477
|
m = message(m) {
|
484
|
-
"Expected #{mu_pp
|
478
|
+
"Expected #{mu_pp recv}.#{msg}(*#{mu_pp args}) to return true"
|
479
|
+
}
|
485
480
|
assert recv.__send__(msg, *args), m
|
486
481
|
end
|
487
482
|
|
@@ -500,15 +495,15 @@ module Minitest
|
|
500
495
|
# Fails unless the block throws +sym+
|
501
496
|
|
502
497
|
def assert_throws sym, msg = nil
|
503
|
-
default = "Expected #{mu_pp
|
498
|
+
default = "Expected #{mu_pp sym} to have been thrown"
|
504
499
|
caught = true
|
505
|
-
value = catch
|
500
|
+
value = catch sym do
|
506
501
|
begin
|
507
502
|
yield
|
508
503
|
rescue ThreadError => e # wtf?!? 1.8 + threads == suck
|
509
|
-
default += ", not
|
504
|
+
default += ", not :#{e.message[/uncaught throw \`(\w+?)\'/, 1]}"
|
510
505
|
rescue ArgumentError => e # 1.9 exception
|
511
|
-
raise e unless e.message.include?
|
506
|
+
raise e unless e.message.include? "uncaught throw"
|
512
507
|
default += ", not #{e.message.split(/ /).last}"
|
513
508
|
rescue NameError => e # 1.8 exception
|
514
509
|
raise e unless e.name == sym
|
@@ -607,12 +602,12 @@ module Minitest
|
|
607
602
|
|
608
603
|
def exception_details e, msg
|
609
604
|
[
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
605
|
+
msg,
|
606
|
+
"Class: <#{e.class}>",
|
607
|
+
"Message: <#{e.message.inspect}>",
|
608
|
+
"---Backtrace---",
|
609
|
+
Minitest.filter_backtrace(e.backtrace),
|
610
|
+
"---------------",
|
616
611
|
].join "\n"
|
617
612
|
end
|
618
613
|
|
@@ -621,7 +616,7 @@ module Minitest
|
|
621
616
|
# you to put time-bombs in your tests if you need to keep
|
622
617
|
# something around until a later date lest you forget about it.
|
623
618
|
|
624
|
-
def fail_after y,m,d,msg
|
619
|
+
def fail_after y, m, d, msg
|
625
620
|
flunk msg if Time.now > Time.local(y, m, d)
|
626
621
|
end
|
627
622
|
|
@@ -655,7 +650,7 @@ module Minitest
|
|
655
650
|
# Fails if +test+ is truthy.
|
656
651
|
|
657
652
|
def refute test, msg = nil
|
658
|
-
msg ||= message { "Expected #{mu_pp
|
653
|
+
msg ||= message { "Expected #{mu_pp test} to not be truthy" }
|
659
654
|
assert !test, msg
|
660
655
|
end
|
661
656
|
|
@@ -663,7 +658,7 @@ module Minitest
|
|
663
658
|
# Fails if +obj+ is empty.
|
664
659
|
|
665
660
|
def refute_empty obj, msg = nil
|
666
|
-
msg = message(msg) { "Expected #{mu_pp
|
661
|
+
msg = message(msg) { "Expected #{mu_pp obj} to not be empty" }
|
667
662
|
assert_respond_to obj, :empty?
|
668
663
|
refute obj.empty?, msg
|
669
664
|
end
|
@@ -675,7 +670,7 @@ module Minitest
|
|
675
670
|
|
676
671
|
def refute_equal exp, act, msg = nil
|
677
672
|
msg = message(msg) {
|
678
|
-
"Expected #{mu_pp
|
673
|
+
"Expected #{mu_pp act} to not be equal to #{mu_pp exp}"
|
679
674
|
}
|
680
675
|
refute exp == act, msg
|
681
676
|
end
|
@@ -706,7 +701,7 @@ module Minitest
|
|
706
701
|
|
707
702
|
def refute_includes collection, obj, msg = nil
|
708
703
|
msg = message(msg) {
|
709
|
-
"Expected #{mu_pp
|
704
|
+
"Expected #{mu_pp collection} to not include #{mu_pp obj}"
|
710
705
|
}
|
711
706
|
assert_respond_to collection, :include?
|
712
707
|
refute collection.include?(obj), msg
|
@@ -717,7 +712,7 @@ module Minitest
|
|
717
712
|
|
718
713
|
def refute_instance_of cls, obj, msg = nil
|
719
714
|
msg = message(msg) {
|
720
|
-
"Expected #{mu_pp
|
715
|
+
"Expected #{mu_pp obj} to not be an instance of #{cls}"
|
721
716
|
}
|
722
717
|
refute obj.instance_of?(cls), msg
|
723
718
|
end
|
@@ -726,7 +721,7 @@ module Minitest
|
|
726
721
|
# Fails if +obj+ is a kind of +cls+.
|
727
722
|
|
728
723
|
def refute_kind_of cls, obj, msg = nil
|
729
|
-
msg = message(msg) { "Expected #{mu_pp
|
724
|
+
msg = message(msg) { "Expected #{mu_pp obj} to not be a kind of #{cls}" }
|
730
725
|
refute obj.kind_of?(cls), msg
|
731
726
|
end
|
732
727
|
|
@@ -735,7 +730,7 @@ module Minitest
|
|
735
730
|
|
736
731
|
def refute_match matcher, obj, msg = nil
|
737
732
|
msg = message(msg) { "Expected #{mu_pp matcher} to not match #{mu_pp obj}" }
|
738
|
-
assert_respond_to matcher,
|
733
|
+
assert_respond_to matcher, :=~
|
739
734
|
matcher = Regexp.new Regexp.escape matcher if String === matcher
|
740
735
|
refute matcher =~ obj, msg
|
741
736
|
end
|
@@ -744,7 +739,7 @@ module Minitest
|
|
744
739
|
# Fails if +obj+ is nil.
|
745
740
|
|
746
741
|
def refute_nil obj, msg = nil
|
747
|
-
msg = message(msg) { "Expected #{mu_pp
|
742
|
+
msg = message(msg) { "Expected #{mu_pp obj} to not be nil" }
|
748
743
|
refute obj.nil?, msg
|
749
744
|
end
|
750
745
|
|
@@ -766,7 +761,7 @@ module Minitest
|
|
766
761
|
|
767
762
|
begin
|
768
763
|
yield
|
769
|
-
flunk
|
764
|
+
flunk "NoMatchingPatternError expected, but nothing was raised."
|
770
765
|
rescue NoMatchingPatternError
|
771
766
|
pass
|
772
767
|
end
|
@@ -780,7 +775,7 @@ module Minitest
|
|
780
775
|
|
781
776
|
def refute_operator o1, op, o2 = UNDEFINED, msg = nil
|
782
777
|
return refute_predicate o1, op, msg if UNDEFINED == o2
|
783
|
-
msg = message(msg) { "Expected #{mu_pp
|
778
|
+
msg = message(msg) { "Expected #{mu_pp o1} to not be #{op} #{mu_pp o2}" }
|
784
779
|
refute o1.__send__(op, o2), msg
|
785
780
|
end
|
786
781
|
|
@@ -802,7 +797,7 @@ module Minitest
|
|
802
797
|
# str.wont_be :empty?
|
803
798
|
|
804
799
|
def refute_predicate o1, op, msg = nil
|
805
|
-
msg = message(msg) { "Expected #{mu_pp
|
800
|
+
msg = message(msg) { "Expected #{mu_pp o1} to not be #{op}" }
|
806
801
|
refute o1.__send__(op), msg
|
807
802
|
end
|
808
803
|
|
@@ -811,7 +806,7 @@ module Minitest
|
|
811
806
|
# include_all defaults to false to match Object#respond_to?
|
812
807
|
|
813
808
|
def refute_respond_to obj, meth, msg = nil, include_all: false
|
814
|
-
msg = message(msg) { "Expected #{mu_pp
|
809
|
+
msg = message(msg) { "Expected #{mu_pp obj} to not respond to #{meth}" }
|
815
810
|
|
816
811
|
refute obj.respond_to?(meth, include_all), msg
|
817
812
|
end
|
@@ -844,9 +839,9 @@ module Minitest
|
|
844
839
|
# date, but still holds you accountable and prevents you from
|
845
840
|
# forgetting it.
|
846
841
|
|
847
|
-
def skip_until y,m,d,msg
|
842
|
+
def skip_until y, m, d, msg
|
848
843
|
skip msg if Time.now < Time.local(y, m, d)
|
849
|
-
where = caller.first.rpartition(
|
844
|
+
where = caller(1..1).first.rpartition(":in").reject(&:empty?).first
|
850
845
|
warn "Stale skip_until %p at %s" % [msg, where]
|
851
846
|
end
|
852
847
|
|
data/lib/minitest/autorun.rb
CHANGED
data/lib/minitest/benchmark.rb
CHANGED
@@ -47,8 +47,6 @@ module Minitest
|
|
47
47
|
|
48
48
|
def self.bench_linear min, max, step = 10
|
49
49
|
(min..max).step(step).to_a
|
50
|
-
rescue LocalJumpError # 1.8.6
|
51
|
-
r = []; (min..max).step(step) { |n| r << n }; r
|
52
50
|
end
|
53
51
|
|
54
52
|
##
|
@@ -83,7 +81,7 @@ module Minitest
|
|
83
81
|
def assert_performance validation, &work
|
84
82
|
range = self.class.bench_range
|
85
83
|
|
86
|
-
io.print
|
84
|
+
io.print self.name
|
87
85
|
|
88
86
|
times = []
|
89
87
|
|
@@ -236,7 +234,7 @@ module Minitest
|
|
236
234
|
|
237
235
|
def fit_exponential xs, ys
|
238
236
|
n = xs.size
|
239
|
-
xys = xs.zip
|
237
|
+
xys = xs.zip ys
|
240
238
|
sxlny = sigma(xys) { |x, y| x * Math.log(y) }
|
241
239
|
slny = sigma(xys) { |_, y| Math.log(y) }
|
242
240
|
sx2 = sigma(xys) { |x, _| x * x }
|
@@ -258,7 +256,7 @@ module Minitest
|
|
258
256
|
|
259
257
|
def fit_logarithmic xs, ys
|
260
258
|
n = xs.size
|
261
|
-
xys = xs.zip
|
259
|
+
xys = xs.zip ys
|
262
260
|
slnx2 = sigma(xys) { |x, _| Math.log(x) ** 2 }
|
263
261
|
slnx = sigma(xys) { |x, _| Math.log(x) }
|
264
262
|
sylnx = sigma(xys) { |x, y| y * Math.log(x) }
|
@@ -280,7 +278,7 @@ module Minitest
|
|
280
278
|
|
281
279
|
def fit_linear xs, ys
|
282
280
|
n = xs.size
|
283
|
-
xys = xs.zip
|
281
|
+
xys = xs.zip ys
|
284
282
|
sx = sigma xs
|
285
283
|
sy = sigma ys
|
286
284
|
sx2 = sigma(xs) { |x| x ** 2 }
|
@@ -302,7 +300,7 @@ module Minitest
|
|
302
300
|
|
303
301
|
def fit_power xs, ys
|
304
302
|
n = xs.size
|
305
|
-
xys = xs.zip
|
303
|
+
xys = xs.zip ys
|
306
304
|
slnxlny = sigma(xys) { |x, y| Math.log(x) * Math.log(y) }
|
307
305
|
slnx = sigma(xs) { |x | Math.log(x) }
|
308
306
|
slny = sigma(ys) { | y| Math.log(y) }
|
@@ -323,7 +321,7 @@ module Minitest
|
|
323
321
|
|
324
322
|
def sigma enum, &block
|
325
323
|
enum = enum.map(&block) if block
|
326
|
-
enum.
|
324
|
+
enum.sum
|
327
325
|
end
|
328
326
|
|
329
327
|
##
|
@@ -419,7 +417,6 @@ module Minitest
|
|
419
417
|
end
|
420
418
|
end
|
421
419
|
|
422
|
-
|
423
420
|
##
|
424
421
|
# Create a benchmark that verifies that the performance is logarithmic.
|
425
422
|
#
|
data/lib/minitest/compress.rb
CHANGED
@@ -11,12 +11,12 @@ module Minitest
|
|
11
11
|
def compress orig
|
12
12
|
ary = orig
|
13
13
|
|
14
|
-
eswo = ->(
|
14
|
+
eswo = ->(a, n, off) { # each_slice_with_offset
|
15
15
|
if off.zero? then
|
16
|
-
|
16
|
+
a.each_slice n
|
17
17
|
else
|
18
18
|
# [ ...off... [...n...] [...n...] ... ]
|
19
|
-
front, back =
|
19
|
+
front, back = a.take(off), a.drop(off)
|
20
20
|
[front].chain back.each_slice n
|
21
21
|
end
|
22
22
|
}
|
@@ -29,16 +29,16 @@ module Minitest
|
|
29
29
|
|
30
30
|
order = index
|
31
31
|
.reject { |k, v| v.size == 1 } # { b: [1 3 5], c: [2 4 6] }
|
32
|
-
.sort_by { |k,
|
33
|
-
d =
|
34
|
-
[-d,
|
32
|
+
.sort_by { |k, a1| ### sort by max dist + min offset
|
33
|
+
d = a1.each_cons(2).sum { |a2, b| b-a2 }
|
34
|
+
[-d, a1.first]
|
35
35
|
} # b: [1 3 5] c: [2 4 6]
|
36
36
|
|
37
37
|
ranges = order
|
38
|
-
.map { |k,
|
39
|
-
|
38
|
+
.map { |k, a1| # [[1..2 3..4] [2..3 4..5]]
|
39
|
+
a1
|
40
40
|
.each_cons(2)
|
41
|
-
.map { |
|
41
|
+
.map { |a2, b| a2..b-1 }
|
42
42
|
}
|
43
43
|
|
44
44
|
big_ranges = ranges
|
@@ -50,7 +50,7 @@ module Minitest
|
|
50
50
|
culprits = big_ranges
|
51
51
|
.map { |r|
|
52
52
|
eswo[ary, r.size, r.begin] # [o1 s1 s1 s2 s2]
|
53
|
-
.chunk_while { |a,b| a == b }
|
53
|
+
.chunk_while { |a, b| a == b } # [[o1] [s1 s1] [s2 s2]]
|
54
54
|
.map { |a| [a.size, a.first] } # [[1 o1] [2 s1] [2 s2]]
|
55
55
|
}
|
56
56
|
.select { |chunks|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Minitest
|
2
2
|
|
3
|
-
module ErrorOnWarning
|
4
|
-
def warn
|
3
|
+
module ErrorOnWarning # :nodoc:
|
4
|
+
def warn message, category: nil
|
5
5
|
message = "[#{category}] #{message}" if category
|
6
6
|
raise UnexpectedWarning, message
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
-
::Warning.singleton_class.prepend
|
10
|
+
::Warning.singleton_class.prepend ErrorOnWarning
|
11
11
|
end
|