diff options
author | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-03-30 05:38:50 +0000 |
---|---|---|
committer | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-03-30 05:38:50 +0000 |
commit | 3b20c2188046d33a0d3b2c2f711193dd5e02a19c (patch) | |
tree | 53e2022077e5829f34a175e913025657f8dd3d62 /test | |
parent | 089462f592b630110827fea6624f1890411627e0 (diff) | |
download | ruby-3b20c2188046d33a0d3b2c2f711193dd5e02a19c.tar.gz |
* vm_insnhelper.h (COPY_CREF): should copy
the NODE_FL_CREF_PUSHED_BY_EVAL flag to hide constants from
methods defined by class_eval. [ruby-dev:43365]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31215 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_defined.rb | 33 | ||||
-rw-r--r-- | test/ruby/test_module.rb | 16 |
2 files changed, 35 insertions, 14 deletions
diff --git a/test/ruby/test_defined.rb b/test/ruby/test_defined.rb index de64ac46f8..bae85c9265 100644 --- a/test/ruby/test_defined.rb +++ b/test/ruby/test_defined.rb @@ -86,34 +86,39 @@ class TestDefined < Test::Unit::TestCase assert_equal nil, defined?($2) end + class TestAutoloadedSuperclass + autoload :A, "a" + end + + class TestAutoloadedSubclass < TestAutoloadedSuperclass + def a? + defined?(A) + end + end + def test_autoloaded_subclass bug = "[ruby-core:35509]" - klass = Class.new do - autoload(:A, "a") - end - x = klass.new + x = TestAutoloadedSuperclass.new class << x def a?; defined?(A); end end assert_equal("constant", x.a?, bug) - klass = Class.new(klass) do - def a?; defined?(A); end + assert_equal("constant", TestAutoloadedSubclass.new.a?, bug) + end + + class TestAutoloadedNoload + autoload :A, "a" + def a? + defined?(A) end - assert_equal("constant", klass.new.a?, bug) end def test_autoloaded_noload loaded = $".dup $".clear - klass = Class.new do - autoload(:A, "a") - def a? - defined?(A) - end - end - x = klass.new + x = TestAutoloadedNoload.new assert_equal("constant", x.a?) assert_equal([], $") ensure diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index ce6e8a66bb..3373594fe3 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -1000,4 +1000,20 @@ class TestModule < Test::Unit::TestCase INPUT assert_in_out_err([], src, %w(Object :ok), []) end + + module A + B = 42 + end + + def test_constant_lookup_in_method_defined_by_class_eval + A.class_eval do + def self.f + B + end + end + + assert_raise(NameError) do + A.f + end + end end |