1 # -*- coding: us-ascii -*-
2 # frozen_string_literal: false
5 class TestConst < Test::Unit::TestCase
7 Constants_Setup = -> do
8 remove_const :TEST1 if defined? ::TestConst::TEST1
9 remove_const :TEST2 if defined? ::TestConst::TEST2
10 remove_const :Const if defined? ::TestConst::Const
11 remove_const :Const2 if defined? ::TestConst::Const2
30 assert defined?(TEST1)
32 assert defined?(TEST2)
35 self.class.class_eval {
38 assert defined?(TEST1)
40 assert defined?(TEST2)
42 assert defined?(TEST3)
44 assert defined?(TEST4)
47 self.class.class_eval {
50 # STDERR.print "intentionally redefines TEST3, TEST4\n" if $VERBOSE
51 assert defined?(TEST1)
53 assert defined?(TEST2)
55 assert defined?(TEST3)
57 assert defined?(TEST4)
61 def test_const_access_from_nil
62 assert_raise(TypeError) { eval("nil::Object") }
63 assert_nil eval("defined?(nil::Object)")
65 assert_raise(TypeError) { eval("c = nil; c::Object") }
66 assert_nil eval("c = nil; defined?(c::Object)")
68 assert_raise(TypeError) { eval("sc = Class.new; sc::C = nil; sc::C::Object") }
69 assert_nil eval("sc = Class.new; sc::C = nil; defined?(sc::C::Object)")
74 name = "X\u{5b9a 6570}"
76 prev_line = __LINE__ - 1
77 assert_warning(<<-WARNING) {c.const_set(name, 2)}
78 #{__FILE__}:#{__LINE__-1}: warning: already initialized constant #{c}::#{name}
79 #{__FILE__}:#{prev_line}: warning: previous definition of #{name} was here
83 def test_redefinition_memory_leak
85 350000.times { FOO = :BAR }
87 assert_no_memory_leak(%w[-W0 -], '', code, 'redefined constant', timeout: 30)
90 def test_toplevel_lookup
91 assert_raise(NameError, '[Feature #11547]') {TestConst::Object}