class Minitest::TestProf::EventProfFormatter
:nodoc:
def by_examples(profiler)
def by_examples(profiler) result = profiler.results examples = result[:examples] return unless examples @results << "\nTop #{profiler.top_count} slowest tests (by #{profiler.rank_by}):\n\n" examples.each do |example| description = example[:id][:name] location = example[:id][:location] time = example[:time] run_time = example[:run_time] time_percentage = time_percentage(time, run_time) @results << <<~GROUP #{description.truncate} (#{location}) – #{time.duration} (#{example[:count]}) of #{run_time.duration} (#{time_percentage}%) GROUP end end
def by_groups(profiler)
def by_groups(profiler) result = profiler.results groups = result[:groups] groups.each do |group| description = group[:id][:name] location = group[:id][:location] time = group[:time] run_time = group[:run_time] time_percentage = time_percentage(time, run_time) @results << <<~GROUP #{description.truncate} (#{location}) – #{time.duration} (#{group[:count]} / #{group[:examples]}) of #{run_time.duration} (#{time_percentage}%) GROUP end end
def initialize(profilers)
def initialize(profilers) @profilers = profilers @results = [] end
def prepare_results
def prepare_results @profilers.each do |profiler| total_results(profiler) by_groups(profiler) by_examples(profiler) end @results.join end
def time_percentage(time, total_time)
def time_percentage(time, total_time) (time / total_time * 100).round(2) end
def total_results(profiler)
def total_results(profiler) time_percentage = time_percentage(profiler.total_time, profiler.absolute_run_time) @results << <<~MSG EventProf results for #{profiler.event} Total time: #{profiler.total_time.duration} of #{profiler.absolute_run_time.duration} (#{time_percentage}%) Total events: #{profiler.total_count} Top #{profiler.top_count} slowest suites (by #{profiler.rank_by}): MSG end