@@ -30,11 +30,14 @@ def setup
30
30
test "overridable" do
31
31
@sub . setting = 1
32
32
assert_nil @klass . setting
33
+ assert_equal 1 , @sub . setting
33
34
34
35
@klass . setting = 2
36
+ assert_equal 2 , @klass . setting
35
37
assert_equal 1 , @sub . setting
36
38
37
39
assert_equal 1 , Class . new ( @sub ) . setting
40
+ assert_equal 2 , Class . new ( @klass ) . setting
38
41
end
39
42
40
43
test "predicate method" do
@@ -97,8 +100,34 @@ def setup
97
100
98
101
test "works well with singleton classes" do
99
102
object = @klass . new
103
+
100
104
object . singleton_class . setting = "foo"
101
105
assert_equal "foo" , object . setting
106
+ assert_nil @klass . setting
107
+
108
+ object . singleton_class . setting = "bar"
109
+ assert_equal "bar" , object . setting
110
+ assert_nil @klass . setting
111
+
112
+ @klass . setting = "plop"
113
+ assert_equal "bar" , object . setting
114
+ assert_equal "plop" , @klass . setting
115
+ end
116
+
117
+ test "when defined in a class's singleton" do
118
+ @klass = Class . new do
119
+ class << self
120
+ class_attribute :__callbacks , default : 1
121
+ end
122
+ end
123
+
124
+ assert_equal 1 , @klass . __callbacks
125
+ assert_equal 1 , @klass . singleton_class . __callbacks
126
+
127
+ # I honestly think this is a bug, but that's how it used to behave
128
+ @klass . __callbacks = 4
129
+ assert_equal 1 , @klass . __callbacks
130
+ assert_equal 1 , @klass . singleton_class . __callbacks
102
131
end
103
132
104
133
test "works well with module singleton classes" do
0 commit comments