From 4cefc93853f275a360a3f7d4c8370dd809a2967d Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Tue, 2 Nov 2010 09:44:27 +0100 Subject: [PATCH] enable doctests in cdef functions/methods, do not rewrap docstrings in __test__ dict as EncodedString() but keep them as they are --- Cython/Compiler/AnalysedTreeTransforms.py | 11 +++++----- tests/run/autotestdict.pyx | 26 +++++++++++------------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Cython/Compiler/AnalysedTreeTransforms.py b/Cython/Compiler/AnalysedTreeTransforms.py index deaf2dfe..bb2996fd 100644 --- a/Cython/Compiler/AnalysedTreeTransforms.py +++ b/Cython/Compiler/AnalysedTreeTransforms.py @@ -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: diff --git a/tests/run/autotestdict.pyx b/tests/run/autotestdict.pyx index 0e3bc09e..eb3744ed 100644 --- a/tests/run/autotestdict.pyx +++ b/tests/run/autotestdict.pyx @@ -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 -- 2.26.2