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:
parent
23a48d8fe6
commit
cbc7c1c061
Notes:
git
2021-03-11 02:40:20 +09:00
@ -71,6 +71,61 @@ class TestVariable < Test::Unit::TestCase
|
|||||||
assert_equal(1, o.singleton_class.class_variable_get(:@@foo))
|
assert_equal(1, o.singleton_class.class_variable_get(:@@foo))
|
||||||
end
|
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
|
class IncludeRefinedModuleClassVariableNoWarning
|
||||||
module Mod
|
module Mod
|
||||||
@@_test_include_refined_module_class_variable = true
|
@@_test_include_refined_module_class_variable = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user