summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-24 00:50:59 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-24 00:50:59 +0000
commit642b3a260bda7e4b8380bcc797efce547879295e (patch)
tree31815f25f28210acc368662e08d9baea6ea058f9
parentcad799b006e2451853495aa7d7201ccc7b99ed55 (diff)
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
-rw-r--r--test/lib/minitest/unit.rb36
-rw-r--r--test/lib/test/unit.rb17
2 files changed, 40 insertions, 13 deletions
diff --git a/test/lib/minitest/unit.rb b/test/lib/minitest/unit.rb
index b71e8b85b0a..fa79b3bcf51 100644
--- a/test/lib/minitest/unit.rb
+++ b/test/lib/minitest/unit.rb
@@ -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
-
- @test_count = results.inject(0) { |sum, (tc, _)| sum + tc }
- @assertion_count = results.inject(0) { |sum, (_, ac)| sum + ac }
+ count = 0
+ begin
+ start = Time.now
+
+ 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
diff --git a/test/lib/test/unit.rb b/test/lib/test/unit.rb
index 1a5957bfc14..f0bd26f32f0 100644
--- a/test/lib/test/unit.rb
+++ b/test/lib/test/unit.rb
@@ -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