enable doctests in cdef functions/methods, do not rewrap docstrings in __test__ dict...
authorStefan Behnel <scoder@users.berlios.de>
Tue, 2 Nov 2010 08:44:27 +0000 (09:44 +0100)
committerStefan Behnel <scoder@users.berlios.de>
Tue, 2 Nov 2010 08:44:27 +0000 (09:44 +0100)
Cython/Compiler/AnalysedTreeTransforms.py
tests/run/autotestdict.pyx

index deaf2dfe6ef253b807e950307c0185b1114ea66e..bb2996fd2e04c9d3d0dbc26acab2f16eca36c1ea 100644 (file)
@@ -53,22 +53,21 @@ class AutoTestDictTransform(ScopeTrackingTransform):
         pos = self.testspos
         keystr = u'%s (line %d)' % (path, testpos[1])
         key = UnicodeNode(pos, value=EncodedString(keystr))
-        value = UnicodeNode(pos, value=EncodedString(doctest))
+        value = UnicodeNode(pos, value=doctest)
         self.tests.append(DictItemNode(pos, key=key, value=value))
 
     def visit_FuncDefNode(self, node):
         if not node.doc:
             return node
-        if isinstance(node, CFuncDefNode) and not node.py_func:
-            # skip non-cpdef cdef functions
-            return node
-
         pos = self.testspos
         if self.scope_type == 'module':
             path = node.entry.name
         elif self.scope_type in ('pyclass', 'cclass'):
             if isinstance(node, CFuncDefNode):
-                name = node.py_func.name
+                if node.py_func is not None:
+                    name = node.py_func.name
+                else:
+                    name = node.entry.name
             else:
                 name = node.name
             if self.scope_type == 'cclass' and name in self.blacklist:
index 0e3bc09ee285a703ec3560218c35efec97d4ae89..eb3744eddff73090513a70bd986315f2f787f242 100644 (file)
@@ -12,28 +12,25 @@ all_tests_run() is executed which does final validation.
 >>> items.sort()
 >>> for key, value in items:
 ...     print('%s ; %s' % (key, value))
-MyCdefClass.cpdef_method (line 79) ; >>> add_log("cpdef class method")
-MyCdefClass.method (line 76) ; >>> add_log("cdef class method")
-MyClass.method (line 65) ; >>> add_log("class method")
-doc_without_test (line 47) ; Some docs
-mycpdeffunc (line 53) ; >>> add_log("cpdef")
-myfunc (line 44) ; >>> add_log("def")
+MyCdefClass.cdef_method (line 79) ; >>> add_log("cdef class method")
+MyCdefClass.cpdef_method (line 76) ; >>> add_log("cpdef class method")
+MyCdefClass.method (line 73) ; >>> add_log("cdef class method")
+MyClass.method (line 62) ; >>> add_log("class method")
+cdeffunc (line 28) ; >>> add_log("cdef")
+doc_without_test (line 44) ; Some docs
+mycpdeffunc (line 50) ; >>> add_log("cpdef")
+myfunc (line 41) ; >>> add_log("def")
 
 """
 
 log = []
 
 cdef cdeffunc():
-    """
-    Please don't include me!
-
-    >>> True
-    False
-    """
+    """>>> add_log("cdef")"""
 
 def all_tests_run():
     log.sort()
-    assert log == [u'cdef class', u'cdef class method', u'class method', u'cpdef', u'cpdef class method', u'def'], log
+    assert log == [u'cdef', u'cdef class', u'cdef class method', u'class method', u'cpdef', u'cpdef class method', u'def'], log
 
 def add_log(s):
     log.append(unicode(s))
@@ -79,6 +76,9 @@ cdef class MyCdefClass:
     cpdef cpdef_method(self):
         """>>> add_log("cpdef class method")"""
 
+    cdef cdef_method(self):
+        """>>> add_log("cdef class method")"""
+
     def __cinit__(self):
         """
         Should not be included, as it can't be looked up with getattr