test/printers_test.rb in ruby-prof-0.18.0 vs test/printers_test.rb in ruby-prof-1.0.0
- old
+ new
@@ -2,10 +2,12 @@
# encoding: UTF-8
require File.expand_path('../test_helper', __FILE__)
require 'stringio'
require 'fileutils'
+require 'tmpdir'
+require_relative 'prime'
# -- Tests ----
class PrintersTest < TestCase
def setup
# WALL_TIME so we can use sleep in our test and get same measurements on linux and windows
@@ -14,55 +16,48 @@
run_primes(1000, 5000)
end
end
def test_printers
- assert_nothing_raised do
- output = ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1" ? STDOUT : StringIO.new('')
+ output = ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1" ? STDOUT : StringIO.new('')
- printer = RubyProf::CallInfoPrinter.new(@result)
- printer.print(output)
+ printer = RubyProf::CallInfoPrinter.new(@result)
+ printer.print(output)
- printer = RubyProf::CallTreePrinter.new(@result)
- printer.print()
+ printer = RubyProf::CallTreePrinter.new(@result)
+ printer.print()
- printer = RubyProf::FlatPrinter.new(@result)
- printer.print(output)
+ printer = RubyProf::FlatPrinter.new(@result)
+ printer.print(output)
- printer = RubyProf::FlatPrinterWithLineNumbers.new(@result)
- printer.print(output)
+ printer = RubyProf::GraphHtmlPrinter.new(@result)
+ printer.print(output)
- printer = RubyProf::GraphHtmlPrinter.new(@result)
- printer.print(output)
-
- printer = RubyProf::GraphPrinter.new(@result)
- printer.print(output)
- end
+ printer = RubyProf::GraphPrinter.new(@result)
+ printer.print(output)
end
def test_print_to_files
- assert_nothing_raised do
- output_dir = 'examples2'
+ output_dir = 'examples2'
- if ENV['SAVE_NEW_PRINTER_EXAMPLES']
- output_dir = 'examples'
- end
- FileUtils.mkdir_p output_dir
+ if ENV['SAVE_NEW_PRINTER_EXAMPLES']
+ output_dir = 'examples'
+ end
+ FileUtils.mkdir_p output_dir
- printer = RubyProf::DotPrinter.new(@result)
- File.open("#{output_dir}/graph.dot", "w") {|f| printer.print(f)}
+ printer = RubyProf::DotPrinter.new(@result)
+ File.open("#{output_dir}/graph.dot", "w") {|f| printer.print(f)}
- printer = RubyProf::CallStackPrinter.new(@result)
- File.open("#{output_dir}/stack.html", "w") {|f| printer.print(f, :application => "primes")}
+ printer = RubyProf::CallStackPrinter.new(@result)
+ File.open("#{output_dir}/stack.html", "w") {|f| printer.print(f, :application => "primes")}
- printer = RubyProf::MultiPrinter.new(@result)
- printer.print(:path => "#{output_dir}", :profile => "multi", :application => "primes")
- for file in ['graph.dot', 'multi.flat.txt', 'multi.graph.html', "multi.callgrind.out.#{$$}", 'multi.stack.html', 'stack.html']
- existant_file = output_dir + '/' + file
- assert File.size(existant_file) > 0
- end
- end
+ # printer = RubyProf::MultiPrinter.new(@result)
+ # printer.print(:path => "#{output_dir}", :profile => "multi", :application => "primes")
+ # for file in ['graph.dot', 'multi.flat.txt', 'multi.graph.html', "multi.callgrind.out.#{$$}", 'multi.stack.html', 'stack.html']
+ # existant_file = output_dir + '/' + file
+ # assert File.size(existant_file) > 0
+ # end
end
def test_refuses_io_objects
p = RubyProf::MultiPrinter.new(@result)
begin
@@ -83,11 +78,11 @@
end
end
def test_flat_string
output = helper_test_flat_string(RubyProf::FlatPrinter)
- refute_match(/prime.rb/, output)
+ assert_match(/prime.rb/, output)
end
def helper_test_flat_string(klass)
output = ''
@@ -99,29 +94,17 @@
assert_match(/Total: \d+\.\d+/i, output)
assert_match(/Object#run_primes/i, output)
output
end
- def test_flat_string_with_numbers
- output = helper_test_flat_string RubyProf::FlatPrinterWithLineNumbers
- assert_match(/prime.rb/, output)
- refute_match(/ruby_runtime:0/, output)
- assert_match(/called from/, output)
-
- # should combine common parents
- # 1.9 inlines it's Fixnum#- so we don't see as many
- assert_equal(2, output.scan(/Object#is_prime/).length)
- refute_match(/\.\/test\/prime.rb/, output) # don't use relative paths
- end
-
def test_graph_html_string
output = ''
printer = RubyProf::GraphHtmlPrinter.new(@result)
printer.print(output)
- assert_match(/DTD HTML 4\.01/i, output)
- assert_match( %r{<th>Total Time</th>}i, output)
+ assert_match(/<!DOCTYPE html>/i, output)
+ assert_match( %r{<th>Total</th>}i, output)
assert_match(/Object#run_primes/i, output)
end
def test_graph_string
output = ''
@@ -132,21 +115,10 @@
assert_match(/Fiber ID: -?\d+/i, output)
assert_match(/Total Time: \d+\.\d+/i, output)
assert_match(/Object#run_primes/i, output)
end
- def test_call_tree_string
- printer = RubyProf::CallTreePrinter.new(@result)
- printer.print(:profile => "lolcat", :path => RubyProf.tmpdir)
- main_output_file_name = File.join(RubyProf.tmpdir, "lolcat.callgrind.out.#{$$}")
- assert(File.exist?(main_output_file_name))
- output = File.read(main_output_file_name)
- assert_match(/fn=Object::find_primes/i, output)
- assert_match(/events: wall_time/i, output)
- refute_match(/d\d\d\d\d\d/, output) # old bug looked [in error] like Object::run_primes(d5833116)
- end
-
def do_nothing
start = Time.now
while(Time.now == start)
end
end
@@ -157,119 +129,13 @@
do_nothing
end
# RubyProf::CallTreePrinter doesn't "do" a min_percent
# RubyProf::FlatPrinter only outputs if self time > percent...
- # RubyProf::FlatPrinterWithLineNumbers same
- for klass in [ RubyProf::GraphPrinter, RubyProf::GraphHtmlPrinter]
+ for klass in [RubyProf::GraphPrinter, RubyProf::GraphHtmlPrinter]
printer = klass.new(result)
out = ''
printer.print(out, :min_percent => 0.00000001)
assert_match(/do_nothing/, out)
end
-
- end
-
- def test_flat_result_sorting_by_self_time_is_default
- printer = RubyProf::FlatPrinter.new(@result)
-
- printer.print(output = '')
- self_times = flat_output_nth_column_values(output, 3)
-
- assert_sorted self_times
- end
-
- def test_flat_result_sorting
- printer = RubyProf::FlatPrinter.new(@result)
-
- sort_method_with_column_number = {:total_time => 2, :self_time => 3, :wait_time => 4, :children_time => 5}
-
- sort_method_with_column_number.each_pair do |sort_method, n|
- printer.print(output = '', :sort_method => sort_method)
- times = flat_output_nth_column_values(output, n)
- assert_sorted times
- end
- end
-
- def test_flat_result_with_line_numbers_sorting_by_self_time_is_default
- printer = RubyProf::FlatPrinterWithLineNumbers.new(@result)
-
- printer.print(output = '')
- self_times = flat_output_nth_column_values(output, 3)
-
- assert_sorted self_times
- end
-
- def test_flat_with_line_numbers_result_sorting
- printer = RubyProf::FlatPrinterWithLineNumbers.new(@result)
-
- sort_method_with_column_number = {:total_time => 2, :self_time => 3, :wait_time => 4, :children_time => 5}
-
- sort_method_with_column_number.each_pair do |sort_method, n|
- printer.print(output = '', :sort_method => sort_method)
- times = flat_output_nth_column_values(output, n)
- assert_sorted times
- end
- end
-
- def test_graph_result_sorting_by_total_time_is_default
- printer = RubyProf::GraphPrinter.new(@result)
- printer.print(output = '')
- total_times = graph_output_nth_column_values(output, 3)
-
- assert_sorted total_times
- end
-
- def test_graph_results_sorting
- printer = RubyProf::GraphPrinter.new(@result)
-
- sort_method_with_column_number = {:total_time => 3, :self_time => 4, :wait_time => 5, :children_time => 6}
-
- sort_method_with_column_number.each_pair do |sort_method, n|
- printer.print(output = '', :sort_method => sort_method)
- times = graph_output_nth_column_values(output, n)
- assert_sorted times
- end
- end
-
- def test_graph_html_result_sorting_by_total_time_is_default
- printer = RubyProf::GraphHtmlPrinter.new(@result)
- printer.print(output = '')
- total_times = graph_html_output_nth_column_values(output, 3)
-
- assert_sorted total_times
- end
-
- def test_graph_html_result_sorting
- printer = RubyProf::GraphHtmlPrinter.new(@result)
-
- sort_method_with_column_number = {:total_time => 3, :self_time => 4, :wait_time => 5, :children_time => 6}
-
- sort_method_with_column_number.each_pair do |sort_method, n|
- printer.print(output = '', :sort_method => sort_method)
- times = graph_html_output_nth_column_values(output, n)
- assert_sorted times
- end
- end
-
- private
- def flat_output_nth_column_values(output, n)
- only_method_calls = output.split("\n").select { |line| line =~ /^ +\d+/ }
- only_method_calls.collect { |line| line.split(/ +/)[n] }
- end
-
- def graph_output_nth_column_values(output, n)
- only_root_calls = output.split("\n").select { |line| line =~ /^ +[\d\.]+%/ }
- only_root_calls.collect { |line| line.split(/ +/)[n] }
- end
-
- def graph_html_output_nth_column_values(output, n)
- only_root_calls = output.split('<tr class="method">')
- only_root_calls.delete_at(0)
- only_root_calls.collect {|line| line.scan(/[\d\.]+/)[n - 1] }
- end
-
- def assert_sorted array
- array = array.map{|n| n.to_f} # allow for > 10s times to sort right, since lexographically 4.0 > 10.0
- assert_equal array, array.sort.reverse, "Array #{array.inspect} is not sorted"
end
end