Adjust cdef_members_T517 tests to reflect visibility for struct attributes.
authorW. Trevor King <wking@drexel.edu>
Thu, 10 Mar 2011 23:29:39 +0000 (18:29 -0500)
committerW. Trevor King <wking@drexel.edu>
Thu, 10 Mar 2011 23:29:44 +0000 (18:29 -0500)
Struct attributes can have private or readonly, but not public, Python
visibility.

Readonly structs are currently converted to dicts on the fly for each
call getting the struct attribute value.  The dict-generation code is
currently broken for C++ (error: declaration does not declare
anything), so tests/run/cdef_members_T517.pyx currently fails a C++
test.  However, we hope to soon replace it with full blown Python
classes representing structs/unions/enums which will work for both C
and C++.

tests/errors/cdef_members_T517.pyx
tests/run/cdef_members_T517.pyx

index ee95a4081ef7a73f1cc1b7cb7b18e21d19536403..9867aca69d70eda22dc85b44a7324baf628eca09 100644 (file)
@@ -20,7 +20,6 @@ _ERRORS = u"""
 6:24: C attribute of type 'VoidP' cannot be accessed from Python
 6:24: Cannot convert 'VoidP' to Python object
 6:24: Cannot convert Python object to 'VoidP'
-14:22: C attribute of type 'Foo' cannot be accessed from Python
 14:22: Cannot convert Python object to 'Foo'
 """
 
index 82699de4965197993acad169ce715407eb7f446a..f3e2080a4e22e1a674f9e9ebecdab2ed7d001c77 100644 (file)
@@ -76,6 +76,20 @@ AttributeError: ...
 >>> b.c2 = A() #doctest: +ELLIPSIS
 Traceback (most recent call last):
 AttributeError: ...
+
+>>> bar = Bar()
+
+>>> bar.foo0 #doctest: +ELLIPSIS
+Traceback (most recent call last):
+AttributeError: ...
+
+>>> type(bar.foo1)
+<type 'dict'>
+>>> bar.foo1
+{'i': 0}
+>>> bar.foo1['i'] = 2
+>>> bar.foo1
+{'i': 0}
 """
 
 import sys
@@ -138,3 +152,13 @@ cdef class B:
     def __cinit__(self):
         self.b0 = self.b1 = self.b2 = []
         self.c0 = self.c1 = self.c2 = A()
+
+
+ctypedef struct Foo:
+    int i
+
+
+cdef class Bar:
+    cdef          Foo foo0
+    cdef readonly Foo foo1
+    pass