1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Add cvar overtaken tests

While working on another project we noticed that there were no tests for
the cvar overtaken exception when using classes. This change adds a test
for cvar overtaken with classes and moves the cvar overtaken test for
modules into the new file.

Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
This commit is contained in:
eileencodes 2021-02-25 12:42:10 -05:00 committed by Aaron Patterson
parent 23a48d8fe6
commit cbc7c1c061
Notes: git 2021-03-11 02:40:20 +09:00

View file

@ -71,6 +71,61 @@ class TestVariable < Test::Unit::TestCase
assert_equal(1, o.singleton_class.class_variable_get(:@@foo))
end
def test_cvar_overtaken_by_parent_class
error = eval <<~EORB
class Parent
end
class Child < Parent
@@cvar = 1
def self.cvar
@@cvar
end
end
assert_equal 1, Child.cvar
class Parent
@@cvar = 2
end
assert_raise RuntimeError do
Child.cvar
end
EORB
assert_equal "class variable @@cvar of TestVariable::Child is overtaken by TestVariable::Parent", error.message
end
def test_cvar_overtaken_by_module
error = eval <<~EORB
class ParentForModule
@@cvar = 1
def self.cvar
@@cvar
end
end
assert_equal 1, ParentForModule.cvar
module Mixin
@@cvar = 2
end
class ParentForModule
include Mixin
end
assert_raise RuntimeError do
ParentForModule.cvar
end
EORB
assert_equal "class variable @@cvar of TestVariable::ParentForModule is overtaken by TestVariable::Mixin", error.message
end
class IncludeRefinedModuleClassVariableNoWarning
module Mod
@@_test_include_refined_module_class_variable = true