summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-05 13:15:27 +0000
committerktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-05 13:15:27 +0000
commit9cbd6ee09770be3d73a17ab1195a094c59c9f9ee (patch)
tree57a7c963e85078a2ff5e00ce206d86acee046857 /test
parent8004ad33bcdb7b5bec3f7f077d386563fbcda76a (diff)
* vm_trace.c (tracepoint_attr_callee_id, rb_tracearg_callee_id):
add TracePoint#callee_id. [ruby-core:77241] [Feature #12747] * cont.c, eval.c, gc.c, include/ruby/intern.h, insns.def, thread.c, vm.c, vm_backtrace.c, vm_core.h, vm_eval.c, vm_insnhelper.c, vm_trace.c: ditto. * test/ruby/test_settracefunc.rb: tests for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_settracefunc.rb111
1 files changed, 111 insertions, 0 deletions
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb
index 855b904e36..0930a2232d 100644
--- a/test/ruby/test_settracefunc.rb
+++ b/test/ruby/test_settracefunc.rb
@@ -1488,4 +1488,115 @@ class TestSetTraceFunc < Test::Unit::TestCase
assert_equal ev, :fiber_switch
}
end
+
+ def test_tracepoint_callee_id
+ events = []
+ capture_events = Proc.new{|tp|
+ events << [tp.event, tp.method_id, tp.callee_id]
+ }
+
+ o = Class.new{
+ def m
+ raise
+ end
+ alias alias_m m
+ }.new
+ TracePoint.new(:raise, :call, :return, &capture_events).enable{
+ o.alias_m rescue nil
+ }
+ assert_equal [[:call, :m, :alias_m], [:raise, :m, :alias_m], [:return, :m, :alias_m]], events
+ events.clear
+
+ o = Class.new{
+ alias alias_raise raise
+ def m
+ alias_raise
+ end
+ }.new
+ TracePoint.new(:c_return, &capture_events).enable{
+ o.m rescue nil
+ }
+ assert_equal [:c_return, :raise, :alias_raise], events[0]
+ events.clear
+
+ o = Class.new(String){
+ include Enumerable
+ alias each each_char
+ }.new('foo')
+ TracePoint.new(:c_return, &capture_events).enable{
+ o.find{true}
+ }
+ assert_equal [:c_return, :each_char, :each], events[0]
+ events.clear
+
+ o = Class.new{
+ define_method(:m){}
+ alias alias_m m
+ }.new
+ TracePoint.new(:call, :return, &capture_events).enable{
+ o.alias_m
+ }
+ assert_equal [[:call, :m, :alias_m], [:return, :m, :alias_m]], events
+ events.clear
+
+ o = Class.new{
+ def m
+ tap{return}
+ end
+ alias alias_m m
+ }.new
+ TracePoint.new(:return, &capture_events).enable{
+ o.alias_m
+ }
+ assert_equal [[:return, :m, :alias_m]], events
+ events.clear
+
+ o = Class.new{
+ define_method(:m){raise}
+ alias alias_m m
+ }.new
+ TracePoint.new(:b_return, :return, &capture_events).enable{
+ o.alias_m rescue nil
+ }
+ assert_equal [[:b_return, :m, :alias_m], [:return, :m, :alias_m]], events[0..1]
+ events.clear
+
+ o = Class.new{
+ define_method(:m){tap{return}}
+ alias alias_m m
+ }.new
+ TracePoint.new(:b_return, &capture_events).enable{
+ o.alias_m
+ }
+ assert_equal [[:b_return, :m, :alias_m], [:b_return, :m, :alias_m]], events[0..1]
+ events.clear
+
+ o = Class.new{
+ alias alias_tap tap
+ define_method(:m){alias_tap{return}}
+ }.new
+ TracePoint.new(:c_return, &capture_events).enable{
+ o.m
+ }
+ assert_equal [[:c_return, :tap, :alias_tap]], events
+ events.clear
+
+ c = Class.new{
+ alias initialize itself
+ }
+ TracePoint.new(:c_call, &capture_events).enable{
+ c.new
+ }
+ assert_equal [:c_call, :itself, :initialize], events[1]
+ events.clear
+
+ o = Class.new{
+ alias alias_itself itself
+ }.new
+ TracePoint.new(:c_call, :c_return, &capture_events).enable{
+ o.alias_itself
+ }
+ assert_equal [[:c_call, :itself, :alias_itself], [:c_return, :itself, :alias_itself]], events
+ events.clear
+ end
end