test/unit.rb: --repeat-count option

* test/lib/test/unit.rb (Test::Unit::RepeatOption): --repeat-count
  option to repeat COUNT times while success.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57167 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-12-24 00:50:59 +00:00
Родитель cad799b006
Коммит 642b3a260b
2 изменённых файлов: 39 добавлений и 12 удалений

Просмотреть файл

@ -872,35 +872,45 @@ module MiniTest
suites = TestCase.send "#{type}_suites"
return if suites.empty?
start = Time.now
puts
puts "# Running #{type}s:"
puts
@test_count, @assertion_count = 0, 0
test_count = assertion_count = 0
sync = output.respond_to? :"sync=" # stupid emacs
old_sync, output.sync = output.sync, true if sync
results = _run_suites suites, type
count = 0
begin
start = Time.now
@test_count = results.inject(0) { |sum, (tc, _)| sum + tc }
@assertion_count = results.inject(0) { |sum, (_, ac)| sum + ac }
results = _run_suites suites, type
@test_count = results.inject(0) { |sum, (tc, _)| sum + tc }
@assertion_count = results.inject(0) { |sum, (_, ac)| sum + ac }
test_count += @test_count
assertion_count += @assertion_count
t = Time.now - start
count += 1
unless @repeat_count
puts
puts
end
puts "Finished%s %ss in %.6fs, %.4f tests/s, %.4f assertions/s.\n" %
[(@repeat_count ? "(#{count}/#{@repeat_count}) " : ""), type,
t, @test_count.fdiv(t), @assertion_count.fdiv(t)]
end while @repeat_count && count < @repeat_count && report.empty?
output.sync = old_sync if sync
t = Time.now - start
puts
puts
puts "Finished #{type}s in %.6fs, %.4f tests/s, %.4f assertions/s." %
[t, test_count / t, assertion_count / t]
report.each_with_index do |msg, i|
puts "\n%3d) %s" % [i + 1, msg]
end
puts
@test_count = test_count
@assertion_count = assertion_count
status
end

Просмотреть файл

@ -853,6 +853,22 @@ module Test
end
end
module RepeatOption # :nodoc: all
def setup_options(parser, options)
super
options[:repeat_count] = nil
parser.separator "repeat options:"
parser.on '--repeat-count=NUM', "Number of times to repeat", Integer do |n|
options[:repeat_count] = n
end
end
def _run_anything(type)
@repeat_count = @options[:repeat_count]
super
end
end
module ExcludesOption # :nodoc: all
class ExcludedMethods < Struct.new(:excludes)
def exclude(name, reason)
@ -922,6 +938,7 @@ module Test
include Test::Unit::Parallel
include Test::Unit::Skipping
include Test::Unit::GlobOption
include Test::Unit::RepeatOption
include Test::Unit::LoadPathOption
include Test::Unit::GCStressOption
include Test::Unit::ExcludesOption