ruby-prof 1.7.2 → 2.0.1

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 (122) hide show
  1. checksums.yaml +4 -4
  2. data/{CHANGES → CHANGELOG.md} +115 -178
  3. data/README.md +5 -5
  4. data/bin/ruby-prof +1 -4
  5. data/bin/ruby-prof-check-trace +45 -45
  6. data/docs/advanced-usage.md +132 -0
  7. data/docs/alternatives.md +98 -0
  8. data/docs/architecture.md +122 -0
  9. data/docs/best-practices.md +27 -0
  10. data/docs/getting-started.md +130 -0
  11. data/docs/history.md +11 -0
  12. data/docs/index.md +45 -0
  13. data/docs/profiling-rails.md +64 -0
  14. data/docs/public/examples/example.rb +33 -0
  15. data/docs/public/examples/generate_reports.rb +92 -0
  16. data/docs/public/examples/reports/call_info.txt +27 -0
  17. data/docs/public/examples/reports/call_stack.html +835 -0
  18. data/docs/public/examples/reports/callgrind.out +150 -0
  19. data/docs/public/examples/reports/flame_graph.html +408 -0
  20. data/docs/public/examples/reports/flat.txt +45 -0
  21. data/docs/public/examples/reports/graph.dot +129 -0
  22. data/docs/public/examples/reports/graph.html +1319 -0
  23. data/docs/public/examples/reports/graph.txt +100 -0
  24. data/docs/public/examples/reports/graphviz_viewer.html +1 -0
  25. data/docs/public/images/call_stack.png +0 -0
  26. data/docs/public/images/class_diagram.png +0 -0
  27. data/docs/public/images/dot_printer.png +0 -0
  28. data/docs/public/images/flame_graph.png +0 -0
  29. data/docs/public/images/flat.png +0 -0
  30. data/docs/public/images/graph.png +0 -0
  31. data/docs/public/images/graph_html.png +0 -0
  32. data/docs/public/images/ruby-prof-logo.svg +1 -0
  33. data/docs/reports.md +150 -0
  34. data/docs/stylesheets/extra.css +80 -0
  35. data/ext/ruby_prof/rp_allocation.c +0 -15
  36. data/ext/ruby_prof/rp_allocation.h +29 -33
  37. data/ext/ruby_prof/rp_call_tree.c +3 -0
  38. data/ext/ruby_prof/rp_call_tree.h +1 -4
  39. data/ext/ruby_prof/rp_call_trees.h +1 -4
  40. data/ext/ruby_prof/rp_measurement.c +0 -5
  41. data/ext/ruby_prof/rp_measurement.h +49 -53
  42. data/ext/ruby_prof/rp_method.c +3 -0
  43. data/ext/ruby_prof/rp_method.h +1 -4
  44. data/ext/ruby_prof/rp_profile.c +1 -1
  45. data/ext/ruby_prof/rp_profile.h +1 -5
  46. data/ext/ruby_prof/rp_stack.h +50 -53
  47. data/ext/ruby_prof/rp_thread.h +1 -4
  48. data/ext/ruby_prof/ruby_prof.h +1 -4
  49. data/ext/ruby_prof/vc/ruby_prof.vcxproj +7 -8
  50. data/lib/ruby-prof/assets/call_stack_printer.html.erb +746 -711
  51. data/lib/ruby-prof/assets/flame_graph_printer.html.erb +412 -0
  52. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -355
  53. data/lib/ruby-prof/call_tree.rb +57 -57
  54. data/lib/ruby-prof/call_tree_visitor.rb +36 -36
  55. data/lib/ruby-prof/measurement.rb +17 -17
  56. data/lib/ruby-prof/printers/abstract_printer.rb +19 -33
  57. data/lib/ruby-prof/printers/call_info_printer.rb +53 -53
  58. data/lib/ruby-prof/printers/call_stack_printer.rb +168 -180
  59. data/lib/ruby-prof/printers/call_tree_printer.rb +132 -145
  60. data/lib/ruby-prof/printers/dot_printer.rb +177 -132
  61. data/lib/ruby-prof/printers/flame_graph_printer.rb +79 -0
  62. data/lib/ruby-prof/printers/flat_printer.rb +52 -52
  63. data/lib/ruby-prof/printers/graph_html_printer.rb +62 -63
  64. data/lib/ruby-prof/printers/graph_printer.rb +112 -113
  65. data/lib/ruby-prof/printers/multi_printer.rb +134 -127
  66. data/lib/ruby-prof/profile.rb +13 -0
  67. data/lib/ruby-prof/rack.rb +114 -105
  68. data/lib/ruby-prof/task.rb +147 -147
  69. data/lib/ruby-prof/thread.rb +20 -20
  70. data/lib/ruby-prof/version.rb +1 -1
  71. data/lib/ruby-prof.rb +50 -52
  72. data/lib/unprof.rb +10 -10
  73. data/ruby-prof.gemspec +66 -66
  74. data/test/abstract_printer_test.rb +25 -27
  75. data/test/alias_test.rb +203 -117
  76. data/test/call_tree_builder.rb +9 -9
  77. data/test/call_tree_visitor_test.rb +27 -27
  78. data/test/call_trees_test.rb +66 -66
  79. data/test/duplicate_names_test.rb +32 -32
  80. data/test/dynamic_method_test.rb +50 -50
  81. data/test/exceptions_test.rb +1 -1
  82. data/test/exclude_threads_test.rb +48 -48
  83. data/test/fiber_test.rb +72 -72
  84. data/test/inverse_call_tree_test.rb +174 -174
  85. data/test/line_number_test.rb +138 -1
  86. data/test/marshal_test.rb +2 -3
  87. data/test/measure_allocations.rb +26 -26
  88. data/test/measure_allocations_test.rb +340 -1
  89. data/test/measure_process_time_test.rb +3098 -3142
  90. data/test/measure_times.rb +56 -56
  91. data/test/measure_wall_time_test.rb +511 -372
  92. data/test/measurement_test.rb +82 -82
  93. data/test/merge_test.rb +48 -48
  94. data/test/multi_printer_test.rb +52 -66
  95. data/test/no_method_class_test.rb +15 -15
  96. data/test/pause_resume_test.rb +171 -171
  97. data/test/prime.rb +54 -54
  98. data/test/prime_script.rb +5 -5
  99. data/test/printer_call_stack_test.rb +4 -3
  100. data/test/printer_call_tree_test.rb +30 -30
  101. data/test/printer_flame_graph_test.rb +82 -0
  102. data/test/printer_flat_test.rb +3 -3
  103. data/test/printer_graph_html_test.rb +12 -9
  104. data/test/printer_graph_test.rb +5 -3
  105. data/test/printers_test.rb +162 -178
  106. data/test/printing_recursive_graph_test.rb +4 -4
  107. data/test/profile_test.rb +2 -2
  108. data/test/rack_test.rb +15 -5
  109. data/test/recursive_test.rb +139 -139
  110. data/test/scheduler.rb +367 -363
  111. data/test/singleton_test.rb +2 -1
  112. data/test/stack_printer_test.rb +61 -61
  113. data/test/start_stop_test.rb +106 -106
  114. data/test/test_helper.rb +4 -0
  115. data/test/thread_test.rb +229 -229
  116. data/test/unique_call_path_test.rb +123 -123
  117. data/test/yarv_test.rb +2 -2
  118. metadata +53 -11
  119. data/ext/ruby_prof/rp_measure_memory.c +0 -46
  120. data/lib/ruby-prof/compatibility.rb +0 -113
  121. data/test/compatibility_test.rb +0 -49
  122. data/test/measure_memory_test.rb +0 -1193
@@ -3,6 +3,7 @@
3
3
 
4
4
  require File.expand_path('../test_helper', __FILE__)
5
5
  require 'fileutils'
6
+ require 'stringio'
6
7
  require 'tmpdir'
7
8
  require_relative 'prime'
8
9
 
@@ -28,19 +29,20 @@ class PrinterGraphHtmlTest < TestCase
28
29
  end
29
30
 
30
31
  def test_graph_html_string
31
- output = ''
32
+ output = StringIO.new
32
33
  printer = RubyProf::GraphHtmlPrinter.new(@result)
33
34
  printer.print(output)
34
35
 
35
- assert_match(/<!DOCTYPE html>/i, output)
36
- assert_match( %r{<th>Total</th>}i, output)
37
- assert_match(/Object#run_primes/i, output)
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)
38
39
  end
39
40
 
40
41
  def test_graph_html_result_sorting_by_total_time_is_default
41
42
  printer = RubyProf::GraphHtmlPrinter.new(@result)
42
- printer.print(output = '')
43
- total_times = graph_html_output_nth_column_values(output, 3)
43
+ output = StringIO.new
44
+ printer.print(output)
45
+ total_times = graph_html_output_nth_column_values(output.string, 3)
44
46
 
45
47
  assert_sorted total_times
46
48
  end
@@ -48,11 +50,12 @@ class PrinterGraphHtmlTest < TestCase
48
50
  def test_graph_html_result_sorting
49
51
  printer = RubyProf::GraphHtmlPrinter.new(@result)
50
52
 
51
- sort_method_with_column_number = {:total_time => 3, :self_time => 4, :wait_time => 5, :children_time => 6}
53
+ sort_method_with_column_number = {total_time: 3, self_time: 4, wait_time: 5, children_time: 6}
52
54
 
53
55
  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
+ output = StringIO.new
57
+ printer.print(output, sort_method: sort_method)
58
+ times = graph_html_output_nth_column_values(output.string, n)
56
59
  assert_sorted times
57
60
  end
58
61
  end
@@ -3,6 +3,7 @@
3
3
 
4
4
  require File.expand_path('../test_helper', __FILE__)
5
5
  require 'fileutils'
6
+ require 'stringio'
6
7
  require 'tmpdir'
7
8
  require_relative 'prime'
8
9
 
@@ -29,11 +30,12 @@ class PrinterGraphTest < TestCase
29
30
  def test_graph_results_sorting
30
31
  printer = RubyProf::GraphPrinter.new(@result)
31
32
 
32
- sort_method_with_column_number = {:total_time => 3, :self_time => 4, :wait_time => 5, :children_time => 6}
33
+ sort_method_with_column_number = {total_time: 3, self_time: 4, wait_time: 5, children_time: 6}
33
34
 
34
35
  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)
36
+ output = StringIO.new
37
+ printer.print(output, sort_method: sort_method)
38
+ times = graph_output_nth_column_values(output.string, n)
37
39
  assert_sorted times
38
40
  end
39
41
  end
@@ -1,178 +1,162 @@
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 PrintersTest < TestCase
12
- def setup
13
- super
14
- # 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}
16
-
17
- @results = {}
18
-
19
- measure_modes.each do |key, value|
20
- @results[key] = RubyProf::Profile.profile(measure_mode: value) do
21
- run_primes(1000, 5000)
22
- end
23
- end
24
- end
25
-
26
- def test_printers
27
- output = ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1" ? STDOUT : StringIO.new('')
28
-
29
- printer = RubyProf::CallStackPrinter.new(@results[:wall_time])
30
- printer.print(output)
31
-
32
- printer = RubyProf::CallTreePrinter.new(@results[:wall_time])
33
- printer.print(:path => Dir.tmpdir)
34
-
35
- printer = RubyProf::FlatPrinter.new(@results[:wall_time])
36
- printer.print(output)
37
-
38
- printer = RubyProf::GraphHtmlPrinter.new(@results[:wall_time])
39
- printer.print(output)
40
-
41
- printer = RubyProf::GraphPrinter.new(@results[:wall_time])
42
- printer.print(output)
43
- end
44
-
45
- def test_print_to_files
46
- printer = RubyProf::DotPrinter.new(@results[:wall_time])
47
- File.open("#{Dir.tmpdir}/graph.dot", "w") {|f| printer.print(f)}
48
-
49
- printer = RubyProf::CallStackPrinter.new(@results[:wall_time])
50
- File.open("#{Dir.tmpdir}/stack.html", "w") {|f| printer.print(f, :application => "primes")}
51
-
52
- printer = RubyProf::MultiPrinter.new(@results[:wall_time])
53
- printer.print(:path => Dir.tmpdir, :profile => "multi", :application => "primes")
54
-
55
- ['graph.dot', 'multi.flat.txt', 'multi.graph.html', "multi.callgrind.out.#{$$}", 'multi.stack.html', 'stack.html'].each do |file_name|
56
- file_path = File.join(Dir.tmpdir, file_name)
57
- refute(File.empty?(file_path))
58
- end
59
- end
60
-
61
- def test_refuses_io_objects
62
- p = RubyProf::MultiPrinter.new(@results[:wall_time])
63
- begin
64
- 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
- end
79
- end
80
-
81
- def test_flat_string
82
- output = helper_test_flat_string(RubyProf::FlatPrinter)
83
- assert_match(/prime.rb/, output)
84
- end
85
-
86
- def helper_test_flat_string(klass)
87
- output = ''
88
-
89
- printer = klass.new(@results[:wall_time])
90
- printer.print(output)
91
-
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)
96
- output
97
- end
98
-
99
- def test_graph_html_string
100
- output = ''
101
- printer = RubyProf::GraphHtmlPrinter.new(@results[:wall_time])
102
- printer.print(output)
103
-
104
- assert_match(/<!DOCTYPE html>/i, output)
105
- assert_match( %r{<th>Total</th>}i, output)
106
- assert_match(/Object#run_primes/i, output)
107
- end
108
-
109
- def test_graph_string
110
- output = ''
111
- printer = RubyProf::GraphPrinter.new(@results[:wall_time])
112
- printer.print(output)
113
-
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)
118
- end
119
-
120
- def do_nothing
121
- start = Time.now
122
- while(Time.now == start)
123
- end
124
- end
125
-
126
- def test_all_with_small_percentiles
127
- result = RubyProf::Profile.profile do
128
- sleep 2
129
- do_nothing
130
- end
131
-
132
- # RubyProf::CallTreePrinter doesn't "do" a min_percent
133
- # RubyProf::FlatPrinter only outputs if self time > percent...
134
- for klass in [RubyProf::GraphPrinter, RubyProf::GraphHtmlPrinter]
135
- printer = klass.new(result)
136
- out = ''
137
- printer.print(out, :min_percent => 0.00000001)
138
- assert_match(/do_nothing/, out)
139
- end
140
- end
141
-
142
- def test_print_footer
143
- results_keys = [:wall_time, :process_time, :allocations, :memory]
144
- expected_matches = [
145
- "The percentage of time spent by this method relative to the total time in the entire program.",
146
- "The total time spent by this method and its children.",
147
- "The time spent by this method.",
148
- "The time spent by this method's children.",
149
- "The percentage of allocations made by this method relative to the total allocations in the entire program.",
150
- "The total number of allocations made by this method and its children.",
151
- "The number of allocations made by this method.",
152
- "The number of allocations made by this method's children.",
153
- "The percentage of memory used by this method relative to the total memory in the entire program.",
154
- "The total memory used by this method and its children.",
155
- "The memory used by this method.",
156
- "The memory used by this method's children."
157
- ]
158
-
159
- results_keys.each do |key|
160
- output = ''
161
- printer = RubyProf::GraphPrinter.new(@results[key])
162
- printer.print(output)
163
-
164
- case key
165
- when :wall_time, :process_time
166
- matches = expected_matches[0..3]
167
- when :allocations
168
- matches = expected_matches[4..7]
169
- when :memory
170
- matches = expected_matches[8..11]
171
- end
172
-
173
- matches.each do |pattern|
174
- assert_match(pattern, output)
175
- end
176
- end
177
- end
178
- end
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path('../test_helper', __FILE__)
4
+ require 'fileutils'
5
+ require 'stringio'
6
+ require 'tmpdir'
7
+ require_relative 'prime'
8
+
9
+ # -- Tests ----
10
+ class PrintersTest < TestCase
11
+ def setup
12
+ super
13
+ # WALL_TIME, PROCESS_TIME, ALLOCATIONS and MEMORY as types of measuremen
14
+ measure_modes = {wall_time: RubyProf::WALL_TIME, process_time: RubyProf::PROCESS_TIME, allocations: RubyProf::ALLOCATIONS}
15
+
16
+ @results = {}
17
+
18
+ measure_modes.each do |key, value|
19
+ @results[key] = RubyProf::Profile.profile(measure_mode: value) do
20
+ run_primes(1000, 5000)
21
+ end
22
+ end
23
+ end
24
+
25
+ def test_printers
26
+ output = ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1" ? STDOUT : StringIO.new
27
+
28
+ printer = RubyProf::CallStackPrinter.new(@results[:wall_time])
29
+ printer.print(output)
30
+
31
+ printer = RubyProf::CallTreePrinter.new(@results[:wall_time])
32
+ printer.print(path: Dir.tmpdir)
33
+
34
+ printer = RubyProf::FlatPrinter.new(@results[:wall_time])
35
+ printer.print(output)
36
+
37
+ printer = RubyProf::GraphHtmlPrinter.new(@results[:wall_time])
38
+ printer.print(output)
39
+
40
+ printer = RubyProf::GraphPrinter.new(@results[:wall_time])
41
+ printer.print(output)
42
+ end
43
+
44
+ def test_print_to_files
45
+ printer = RubyProf::DotPrinter.new(@results[:wall_time])
46
+ File.open("#{Dir.tmpdir}/graph.dot", "w") {|f| printer.print(f)}
47
+
48
+ printer = RubyProf::CallStackPrinter.new(@results[:wall_time])
49
+ File.open("#{Dir.tmpdir}/stack.html", "w") {|f| printer.print(f, application: "primes")}
50
+
51
+ printer = RubyProf::MultiPrinter.new(@results[:wall_time])
52
+ printer.print(path: Dir.tmpdir, profile: "multi", application: "primes")
53
+
54
+ ['graph.dot', 'multi.flat.txt', 'multi.graph.html', "multi.callgrind.out.#{$$}", 'multi.stack.html', 'stack.html'].each do |file_name|
55
+ file_path = File.join(Dir.tmpdir, file_name)
56
+ refute(File.empty?(file_path))
57
+ end
58
+ end
59
+
60
+ def test_refuses_positional_arguments
61
+ p = RubyProf::MultiPrinter.new(@results[:wall_time])
62
+ assert_raises(ArgumentError) do
63
+ p.print(STDOUT)
64
+ end
65
+ end
66
+
67
+ def test_flat_string
68
+ output = helper_test_flat_string(RubyProf::FlatPrinter)
69
+ assert_match(/prime.rb/, output.string)
70
+ end
71
+
72
+ def helper_test_flat_string(klass)
73
+ output = StringIO.new
74
+
75
+ printer = klass.new(@results[:wall_time])
76
+ printer.print(output)
77
+
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)
82
+ output
83
+ end
84
+
85
+ def test_graph_html_string
86
+ output = StringIO.new
87
+ printer = RubyProf::GraphHtmlPrinter.new(@results[:wall_time])
88
+ printer.print(output)
89
+
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)
93
+ end
94
+
95
+ def test_graph_string
96
+ output = StringIO.new
97
+ printer = RubyProf::GraphPrinter.new(@results[:wall_time])
98
+ printer.print(output)
99
+
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)
104
+ end
105
+
106
+ def do_nothing
107
+ start = Time.now
108
+ while(Time.now == start)
109
+ end
110
+ end
111
+
112
+ def test_all_with_small_percentiles
113
+ result = RubyProf::Profile.profile do
114
+ sleep 2
115
+ do_nothing
116
+ end
117
+
118
+ # RubyProf::CallTreePrinter doesn't "do" a min_percent
119
+ # RubyProf::FlatPrinter only outputs if self time > percent...
120
+ for klass in [RubyProf::GraphPrinter, RubyProf::GraphHtmlPrinter]
121
+ printer = klass.new(result)
122
+ out = StringIO.new
123
+ printer.print(out, min_percent: 0.00000001)
124
+ assert_match(/do_nothing/, out.string)
125
+ end
126
+ end
127
+
128
+ def test_print_footer
129
+ results_keys = [:wall_time, :process_time, :allocations]
130
+ expected_matches = [
131
+ "The percentage of time spent by this method relative to the total time in the entire program.",
132
+ "The total time spent by this method and its children.",
133
+ "The time spent by this method.",
134
+ "The time spent by this method's children.",
135
+ "The percentage of allocations made by this method relative to the total allocations in the entire program.",
136
+ "The total number of allocations made by this method and its children.",
137
+ "The number of allocations made by this method.",
138
+ "The number of allocations made by this method's children.",
139
+ "The percentage of memory used by this method relative to the total memory in the entire program.",
140
+ "The total memory used by this method and its children.",
141
+ "The memory used by this method.",
142
+ "The memory used by this method's children."
143
+ ]
144
+
145
+ results_keys.each do |key|
146
+ output = StringIO.new
147
+ printer = RubyProf::GraphPrinter.new(@results[key])
148
+ printer.print(output)
149
+
150
+ case key
151
+ when :wall_time, :process_time
152
+ matches = expected_matches[0..3]
153
+ when :allocations
154
+ matches = expected_matches[4..7]
155
+ end
156
+
157
+ matches.each do |pattern|
158
+ assert_match(pattern, output.string)
159
+ end
160
+ end
161
+ end
162
+ end
@@ -72,10 +72,10 @@ class PrintingRecursiveGraphTest < TestCase
72
72
 
73
73
  def test_printing_rescursive_graph
74
74
  printer = RubyProf::GraphPrinter.new(@result)
75
- buffer = ''
76
- printer.print(StringIO.new(buffer))
77
- puts buffer if ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1"
75
+ buffer = StringIO.new
76
+ printer.print(buffer)
77
+ puts buffer.string if ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1"
78
78
 
79
- refute_nil(buffer)
79
+ refute_nil(buffer.string)
80
80
  end
81
81
  end
data/test/profile_test.rb CHANGED
@@ -6,12 +6,12 @@ require_relative './call_tree_builder'
6
6
 
7
7
  class ProfileTest < TestCase
8
8
  def test_measure_mode
9
- profile = RubyProf::Profile.new(:measure_mode => RubyProf::PROCESS_TIME)
9
+ profile = RubyProf::Profile.new(measure_mode: RubyProf::PROCESS_TIME)
10
10
  assert_equal(RubyProf::PROCESS_TIME, profile.measure_mode)
11
11
  end
12
12
 
13
13
  def test_measure_mode_string
14
- profile = RubyProf::Profile.new(:measure_mode => RubyProf::PROCESS_TIME)
14
+ profile = RubyProf::Profile.new(measure_mode: RubyProf::PROCESS_TIME)
15
15
  assert_equal("process_time", profile.measure_mode_string)
16
16
  end
17
17
 
data/test/rack_test.rb CHANGED
@@ -25,11 +25,21 @@ module Rack
25
25
  end
26
26
 
27
27
  class RackTest < TestCase
28
+ def test_pathname_path
29
+ path = Pathname.new(Dir.mktmpdir)
30
+ adapter = Rack::RubyProf.new(FakeRackApp.new, path: path)
31
+
32
+ adapter.call(:fake_env)
33
+
34
+ file_path = ::File.join(path.to_s, 'path-to-resource.json-flat.txt')
35
+ assert(File.exist?(file_path))
36
+ end
37
+
28
38
  def test_create_print_path
29
39
  path = Dir.mktmpdir
30
40
  Dir.delete(path)
31
41
 
32
- Rack::RubyProf.new(FakeRackApp.new, :path => path)
42
+ Rack::RubyProf.new(FakeRackApp.new, path: path)
33
43
 
34
44
  assert(Dir.exist?(path))
35
45
  end
@@ -37,7 +47,7 @@ class RackTest < TestCase
37
47
  def test_create_profile_reports
38
48
  path = Dir.mktmpdir
39
49
 
40
- adapter = Rack::RubyProf.new(FakeRackApp.new, :path => path)
50
+ adapter = Rack::RubyProf.new(FakeRackApp.new, path: path)
41
51
 
42
52
  adapter.call(:fake_env)
43
53
 
@@ -50,7 +60,7 @@ class RackTest < TestCase
50
60
  def test_skip_paths
51
61
  path = Dir.mktmpdir
52
62
 
53
- adapter = Rack::RubyProf.new(FakeRackApp.new, :path => path, :skip_paths => [%r{\.json$}])
63
+ adapter = Rack::RubyProf.new(FakeRackApp.new, path: path, skip_paths: [%r{\.json$}])
54
64
 
55
65
  adapter.call(:fake_env)
56
66
 
@@ -63,7 +73,7 @@ class RackTest < TestCase
63
73
  def test_only_paths
64
74
  path = Dir.mktmpdir
65
75
 
66
- adapter = Rack::RubyProf.new(FakeRackApp.new, :path => path, :only_paths => [%r{\.json$}])
76
+ adapter = Rack::RubyProf.new(FakeRackApp.new, path: path, only_paths: [%r{\.json$}])
67
77
 
68
78
  adapter.call({path: '/path/to/resource.json'})
69
79
 
@@ -83,7 +93,7 @@ class RackTest < TestCase
83
93
  path = Dir.mktmpdir
84
94
 
85
95
  printer = {::RubyProf::FlatPrinter => lambda { 'dynamic.txt' }}
86
- adapter = Rack::RubyProf.new(FakeRackApp.new, :path => path, :printers => printer)
96
+ adapter = Rack::RubyProf.new(FakeRackApp.new, path: path, printers: printer)
87
97
 
88
98
  adapter.call(:fake_env)
89
99