diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-06-19 04:27:08 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-06-19 04:27:08 +0000 |
commit | 33b85912480abe4dbf28bdbd596d84f5efc3245d (patch) | |
tree | 4cf1e7be89f670cb30023a2aab14f6f129d32a40 /test/ruby/test_proc.rb | |
parent | 934064ba5ac136bcfeb1b32c76bd064044156dfc (diff) | |
download | ruby-33b85912480abe4dbf28bdbd596d84f5efc3245d.tar.gz |
* eval.c (proc_set_safe_level, proc_invoke, rb_mod_define_method): not
set $SAFE for methods defined from Proc. [ruby-dev:23697]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_proc.rb')
-rw-r--r-- | test/ruby/test_proc.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/ruby/test_proc.rb b/test/ruby/test_proc.rb index 7a5f6a155b..aaeb189e27 100644 --- a/test/ruby/test_proc.rb +++ b/test/ruby/test_proc.rb @@ -91,4 +91,35 @@ class TestProc < Test::Unit::TestCase assert_equal(10, Proc.new{|&b| b.call(10)}.call {|x| x}) assert_equal(12, Proc.new{|a,&b| b.call(a)}.call(12) {|x| x}) end + + def test_safe + safe = $SAFE + c = Class.new + x = c.new + + p = proc { + $SAFE += 1 + proc {$SAFE} + }.call + assert_equal(safe, $SAFE) + assert_equal(safe + 1, p.call) + assert_equal(safe, $SAFE) + + c.class_eval {define_method(:safe, p)} + assert_equal(safe, x.safe) + assert_equal(safe, x.method(:safe).call) + assert_equal(safe, x.method(:safe).to_proc.call) + + p = proc {$SAFE += 1} + assert_equal(safe + 1, p.call) + assert_equal(safe, $SAFE) + + c.class_eval {define_method(:inc, p)} + assert_equal(safe + 1, proc {x.inc; $SAFE}.call) + assert_equal(safe, $SAFE) + assert_equal(safe + 1, proc {x.method(:inc).call; $SAFE}.call) + assert_equal(safe, $SAFE) + assert_equal(safe + 1, proc {x.method(:inc).to_proc.call; $SAFE}.call) + assert_equal(safe, $SAFE) + end end |