summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-08-18 17:55:26 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-08-18 17:55:26 +0000
commit43d0c7263b70a0405f685dba330bae5f2c94f4ae (patch)
tree9e256f978b1024ee83fa8935617b97a5cd9212d5
parentdb09f6e84e10670866105888697bb1e8630d0030 (diff)
* 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
-rw-r--r--ChangeLog5
-rw-r--r--test/ruby/test_settracefunc.rb83
2 files changed, 88 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index bc8eda72cc..025b9d9a6d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb
index 9486163770..7fd7cc6534 100644
--- a/test/ruby/test_settracefunc.rb
+++ b/test/ruby/test_settracefunc.rb
@@ -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(/^.*?: /, "")