1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* test/ruby/test_settracefunc.rb (test_return, test_return2): add two

tests for [ruby-dev:38701] and [ruby-core:24463].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24581 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2009-08-18 17:55:26 +00:00
parent db09f6e84e
commit 43d0c7263b
2 changed files with 88 additions and 0 deletions

View file

@ -1,3 +1,8 @@
Wed Aug 19 02:54:01 2009 Yusuke Endoh <mame@tsg.ne.jp>
* test/ruby/test_settracefunc.rb (test_return, test_return2): add two
tests for [ruby-dev:38701] and [ruby-core:24463].
Wed Aug 19 01:08:34 2009 Yusuke Endoh <mame@tsg.ne.jp>
* compile.c (NODE_RETURN): fire return event at explicit return.

View file

@ -129,6 +129,89 @@ class TestSetTraceFunc < Test::Unit::TestCase
assert_equal([], events)
end
def test_return # [ruby-dev:38701]
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 foo(a)
5: return if a
6: return
7: end
8: foo(true)
9: foo(false)
10: 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", 8, __method__, self.class],
events.shift)
assert_equal(["call", 4, :foo, self.class],
events.shift)
assert_equal(["line", 5, :foo, self.class],
events.shift)
assert_equal(["return", 5, :foo, self.class],
events.shift)
assert_equal(["line", 9, :test_return, self.class],
events.shift)
assert_equal(["call", 4, :foo, self.class],
events.shift)
assert_equal(["line", 5, :foo, self.class],
events.shift)
assert_equal(["return", 7, :foo, self.class],
events.shift)
assert_equal(["line", 10, :test_return, self.class],
events.shift)
assert_equal(["c-call", 10, :set_trace_func, Kernel],
events.shift)
assert_equal([], events)
end
def test_return2 # [ruby-core:24463]
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 foo
5: a = 5
6: return a
7: end
8: foo
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, :method_added, Module],
events.shift)
assert_equal(["c-return", 4, :method_added, Module],
events.shift)
assert_equal(["line", 8, __method__, self.class],
events.shift)
assert_equal(["call", 4, :foo, self.class],
events.shift)
assert_equal(["line", 5, :foo, self.class],
events.shift)
assert_equal(["line", 6, :foo, self.class],
events.shift)
assert_equal(["return", 7, :foo, self.class],
events.shift)
assert_equal(["line", 9, :test_return2, 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(/^.*?: /, "")