diff options
Diffstat (limited to 'test/-ext-/symbol')
-rw-r--r-- | test/-ext-/symbol/test_inadvertent_creation.rb | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/test/-ext-/symbol/test_inadvertent_creation.rb b/test/-ext-/symbol/test_inadvertent_creation.rb index 238d3625e6..465f032bbb 100644 --- a/test/-ext-/symbol/test_inadvertent_creation.rb +++ b/test/-ext-/symbol/test_inadvertent_creation.rb @@ -7,7 +7,7 @@ module Test_Symbol prefix += "_#{Thread.current.object_id.to_s(36).tr('-', '_')}" begin name = "#{prefix}_#{rand(0x1000).to_s(16)}_#{Time.now.usec}" - end while ::Symbol.find(name) + end while Bug::Symbol.find(name) name end @@ -16,7 +16,7 @@ module Test_Symbol end def assert_not_interned(name, msg = nil) - assert_not_send([::Symbol, :find, name], msg) + assert_not_send([Bug::Symbol, :find, name], msg) end def assert_not_interned_error(obj, meth, name, msg = nil) @@ -262,5 +262,25 @@ module Test_Symbol assert_raise(NameError) {mod.module_eval {attr_accessor(name)}} assert_not_interned(name) end + + def test_gc_attrset + assert_separately(['-r-test-/symbol', '-', '[ruby-core:62226] [Bug #9787]'], <<-'end;') # begin + bug = ARGV.shift + def noninterned_name(prefix = "") + prefix += "_#{Thread.current.object_id.to_s(36).tr('-', '_')}" + begin + name = "#{prefix}_#{rand(0x1000).to_s(16)}_#{Time.now.usec}" + end while Bug::Symbol.find(name) or Bug::Symbol.find(name + "=") + name + end + names = Array.new(1000) {noninterned_name("gc")} + names.each {|n| n.to_sym} + GC.start(immediate_sweep: false) + names.each do |n| + eval(":#{n}=") + assert_nothing_raised(TypeError, bug) {eval("proc{self.#{n} = nil}")} + end + end; + end end end |