summaryrefslogtreecommitdiff
path: root/test/ruby/test_const.rb
diff options
context:
space:
mode:
authorDylan Thacker-Smith <Dylan.Smith@shopify.com>2019-11-06 01:47:32 -0500
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-11-13 15:36:58 +0900
commitac112f2b5dc7e16ccde8f048be80946187a033b0 (patch)
tree5ad84ea663becd04e7a77fd6f6cf5f4ea3678a86 /test/ruby/test_const.rb
parenta5b6d7bca84fce6e13c68e8753893c4697960e3a (diff)
Avoid top-level search for nested constant reference from nil in defined?
Fixes [Bug #16332] Constant access was changed to no longer allow top-level constant access through `nil`, but `defined?` wasn't changed at the same time to stay consistent. Use a separate defined type to distinguish between a constant referenced from the current lexical scope and one referenced from another namespace.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/2657
Diffstat (limited to 'test/ruby/test_const.rb')
-rw-r--r--test/ruby/test_const.rb5
1 files changed, 5 insertions, 0 deletions
diff --git a/test/ruby/test_const.rb b/test/ruby/test_const.rb
index 6284434db0..1c73b66648 100644
--- a/test/ruby/test_const.rb
+++ b/test/ruby/test_const.rb
@@ -50,8 +50,13 @@ class TestConst < Test::Unit::TestCase
def test_const_access_from_nil
assert_raise(TypeError) { eval("nil::Object") }
+ assert_nil eval("defined?(nil::Object)")
+
assert_raise(TypeError) { eval("c = nil; c::Object") }
+ assert_nil eval("c = nil; defined?(c::Object)")
+
assert_raise(TypeError) { eval("sc = Class.new; sc::C = nil; sc::C::Object") }
+ assert_nil eval("sc = Class.new; sc::C = nil; defined?(sc::C::Object)")
end
def test_redefinition