@@ -160,6 +160,35 @@ class StructWithPointers(Structure):
160
160
self .assertEqual (obj [0 ].contents .a , 10 )
161
161
self .assertEqual (obj [1 ].contents .a , 20 )
162
162
163
+ def test_pointer_set_contents (self ):
164
+ class Struct (Structure ):
165
+ _fields_ = [('a' , c_int16 )]
166
+ p = pointer (Struct (a = 23 ))
167
+ self .assertEqual (p .contents .a , 23 )
168
+ self .assertIs (p ._type_ , Struct )
169
+ cp = cast (p , POINTER (c_int16 ))
170
+ self .assertEqual (cp .contents ._type_ , 'h' )
171
+ cp .contents = c_int16 (24 )
172
+ self .assertEqual (cp .contents .value , 24 )
173
+ self .assertEqual (p .contents .a , 24 )
174
+
175
+ pp = pointer (p )
176
+ self .assertIs (pp ._type_ , POINTER (Struct ))
177
+
178
+ from code import interact ; interact (local = locals ())
179
+
180
+ cast (pp , POINTER (POINTER (c_int16 ))).contents .contents = c_int16 (32 )
181
+
182
+ # self.assertIs(p.contents, pp.contents.contents)
183
+
184
+ self .assertEqual (cast (p , POINTER (c_int16 )).contents .value , 32 )
185
+ self .assertEqual (p [0 ].a , 32 ) # works
186
+ self .assertEqual (pp [0 ].contents .a , 32 ) # works
187
+ self .assertEqual (pp .contents [0 ].a , 32 ) # works
188
+
189
+ self .assertEqual (p .contents .a , 32 ) # fails, wat, holds 23
190
+ self .assertEqual (pp .contents .contents .a , 32 ) # fails, wat, holds 23
191
+
163
192
164
193
if __name__ == "__main__" :
165
194
unittest .main ()
0 commit comments