minitest 5.23.1 → 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 +39 -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 +13 -13
- data/lib/minitest/parallel.rb +4 -4
- data/lib/minitest/pride_plugin.rb +10 -14
- data/lib/minitest/spec.rb +5 -5
- data/lib/minitest/test.rb +10 -22
- data/lib/minitest/test_task.rb +16 -10
- data/lib/minitest.rb +179 -142
- 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 +11 -15
- data/test/minitest/test_minitest_spec.rb +35 -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
data/lib/minitest/mock.rb
CHANGED
@@ -8,7 +8,7 @@ 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
13
|
overridden_methods = %i[
|
14
14
|
===
|
@@ -93,7 +93,7 @@ module Minitest # :nodoc:
|
|
93
93
|
def expect name, retval, args = [], **kwargs, &blk
|
94
94
|
name = name.to_sym
|
95
95
|
|
96
|
-
if
|
96
|
+
if blk then
|
97
97
|
raise ArgumentError, "args ignored when block given" unless args.empty?
|
98
98
|
raise ArgumentError, "kwargs ignored when block given" unless kwargs.empty?
|
99
99
|
@expected_calls[name] << { :retval => retval, :block => blk }
|
@@ -106,7 +106,7 @@ module Minitest # :nodoc:
|
|
106
106
|
kwargs = args.pop
|
107
107
|
else
|
108
108
|
unless @@KW_WARNED then
|
109
|
-
from = caller.first
|
109
|
+
from = caller(1..1).first
|
110
110
|
warn "Using MT_KWARGS_HAC\K yet passing kwargs. From #{from}"
|
111
111
|
@@KW_WARNED = true
|
112
112
|
end
|
@@ -141,7 +141,7 @@ module Minitest # :nodoc:
|
|
141
141
|
|
142
142
|
def verify
|
143
143
|
@expected_calls.each do |name, expected|
|
144
|
-
actual = @actual_calls.fetch
|
144
|
+
actual = @actual_calls.fetch name, nil # defaults to []
|
145
145
|
raise MockExpectationError, "expected #{__call name, expected[0]}" unless actual
|
146
146
|
raise MockExpectationError, "expected #{__call name, expected[actual.size]}, got [#{__call name, actual}]" if
|
147
147
|
actual.size < expected.size
|
@@ -150,7 +150,7 @@ module Minitest # :nodoc:
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def method_missing sym, *args, **kwargs, &block # :nodoc:
|
153
|
-
unless @expected_calls.key?
|
153
|
+
unless @expected_calls.key? sym then
|
154
154
|
if @delegator && @delegator.respond_to?(sym)
|
155
155
|
if kwargs.empty? then # FIX: drop this after 2.7 dead
|
156
156
|
return @delegator.public_send(sym, *args, &block)
|
@@ -172,9 +172,9 @@ module Minitest # :nodoc:
|
|
172
172
|
end
|
173
173
|
|
174
174
|
expected_args, expected_kwargs, retval, val_block =
|
175
|
-
expected_call.values_at
|
175
|
+
expected_call.values_at :args, :kwargs, :retval, :block
|
176
176
|
|
177
|
-
expected_kwargs = kwargs.
|
177
|
+
expected_kwargs = kwargs.to_h { |ak, av| [ak, Object] } if
|
178
178
|
Hash == expected_kwargs
|
179
179
|
|
180
180
|
if val_block then
|
@@ -197,7 +197,7 @@ module Minitest # :nodoc:
|
|
197
197
|
[sym, expected_kwargs.size, kwargs]
|
198
198
|
end
|
199
199
|
|
200
|
-
zipped_args = expected_args.zip
|
200
|
+
zipped_args = expected_args.zip args
|
201
201
|
fully_matched = zipped_args.all? { |mod, a|
|
202
202
|
mod === a or mod == a
|
203
203
|
}
|
@@ -212,10 +212,10 @@ module Minitest # :nodoc:
|
|
212
212
|
raise MockExpectationError, fmt % [sym, expected_kwargs.keys, kwargs.keys]
|
213
213
|
end
|
214
214
|
|
215
|
-
zipped_kwargs = expected_kwargs.
|
215
|
+
zipped_kwargs = expected_kwargs.to_h { |ek, ev|
|
216
216
|
av = kwargs[ek]
|
217
217
|
[ek, [ev, av]]
|
218
|
-
}
|
218
|
+
}
|
219
219
|
|
220
220
|
fully_matched = zipped_kwargs.all? { |ek, (ev, av)|
|
221
221
|
ev === av or ev == av
|
@@ -228,8 +228,8 @@ module Minitest # :nodoc:
|
|
228
228
|
|
229
229
|
@actual_calls[sym] << {
|
230
230
|
:retval => retval,
|
231
|
-
:args
|
232
|
-
: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] },
|
233
233
|
}
|
234
234
|
|
235
235
|
retval
|
@@ -238,7 +238,7 @@ module Minitest # :nodoc:
|
|
238
238
|
def respond_to? sym, include_private = false # :nodoc:
|
239
239
|
return true if @expected_calls.key? sym.to_sym
|
240
240
|
return true if @delegator && @delegator.respond_to?(sym, include_private)
|
241
|
-
__respond_to?
|
241
|
+
__respond_to? sym, include_private
|
242
242
|
end
|
243
243
|
end
|
244
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.
|
@@ -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,7 +109,7 @@ 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
|
-
@colors = (6 * 7)
|
112
|
+
@colors = Array.new(6 * 7) { |n|
|
117
113
|
n *= 1.0 / 3
|
118
114
|
r = (3 * Math.sin(n ) + 3).to_i
|
119
115
|
g = (3 * Math.sin(n + 4 * PI_3) + 3).to_i
|
data/lib/minitest/spec.rb
CHANGED
@@ -4,11 +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
8
|
|
9
9
|
# https://eregon.me/blog/2021/02/13/correct-delegation-in-ruby-2-27-3.html
|
10
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?
|
11
|
+
kw_extra = "ruby2_keywords %p" % [new_name] if respond_to? :ruby2_keywords, true
|
12
12
|
|
13
13
|
# warn "%-22p -> %p %p" % [meth, new_name, dont_flip]
|
14
14
|
self.class_eval <<-EOM, __FILE__, __LINE__ + 1
|
@@ -249,7 +249,7 @@ class Minitest::Spec < Minitest::Test
|
|
249
249
|
pre, post = "let '#{name}' cannot ", ". Please use another name."
|
250
250
|
methods = Minitest::Spec.instance_methods.map(&:to_s) - %w[subject]
|
251
251
|
raise ArgumentError, "#{pre}begin with 'test'#{post}" if
|
252
|
-
name
|
252
|
+
name.start_with? "test"
|
253
253
|
raise ArgumentError, "#{pre}override a method in Minitest::Spec#{post}" if
|
254
254
|
methods.include? name
|
255
255
|
|
@@ -268,7 +268,7 @@ class Minitest::Spec < Minitest::Test
|
|
268
268
|
end
|
269
269
|
|
270
270
|
def create name, desc # :nodoc:
|
271
|
-
cls = Class.new
|
271
|
+
cls = Class.new self do
|
272
272
|
@name = name
|
273
273
|
@desc = desc
|
274
274
|
|
@@ -289,7 +289,7 @@ class Minitest::Spec < Minitest::Test
|
|
289
289
|
end
|
290
290
|
|
291
291
|
attr_reader :desc # :nodoc:
|
292
|
-
alias
|
292
|
+
alias specify it
|
293
293
|
|
294
294
|
##
|
295
295
|
# Rdoc... why are you so dumb?
|
data/lib/minitest/test.rb
CHANGED
@@ -85,20 +85,18 @@ module Minitest
|
|
85
85
|
# Runs a single test with setup/teardown hooks.
|
86
86
|
|
87
87
|
def run
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
self.send hook
|
93
|
-
end
|
94
|
-
|
95
|
-
self.send self.name
|
88
|
+
time_it do
|
89
|
+
capture_exceptions do
|
90
|
+
SETUP_METHODS.each do |hook|
|
91
|
+
self.send hook
|
96
92
|
end
|
97
93
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
94
|
+
self.send self.name
|
95
|
+
end
|
96
|
+
|
97
|
+
TEARDOWN_METHODS.each do |hook|
|
98
|
+
capture_exceptions do
|
99
|
+
self.send hook
|
102
100
|
end
|
103
101
|
end
|
104
102
|
end
|
@@ -230,16 +228,6 @@ module Minitest
|
|
230
228
|
ne
|
231
229
|
end
|
232
230
|
|
233
|
-
def with_info_handler &block # :nodoc:
|
234
|
-
t0 = Minitest.clock_time
|
235
|
-
|
236
|
-
handler = lambda do
|
237
|
-
warn "\nCurrent: %s#%s %.2fs" % [self.class, self.name, Minitest.clock_time - t0]
|
238
|
-
end
|
239
|
-
|
240
|
-
self.class.on_signal ::Minitest.info_signal, handler, &block
|
241
|
-
end
|
242
|
-
|
243
231
|
include LifecycleHooks
|
244
232
|
include Guard
|
245
233
|
extend Guard
|
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
|
|
@@ -144,7 +150,7 @@ module Minitest # :nodoc:
|
|
144
150
|
ENV["N"] && ENV["N"].to_i > 0
|
145
151
|
|
146
152
|
lib_extras = (ENV["MT_LIB_EXTRAS"] || "").split File::PATH_SEPARATOR
|
147
|
-
self.libs[0,0] = lib_extras
|
153
|
+
self.libs[0, 0] = lib_extras
|
148
154
|
|
149
155
|
extra_args << "-n" << ENV["N"] if ENV["N"]
|
150
156
|
extra_args << "-e" << ENV["X"] if ENV["X"]
|
@@ -163,7 +169,7 @@ module Minitest # :nodoc:
|
|
163
169
|
def define # :nodoc:
|
164
170
|
desc "Run the test suite. Use N, X, A, and TESTOPTS to add flags/args."
|
165
171
|
task name do
|
166
|
-
ruby make_test_cmd, verbose:verbose
|
172
|
+
ruby make_test_cmd, verbose: verbose
|
167
173
|
end
|
168
174
|
|
169
175
|
desc "Print out the test command. Good for profiling and other tools."
|
@@ -177,7 +183,7 @@ module Minitest # :nodoc:
|
|
177
183
|
|
178
184
|
# 3 seems to be the magic number... (tho not by that much)
|
179
185
|
bad, good, n = {}, [], (ENV.delete("K") || 3).to_i
|
180
|
-
file = ENV.delete
|
186
|
+
file = ENV.delete "F"
|
181
187
|
times = {}
|
182
188
|
|
183
189
|
tt0 = Time.now
|
@@ -238,7 +244,7 @@ module Minitest # :nodoc:
|
|
238
244
|
|
239
245
|
task "#{name}:deps" => "#{name}:isolated" # now just an alias
|
240
246
|
|
241
|
-
desc "
|
247
|
+
desc "Run the test suite and report the slowest 25 tests."
|
242
248
|
task "#{name}:slow" do
|
243
249
|
sh ["rake #{name} A=-v",
|
244
250
|
"egrep '#test_.* s = .'",
|
@@ -262,11 +268,11 @@ module Minitest # :nodoc:
|
|
262
268
|
runner = runner.join "; "
|
263
269
|
|
264
270
|
args = []
|
265
|
-
args << "-I#{libs.join
|
271
|
+
args << "-I#{libs.join File::PATH_SEPARATOR}" unless libs.empty?
|
266
272
|
args << "-w" if warning
|
267
|
-
args <<
|
273
|
+
args << "-e"
|
268
274
|
args << "'#{runner}'"
|
269
|
-
args <<
|
275
|
+
args << "--"
|
270
276
|
args << extra_args.map(&:shellescape)
|
271
277
|
|
272
278
|
args.join " "
|
@@ -287,10 +293,10 @@ class Work < Queue # :nodoc:
|
|
287
293
|
end
|
288
294
|
|
289
295
|
class Integer # :nodoc:
|
290
|
-
def threads_do
|
296
|
+
def threads_do jobs # :nodoc:
|
291
297
|
q = Work.new jobs
|
292
298
|
|
293
|
-
self
|
299
|
+
Array.new(self) {
|
294
300
|
Thread.new do
|
295
301
|
while job = q.pop # go until quit value
|
296
302
|
yield job
|