summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-10-03 04:08:26 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-10-03 04:08:26 (GMT)
commit17111f3b242be06c7ae913f106093891b82d7fee (patch)
treebdfdd1b714cc7f53935c5e2337d1e94615db882a /Lib/test
parentf49a91340a22d89bea4f0566500d5f954f35c744 (diff)
downloadcpython-17111f3b242be06c7ae913f106093891b82d7fee.zip
cpython-17111f3b242be06c7ae913f106093891b82d7fee.tar.gz
cpython-17111f3b242be06c7ae913f106093891b82d7fee.tar.bz2
SF bug [#467336] doctest failures w/ new-style classes.
Taught doctest about static methods, class methods, and property docstrings in new-style classes. As for inspect.py/pydoc.py before it, the new stuff needed didn't really fit into the old architecture (but was less of a strain to force-fit here). New-style class docstrings still aren't found, but that's the subject of a different bug and I want to fix that right instead of hacking around it in doctest.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_doctest2.py112
-rw-r--r--Lib/test/test_pyclbr.py5
-rw-r--r--Lib/test/test_support.py3
3 files changed, 118 insertions, 2 deletions
diff --git a/Lib/test/test_doctest2.py b/Lib/test/test_doctest2.py
new file mode 100644
index 0000000..0cbe3d4
--- /dev/null
+++ b/Lib/test/test_doctest2.py
@@ -0,0 +1,112 @@
+"""A module to test whether doctest recognizes some 2.2 features,
+like static and class methods.
+
+>>> print 'yup' # 1
+yup
+"""
+
+import test_support
+
+# XXX The class docstring is skipped.
+class C(object):
+ """Class C.
+
+ >>> print C() # 2
+ 42
+ """
+
+ def __init__(self):
+ """C.__init__.
+
+ >>> print C() # 3
+ 42
+ """
+
+ def __str__(self):
+ """
+ >>> print C() # 4
+ 42
+ """
+ return "42"
+
+ # XXX The class docstring is skipped.
+ class D(object):
+ """A nested D class.
+
+ >>> print "In D!" # 5
+ In D!
+ """
+
+ def nested(self):
+ """
+ >>> print 3 # 6
+ 3
+ """
+
+ def getx(self):
+ """
+ >>> c = C() # 7
+ >>> c.x = 12 # 8
+ >>> print c.x # 9
+ -12
+ """
+ return -self._x
+
+ def setx(self, value):
+ """
+ >>> c = C() # 10
+ >>> c.x = 12 # 11
+ >>> print c.x # 12
+ -12
+ """
+ self._x = value
+
+ x = property(getx, setx, doc="""\
+ >>> c = C() # 13
+ >>> c.x = 12 # 14
+ >>> print c.x # 15
+ -12
+ """)
+
+ def statm():
+ """
+ A static method.
+
+ >>> print C.statm() # 16
+ 666
+ >>> print C().statm() # 17
+ 666
+ """
+ return 666
+
+ statm = staticmethod(statm)
+
+ def clsm(cls, val):
+ """
+ A class method.
+
+ >>> print C.clsm(22) # 18
+ 22
+ >>> print C().clsm(22) # 19
+ 22
+ """
+ return 22
+
+ clsm = classmethod(clsm)
+
+def test_main():
+ import test_doctest2
+ # XXX 2 class docstrings are skipped.
+ # EXPECTED = 19
+ EXPECTED = 17
+ f, t = test_support.run_doctest(test_doctest2)
+ if t != EXPECTED:
+ raise test_support.TestFailed("expected %d tests to run, not %d" %
+ (EXPECTED, t))
+
+# Pollute the namespace with a bunch of imported functions and classes,
+# to make sure they don't get tested.
+from doctest import *
+
+if __name__ == '__main__':
+ test_main()
diff --git a/Lib/test/test_pyclbr.py b/Lib/test/test_pyclbr.py
index fdb3ddf..1a241cf 100644
--- a/Lib/test/test_pyclbr.py
+++ b/Lib/test/test_pyclbr.py
@@ -101,7 +101,10 @@ class PyclbrTest(unittest.TestCase):
def test_easy(self):
self.checkModule('pyclbr')
self.checkModule('doctest',
- ignore=['_isclass', '_isfunction', '_ismodule'])
+ ignore=['_isclass',
+ '_isfunction',
+ '_ismodule',
+ '_classify_class_attrs'])
self.checkModule('rfc822')
self.checkModule('xmllib')
self.checkModule('difflib')
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 04a778b..e1923a6 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -176,7 +176,7 @@ def run_unittest(testclass):
# doctest driver.
def run_doctest(module, verbosity=None):
- """Run doctest on the given module.
+ """Run doctest on the given module. Return (#failures, #tests).
If optional argument verbosity is not specified (or is None), pass
test_support's belief about verbosity on to doctest. Else doctest's
@@ -198,5 +198,6 @@ def run_doctest(module, verbosity=None):
f, t = doctest.testmod(module, verbose=verbosity)
if f:
raise TestFailed("%d of %d doctests failed" % (f, t))
+ return f, t
finally:
sys.stdout = save_stdout