minitest 5.26.1 → 6.0.6

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/History.rdoc +138 -0
  4. data/Manifest.txt +13 -4
  5. data/README.rdoc +14 -98
  6. data/Rakefile +10 -1
  7. data/bin/minitest +5 -0
  8. data/lib/hoe/minitest.rb +2 -1
  9. data/lib/minitest/assertions.rb +44 -73
  10. data/lib/minitest/autorun.rb +3 -4
  11. data/lib/minitest/benchmark.rb +3 -3
  12. data/lib/minitest/bisect.rb +304 -0
  13. data/lib/minitest/complete.rb +56 -0
  14. data/lib/minitest/find_minimal_combination.rb +127 -0
  15. data/lib/minitest/hell.rb +1 -1
  16. data/lib/minitest/manual_plugins.rb +4 -16
  17. data/lib/minitest/parallel.rb +3 -3
  18. data/lib/minitest/path_expander.rb +432 -0
  19. data/lib/minitest/pride.rb +2 -2
  20. data/lib/minitest/pride_plugin.rb +1 -1
  21. data/lib/minitest/server.rb +49 -0
  22. data/lib/minitest/server_plugin.rb +88 -0
  23. data/lib/minitest/spec.rb +5 -33
  24. data/lib/minitest/sprint.rb +105 -0
  25. data/lib/minitest/sprint_plugin.rb +39 -0
  26. data/lib/minitest/test.rb +7 -13
  27. data/lib/minitest/test_task.rb +18 -16
  28. data/lib/minitest.rb +88 -94
  29. data/test/minitest/metametameta.rb +1 -1
  30. data/test/minitest/test_bisect.rb +249 -0
  31. data/test/minitest/test_find_minimal_combination.rb +138 -0
  32. data/test/minitest/test_minitest_assertions.rb +111 -102
  33. data/test/minitest/test_minitest_benchmark.rb +14 -0
  34. data/test/minitest/test_minitest_reporter.rb +6 -5
  35. data/test/minitest/test_minitest_spec.rb +51 -117
  36. data/test/minitest/test_minitest_test.rb +21 -100
  37. data/test/minitest/test_path_expander.rb +229 -0
  38. data/test/minitest/test_server.rb +146 -0
  39. data.tar.gz.sig +0 -0
  40. metadata +90 -28
  41. metadata.gz.sig +0 -0
  42. data/.autotest +0 -34
  43. data/lib/minitest/mock.rb +0 -347
  44. data/lib/minitest/unit.rb +0 -42
  45. data/test/minitest/test_minitest_mock.rb +0 -1218
@@ -0,0 +1,105 @@
1
+ $LOAD_PATH.unshift "test", "lib"
2
+
3
+ require "simplecov" if ENV["MT_COV"] || ARGV.delete("--simplecov")
4
+ require_relative "autorun"
5
+ require_relative "path_expander"
6
+
7
+ module Minitest
8
+
9
+ ##
10
+ # Runs (Get it? It's fast!) your tests and makes it easier to rerun
11
+ # individual failures.
12
+
13
+ class Sprint
14
+ # extracted version = "1.5.0"
15
+
16
+ ##
17
+ # Process and run minitest cmdline.
18
+
19
+ def self.run args = ARGV
20
+ if args.delete("--bisect") or args.delete("-b") then
21
+ require_relative "bisect"
22
+
23
+ return Minitest::Bisect.run ARGV
24
+ end
25
+
26
+ Minitest::PathExpander.new(args).process { |f|
27
+ require "./#{f}" if File.file? f
28
+ }
29
+ end
30
+
31
+ ##
32
+ # An extra minitest reporter to output how to rerun failures in
33
+ # various styles.
34
+
35
+ class SprintReporter < AbstractReporter
36
+ ##
37
+ # The style to report, either lines or regexp. Defaults to lines.
38
+ attr_accessor :style
39
+ attr_accessor :results # :nodoc:
40
+
41
+ def initialize style = :regexp # :nodoc:
42
+ self.results = []
43
+ self.style = style
44
+ end
45
+
46
+ def record result # :nodoc:
47
+ results << result unless result.passed? or result.skipped?
48
+ end
49
+
50
+ def report # :nodoc:
51
+ return if results.empty?
52
+
53
+ puts
54
+ puts "Happy Happy Sprint List:"
55
+ puts
56
+ print_list
57
+ puts
58
+ end
59
+
60
+ def print_list # :nodoc:
61
+ case style
62
+ when :regexp
63
+ results.each do |result|
64
+ puts " minitest -n #{result.class_name}##{result.name}"
65
+ end
66
+ when :lines
67
+ files = Hash.new { |h,k| h[k] = [] }
68
+ results.each do |result|
69
+ path, line = result.source_location
70
+ path = path.delete_prefix "#{Dir.pwd}/"
71
+ files[path] << line
72
+ end
73
+
74
+ files.sort.each do |path, lines|
75
+ puts " minitest %s:%s" % [path, lines.sort.join(",")]
76
+ end
77
+ else
78
+ raise "unsupported style: %p" % [style]
79
+ end
80
+ end
81
+ end
82
+
83
+ ##
84
+ # An extra minitest reporter to output how to rerun failures using
85
+ # rake.
86
+
87
+ class RakeReporter < SprintReporter
88
+ ##
89
+ # The name of the rake task to rerun. Defaults to nil.
90
+
91
+ attr_accessor :name
92
+
93
+ def initialize name = nil # :nodoc:
94
+ super()
95
+ self.name = name
96
+ end
97
+
98
+ def print_list # :nodoc:
99
+ results.each do |result|
100
+ puts [" rake", name, "N=#{result.class_name}##{result.name}"].compact.join(" ")
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,39 @@
1
+ require_relative "../minitest"
2
+
3
+ # :stopdoc:
4
+ class OptionParser # unofficial embedded gem "makeoptparseworkwell"
5
+ def hidden(...) = define(...).tap { |sw| def sw.summarize(*) = nil }
6
+ def deprecate(from, to) = hidden(from) { abort "#{from} is deprecated. Use #{to}." }
7
+ def topdict(name) = name.length > 1 ? top.long : top.short
8
+ def alias(from, to) = (dict = topdict(from) and dict[to] = dict[from])
9
+ end unless OptionParser.method_defined? :hidden
10
+ # :startdoc:
11
+
12
+ module Minitest # :nodoc:
13
+ def self.plugin_sprint_options opts, options # :nodoc:
14
+ opts.on "--rake [TASK]", "Report how to re-run failures with rake." do |task|
15
+ options[:sprint] = :rake
16
+ options[:rake_task] = task
17
+ end
18
+
19
+ opts.deprecate "--binstub", "--rerun"
20
+
21
+ sprint_styles = %w[rake lines names binstub]
22
+
23
+ opts.on "-r", "--rerun [STYLE]", sprint_styles, "Report how to re-run failures using STYLE (names, lines)." do |style|
24
+ options[:sprint] = (style || :lines).to_sym
25
+ end
26
+ end
27
+
28
+ def self.plugin_sprint_init options
29
+ require_relative "sprint"
30
+ case options[:sprint]
31
+ when :rake then
32
+ self.reporter << Minitest::Sprint::RakeReporter.new(options[:rake_task])
33
+ when :binstub, :names then
34
+ self.reporter << Minitest::Sprint::SprintReporter.new
35
+ when :lines then
36
+ self.reporter << Minitest::Sprint::SprintReporter.new(:lines)
37
+ end
38
+ end
39
+ end
data/lib/minitest/test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "minitest" unless defined? Minitest::Runnable
1
+ require_relative "../minitest" unless defined? Minitest::Runnable
2
2
 
3
3
  module Minitest
4
4
  ##
@@ -8,14 +8,10 @@ module Minitest
8
8
  # See Minitest::Assertions
9
9
 
10
10
  class Test < Runnable
11
- require "minitest/assertions"
11
+ require_relative "assertions"
12
12
  include Minitest::Reportable
13
13
  include Minitest::Assertions
14
14
 
15
- def class_name # :nodoc:
16
- self.class.name # for Minitest::Reportable
17
- end
18
-
19
15
  PASSTHROUGH_EXCEPTIONS = [NoMemoryError, SignalException, SystemExit] # :nodoc:
20
16
 
21
17
  SETUP_METHODS = %w[ before_setup setup after_setup ] # :nodoc:
@@ -34,8 +30,8 @@ module Minitest
34
30
 
35
31
  def self.i_suck_and_my_tests_are_order_dependent!
36
32
  class << self
37
- undef_method :test_order if method_defined? :test_order
38
- define_method :test_order do :alpha end
33
+ undef_method :run_order if method_defined? :run_order
34
+ define_method :run_order do :alpha end
39
35
  end
40
36
  end
41
37
 
@@ -65,20 +61,20 @@ module Minitest
65
61
 
66
62
  ##
67
63
  # Returns all instance methods starting with "test_". Based on
68
- # #test_order, the methods are either sorted, randomized
64
+ # #run_order, the methods are either sorted, randomized
69
65
  # (default), or run in parallel.
70
66
 
71
67
  def self.runnable_methods
72
68
  methods = methods_matching(/^test_/)
73
69
 
74
- case self.test_order
70
+ case self.run_order
75
71
  when :random, :parallel then
76
72
  srand Minitest.seed
77
73
  methods.sort.shuffle
78
74
  when :alpha, :sorted then
79
75
  methods.sort
80
76
  else
81
- raise "Unknown test_order: #{self.test_order.inspect}"
77
+ raise "Unknown_order: %p" % [self.run_order]
82
78
  end
83
79
  end
84
80
 
@@ -234,5 +230,3 @@ module Minitest
234
230
  extend Guard
235
231
  end # Test
236
232
  end
237
-
238
- require "minitest/unit" if ENV["MT_COMPAT"] # compatibility layer only
@@ -168,20 +168,18 @@ module Minitest # :nodoc:
168
168
  ENV["TESTOPTS"]
169
169
  warn "FILTER is deprecated in Minitest::TestTask. Use A instead" if
170
170
  ENV["FILTER"]
171
- warn "N is deprecated in Minitest::TestTask. Use MT_CPU instead" if
172
- ENV["N"] && ENV["N"].to_i > 0
173
171
 
174
172
  lib_extras = (ENV["MT_LIB_EXTRAS"] || "").split File::PATH_SEPARATOR
175
173
  self.libs[0, 0] = lib_extras
176
174
 
177
- extra_args << "-n" << ENV["N"] if ENV["N"]
178
- extra_args << "-e" << ENV["X"] if ENV["X"]
175
+ extra_args << "-i" << ENV["N"] if ENV["N"]
176
+ extra_args << "-i" << ENV["I"] if ENV["I"]
177
+ extra_args << "-x" << ENV["X"] if ENV["X"]
178
+ extra_args << "-x" << ENV["E"] if ENV["E"]
179
179
  extra_args.concat Shellwords.split(ENV["TESTOPTS"]) if ENV["TESTOPTS"]
180
180
  extra_args.concat Shellwords.split(ENV["FILTER"]) if ENV["FILTER"]
181
181
  extra_args.concat Shellwords.split(ENV["A"]) if ENV["A"]
182
182
 
183
- ENV.delete "N" if ENV["N"]
184
-
185
183
  # TODO? RUBY_DEBUG = ENV["RUBY_DEBUG"]
186
184
  # TODO? ENV["RUBY_FLAGS"]
187
185
 
@@ -189,11 +187,16 @@ module Minitest # :nodoc:
189
187
  end
190
188
 
191
189
  def define # :nodoc:
192
- desc "Run the test suite. Use N, X, A, and TESTOPTS to add flags/args."
190
+ desc "Run the test suite. Use I, X, and A to add flags/args."
193
191
  task name do
194
192
  ruby make_test_cmd, verbose: verbose
195
193
  end
196
194
 
195
+ desc "Run the test suite, filtering for 'FU' in name (focused units?)."
196
+ task "#{name}:fu" do
197
+ ruby make_test_cmd(include:"/FU/"), verbose: verbose
198
+ end
199
+
197
200
  desc "Print out the test command. Good for profiling and other tools."
198
201
  task "#{name}:cmd" do
199
202
  puts "ruby #{make_test_cmd}"
@@ -212,7 +215,7 @@ module Minitest # :nodoc:
212
215
 
213
216
  n.threads_do tests.sort do |path|
214
217
  t0 = Time.now
215
- output = `#{Gem.ruby} #{make_test_cmd path} 2>&1`
218
+ output = `#{Gem.ruby} #{make_test_cmd path:path} 2>&1`
216
219
  t1 = Time.now - t0
217
220
 
218
221
  times[path] = t1
@@ -278,7 +281,9 @@ module Minitest # :nodoc:
278
281
  ##
279
282
  # Generate the test command-line.
280
283
 
281
- def make_test_cmd globs = test_globs
284
+ def make_test_cmd **option
285
+ globs = option[:path] || test_globs
286
+
282
287
  tests = []
283
288
  tests.concat Dir[*globs].sort.shuffle # TODO: SEED -> srand first?
284
289
  tests.map! { |f| %(require "#{f}") }
@@ -289,6 +294,8 @@ module Minitest # :nodoc:
289
294
  runner.concat tests
290
295
  runner = runner.join "; "
291
296
 
297
+ extra_args << "-i" << option[:include] if option[:include]
298
+
292
299
  args = []
293
300
  args << "-I#{libs.join File::PATH_SEPARATOR}" unless libs.empty?
294
301
  args << "-w" if warning
@@ -303,13 +310,8 @@ module Minitest # :nodoc:
303
310
  end
304
311
 
305
312
  class Work < Queue # :nodoc:
306
- def initialize jobs = [] # :nodoc:
307
- super()
308
-
309
- jobs.each do |job|
310
- self << job
311
- end
312
-
313
+ def initialize jobs # :nodoc:
314
+ super
313
315
  close
314
316
  end
315
317
  end
data/lib/minitest.rb CHANGED
@@ -10,7 +10,7 @@ require_relative "minitest/compress"
10
10
  # runtime. See +Minitest.run+ for more information.
11
11
 
12
12
  module Minitest
13
- VERSION = "5.26.1" # :nodoc:
13
+ VERSION = "6.0.6" # :nodoc:
14
14
 
15
15
  @@installed_at_exit ||= false
16
16
  @@after_run = []
@@ -33,8 +33,7 @@ module Minitest
33
33
 
34
34
  cattr_accessor :parallel_executor
35
35
 
36
- warn "DEPRECATED: use MT_CPU instead of N for parallel test runs" if ENV["N"] && ENV["N"].to_i > 0
37
- n_threads = (ENV["MT_CPU"] || ENV["N"] || Etc.nprocessors).to_i
36
+ n_threads = (ENV["MT_CPU"] || Etc.nprocessors).to_i
38
37
 
39
38
  self.parallel_executor = Parallel::Executor.new n_threads if n_threads > 1
40
39
 
@@ -68,8 +67,7 @@ module Minitest
68
67
  # Registers Minitest to run at process exit
69
68
 
70
69
  def self.autorun
71
- Warning[:deprecated] = true if
72
- Object.const_defined?(:Warning) && Warning.respond_to?(:[]=)
70
+ Warning[:deprecated] = true
73
71
 
74
72
  at_exit {
75
73
  next if $! and not ($!.kind_of? SystemExit and $!.success?)
@@ -98,6 +96,17 @@ module Minitest
98
96
  @@after_run << block
99
97
  end
100
98
 
99
+ ##
100
+ # Manually load plugins by name.
101
+
102
+ def self.load *names
103
+ names.each do |name|
104
+ require "minitest/#{name}_plugin"
105
+
106
+ self.extensions << name.to_s
107
+ end
108
+ end
109
+
101
110
  ##
102
111
  # Register a plugin to be used. Does NOT require / load it.
103
112
 
@@ -146,27 +155,38 @@ module Minitest
146
155
  }
147
156
  orig_args = args.dup
148
157
 
158
+ warn "--no-plugins is a no-op" if args.delete "--no-plugins" # TODO: remove me! when?
159
+
149
160
  OptionParser.new do |opts|
150
- opts.banner = "minitest options:"
161
+ opts.program_name = "minitest"
151
162
  opts.version = Minitest::VERSION
152
163
 
164
+ opts.banner = [
165
+ "Usage: minitest [paths] [options]",
166
+ "ruby path/to/test.rb [options]",
167
+ "rake test [A=options] (see Minitest::TestTask for more options)\n\n",
168
+ ].join "\n or: "
169
+
153
170
  opts.on "-h", "--help", "Display this help." do
154
171
  puts opts
155
- exit
172
+ exit! true
156
173
  end
157
174
 
158
- opts.on "--no-plugins", "Bypass minitest plugin auto-loading (or set $MT_NO_PLUGINS)."
175
+ opts.on "-V", "--version", "Display the version." do
176
+ puts "#{opts.program_name} #{Minitest::VERSION}"
177
+ exit! true
178
+ end
159
179
 
160
- desc = "Sets random seed. Also via env. Eg: SEED=n rake"
180
+ desc = "Sets random seed. Also via env, eg: SEED=42"
161
181
  opts.on "-s", "--seed SEED", Integer, desc do |m|
162
- options[:seed] = m.to_i
182
+ options[:seed] = m
163
183
  end
164
184
 
165
- opts.on "-v", "--verbose", "Verbose. Show progress processing files." do
185
+ opts.on "-v", "--verbose", "Verbose. Print each name as they run." do
166
186
  options[:verbose] = true
167
187
  end
168
188
 
169
- opts.on "-q", "--quiet", "Quiet. Show no progress processing files." do
189
+ opts.on "-q", "--quiet", "Quiet. Show no dots while processing files." do
170
190
  options[:quiet] = true
171
191
  end
172
192
 
@@ -174,29 +194,39 @@ module Minitest
174
194
  options[:show_skips] = true
175
195
  end
176
196
 
177
- opts.on "-n", "--name PATTERN", "Filter run on /regexp/ or string." do |a|
178
- options[:filter] = a
197
+ opts.on "-b", "--bisect", "Run minitest in bisect-mode to isolate flaky tests." if
198
+ File.basename($0).match?(/minitest/)
199
+
200
+ opts.on "-i", "--include PATTERN", "Include /regexp/ or string for run." do |a|
201
+ options[:include] = a
179
202
  end
180
203
 
181
204
  opts.on "-e", "--exclude PATTERN", "Exclude /regexp/ or string from run." do |a|
182
205
  options[:exclude] = a
183
206
  end
184
207
 
208
+ # part of my unofficial embedded gem "makeoptparseworkwell"
209
+ def opts.topdict(name) = (name.length > 1 ? top.long : top.short)
210
+ def opts.alias(from, to) = (dict = topdict(from) ; dict[to] = dict[from])
211
+
212
+ # these will work but won't show up in --help output:
213
+ opts.alias "include", "name"
214
+ opts.alias "i", "n"
215
+ opts.alias "e", "x"
216
+
185
217
  opts.on "-S", "--skip CODES", String, "Skip reporting of certain types of results (eg E)." do |s|
186
218
  options[:skip] = s.chars.to_a
187
219
  end
188
220
 
189
- ruby27plus = ::Warning.respond_to? :[]=
190
-
191
221
  opts.on "-W[error]", String, "Turn Ruby warnings into errors" do |s|
192
222
  options[:Werror] = true
193
223
  case s
194
224
  when "error", "all", nil then
195
- require "minitest/error_on_warning"
225
+ require_relative "minitest/error_on_warning"
196
226
  $VERBOSE = true
197
- ::Warning[:deprecated] = true if ruby27plus
227
+ ::Warning[:deprecated] = true
198
228
  else
199
- ::Warning[s.to_sym] = true if ruby27plus # check validity of category
229
+ ::Warning[s.to_sym] = true # check validity of category
200
230
  end
201
231
  end
202
232
 
@@ -253,23 +283,20 @@ module Minitest
253
283
  #
254
284
  # The overall structure of a run looks like this:
255
285
  #
286
+ # [Minitest.load_plugins] optional, called by user, or require what you want
256
287
  # Minitest.autorun
257
288
  # Minitest.run(args)
258
- # Minitest.load_plugins
259
289
  # Minitest.process_args
260
290
  # Minitest.init_plugins
261
- # Minitest.__run(reporter, options)
291
+ # Minitest.run_all_suites(reporter, options)
262
292
  # Runnable.runnables.each |runnable_klass|
263
- # runnable_klass.run(reporter, options)
264
- # filtered_methods = runnable_methods.select {...}.reject {...}
293
+ # runnable_klass.run_suite(reporter, options)
294
+ # filtered_methods = runnable_klass.filter_runnable_methods options
265
295
  # filtered_methods.each |runnable_method|
266
- # runnable_klass.run_one_method(self, runnable_method, reporter)
267
- # Minitest.run_one_method(runnable_klass, runnable_method)
268
- # runnable_klass.new(runnable_method).run
296
+ # runnable_klass.run(self, runnable_method, reporter)
297
+ # runnable_klass.new(runnable_method).run
269
298
 
270
299
  def self.run args = []
271
- self.load_plugins unless args.delete("--no-plugins") || ENV["MT_NO_PLUGINS"]
272
-
273
300
  options = process_args args
274
301
 
275
302
  Minitest.seed = options[:seed]
@@ -286,7 +313,7 @@ module Minitest
286
313
  self.parallel_executor.start if parallel_executor.respond_to? :start
287
314
  reporter.start
288
315
  begin
289
- __run reporter, options
316
+ run_all_suites reporter, options
290
317
  finished = true
291
318
  rescue Interrupt
292
319
  warn "Interrupted. Exiting..."
@@ -303,7 +330,7 @@ module Minitest
303
330
  end
304
331
 
305
332
  def self.empty_run! options # :nodoc:
306
- filter = options[:filter]
333
+ filter = options[:include]
307
334
  return true unless filter # no filter, but nothing ran == success
308
335
 
309
336
  warn "Nothing ran for filter: %s" % [filter]
@@ -322,17 +349,17 @@ module Minitest
322
349
  # Internal run method. Responsible for telling all Runnable
323
350
  # sub-classes to run.
324
351
 
325
- def self.__run reporter, options
352
+ def self.run_all_suites reporter, options
326
353
  suites = Runnable.runnables.shuffle
327
- parallel, serial = suites.partition { |s| s.test_order == :parallel }
354
+ parallel, serial = suites.partition { |s| s.run_order == :parallel }
328
355
 
329
356
  # If we run the parallel tests before the serial tests, the parallel tests
330
357
  # could run in parallel with the serial tests. This would be bad because
331
358
  # the serial tests won't lock around Reporter#record. Run the serial tests
332
359
  # first, so that after they complete, the parallel tests will lock when
333
360
  # recording results.
334
- serial.map { |suite| suite.run reporter, options } +
335
- parallel.map { |suite| suite.run reporter, options }
361
+ serial.map { |suite| suite.run_suite reporter, options } +
362
+ parallel.map { |suite| suite.run_suite reporter, options }
336
363
  end
337
364
 
338
365
  def self.filter_backtrace bt # :nodoc:
@@ -400,21 +427,30 @@ module Minitest
400
427
  reset
401
428
 
402
429
  ##
403
- # Responsible for running all runnable methods in a given class,
404
- # each in its own instance. Each instance is passed to the
405
- # reporter to record.
430
+ # Returns an array of filtered +runnable_methods+. Uses
431
+ # options[:include] (--include arguments) and options[:exclude]
432
+ # (--exclude arguments) values to filter.
406
433
 
407
- def self.run reporter, options = {}
408
- pos = options[:filter]
434
+ def self.filter_runnable_methods options={}
435
+ pos = options[:include]
409
436
  neg = options[:exclude]
410
437
 
411
438
  pos = Regexp.new $1 if pos.kind_of?(String) && pos =~ %r%/(.*)/%
412
439
  neg = Regexp.new $1 if neg.kind_of?(String) && neg =~ %r%/(.*)/%
413
440
 
414
441
  # at most 1-2% slower than a 1-pass version, stop optimizing this
415
- filtered_methods = self.runnable_methods
442
+ self.runnable_methods
416
443
  .select { |m| !pos || pos === m || pos === "#{self}##{m}" }
417
444
  .reject { |m| neg && (neg === m || neg === "#{self}##{m}") }
445
+ end
446
+
447
+ ##
448
+ # Responsible for running all runnable methods in a given class,
449
+ # each in its own instance. Each instance is passed to the
450
+ # reporter to record.
451
+
452
+ def Runnable.run_suite reporter, options = {}
453
+ filtered_methods = filter_runnable_methods options
418
454
 
419
455
  return if filtered_methods.empty?
420
456
 
@@ -429,12 +465,12 @@ module Minitest
429
465
  warn "Current: %s#%s %.2fs" % [self, name, Minitest.clock_time - t0]
430
466
  end
431
467
 
432
- with_info_handler reporter do
468
+ with_info_handler do
433
469
  filtered_methods.each do |method_name|
434
470
  name = method_name
435
471
  t0 = Minitest.clock_time
436
472
 
437
- run_one_method self, method_name, reporter
473
+ run self, method_name, reporter
438
474
  end
439
475
  end
440
476
  end
@@ -445,20 +481,20 @@ module Minitest
445
481
  # that subclasses can specialize the running of an individual
446
482
  # test. See Minitest::ParallelTest::ClassMethods for an example.
447
483
 
448
- def self.run_one_method klass, method_name, reporter
484
+ def Runnable.run klass, method_name, reporter
449
485
  reporter.prerecord klass, method_name
450
- reporter.record Minitest.run_one_method(klass, method_name)
486
+ reporter.record klass.new(method_name).run
451
487
  end
452
488
 
453
489
  ##
454
490
  # Defines the order to run tests (:random by default). Override
455
491
  # this or use a convenience method to change it for your tests.
456
492
 
457
- def self.test_order
493
+ def self.run_order
458
494
  :random
459
495
  end
460
496
 
461
- def self.with_info_handler reporter, &block # :nodoc:
497
+ def self.with_info_handler _reporter=nil, &block # :nodoc:
462
498
  on_signal ::Minitest.info_signal, @_info_handler, &block
463
499
  end
464
500
 
@@ -492,22 +528,6 @@ module Minitest
492
528
  @@runnables
493
529
  end
494
530
 
495
- @@marshal_dump_warned = false
496
-
497
- def marshal_dump # :nodoc:
498
- unless @@marshal_dump_warned then
499
- warn ["Minitest::Runnable#marshal_dump is deprecated.",
500
- "You might be violating internals. From", caller(1..1).first].join " "
501
- @@marshal_dump_warned = true
502
- end
503
-
504
- [self.name, self.failures, self.assertions, self.time]
505
- end
506
-
507
- def marshal_load ary # :nodoc:
508
- self.name, self.failures, self.assertions, self.time = ary
509
- end
510
-
511
531
  def failure # :nodoc:
512
532
  self.failures.first
513
533
  end
@@ -639,9 +659,6 @@ module Minitest
639
659
  class Result < Runnable
640
660
  include Minitest::Reportable
641
661
 
642
- undef_method :marshal_dump
643
- undef_method :marshal_load
644
-
645
662
  ##
646
663
  # The class name of the test result.
647
664
 
@@ -1001,8 +1018,7 @@ module Minitest
1001
1018
 
1002
1019
  def prerecord klass, name # :nodoc:
1003
1020
  self.reporters.each do |reporter|
1004
- # TODO: remove conditional for minitest 6
1005
- reporter.prerecord klass, name if reporter.respond_to? :prerecord
1021
+ reporter.prerecord klass, name
1006
1022
  end
1007
1023
  end
1008
1024
 
@@ -1128,16 +1144,6 @@ module Minitest
1128
1144
  "java" == platform
1129
1145
  end
1130
1146
 
1131
- ##
1132
- # Is this running on maglev?
1133
-
1134
- def maglev? platform = defined?(RUBY_ENGINE) && RUBY_ENGINE
1135
- where = Minitest.filter_backtrace(caller).first
1136
- where = where.split(":in ", 2).first # clean up noise
1137
- warn "DEPRECATED: `maglev?` called from #{where}. This will fail in Minitest 6."
1138
- "maglev" == platform
1139
- end
1140
-
1141
1147
  ##
1142
1148
  # Is this running on mri?
1143
1149
 
@@ -1152,16 +1158,6 @@ module Minitest
1152
1158
  platform.include? "darwin"
1153
1159
  end
1154
1160
 
1155
- ##
1156
- # Is this running on rubinius?
1157
-
1158
- def rubinius? platform = defined?(RUBY_ENGINE) && RUBY_ENGINE
1159
- where = Minitest.filter_backtrace(caller).first
1160
- where = where.split(":in ", 2).first # clean up noise
1161
- warn "DEPRECATED: `rubinius?` called from #{where}. This will fail in Minitest 6."
1162
- "rbx" == platform
1163
- end
1164
-
1165
1161
  ##
1166
1162
  # Is this running on windows?
1167
1163
 
@@ -1207,12 +1203,6 @@ module Minitest
1207
1203
 
1208
1204
  self.backtrace_filter = BacktraceFilter.new
1209
1205
 
1210
- def self.run_one_method klass, method_name # :nodoc:
1211
- result = klass.new(method_name).run
1212
- raise "#{klass}#run _must_ return a Result" unless Result === result
1213
- result
1214
- end
1215
-
1216
1206
  # :stopdoc:
1217
1207
 
1218
1208
  if defined? Process::CLOCK_MONOTONIC # :nodoc:
@@ -1235,4 +1225,8 @@ module Minitest
1235
1225
  # :startdoc:
1236
1226
  end
1237
1227
 
1238
- require "minitest/test"
1228
+ require_relative "minitest/test"
1229
+ if ENV["MINITEST_SERVER"] then
1230
+ require_relative "minitest/server_plugin"
1231
+ Minitest.register_plugin :server
1232
+ end
@@ -79,7 +79,7 @@ class MetaMetaMetaTestCase < Minitest::Test
79
79
  @tus.each do |tu|
80
80
  Minitest::Runnable.runnables.delete tu
81
81
 
82
- tu.run reporter, options
82
+ tu.run_suite reporter, options
83
83
  end
84
84
 
85
85
  reporter.report