зеркало из https://github.com/github/ruby.git
Fix `Module#const_defined?` on inherited constants
[Fix GH-2061] From: manga_osyo <manga.osyo@gmail.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
dd4fdb32bd
Коммит
7fa16fd962
1
object.c
1
object.c
|
@ -2688,7 +2688,6 @@ rb_mod_const_defined(int argc, VALUE *argv, VALUE mod)
|
|||
return Qfalse;
|
||||
mod = rb_const_get_at(mod, id);
|
||||
}
|
||||
recur = Qfalse;
|
||||
|
||||
if (p < pend && !RB_TYPE_P(mod, T_MODULE) && !RB_TYPE_P(mod, T_CLASS)) {
|
||||
rb_raise(rb_eTypeError, "%"PRIsVALUE" does not refer to class/module",
|
||||
|
|
|
@ -338,6 +338,17 @@ class TestModule < Test::Unit::TestCase
|
|||
assert_raise(NameError) {self.class.const_defined?(const)}
|
||||
end
|
||||
|
||||
def test_nested_defined_inheritance
|
||||
assert_send([Object, :const_defined?, [self.class.name, 'User', 'MIXIN'].join('::')])
|
||||
assert_send([self.class, :const_defined?, 'User::MIXIN'])
|
||||
assert_send([Object, :const_defined?, 'File::SEEK_SET'])
|
||||
|
||||
# const_defined? with `false`
|
||||
assert_not_send([Object, :const_defined?, [self.class.name, 'User', 'MIXIN'].join('::'), false])
|
||||
assert_not_send([self.class, :const_defined?, 'User::MIXIN', false])
|
||||
assert_not_send([Object, :const_defined?, 'File::SEEK_SET', false])
|
||||
end
|
||||
|
||||
def test_nested_defined_bad_class
|
||||
assert_raise(TypeError) do
|
||||
self.class.const_defined?('User::USER::Foo')
|
||||
|
|
Загрузка…
Ссылка в новой задаче