summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authoreileencodes <eileencodes@gmail.com>2021-02-25 12:42:10 -0500
committerAaron Patterson <aaron.patterson@gmail.com>2021-03-10 09:40:00 -0800
commitcbc7c1c06145b02b3d887a6fb2c3b6d9e4bb22dd (patch)
treefe52214dc1a94cb40ced2a00371e5eb0909b14b9 /test
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 <tenderlove@ruby-lang.org>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4251
Diffstat (limited to 'test')
-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