class Minitest::ProfileReporter
def initialize(io = $stdout, options = {})
def initialize(io = $stdout, options = {}) super @results = [] @count = options[:profile] end
def record(result)
def record(result) @results << result end
def report
def report total_time = @results.sum(&:time) @results.sort! { |a, b| b.time <=> a.time } slow_results = @results.take(@count) slow_tests_total_time = slow_results.sum(&:time) ratio = (total_time == 0) ? 0.0 : (slow_tests_total_time / total_time) * 100 io.puts("\nTop %d slowest tests (%.2f seconds, %.1f%% of total time):\n" % [slow_results.size, slow_tests_total_time, ratio]) slow_results.each do |result| io.puts(" %s\n %.4f seconds %s\n" % [result.location, result.time, source_location(result)]) end io.puts("\n") end
def source_location(result)
def source_location(result) filename, line = result.source_location return "" unless filename pwd = Dir.pwd if filename.start_with?(pwd) filename = Pathname.new(filename).relative_path_from(pwd) end "#{filename}:#{line}" end