From 642b3a260bda7e4b8380bcc797efce547879295e Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 24 Dec 2016 00:50:59 +0000 Subject: 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 --- test/lib/minitest/unit.rb | 36 +++++++++++++++++++++++------------- test/lib/test/unit.rb | 17 +++++++++++++++++ 2 files changed, 40 insertions(+), 13 deletions(-) (limited to 'test/lib') diff --git a/test/lib/minitest/unit.rb b/test/lib/minitest/unit.rb index b71e8b85b0..fa79b3bcf5 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 1a5957bfc1..f0bd26f32f 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 -- cgit v1.2.3