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

add tests for orphan/not-orphan proc/lambda.

This commit is contained in:
Tanaka Akira 2019-07-15 14:17:27 +09:00
parent 711dfec3fa
commit e4c1b19996
2 changed files with 54 additions and 0 deletions

View file

@ -195,4 +195,31 @@ class TestLambdaParameters < Test::Unit::TestCase
assert_match(/^#{ Regexp.quote(__FILE__) }$/, file)
assert_equal(exp_lineno, lineno, "must be at the beginning of the block")
end
def test_not_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_equal(42, Module.new { extend self
def m1(&b) b end; def m2(); m1(&-> { return 42 }) end }.m2.call)
end
def test_not_orphan_break
assert_equal(42, Module.new { extend self
def m1(&b) b.call end; def m2(); m1(&-> { break 42 }) end }.m2)
assert_equal(42, Module.new { extend self
def m1(&b) b end; def m2(); m1(&-> { break 42 }).call end }.m2)
assert_equal(42, 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

View file

@ -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