1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#!/usr/bin/env ruby
# encoding: UTF-8
require File.expand_path("../test_helper", __FILE__)
class DynamicMethodTest < TestCase
class FruitMedley
define_method(:apple) do
sleep(0.1)
"I'm a peach"
end
define_method(:orange) do
sleep(0.2)
"I'm an orange"
end
[:banana, :peach].each_with_index do |fruit,i|
define_method(fruit) do
sleep(i == 0 ? 0.3 : 0.4)
"I'm a #{fruit}"
end
end
end
def setup
# Need to use wall time for this test due to the sleep calls
RubyProf::measure_mode = RubyProf::WALL_TIME
end
def test_dynamic_method
medley = FruitMedley.new
result = RubyProf.profile do
medley.apple
medley.orange
medley.banana
medley.peach
end
# RubyProf::FlatPrinter.new(result).print(STDOUT)
methods = result.threads.first.methods.sort.reverse
expected_method_names = %w(
DynamicMethodTest#test_dynamic_method
Kernel#sleep
DynamicMethodTest::FruitMedley#peach
DynamicMethodTest::FruitMedley#banana
DynamicMethodTest::FruitMedley#orange
DynamicMethodTest::FruitMedley#apple
Symbol#to_s
)
assert_equal expected_method_names.join("\n"), methods.map(&:full_name).join("\n")
end
end
|