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:
parent
23a48d8fe6
commit
cbc7c1c061
Notes:
git
2021-03-11 02:40:20 +09:00
1 changed files with 55 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue