summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-02-07 02:49:04 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-02-07 02:49:04 +0000
commit10c51ff5ce07c4c0bf72bdcfe65cc222a83e9369 (patch)
tree2a9956d17f2c60e354ca4ef74ed3a2d8a6d3d723
parentad57f92f5c51a1f3c5bd21e9416a8c98b7ce7760 (diff)
test/unit.rb: statistics
* test/lib/test/unit.rb (Test::Unit::Statistics): show statistics. only --longest option is implemented right now. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57554 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--test/lib/test/unit.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/lib/test/unit.rb b/test/lib/test/unit.rb
index f3aff4e..981c1c1 100644
--- a/test/lib/test/unit.rb
+++ b/test/lib/test/unit.rb
@@ -573,6 +573,39 @@ module Test
end
end
+ module Statistics
+ def record(suite, method, assertions, time, error)
+ if max = @options[:longest]
+ longest = @longest ||= []
+ if i = longest.empty? ? 0 : longest.bsearch_index {|_,_,_,t,_|t<time}
+ longest[i, 0] = [[suite.name, method, assertions, time, error]]
+ longest[max..-1] = [] if longest.size >= max
+ end
+ end
+ # (((@record ||= {})[suite] ||= {})[method]) = [assertions, time, error]
+ super
+ end
+
+ def run(*args)
+ result = super
+ if @longest
+ @longest.each {|suite, method, assertions, time, error|
+ printf "%5.2fsec(%d): %s#%s\n", time, assertions, suite, method
+ }
+ end
+ result
+ end
+
+ private
+ def setup_options(opts, options)
+ super
+ opts.separator "statistics options:"
+ opts.on '--longest=N', Integer, 'Show longest N tests' do |n|
+ options[:longest] = n
+ end
+ end
+ end
+
module StatusLine # :nodoc: all
def terminal_width
unless @terminal_width ||= nil
@@ -988,6 +1021,7 @@ module Test
include Test::Unit::Options
include Test::Unit::StatusLine
include Test::Unit::Parallel
+ include Test::Unit::Statistics
include Test::Unit::Skipping
include Test::Unit::GlobOption
include Test::Unit::RepeatOption