summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/doctest.py35
-rw-r--r--Misc/NEWS22
2 files changed, 41 insertions, 16 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 5d371d2..3a8496f 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1531,6 +1531,20 @@ class DocTestRunner:
print "Test passed."
return totalf, totalt
+ #/////////////////////////////////////////////////////////////////
+ # Backward compatibility cruft to maintain doctest.master.
+ #/////////////////////////////////////////////////////////////////
+ def merge(self, other):
+ d = self._name2ft
+ for name, (f, t) in other._name2ft.items():
+ if name in d:
+ print "*** DocTestRunner.merge: '" + name + "' in both" \
+ " testers; summing outcomes."
+ f2, t2 = d[name]
+ f = f + f2
+ t = t + t2
+ d[name] = f, t
+
class OutputChecker:
"""
A class used to check the whether the actual output from a doctest
@@ -1810,6 +1824,10 @@ class DebugRunner(DocTestRunner):
######################################################################
# These should be backwards compatible.
+# For backward compatibility, a global instance of a DocTestRunner
+# class, updated by testmod.
+master = None
+
def testmod(m=None, name=None, globs=None, verbose=None, isprivate=None,
report=True, optionflags=0, extraglobs=None,
raise_on_error=False):
@@ -1883,6 +1901,8 @@ def testmod(m=None, name=None, globs=None, verbose=None, isprivate=None,
displaying a summary. Invoke doctest.master.summarize(verbose)
when you're done fiddling.
"""
+ global master
+
if isprivate is not None:
warnings.warn("the isprivate argument is deprecated; "
"examine DocTestFinder.find() lists instead",
@@ -1917,6 +1937,11 @@ def testmod(m=None, name=None, globs=None, verbose=None, isprivate=None,
if report:
runner.summarize()
+ if master is None:
+ master = runner
+ else:
+ master.merge(runner)
+
return runner.failures, runner.tries
def run_docstring_examples(f, globs, verbose=False, name="NoName",
@@ -2007,15 +2032,7 @@ class Tester:
return self.testrunner.summarize(verbose)
def merge(self, other):
- d = self.testrunner._name2ft
- for name, (f, t) in other.testrunner._name2ft.items():
- if name in d:
- print "*** Tester.merge: '" + name + "' in both" \
- " testers; summing outcomes."
- f2, t2 = d[name]
- f = f + f2
- t = t + t2
- d[name] = f, t
+ self.testrunner.merge(other.testrunner)
######################################################################
## 8. Unittest Support
diff --git a/Misc/NEWS b/Misc/NEWS
index af0d1f2..2a19853 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,9 +22,10 @@ Extension modules
Library
-------
-- bdist_rpm now supports command line options --force-arch,
- {pre,post}-install, {pre,post}-uninstall, and
+- bdist_rpm now supports command line options --force-arch,
+ {pre,post}-install, {pre,post}-uninstall, and
{prep,build,install,clean,verify}-script.
+
- SF patch #998993: The UTF-8 and the UTF-16 stateful decoders now support
decoding incomplete input (when the input stream is temporarily exhausted).
``codecs.StreamReader`` now implements buffering, which enables proper
@@ -34,6 +35,13 @@ Library
``codecs.StreamReader.readlines()`` have a new argument ``keepends``.
Trailing "\n"s will be stripped from the lines if ``keepends`` is false.
+- ``doctest.master was`` put back in, and ``doctest.testmod()`` once again
+ updates it. This isn't good, because every ``testmod()`` call
+ contributes to bloating the "hidden" state of ``doctest.master``, but
+ some old code apparently relies on it. For now, all we can do is
+ encourage people to stitch doctests together via doctest's unittest
+ integration features instead. It would help if those were documented.
+
Build
-----
@@ -85,7 +93,7 @@ What's New in Python 2.4 alpha 3?
Core and builtins
-----------------
-- SF patch #1007189: ``from ... import ...`` statements now allow the name
+- SF patch #1007189: ``from ... import ...`` statements now allow the name
list to be surrounded by parentheses.
- Some speedups for long arithmetic, thanks to Trevor Perrin. Gradeschool
@@ -152,14 +160,14 @@ Extension modules
- Added CurrentByteIndex, CurrentColumnNumber, CurrentLineNumber
members to xml.parsers.expat.XMLParser object.
-- The mpz, rotor, and xreadlines modules, all deprecated in earlier
+- The mpz, rotor, and xreadlines modules, all deprecated in earlier
versions of Python, have now been removed.
Library
-------
- Patch #934356: if a module defines __all__, believe that rather than using
- heuristics for filtering out imported names.
+ heuristics for filtering out imported names.
- Patch #941486: added os.path.lexists(), which returns True for broken
symlinks, unlike os.path.exists().
@@ -330,10 +338,10 @@ Core and builtins
- PEP-0318, Function Decorators have been added to the language. These are
implemented using the Java-style @decorator syntax, like so::
-
+
@staticmethod
def foo(bar):
-
+
(The PEP needs to be updated to reflect the current state)
- When importing a module M raises an exception, Python no longer leaves M