minitest 5.16.3 → 5.25.1
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +176 -1
- data/Manifest.txt +3 -0
- data/README.rdoc +26 -25
- data/Rakefile +7 -0
- data/lib/hoe/minitest.rb +2 -1
- data/lib/minitest/assertions.rb +126 -79
- data/lib/minitest/autorun.rb +0 -7
- data/lib/minitest/benchmark.rb +6 -9
- data/lib/minitest/compress.rb +94 -0
- data/lib/minitest/error_on_warning.rb +11 -0
- data/lib/minitest/expectations.rb +18 -0
- data/lib/minitest/manual_plugins.rb +16 -0
- data/lib/minitest/mock.rb +23 -17
- data/lib/minitest/parallel.rb +5 -5
- data/lib/minitest/pride_plugin.rb +16 -23
- data/lib/minitest/spec.rb +10 -4
- data/lib/minitest/test.rb +22 -37
- data/lib/minitest/test_task.rb +24 -22
- data/lib/minitest.rb +296 -148
- data/test/minitest/metametameta.rb +32 -18
- data/test/minitest/test_minitest_assertions.rb +269 -140
- data/test/minitest/test_minitest_benchmark.rb +1 -1
- data/test/minitest/test_minitest_mock.rb +89 -77
- data/test/minitest/test_minitest_reporter.rb +139 -15
- data/test/minitest/test_minitest_spec.rb +130 -55
- data/test/minitest/test_minitest_test.rb +200 -116
- data/test/minitest/test_minitest_test_task.rb +18 -7
- data.tar.gz.sig +0 -0
- metadata +20 -16
- metadata.gz.sig +0 -0
@@ -124,6 +124,15 @@ module Minitest::Expectations
|
|
124
124
|
|
125
125
|
infect_an_assertion :assert_output, :must_output, :block
|
126
126
|
|
127
|
+
##
|
128
|
+
# See Minitest::Assertions#assert_pattern_match
|
129
|
+
#
|
130
|
+
# _ { ... }.must_pattern_match [...]
|
131
|
+
#
|
132
|
+
# :method: must_pattern_match
|
133
|
+
|
134
|
+
infect_an_assertion :assert_pattern, :must_pattern_match, :block
|
135
|
+
|
127
136
|
##
|
128
137
|
# See Minitest::Assertions#assert_raises
|
129
138
|
#
|
@@ -283,6 +292,15 @@ module Minitest::Expectations
|
|
283
292
|
|
284
293
|
infect_an_assertion :refute_operator, :wont_be, :reverse
|
285
294
|
|
295
|
+
##
|
296
|
+
# See Minitest::Assertions#refute_pattern_match
|
297
|
+
#
|
298
|
+
# _ { ... }.wont_pattern_match [...]
|
299
|
+
#
|
300
|
+
# :method: wont_pattern_match
|
301
|
+
|
302
|
+
infect_an_assertion :refute_pattern, :wont_pattern_match, :block
|
303
|
+
|
286
304
|
##
|
287
305
|
# See Minitest::Assertions#refute_respond_to
|
288
306
|
#
|
data/lib/minitest/mock.rb
CHANGED
@@ -8,9 +8,9 @@ module Minitest # :nodoc:
|
|
8
8
|
# All mock objects are an instance of Mock
|
9
9
|
|
10
10
|
class Mock
|
11
|
-
alias
|
11
|
+
alias __respond_to? respond_to?
|
12
12
|
|
13
|
-
overridden_methods = %
|
13
|
+
overridden_methods = %i[
|
14
14
|
===
|
15
15
|
class
|
16
16
|
inspect
|
@@ -23,8 +23,10 @@ module Minitest # :nodoc:
|
|
23
23
|
to_s
|
24
24
|
]
|
25
25
|
|
26
|
+
overridden_methods << :singleton_method_added if defined?(::DEBUGGER__)
|
27
|
+
|
26
28
|
instance_methods.each do |m|
|
27
|
-
undef_method m unless overridden_methods.include?(m
|
29
|
+
undef_method m unless overridden_methods.include?(m) || m =~ /^__/
|
28
30
|
end
|
29
31
|
|
30
32
|
overridden_methods.map(&:to_sym).each do |method_id|
|
@@ -55,7 +57,7 @@ module Minitest # :nodoc:
|
|
55
57
|
|
56
58
|
##
|
57
59
|
# Expect that method +name+ is called, optionally with +args+ (and
|
58
|
-
# +kwargs+ or a +blk
|
60
|
+
# +kwargs+ or a +blk+), and returns +retval+.
|
59
61
|
#
|
60
62
|
# @mock.expect(:meaning_of_life, 42)
|
61
63
|
# @mock.meaning_of_life # => 42
|
@@ -91,7 +93,7 @@ module Minitest # :nodoc:
|
|
91
93
|
def expect name, retval, args = [], **kwargs, &blk
|
92
94
|
name = name.to_sym
|
93
95
|
|
94
|
-
if
|
96
|
+
if blk then
|
95
97
|
raise ArgumentError, "args ignored when block given" unless args.empty?
|
96
98
|
raise ArgumentError, "kwargs ignored when block given" unless kwargs.empty?
|
97
99
|
@expected_calls[name] << { :retval => retval, :block => blk }
|
@@ -104,7 +106,7 @@ module Minitest # :nodoc:
|
|
104
106
|
kwargs = args.pop
|
105
107
|
else
|
106
108
|
unless @@KW_WARNED then
|
107
|
-
from = caller.first
|
109
|
+
from = caller(1..1).first
|
108
110
|
warn "Using MT_KWARGS_HAC\K yet passing kwargs. From #{from}"
|
109
111
|
@@KW_WARNED = true
|
110
112
|
end
|
@@ -139,7 +141,7 @@ module Minitest # :nodoc:
|
|
139
141
|
|
140
142
|
def verify
|
141
143
|
@expected_calls.each do |name, expected|
|
142
|
-
actual = @actual_calls.fetch
|
144
|
+
actual = @actual_calls.fetch name, nil # defaults to []
|
143
145
|
raise MockExpectationError, "expected #{__call name, expected[0]}" unless actual
|
144
146
|
raise MockExpectationError, "expected #{__call name, expected[actual.size]}, got [#{__call name, actual}]" if
|
145
147
|
actual.size < expected.size
|
@@ -148,9 +150,13 @@ module Minitest # :nodoc:
|
|
148
150
|
end
|
149
151
|
|
150
152
|
def method_missing sym, *args, **kwargs, &block # :nodoc:
|
151
|
-
unless @expected_calls.key?
|
153
|
+
unless @expected_calls.key? sym then
|
152
154
|
if @delegator && @delegator.respond_to?(sym)
|
153
|
-
|
155
|
+
if kwargs.empty? then # FIX: drop this after 2.7 dead
|
156
|
+
return @delegator.public_send(sym, *args, &block)
|
157
|
+
else
|
158
|
+
return @delegator.public_send(sym, *args, **kwargs, &block)
|
159
|
+
end
|
154
160
|
else
|
155
161
|
raise NoMethodError, "unmocked method %p, expected one of %p" %
|
156
162
|
[sym, @expected_calls.keys.sort_by(&:to_s)]
|
@@ -166,9 +172,9 @@ module Minitest # :nodoc:
|
|
166
172
|
end
|
167
173
|
|
168
174
|
expected_args, expected_kwargs, retval, val_block =
|
169
|
-
expected_call.values_at
|
175
|
+
expected_call.values_at :args, :kwargs, :retval, :block
|
170
176
|
|
171
|
-
expected_kwargs = kwargs.
|
177
|
+
expected_kwargs = kwargs.to_h { |ak, av| [ak, Object] } if
|
172
178
|
Hash == expected_kwargs
|
173
179
|
|
174
180
|
if val_block then
|
@@ -191,7 +197,7 @@ module Minitest # :nodoc:
|
|
191
197
|
[sym, expected_kwargs.size, kwargs]
|
192
198
|
end
|
193
199
|
|
194
|
-
zipped_args = expected_args.zip
|
200
|
+
zipped_args = expected_args.zip args
|
195
201
|
fully_matched = zipped_args.all? { |mod, a|
|
196
202
|
mod === a or mod == a
|
197
203
|
}
|
@@ -206,10 +212,10 @@ module Minitest # :nodoc:
|
|
206
212
|
raise MockExpectationError, fmt % [sym, expected_kwargs.keys, kwargs.keys]
|
207
213
|
end
|
208
214
|
|
209
|
-
zipped_kwargs = expected_kwargs.
|
215
|
+
zipped_kwargs = expected_kwargs.to_h { |ek, ev|
|
210
216
|
av = kwargs[ek]
|
211
217
|
[ek, [ev, av]]
|
212
|
-
}
|
218
|
+
}
|
213
219
|
|
214
220
|
fully_matched = zipped_kwargs.all? { |ek, (ev, av)|
|
215
221
|
ev === av or ev == av
|
@@ -222,8 +228,8 @@ module Minitest # :nodoc:
|
|
222
228
|
|
223
229
|
@actual_calls[sym] << {
|
224
230
|
:retval => retval,
|
225
|
-
:args
|
226
|
-
:kwargs => zipped_kwargs.
|
231
|
+
:args => zipped_args.map { |e, a| e === a ? e : a },
|
232
|
+
:kwargs => zipped_kwargs.to_h { |k, (e, a)| [k, e === a ? e : a] },
|
227
233
|
}
|
228
234
|
|
229
235
|
retval
|
@@ -232,7 +238,7 @@ module Minitest # :nodoc:
|
|
232
238
|
def respond_to? sym, include_private = false # :nodoc:
|
233
239
|
return true if @expected_calls.key? sym.to_sym
|
234
240
|
return true if @delegator && @delegator.respond_to?(sym, include_private)
|
235
|
-
__respond_to?
|
241
|
+
__respond_to? sym, include_private
|
236
242
|
end
|
237
243
|
end
|
238
244
|
end
|
data/lib/minitest/parallel.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Minitest
|
2
|
-
module Parallel
|
2
|
+
module Parallel # :nodoc:
|
3
3
|
|
4
4
|
##
|
5
5
|
# The engine used to run multiple tests in parallel.
|
@@ -16,7 +16,7 @@ module Minitest
|
|
16
16
|
|
17
17
|
def initialize size
|
18
18
|
@size = size
|
19
|
-
@queue = Queue.new
|
19
|
+
@queue = Thread::Queue.new
|
20
20
|
@pool = nil
|
21
21
|
end
|
22
22
|
|
@@ -24,10 +24,10 @@ module Minitest
|
|
24
24
|
# Start the executor
|
25
25
|
|
26
26
|
def start
|
27
|
-
@pool = size
|
28
|
-
Thread.new
|
27
|
+
@pool = Array.new(size) {
|
28
|
+
Thread.new @queue do |queue|
|
29
29
|
Thread.current.abort_on_exception = true
|
30
|
-
while
|
30
|
+
while job = queue.pop do
|
31
31
|
klass, method, reporter = job
|
32
32
|
reporter.synchronize { reporter.prerecord klass, method }
|
33
33
|
result = Minitest.run_one_method klass, method
|
@@ -8,13 +8,13 @@ module Minitest
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.plugin_pride_init options # :nodoc:
|
11
|
-
|
12
|
-
klass = ENV["TERM"] =~ /^xterm|-256color$/ ? PrideLOL : PrideIO
|
13
|
-
io = klass.new options[:io]
|
11
|
+
return unless PrideIO.pride?
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
klass = ENV["TERM"] =~ /^xterm|-256color$/ ? PrideLOL : PrideIO
|
14
|
+
io = klass.new options[:io]
|
15
|
+
|
16
|
+
self.reporter.reporters.grep(Minitest::Reporter).each do |rep|
|
17
|
+
rep.io = io if rep.io.tty?
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -59,12 +59,10 @@ module Minitest
|
|
59
59
|
|
60
60
|
def print o
|
61
61
|
case o
|
62
|
-
when "." then
|
62
|
+
when ".", "S" then
|
63
63
|
io.print pride o
|
64
64
|
when "E", "F" then
|
65
65
|
io.print "#{ESC}41m#{ESC}37m#{o}#{NND}"
|
66
|
-
when "S" then
|
67
|
-
io.print pride o
|
68
66
|
else
|
69
67
|
io.print o
|
70
68
|
end
|
@@ -72,11 +70,9 @@ module Minitest
|
|
72
70
|
|
73
71
|
def puts *o # :nodoc:
|
74
72
|
o.map! { |s|
|
75
|
-
s.to_s.sub(
|
73
|
+
s.to_s.sub("Finished") {
|
76
74
|
@index = 0
|
77
|
-
"Fabulous run".
|
78
|
-
pride(c)
|
79
|
-
}.join
|
75
|
+
"Fabulous run".chars.map { |c| pride(c) }.join
|
80
76
|
}
|
81
77
|
}
|
82
78
|
|
@@ -113,19 +109,16 @@ module Minitest
|
|
113
109
|
#
|
114
110
|
# plot (3*sin(x)+3), (3*sin(x+2*pi/3)+3), (3*sin(x+4*pi/3)+3)
|
115
111
|
|
116
|
-
|
117
|
-
|
118
|
-
n *= 1.0 / 6
|
112
|
+
@colors = Array.new(6 * 7) { |n|
|
113
|
+
n *= 1.0 / 3
|
119
114
|
r = (3 * Math.sin(n ) + 3).to_i
|
120
|
-
g = (3 * Math.sin(n +
|
121
|
-
b = (3 * Math.sin(n +
|
122
|
-
|
123
|
-
# Then we take rgb and encode them in a single number using base 6.
|
124
|
-
# For some mysterious reason, we add 16... to clear the bottom 4 bits?
|
125
|
-
# Yes... they're ugly.
|
115
|
+
g = (3 * Math.sin(n + 4 * PI_3) + 3).to_i
|
116
|
+
b = (3 * Math.sin(n + 2 * PI_3) + 3).to_i
|
126
117
|
|
118
|
+
# Then we take rgb and encode them in a single number using
|
119
|
+
# base 6, shifted by 16 for the base 16 ansi colors.
|
127
120
|
36 * r + 6 * g + b + 16
|
128
|
-
}
|
121
|
+
}.rotate(4) # puts "red" first
|
129
122
|
|
130
123
|
super
|
131
124
|
end
|
data/lib/minitest/spec.rb
CHANGED
@@ -4,7 +4,11 @@ class Module # :nodoc:
|
|
4
4
|
def infect_an_assertion meth, new_name, dont_flip = false # :nodoc:
|
5
5
|
block = dont_flip == :block
|
6
6
|
dont_flip = false if block
|
7
|
-
target_obj = block ?
|
7
|
+
target_obj = block ? "_{obj.method}" : "_(obj)"
|
8
|
+
|
9
|
+
# https://eregon.me/blog/2021/02/13/correct-delegation-in-ruby-2-27-3.html
|
10
|
+
# Drop this when we can drop ruby 2.6 (aka after rails 6.1 EOL, ~2024-06)
|
11
|
+
kw_extra = "ruby2_keywords %p" % [new_name] if respond_to? :ruby2_keywords, true
|
8
12
|
|
9
13
|
# warn "%-22p -> %p %p" % [meth, new_name, dont_flip]
|
10
14
|
self.class_eval <<-EOM, __FILE__, __LINE__ + 1
|
@@ -14,6 +18,7 @@ class Module # :nodoc:
|
|
14
18
|
Kernel.warn "DEPRECATED: global use of #{new_name} from #\{where}. Use #{target_obj}.#{new_name} instead. This will fail in Minitest 6."
|
15
19
|
Minitest::Expectation.new(self, Minitest::Spec.current).#{new_name}(*args)
|
16
20
|
end
|
21
|
+
#{kw_extra}
|
17
22
|
EOM
|
18
23
|
|
19
24
|
Minitest::Expectation.class_eval <<-EOM, __FILE__, __LINE__ + 1
|
@@ -28,6 +33,7 @@ class Module # :nodoc:
|
|
28
33
|
ctx.#{meth}(args.first, target, *args[1..-1])
|
29
34
|
end
|
30
35
|
end
|
36
|
+
#{kw_extra}
|
31
37
|
EOM
|
32
38
|
end
|
33
39
|
end
|
@@ -243,7 +249,7 @@ class Minitest::Spec < Minitest::Test
|
|
243
249
|
pre, post = "let '#{name}' cannot ", ". Please use another name."
|
244
250
|
methods = Minitest::Spec.instance_methods.map(&:to_s) - %w[subject]
|
245
251
|
raise ArgumentError, "#{pre}begin with 'test'#{post}" if
|
246
|
-
name
|
252
|
+
name.start_with? "test"
|
247
253
|
raise ArgumentError, "#{pre}override a method in Minitest::Spec#{post}" if
|
248
254
|
methods.include? name
|
249
255
|
|
@@ -262,7 +268,7 @@ class Minitest::Spec < Minitest::Test
|
|
262
268
|
end
|
263
269
|
|
264
270
|
def create name, desc # :nodoc:
|
265
|
-
cls = Class.new
|
271
|
+
cls = Class.new self do
|
266
272
|
@name = name
|
267
273
|
@desc = desc
|
268
274
|
|
@@ -283,7 +289,7 @@ class Minitest::Spec < Minitest::Test
|
|
283
289
|
end
|
284
290
|
|
285
291
|
attr_reader :desc # :nodoc:
|
286
|
-
alias
|
292
|
+
alias specify it
|
287
293
|
|
288
294
|
##
|
289
295
|
# Rdoc... why are you so dumb?
|
data/lib/minitest/test.rb
CHANGED
@@ -18,6 +18,10 @@ module Minitest
|
|
18
18
|
|
19
19
|
PASSTHROUGH_EXCEPTIONS = [NoMemoryError, SignalException, SystemExit] # :nodoc:
|
20
20
|
|
21
|
+
SETUP_METHODS = %w[ before_setup setup after_setup ] # :nodoc:
|
22
|
+
|
23
|
+
TEARDOWN_METHODS = %w[ before_teardown teardown after_teardown ] # :nodoc:
|
24
|
+
|
21
25
|
# :stopdoc:
|
22
26
|
class << self; attr_accessor :io_lock; end
|
23
27
|
self.io_lock = Mutex.new
|
@@ -48,9 +52,10 @@ module Minitest
|
|
48
52
|
end
|
49
53
|
|
50
54
|
##
|
51
|
-
# Call this at the top of your tests
|
52
|
-
#
|
53
|
-
#
|
55
|
+
# Call this at the top of your tests (inside the +Minitest::Test+
|
56
|
+
# subclass or +describe+ block) when you want to run your tests in
|
57
|
+
# parallel. In doing so, you're admitting that you rule and your
|
58
|
+
# tests are awesome.
|
54
59
|
|
55
60
|
def self.parallelize_me!
|
56
61
|
include Minitest::Parallel::Test
|
@@ -76,32 +81,22 @@ module Minitest
|
|
76
81
|
end
|
77
82
|
end
|
78
83
|
|
79
|
-
##
|
80
|
-
# Defines the order to run tests (:random by default). Override
|
81
|
-
# this or use a convenience method to change it for your tests.
|
82
|
-
|
83
|
-
def self.test_order
|
84
|
-
:random
|
85
|
-
end
|
86
|
-
|
87
|
-
TEARDOWN_METHODS = %w[ before_teardown teardown after_teardown ] # :nodoc:
|
88
|
-
|
89
84
|
##
|
90
85
|
# Runs a single test with setup/teardown hooks.
|
91
86
|
|
92
87
|
def run
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
self.send self.name
|
88
|
+
time_it do
|
89
|
+
capture_exceptions do
|
90
|
+
SETUP_METHODS.each do |hook|
|
91
|
+
self.send hook
|
99
92
|
end
|
100
93
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
94
|
+
self.send self.name
|
95
|
+
end
|
96
|
+
|
97
|
+
TEARDOWN_METHODS.each do |hook|
|
98
|
+
capture_exceptions do
|
99
|
+
self.send hook
|
105
100
|
end
|
106
101
|
end
|
107
102
|
end
|
@@ -145,7 +140,7 @@ module Minitest
|
|
145
140
|
# end
|
146
141
|
# end
|
147
142
|
#
|
148
|
-
# class
|
143
|
+
# class Minitest::Test
|
149
144
|
# include MyMinitestPlugin
|
150
145
|
# end
|
151
146
|
|
@@ -208,7 +203,7 @@ module Minitest
|
|
208
203
|
neuter_exception e
|
209
204
|
end
|
210
205
|
|
211
|
-
def neuter_exception e
|
206
|
+
def neuter_exception e # :nodoc:
|
212
207
|
bt = e.backtrace
|
213
208
|
msg = e.message.dup
|
214
209
|
|
@@ -219,7 +214,7 @@ module Minitest
|
|
219
214
|
new_exception RuntimeError, msg, bt, true # but if this raises, we die
|
220
215
|
end
|
221
216
|
|
222
|
-
def new_exception klass, msg, bt, kill = false
|
217
|
+
def new_exception klass, msg, bt, kill = false # :nodoc:
|
223
218
|
ne = klass.new msg
|
224
219
|
ne.set_backtrace bt
|
225
220
|
|
@@ -233,20 +228,10 @@ module Minitest
|
|
233
228
|
ne
|
234
229
|
end
|
235
230
|
|
236
|
-
def with_info_handler &block # :nodoc:
|
237
|
-
t0 = Minitest.clock_time
|
238
|
-
|
239
|
-
handler = lambda do
|
240
|
-
warn "\nCurrent: %s#%s %.2fs" % [self.class, self.name, Minitest.clock_time - t0]
|
241
|
-
end
|
242
|
-
|
243
|
-
self.class.on_signal ::Minitest.info_signal, handler, &block
|
244
|
-
end
|
245
|
-
|
246
231
|
include LifecycleHooks
|
247
232
|
include Guard
|
248
233
|
extend Guard
|
249
234
|
end # Test
|
250
235
|
end
|
251
236
|
|
252
|
-
require "minitest/unit"
|
237
|
+
require "minitest/unit" if ENV["MT_COMPAT"] # compatibility layer only
|
data/lib/minitest/test_task.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
require "shellwords"
|
2
2
|
require "rbconfig"
|
3
|
-
|
3
|
+
|
4
|
+
begin
|
5
|
+
require "rake/tasklib"
|
6
|
+
rescue LoadError => e
|
7
|
+
warn e.message
|
8
|
+
return
|
9
|
+
end
|
4
10
|
|
5
11
|
module Minitest # :nodoc:
|
6
12
|
|
@@ -29,6 +35,10 @@ module Minitest # :nodoc:
|
|
29
35
|
# end
|
30
36
|
#
|
31
37
|
# Customize the name and only run unit tests.
|
38
|
+
#
|
39
|
+
# NOTE: To hook this task up to the default, make it a dependency:
|
40
|
+
#
|
41
|
+
# task default: :unit
|
32
42
|
|
33
43
|
class TestTask < Rake::TaskLib
|
34
44
|
WINDOWS = RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ # :nodoc:
|
@@ -110,7 +120,7 @@ module Minitest # :nodoc:
|
|
110
120
|
self.test_globs = ["test/**/test_*.rb",
|
111
121
|
"test/**/*_test.rb"]
|
112
122
|
self.test_prelude = nil
|
113
|
-
self.verbose = Rake.application.options.trace
|
123
|
+
self.verbose = Rake.application.options.trace || Rake.verbose == true
|
114
124
|
self.warning = true
|
115
125
|
end
|
116
126
|
|
@@ -140,7 +150,7 @@ module Minitest # :nodoc:
|
|
140
150
|
ENV["N"] && ENV["N"].to_i > 0
|
141
151
|
|
142
152
|
lib_extras = (ENV["MT_LIB_EXTRAS"] || "").split File::PATH_SEPARATOR
|
143
|
-
self.libs[0,0] = lib_extras
|
153
|
+
self.libs[0, 0] = lib_extras
|
144
154
|
|
145
155
|
extra_args << "-n" << ENV["N"] if ENV["N"]
|
146
156
|
extra_args << "-e" << ENV["X"] if ENV["X"]
|
@@ -157,11 +167,9 @@ module Minitest # :nodoc:
|
|
157
167
|
end
|
158
168
|
|
159
169
|
def define # :nodoc:
|
160
|
-
default_tasks = []
|
161
|
-
|
162
170
|
desc "Run the test suite. Use N, X, A, and TESTOPTS to add flags/args."
|
163
171
|
task name do
|
164
|
-
ruby make_test_cmd, verbose:verbose
|
172
|
+
ruby make_test_cmd, verbose: verbose
|
165
173
|
end
|
166
174
|
|
167
175
|
desc "Print out the test command. Good for profiling and other tools."
|
@@ -175,7 +183,7 @@ module Minitest # :nodoc:
|
|
175
183
|
|
176
184
|
# 3 seems to be the magic number... (tho not by that much)
|
177
185
|
bad, good, n = {}, [], (ENV.delete("K") || 3).to_i
|
178
|
-
file = ENV.delete
|
186
|
+
file = ENV.delete "F"
|
179
187
|
times = {}
|
180
188
|
|
181
189
|
tt0 = Time.now
|
@@ -236,18 +244,13 @@ module Minitest # :nodoc:
|
|
236
244
|
|
237
245
|
task "#{name}:deps" => "#{name}:isolated" # now just an alias
|
238
246
|
|
239
|
-
desc "
|
247
|
+
desc "Run the test suite and report the slowest 25 tests."
|
240
248
|
task "#{name}:slow" do
|
241
249
|
sh ["rake #{name} A=-v",
|
242
250
|
"egrep '#test_.* s = .'",
|
243
251
|
"sort -n -k2 -t=",
|
244
252
|
"tail -25"].join " | "
|
245
253
|
end
|
246
|
-
|
247
|
-
default_tasks << name
|
248
|
-
|
249
|
-
desc "Run the default task(s)."
|
250
|
-
task :default => default_tasks
|
251
254
|
end
|
252
255
|
|
253
256
|
##
|
@@ -265,11 +268,11 @@ module Minitest # :nodoc:
|
|
265
268
|
runner = runner.join "; "
|
266
269
|
|
267
270
|
args = []
|
268
|
-
args << "-I#{libs.join
|
271
|
+
args << "-I#{libs.join File::PATH_SEPARATOR}" unless libs.empty?
|
269
272
|
args << "-w" if warning
|
270
|
-
args <<
|
273
|
+
args << "-e"
|
271
274
|
args << "'#{runner}'"
|
272
|
-
args <<
|
275
|
+
args << "--"
|
273
276
|
args << extra_args.map(&:shellescape)
|
274
277
|
|
275
278
|
args.join " "
|
@@ -277,8 +280,8 @@ module Minitest # :nodoc:
|
|
277
280
|
end
|
278
281
|
end
|
279
282
|
|
280
|
-
class Work < Queue
|
281
|
-
def initialize jobs = []
|
283
|
+
class Work < Queue # :nodoc:
|
284
|
+
def initialize jobs = [] # :nodoc:
|
282
285
|
super()
|
283
286
|
|
284
287
|
jobs.each do |job|
|
@@ -289,12 +292,11 @@ class Work < Queue
|
|
289
292
|
end
|
290
293
|
end
|
291
294
|
|
292
|
-
class Integer
|
293
|
-
def threads_do
|
294
|
-
require "thread"
|
295
|
+
class Integer # :nodoc:
|
296
|
+
def threads_do jobs # :nodoc:
|
295
297
|
q = Work.new jobs
|
296
298
|
|
297
|
-
self
|
299
|
+
Array.new(self) {
|
298
300
|
Thread.new do
|
299
301
|
while job = q.pop # go until quit value
|
300
302
|
yield job
|