ruby-prof 1.7.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/{CHANGES → CHANGELOG.md} +112 -178
  3. data/README.md +5 -5
  4. data/bin/ruby-prof +1 -4
  5. data/docs/advanced-usage.md +132 -0
  6. data/docs/alternatives.md +98 -0
  7. data/docs/architecture.md +122 -0
  8. data/docs/best-practices.md +27 -0
  9. data/docs/getting-started.md +130 -0
  10. data/docs/history.md +11 -0
  11. data/docs/index.md +45 -0
  12. data/docs/profiling-rails.md +64 -0
  13. data/docs/public/examples/example.rb +33 -0
  14. data/docs/public/examples/generate_reports.rb +92 -0
  15. data/docs/public/examples/reports/call_info.txt +27 -0
  16. data/docs/public/examples/reports/call_stack.html +835 -0
  17. data/docs/public/examples/reports/callgrind.out +150 -0
  18. data/docs/public/examples/reports/flame_graph.html +408 -0
  19. data/docs/public/examples/reports/flat.txt +45 -0
  20. data/docs/public/examples/reports/graph.dot +129 -0
  21. data/docs/public/examples/reports/graph.html +1319 -0
  22. data/docs/public/examples/reports/graph.txt +100 -0
  23. data/docs/public/examples/reports/graphviz_viewer.html +1 -0
  24. data/docs/public/images/call_stack.png +0 -0
  25. data/docs/public/images/class_diagram.png +0 -0
  26. data/docs/public/images/dot_printer.png +0 -0
  27. data/docs/public/images/flame_graph.png +0 -0
  28. data/docs/public/images/flat.png +0 -0
  29. data/docs/public/images/graph.png +0 -0
  30. data/docs/public/images/graph_html.png +0 -0
  31. data/docs/public/images/ruby-prof-logo.svg +1 -0
  32. data/docs/reports.md +150 -0
  33. data/docs/stylesheets/extra.css +80 -0
  34. data/ext/ruby_prof/rp_allocation.c +0 -15
  35. data/ext/ruby_prof/rp_allocation.h +29 -33
  36. data/ext/ruby_prof/rp_call_tree.c +3 -0
  37. data/ext/ruby_prof/rp_call_tree.h +1 -4
  38. data/ext/ruby_prof/rp_call_trees.h +1 -4
  39. data/ext/ruby_prof/rp_measurement.c +0 -5
  40. data/ext/ruby_prof/rp_measurement.h +49 -53
  41. data/ext/ruby_prof/rp_method.c +3 -0
  42. data/ext/ruby_prof/rp_method.h +1 -4
  43. data/ext/ruby_prof/rp_profile.c +1 -1
  44. data/ext/ruby_prof/rp_profile.h +1 -5
  45. data/ext/ruby_prof/rp_stack.h +50 -53
  46. data/ext/ruby_prof/rp_thread.h +1 -4
  47. data/ext/ruby_prof/ruby_prof.h +1 -4
  48. data/ext/ruby_prof/vc/ruby_prof.vcxproj +7 -8
  49. data/lib/ruby-prof/assets/call_stack_printer.html.erb +746 -711
  50. data/lib/ruby-prof/assets/flame_graph_printer.html.erb +412 -0
  51. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -355
  52. data/lib/ruby-prof/call_tree.rb +57 -57
  53. data/lib/ruby-prof/call_tree_visitor.rb +36 -36
  54. data/lib/ruby-prof/measurement.rb +17 -17
  55. data/lib/ruby-prof/printers/abstract_printer.rb +19 -33
  56. data/lib/ruby-prof/printers/call_info_printer.rb +53 -53
  57. data/lib/ruby-prof/printers/call_stack_printer.rb +168 -180
  58. data/lib/ruby-prof/printers/call_tree_printer.rb +132 -145
  59. data/lib/ruby-prof/printers/dot_printer.rb +177 -132
  60. data/lib/ruby-prof/printers/flame_graph_printer.rb +79 -0
  61. data/lib/ruby-prof/printers/flat_printer.rb +52 -52
  62. data/lib/ruby-prof/printers/graph_html_printer.rb +62 -63
  63. data/lib/ruby-prof/printers/graph_printer.rb +112 -113
  64. data/lib/ruby-prof/printers/multi_printer.rb +134 -127
  65. data/lib/ruby-prof/profile.rb +13 -0
  66. data/lib/ruby-prof/rack.rb +114 -105
  67. data/lib/ruby-prof/task.rb +147 -147
  68. data/lib/ruby-prof/thread.rb +20 -20
  69. data/lib/ruby-prof/version.rb +1 -1
  70. data/lib/ruby-prof.rb +50 -52
  71. data/lib/unprof.rb +10 -10
  72. data/ruby-prof.gemspec +5 -5
  73. data/test/abstract_printer_test.rb +25 -27
  74. data/test/alias_test.rb +203 -117
  75. data/test/call_tree_builder.rb +126 -126
  76. data/test/call_tree_visitor_test.rb +27 -27
  77. data/test/call_trees_test.rb +66 -66
  78. data/test/duplicate_names_test.rb +32 -32
  79. data/test/dynamic_method_test.rb +50 -50
  80. data/test/exceptions_test.rb +24 -24
  81. data/test/exclude_threads_test.rb +48 -48
  82. data/test/fiber_test.rb +72 -72
  83. data/test/inverse_call_tree_test.rb +174 -174
  84. data/test/line_number_test.rb +138 -1
  85. data/test/marshal_test.rb +144 -145
  86. data/test/measure_allocations.rb +26 -26
  87. data/test/measure_allocations_test.rb +340 -1
  88. data/test/measure_process_time_test.rb +3098 -3142
  89. data/test/measure_times.rb +56 -56
  90. data/test/measure_wall_time_test.rb +511 -372
  91. data/test/measurement_test.rb +82 -82
  92. data/test/merge_test.rb +48 -48
  93. data/test/multi_printer_test.rb +52 -66
  94. data/test/no_method_class_test.rb +15 -15
  95. data/test/pause_resume_test.rb +171 -171
  96. data/test/prime.rb +54 -54
  97. data/test/prime_script.rb +5 -5
  98. data/test/printer_call_stack_test.rb +28 -27
  99. data/test/printer_call_tree_test.rb +30 -30
  100. data/test/printer_flame_graph_test.rb +82 -0
  101. data/test/printer_flat_test.rb +99 -99
  102. data/test/printer_graph_html_test.rb +62 -59
  103. data/test/printer_graph_test.rb +42 -40
  104. data/test/printers_test.rb +28 -44
  105. data/test/printing_recursive_graph_test.rb +81 -81
  106. data/test/profile_test.rb +101 -101
  107. data/test/rack_test.rb +103 -93
  108. data/test/recursive_test.rb +139 -139
  109. data/test/scheduler.rb +4 -0
  110. data/test/singleton_test.rb +39 -38
  111. data/test/stack_printer_test.rb +61 -61
  112. data/test/start_stop_test.rb +106 -106
  113. data/test/test_helper.rb +4 -0
  114. data/test/thread_test.rb +29 -29
  115. data/test/unique_call_path_test.rb +123 -123
  116. data/test/yarv_test.rb +56 -56
  117. metadata +53 -11
  118. data/ext/ruby_prof/rp_measure_memory.c +0 -46
  119. data/lib/ruby-prof/compatibility.rb +0 -113
  120. data/test/compatibility_test.rb +0 -49
  121. data/test/measure_memory_test.rb +0 -1193
@@ -1,99 +1,99 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
- require 'fileutils'
6
- require 'stringio'
7
- require 'tmpdir'
8
- require_relative 'prime'
9
-
10
- # -- Tests ----
11
- class PrinterFlatTest < TestCase
12
- def run_profile
13
- RubyProf::Profile.profile(:measure_mode => RubyProf::WALL_TIME) do
14
- run_primes(1000, 5000)
15
- end
16
- end
17
-
18
- def flat_output_nth_column_values(output, n)
19
- only_method_calls = output.split("\n").select { |line| line =~ /^\s+\d+/ }
20
- only_method_calls.collect { |line| line.split(/\s+/)[n] }
21
- end
22
-
23
- def helper_test_flat_string(klass)
24
- output = StringIO.new
25
-
26
- printer = klass.new(self.run_profile)
27
- printer.print(output)
28
-
29
- assert_match(/Thread ID: -?\d+/i, output.string)
30
- assert_match(/Fiber ID: -?\d+/i, output.string)
31
- assert_match(/Total: \d+\.\d+/i, output.string)
32
- assert_match(/Object#run_primes/i, output.string)
33
- output.string
34
- end
35
-
36
- def assert_sorted(array)
37
- array = array.map(&:to_f) # allow for > 10s times to sort right, since lexographically 4.0 > 10.0
38
- assert_equal(array, array.sort.reverse)
39
- end
40
-
41
- def test_flat_string
42
- output = helper_test_flat_string(RubyProf::FlatPrinter)
43
- assert_match(/prime.rb/, output)
44
- end
45
-
46
- def test_flat_result_sorting_by_self_time_is_default
47
- printer = RubyProf::FlatPrinter.new(self.run_profile)
48
-
49
- output = StringIO.new
50
- printer.print(output)
51
- self_times = flat_output_nth_column_values(output.string, 3)
52
-
53
- assert_sorted self_times
54
- end
55
-
56
- def test_flat_result_sorting
57
- printer = RubyProf::FlatPrinter.new(self.run_profile)
58
-
59
- sort_method_with_column_number = {:total_time => 2, :self_time => 3, :wait_time => 4, :children_time => 5}
60
-
61
- sort_method_with_column_number.each_pair do |sort_method, n|
62
- output = StringIO.new
63
- printer.print(output, :sort_method => sort_method)
64
-
65
- times = flat_output_nth_column_values(output.string, n)
66
- assert_sorted(times)
67
- end
68
- end
69
-
70
- def test_flat_result_max_percent
71
- printer = RubyProf::FlatPrinter.new(self.run_profile)
72
-
73
- output = StringIO.new
74
- printer.print(output, max_percent: 1)
75
- self_percents = flat_output_nth_column_values(output.string, 1).map(&:to_f)
76
-
77
- assert self_percents.max < 1
78
- end
79
-
80
- def test_flat_result_filter_by_total_time
81
- printer = RubyProf::FlatPrinter.new(self.run_profile)
82
-
83
- output = StringIO.new
84
- printer.print(output, filter_by: :total_time, min_percent: 50)
85
- total_times = flat_output_nth_column_values(output.string, 2).map(&:to_f)
86
-
87
- assert (total_times.min / total_times.max) >= 0.5
88
- end
89
-
90
- def test_flat_result_filter_by_self_time
91
- printer = RubyProf::FlatPrinter.new(self.run_profile)
92
-
93
- output = StringIO.new
94
- printer.print(output, filter_by: :self_time, min_percent: 0.1)
95
- self_percents = flat_output_nth_column_values(output.string, 1).map(&:to_f)
96
-
97
- assert self_percents.min >= 0.1
98
- end
99
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+ require 'fileutils'
6
+ require 'stringio'
7
+ require 'tmpdir'
8
+ require_relative 'prime'
9
+
10
+ # -- Tests ----
11
+ class PrinterFlatTest < TestCase
12
+ def run_profile
13
+ RubyProf::Profile.profile(measure_mode: RubyProf::WALL_TIME) do
14
+ run_primes(1000, 5000)
15
+ end
16
+ end
17
+
18
+ def flat_output_nth_column_values(output, n)
19
+ only_method_calls = output.split("\n").select { |line| line =~ /^\s+\d+/ }
20
+ only_method_calls.collect { |line| line.split(/\s+/)[n] }
21
+ end
22
+
23
+ def helper_test_flat_string(klass)
24
+ output = StringIO.new
25
+
26
+ printer = klass.new(self.run_profile)
27
+ printer.print(output)
28
+
29
+ assert_match(/Thread ID: -?\d+/i, output.string)
30
+ assert_match(/Fiber ID: -?\d+/i, output.string)
31
+ assert_match(/Total: \d+\.\d+/i, output.string)
32
+ assert_match(/Object#run_primes/i, output.string)
33
+ output.string
34
+ end
35
+
36
+ def assert_sorted(array)
37
+ array = array.map(&:to_f) # allow for > 10s times to sort right, since lexographically 4.0 > 10.0
38
+ assert_equal(array, array.sort.reverse)
39
+ end
40
+
41
+ def test_flat_string
42
+ output = helper_test_flat_string(RubyProf::FlatPrinter)
43
+ assert_match(/prime.rb/, output)
44
+ end
45
+
46
+ def test_flat_result_sorting_by_self_time_is_default
47
+ printer = RubyProf::FlatPrinter.new(self.run_profile)
48
+
49
+ output = StringIO.new
50
+ printer.print(output)
51
+ self_times = flat_output_nth_column_values(output.string, 3)
52
+
53
+ assert_sorted self_times
54
+ end
55
+
56
+ def test_flat_result_sorting
57
+ printer = RubyProf::FlatPrinter.new(self.run_profile)
58
+
59
+ sort_method_with_column_number = {total_time: 2, self_time: 3, wait_time: 4, children_time: 5}
60
+
61
+ sort_method_with_column_number.each_pair do |sort_method, n|
62
+ output = StringIO.new
63
+ printer.print(output, sort_method: sort_method)
64
+
65
+ times = flat_output_nth_column_values(output.string, n)
66
+ assert_sorted(times)
67
+ end
68
+ end
69
+
70
+ def test_flat_result_max_percent
71
+ printer = RubyProf::FlatPrinter.new(self.run_profile)
72
+
73
+ output = StringIO.new
74
+ printer.print(output, max_percent: 1)
75
+ self_percents = flat_output_nth_column_values(output.string, 1).map(&:to_f)
76
+
77
+ assert self_percents.max < 1
78
+ end
79
+
80
+ def test_flat_result_filter_by_total_time
81
+ printer = RubyProf::FlatPrinter.new(self.run_profile)
82
+
83
+ output = StringIO.new
84
+ printer.print(output, filter_by: :total_time, min_percent: 50)
85
+ total_times = flat_output_nth_column_values(output.string, 2).map(&:to_f)
86
+
87
+ assert (total_times.min / total_times.max) >= 0.5
88
+ end
89
+
90
+ def test_flat_result_filter_by_self_time
91
+ printer = RubyProf::FlatPrinter.new(self.run_profile)
92
+
93
+ output = StringIO.new
94
+ printer.print(output, filter_by: :self_time, min_percent: 0.1)
95
+ self_percents = flat_output_nth_column_values(output.string, 1).map(&:to_f)
96
+
97
+ assert self_percents.min >= 0.1
98
+ end
99
+ end
@@ -1,59 +1,62 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
- require 'fileutils'
6
- require 'tmpdir'
7
- require_relative 'prime'
8
-
9
- # -- Tests ----
10
- class PrinterGraphHtmlTest < TestCase
11
- def setup
12
- super
13
- # WALL_TIME so we can use sleep in our test and get same measurements on linux and windows
14
- @result = RubyProf::Profile.profile(measure_mode: RubyProf::WALL_TIME) do
15
- run_primes(1000, 5000)
16
- end
17
- end
18
-
19
- def graph_html_output_nth_column_values(output, n)
20
- only_root_calls = output.split('<tr class="method">')
21
- only_root_calls.delete_at(0)
22
- only_root_calls.collect {|line| line.scan(/[\d\.]+/)[n - 1] }
23
- end
24
-
25
- def assert_sorted array
26
- array = array.map{|n| n.to_f} # allow for > 10s times to sort right, since lexographically 4.0 > 10.0
27
- assert_equal array, array.sort.reverse, "Array #{array.inspect} is not sorted"
28
- end
29
-
30
- def test_graph_html_string
31
- output = ''
32
- printer = RubyProf::GraphHtmlPrinter.new(@result)
33
- printer.print(output)
34
-
35
- assert_match(/<!DOCTYPE html>/i, output)
36
- assert_match( %r{<th>Total</th>}i, output)
37
- assert_match(/Object#run_primes/i, output)
38
- end
39
-
40
- def test_graph_html_result_sorting_by_total_time_is_default
41
- printer = RubyProf::GraphHtmlPrinter.new(@result)
42
- printer.print(output = '')
43
- total_times = graph_html_output_nth_column_values(output, 3)
44
-
45
- assert_sorted total_times
46
- end
47
-
48
- def test_graph_html_result_sorting
49
- printer = RubyProf::GraphHtmlPrinter.new(@result)
50
-
51
- sort_method_with_column_number = {:total_time => 3, :self_time => 4, :wait_time => 5, :children_time => 6}
52
-
53
- sort_method_with_column_number.each_pair do |sort_method, n|
54
- printer.print(output = '', :sort_method => sort_method)
55
- times = graph_html_output_nth_column_values(output, n)
56
- assert_sorted times
57
- end
58
- end
59
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+ require 'fileutils'
6
+ require 'stringio'
7
+ require 'tmpdir'
8
+ require_relative 'prime'
9
+
10
+ # -- Tests ----
11
+ class PrinterGraphHtmlTest < TestCase
12
+ def setup
13
+ super
14
+ # WALL_TIME so we can use sleep in our test and get same measurements on linux and windows
15
+ @result = RubyProf::Profile.profile(measure_mode: RubyProf::WALL_TIME) do
16
+ run_primes(1000, 5000)
17
+ end
18
+ end
19
+
20
+ def graph_html_output_nth_column_values(output, n)
21
+ only_root_calls = output.split('<tr class="method">')
22
+ only_root_calls.delete_at(0)
23
+ only_root_calls.collect {|line| line.scan(/[\d\.]+/)[n - 1] }
24
+ end
25
+
26
+ def assert_sorted array
27
+ array = array.map{|n| n.to_f} # allow for > 10s times to sort right, since lexographically 4.0 > 10.0
28
+ assert_equal array, array.sort.reverse, "Array #{array.inspect} is not sorted"
29
+ end
30
+
31
+ def test_graph_html_string
32
+ output = StringIO.new
33
+ printer = RubyProf::GraphHtmlPrinter.new(@result)
34
+ printer.print(output)
35
+
36
+ assert_match(/<!DOCTYPE html>/i, output.string)
37
+ assert_match( %r{<th>Total</th>}i, output.string)
38
+ assert_match(/Object#run_primes/i, output.string)
39
+ end
40
+
41
+ def test_graph_html_result_sorting_by_total_time_is_default
42
+ printer = RubyProf::GraphHtmlPrinter.new(@result)
43
+ output = StringIO.new
44
+ printer.print(output)
45
+ total_times = graph_html_output_nth_column_values(output.string, 3)
46
+
47
+ assert_sorted total_times
48
+ end
49
+
50
+ def test_graph_html_result_sorting
51
+ printer = RubyProf::GraphHtmlPrinter.new(@result)
52
+
53
+ sort_method_with_column_number = {total_time: 3, self_time: 4, wait_time: 5, children_time: 6}
54
+
55
+ sort_method_with_column_number.each_pair do |sort_method, n|
56
+ output = StringIO.new
57
+ printer.print(output, sort_method: sort_method)
58
+ times = graph_html_output_nth_column_values(output.string, n)
59
+ assert_sorted times
60
+ end
61
+ end
62
+ end
@@ -1,40 +1,42 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
- require 'fileutils'
6
- require 'tmpdir'
7
- require_relative 'prime'
8
-
9
- # -- Tests ----
10
- class PrinterGraphTest < TestCase
11
- def setup
12
- super
13
- # WALL_TIME so we can use sleep in our test and get same measurements on linux and windows
14
- @result = RubyProf::Profile.profile(measure_mode: RubyProf::WALL_TIME) do
15
- run_primes(1000, 5000)
16
- end
17
- end
18
-
19
- def graph_output_nth_column_values(output, n)
20
- only_root_calls = output.split("\n").select { |line| line =~ /^ +[\d\.]+%/ }
21
- only_root_calls.collect { |line| line.split(/ +/)[n] }
22
- end
23
-
24
- def assert_sorted(array)
25
- array = array.map {|n| n.to_f} # allow for > 10s times to sort right, since lexographically 4.0 > 10.0
26
- assert_equal(array, array.sort.reverse, "Array #{array.inspect} is not sorted")
27
- end
28
-
29
- def test_graph_results_sorting
30
- printer = RubyProf::GraphPrinter.new(@result)
31
-
32
- sort_method_with_column_number = {:total_time => 3, :self_time => 4, :wait_time => 5, :children_time => 6}
33
-
34
- sort_method_with_column_number.each_pair do |sort_method, n|
35
- printer.print(output = '', :sort_method => sort_method)
36
- times = graph_output_nth_column_values(output, n)
37
- assert_sorted times
38
- end
39
- end
40
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+ require 'fileutils'
6
+ require 'stringio'
7
+ require 'tmpdir'
8
+ require_relative 'prime'
9
+
10
+ # -- Tests ----
11
+ class PrinterGraphTest < TestCase
12
+ def setup
13
+ super
14
+ # WALL_TIME so we can use sleep in our test and get same measurements on linux and windows
15
+ @result = RubyProf::Profile.profile(measure_mode: RubyProf::WALL_TIME) do
16
+ run_primes(1000, 5000)
17
+ end
18
+ end
19
+
20
+ def graph_output_nth_column_values(output, n)
21
+ only_root_calls = output.split("\n").select { |line| line =~ /^ +[\d\.]+%/ }
22
+ only_root_calls.collect { |line| line.split(/ +/)[n] }
23
+ end
24
+
25
+ def assert_sorted(array)
26
+ array = array.map {|n| n.to_f} # allow for > 10s times to sort right, since lexographically 4.0 > 10.0
27
+ assert_equal(array, array.sort.reverse, "Array #{array.inspect} is not sorted")
28
+ end
29
+
30
+ def test_graph_results_sorting
31
+ printer = RubyProf::GraphPrinter.new(@result)
32
+
33
+ sort_method_with_column_number = {total_time: 3, self_time: 4, wait_time: 5, children_time: 6}
34
+
35
+ sort_method_with_column_number.each_pair do |sort_method, n|
36
+ output = StringIO.new
37
+ printer.print(output, sort_method: sort_method)
38
+ times = graph_output_nth_column_values(output.string, n)
39
+ assert_sorted times
40
+ end
41
+ end
42
+ end
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # encoding: UTF-8
3
2
 
4
3
  require File.expand_path('../test_helper', __FILE__)
@@ -12,7 +11,7 @@ class PrintersTest < TestCase
12
11
  def setup
13
12
  super
14
13
  # WALL_TIME, PROCESS_TIME, ALLOCATIONS and MEMORY as types of measuremen
15
- measure_modes = {wall_time: RubyProf::WALL_TIME, process_time: RubyProf::PROCESS_TIME, allocations: RubyProf::ALLOCATIONS, memory: RubyProf::MEMORY}
14
+ measure_modes = {wall_time: RubyProf::WALL_TIME, process_time: RubyProf::PROCESS_TIME, allocations: RubyProf::ALLOCATIONS}
16
15
 
17
16
  @results = {}
18
17
 
@@ -24,13 +23,13 @@ class PrintersTest < TestCase
24
23
  end
25
24
 
26
25
  def test_printers
27
- output = ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1" ? STDOUT : StringIO.new('')
26
+ output = ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1" ? STDOUT : StringIO.new
28
27
 
29
28
  printer = RubyProf::CallStackPrinter.new(@results[:wall_time])
30
29
  printer.print(output)
31
30
 
32
31
  printer = RubyProf::CallTreePrinter.new(@results[:wall_time])
33
- printer.print(:path => Dir.tmpdir)
32
+ printer.print(path: Dir.tmpdir)
34
33
 
35
34
  printer = RubyProf::FlatPrinter.new(@results[:wall_time])
36
35
  printer.print(output)
@@ -47,10 +46,10 @@ class PrintersTest < TestCase
47
46
  File.open("#{Dir.tmpdir}/graph.dot", "w") {|f| printer.print(f)}
48
47
 
49
48
  printer = RubyProf::CallStackPrinter.new(@results[:wall_time])
50
- File.open("#{Dir.tmpdir}/stack.html", "w") {|f| printer.print(f, :application => "primes")}
49
+ File.open("#{Dir.tmpdir}/stack.html", "w") {|f| printer.print(f, application: "primes")}
51
50
 
52
51
  printer = RubyProf::MultiPrinter.new(@results[:wall_time])
53
- printer.print(:path => Dir.tmpdir, :profile => "multi", :application => "primes")
52
+ printer.print(path: Dir.tmpdir, profile: "multi", application: "primes")
54
53
 
55
54
  ['graph.dot', 'multi.flat.txt', 'multi.graph.html', "multi.callgrind.out.#{$$}", 'multi.stack.html', 'stack.html'].each do |file_name|
56
55
  file_path = File.join(Dir.tmpdir, file_name)
@@ -58,63 +57,50 @@ class PrintersTest < TestCase
58
57
  end
59
58
  end
60
59
 
61
- def test_refuses_io_objects
60
+ def test_refuses_positional_arguments
62
61
  p = RubyProf::MultiPrinter.new(@results[:wall_time])
63
- begin
62
+ assert_raises(ArgumentError) do
64
63
  p.print(STDOUT)
65
- flunk "should have raised an ArgumentError"
66
- rescue ArgumentError => e
67
- assert_match(/IO/, e.to_s)
68
- end
69
- end
70
-
71
- def test_refuses_non_hashes
72
- p = RubyProf::MultiPrinter.new (@results[:wall_time])
73
- begin
74
- p.print([])
75
- flunk "should have raised an ArgumentError"
76
- rescue ArgumentError => e
77
- assert_match(/hash/, e.to_s)
78
64
  end
79
65
  end
80
66
 
81
67
  def test_flat_string
82
68
  output = helper_test_flat_string(RubyProf::FlatPrinter)
83
- assert_match(/prime.rb/, output)
69
+ assert_match(/prime.rb/, output.string)
84
70
  end
85
71
 
86
72
  def helper_test_flat_string(klass)
87
- output = ''
73
+ output = StringIO.new
88
74
 
89
75
  printer = klass.new(@results[:wall_time])
90
76
  printer.print(output)
91
77
 
92
- assert_match(/Thread ID: -?\d+/i, output)
93
- assert_match(/Fiber ID: -?\d+/i, output)
94
- assert_match(/Total: \d+\.\d+/i, output)
95
- assert_match(/Object#run_primes/i, output)
78
+ assert_match(/Thread ID: -?\d+/i, output.string)
79
+ assert_match(/Fiber ID: -?\d+/i, output.string)
80
+ assert_match(/Total: \d+\.\d+/i, output.string)
81
+ assert_match(/Object#run_primes/i, output.string)
96
82
  output
97
83
  end
98
84
 
99
85
  def test_graph_html_string
100
- output = ''
86
+ output = StringIO.new
101
87
  printer = RubyProf::GraphHtmlPrinter.new(@results[:wall_time])
102
88
  printer.print(output)
103
89
 
104
- assert_match(/<!DOCTYPE html>/i, output)
105
- assert_match( %r{<th>Total</th>}i, output)
106
- assert_match(/Object#run_primes/i, output)
90
+ assert_match(/<!DOCTYPE html>/i, output.string)
91
+ assert_match( %r{<th>Total</th>}i, output.string)
92
+ assert_match(/Object#run_primes/i, output.string)
107
93
  end
108
94
 
109
95
  def test_graph_string
110
- output = ''
96
+ output = StringIO.new
111
97
  printer = RubyProf::GraphPrinter.new(@results[:wall_time])
112
98
  printer.print(output)
113
99
 
114
- assert_match(/Thread ID: -?\d+/i, output)
115
- assert_match(/Fiber ID: -?\d+/i, output)
116
- assert_match(/Total Time: \d+\.\d+/i, output)
117
- assert_match(/Object#run_primes/i, output)
100
+ assert_match(/Thread ID: -?\d+/i, output.string)
101
+ assert_match(/Fiber ID: -?\d+/i, output.string)
102
+ assert_match(/Total Time: \d+\.\d+/i, output.string)
103
+ assert_match(/Object#run_primes/i, output.string)
118
104
  end
119
105
 
120
106
  def do_nothing
@@ -133,14 +119,14 @@ class PrintersTest < TestCase
133
119
  # RubyProf::FlatPrinter only outputs if self time > percent...
134
120
  for klass in [RubyProf::GraphPrinter, RubyProf::GraphHtmlPrinter]
135
121
  printer = klass.new(result)
136
- out = ''
137
- printer.print(out, :min_percent => 0.00000001)
138
- assert_match(/do_nothing/, out)
122
+ out = StringIO.new
123
+ printer.print(out, min_percent: 0.00000001)
124
+ assert_match(/do_nothing/, out.string)
139
125
  end
140
126
  end
141
127
 
142
128
  def test_print_footer
143
- results_keys = [:wall_time, :process_time, :allocations, :memory]
129
+ results_keys = [:wall_time, :process_time, :allocations]
144
130
  expected_matches = [
145
131
  "The percentage of time spent by this method relative to the total time in the entire program.",
146
132
  "The total time spent by this method and its children.",
@@ -157,7 +143,7 @@ class PrintersTest < TestCase
157
143
  ]
158
144
 
159
145
  results_keys.each do |key|
160
- output = ''
146
+ output = StringIO.new
161
147
  printer = RubyProf::GraphPrinter.new(@results[key])
162
148
  printer.print(output)
163
149
 
@@ -166,12 +152,10 @@ class PrintersTest < TestCase
166
152
  matches = expected_matches[0..3]
167
153
  when :allocations
168
154
  matches = expected_matches[4..7]
169
- when :memory
170
- matches = expected_matches[8..11]
171
155
  end
172
156
 
173
157
  matches.each do |pattern|
174
- assert_match(pattern, output)
158
+ assert_match(pattern, output.string)
175
159
  end
176
160
  end
177
161
  end