1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00

Support parallel tests in verbose progress reporting (#2223)

* Support parallel tests in verbose progress reporting
Reports correct duration and status for tests run in parallel threads.

* manually load verbose_progress minitest plugin
This commit is contained in:
Will Jordan 2020-04-19 17:45:43 -07:00 committed by GitHub
parent ec2cda3faa
commit 24adaa095a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 0 deletions

View file

@ -42,6 +42,7 @@
* Update `Rack::Handler::Puma.run` to use `**options` (#2189) * Update `Rack::Handler::Puma.run` to use `**options` (#2189)
* ThreadPool concurrency refactoring (#2220) * ThreadPool concurrency refactoring (#2220)
* JSON parse cluster worker stats instead of regex (#2124) * JSON parse cluster worker stats instead of regex (#2124)
* Support parallel tests in verbose progress reporting (#2223)
## 4.3.3 and 3.12.4 / 2020-02-28 ## 4.3.3 and 3.12.4 / 2020-02-28

View file

@ -11,6 +11,7 @@ if %w(2.2.7 2.2.8 2.2.9 2.2.10 2.3.4 2.4.1).include? RUBY_VERSION
end end
end end
require_relative "minitest/verbose"
require "minitest/autorun" require "minitest/autorun"
require "minitest/pride" require "minitest/pride"
require "minitest/proveit" require "minitest/proveit"

5
test/minitest/verbose.rb Normal file
View file

@ -0,0 +1,5 @@
require "minitest"
require_relative "verbose_progress_plugin"
Minitest.load_plugins
Minitest.extensions << 'verbose_progress' unless Minitest.extensions.include?('verbose_progress')

View file

@ -0,0 +1,34 @@
module Minitest
# Adds minimal support for parallel tests to the default verbose progress reporter.
def self.plugin_verbose_progress_init(options)
if options[:verbose]
self.reporter.reporters.
delete_if {|r| r.is_a?(ProgressReporter)}.
push(VerboseProgressReporter.new(options[:io], options))
end
end
# Verbose progress reporter that supports parallel test execution.
class VerboseProgressReporter < Reporter
def prerecord(klass, name)
@current ||= nil
@current = [klass.name, name].tap(&method(:print_start))
end
def record(result)
print_start [result.klass, result.name]
@current = nil
io.print "%.2f s = " % [result.time]
io.print result.result_code
io.puts
end
def print_start(test)
unless @current == test
io.puts '…' if @current
io.print "%s#%s = " % test
io.flush
end
end
end
end