ruby--ruby/test/ruby/test_settracefunc.rb

175 lines
5.9 KiB
Ruby

require 'test/unit'
class TestSetTraceFunc < Test::Unit::TestCase
def setup
@original_compile_option = VM::InstructionSequence.compile_option
VM::InstructionSequence.compile_option = {
:trace_instruction => true,
:specialized_instruction => false
}
end
def teardown
VM::InstructionSequence.compile_option = @original_compile_option
end
def test_c_call
events = []
eval <<-EOF.gsub(/^.*?: /, "")
1: set_trace_func(Proc.new { |event, file, lineno, mid, binding, klass|
2: events << [event, lineno, mid, klass]
3: })
4: x = 1 + 1
5: set_trace_func(nil)
EOF
assert_equal(["c-return", 3, :set_trace_func, Kernel],
events.shift)
assert_equal(["line", 4, __method__, self.class],
events.shift)
assert_equal(["c-call", 4, :+, Fixnum],
events.shift)
assert_equal(["c-return", 4, :+, Fixnum],
events.shift)
assert_equal(["line", 5, __method__, self.class],
events.shift)
assert_equal(["c-call", 5, :set_trace_func, Kernel],
events.shift)
assert_equal([], events)
end
def test_call
events = []
eval <<-EOF.gsub(/^.*?: /, "")
1: set_trace_func(Proc.new { |event, file, lineno, mid, binding, klass|
2: events << [event, lineno, mid, klass]
3: })
4: def add(x, y)
5: x + y
6: end
7: x = add(1, 1)
8: set_trace_func(nil)
EOF
assert_equal(["c-return", 3, :set_trace_func, Kernel],
events.shift)
assert_equal(["line", 4, __method__, self.class],
events.shift)
assert_equal(["c-call", 4, :method_added, Module],
events.shift)
assert_equal(["c-return", 4, :method_added, Module],
events.shift)
assert_equal(["line", 7, __method__, self.class],
events.shift)
assert_equal(["call", 6, :add, self.class],
events.shift)
assert_equal(["line", 5, :add, self.class],
events.shift)
assert_equal(["c-call", 5, :+, Fixnum],
events.shift)
assert_equal(["c-return", 5, :+, Fixnum],
events.shift)
assert_equal(["return", 6, :add, self.class],
events.shift)
assert_equal(["line", 8, __method__, self.class],
events.shift)
assert_equal(["c-call", 8, :set_trace_func, Kernel],
events.shift)
assert_equal([], events)
end
def test_class
events = []
eval <<-EOF.gsub(/^.*?: /, "")
1: set_trace_func(Proc.new { |event, file, lineno, mid, binding, klass|
2: events << [event, lineno, mid, klass]
3: })
4: class Foo
5: def bar
6: end
7: end
8: x = Foo.new.bar
9: set_trace_func(nil)
EOF
assert_equal(["c-return", 3, :set_trace_func, Kernel],
events.shift)
assert_equal(["line", 4, __method__, self.class],
events.shift)
assert_equal(["c-call", 4, :inherited, Class],
events.shift)
assert_equal(["c-return", 4, :inherited, Class],
events.shift)
assert_equal(["class", 7, nil, nil],
events.shift)
assert_equal(["line", 5, nil, nil],
events.shift)
assert_equal(["c-call", 5, :method_added, Module],
events.shift)
assert_equal(["c-return", 5, :method_added, Module],
events.shift)
assert_equal(["end", 7, nil, nil],
events.shift)
assert_equal(["line", 8, __method__, self.class],
events.shift)
assert_equal(["c-call", 8, :new, Class],
events.shift)
assert_equal(["c-call", 8, :initialize, BasicObject],
events.shift)
assert_equal(["c-return", 8, :initialize, BasicObject],
events.shift)
assert_equal(["c-return", 8, :new, Class],
events.shift)
assert_equal(["call", 6, :bar, Foo],
events.shift)
assert_equal(["return", 6, :bar, Foo],
events.shift)
assert_equal(["line", 9, __method__, self.class],
events.shift)
assert_equal(["c-call", 9, :set_trace_func, Kernel],
events.shift)
assert_equal([], events)
end
def test_raise
events = []
eval <<-EOF.gsub(/^.*?: /, "")
1: set_trace_func(Proc.new { |event, file, lineno, mid, binding, klass|
2: events << [event, lineno, mid, klass]
3: })
4: raise "error" rescue nil
5: set_trace_func(nil)
EOF
assert_equal(["c-return", 3, :set_trace_func, Kernel],
events.shift)
assert_equal(["line", 4, __method__, self.class],
events.shift)
assert_equal(["c-call", 4, :raise, Kernel],
events.shift)
assert_equal(["c-call", 4, :new, Class],
events.shift)
assert_equal(["c-call", 4, :initialize, Exception],
events.shift)
assert_equal(["c-return", 4, :initialize, Exception],
events.shift)
assert_equal(["c-return", 4, :new, Class],
events.shift)
assert_equal(["c-call", 4, :backtrace, Exception],
events.shift)
assert_equal(["c-return", 4, :backtrace, Exception],
events.shift)
assert_equal(["c-call", 4, :set_backtrace, Exception],
events.shift)
assert_equal(["c-return", 4, :set_backtrace, Exception],
events.shift)
assert_equal(["raise", 4, :raise, Kernel],
events.shift)
assert_equal(["c-call", 4, :===, Module],
events.shift)
assert_equal(["c-return", 4, :===, Module],
events.shift)
assert_equal(["line", 5, __method__, self.class],
events.shift)
assert_equal(["c-call", 5, :set_trace_func, Kernel],
events.shift)
assert_equal([], events)
end
end