diff options
author | Tanaka Akira <[email protected]> | 2019-07-15 14:17:27 +0900 |
---|---|---|
committer | Tanaka Akira <[email protected]> | 2019-07-15 14:17:27 +0900 |
commit | e4c1b199961cc5fa34c02b2225bbc14b75259fd2 (patch) | |
tree | c70ac073b78caeed867349dbb8751fa7c3b0a7f4 /test/ruby/test_proc.rb | |
parent | 711dfec3fa9623c5e8ef6f5ce3627f8f1a85f19d (diff) |
add tests for orphan/not-orphan proc/lambda.
Diffstat (limited to 'test/ruby/test_proc.rb')
-rw-r--r-- | test/ruby/test_proc.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/ruby/test_proc.rb b/test/ruby/test_proc.rb index bc270115df..0e9c6e0b17 100644 --- a/test/ruby/test_proc.rb +++ b/test/ruby/test_proc.rb @@ -1484,4 +1484,31 @@ class TestProc < Test::Unit::TestCase (f >> 5).call(2) } end + + def test_orphan_return + assert_equal(42, Module.new { extend self + def m1(&b) b.call end; def m2(); m1 { return 42 } end }.m2) + assert_equal(42, Module.new { extend self + def m1(&b) b end; def m2(); m1 { return 42 }.call end }.m2) + assert_raise(LocalJumpError) { Module.new { extend self + def m1(&b) b end; def m2(); m1 { return 42 } end }.m2.call } + end + + def test_orphan_break + assert_equal(42, Module.new { extend self + def m1(&b) b.call end; def m2(); m1 { break 42 } end }.m2 ) + assert_raise(LocalJumpError) { Module.new { extend self + def m1(&b) b end; def m2(); m1 { break 42 }.call end }.m2 } + assert_raise(LocalJumpError) { Module.new { extend self + def m1(&b) b end; def m2(); m1 { break 42 } end }.m2.call } + end + + def test_not_orphan_next + assert_equal(42, Module.new { extend self + def m1(&b) b.call end; def m2(); m1 { next 42 } end }.m2) + assert_equal(42, Module.new { extend self + def m1(&b) b end; def m2(); m1 { next 42 }.call end }.m2) + assert_equal(42, Module.new { extend self + def m1(&b) b end; def m2(); m1 { next 42 } end }.m2.call) + end end |