summaryrefslogtreecommitdiff
diff options
authoreileencodes <[email protected]>2021-02-25 12:42:10 -0500
committerAaron Patterson <[email protected]>2021-03-10 09:40:00 -0800
commitcbc7c1c06145b02b3d887a6fb2c3b6d9e4bb22dd (patch)
treefe52214dc1a94cb40ced2a00371e5eb0909b14b9
parent23a48d8fe683df289736e2d90c86006eb919b40d (diff)
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 <[email protected]>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4251
-rw-r--r--test/ruby/test_variable.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/ruby/test_variable.rb b/test/ruby/test_variable.rb
index 9795223fda..bedddf0af7 100644
--- a/test/ruby/test_variable.rb
+++ b/test/ruby/test_variable.rb
@@ -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