]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-2604: Make doctest.DocTestCase reset globs in teardown (GH-31932)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 22 Mar 2022 21:27:26 +0000 (14:27 -0700)
committerGitHub <noreply@github.com>
Tue, 22 Mar 2022 21:27:26 +0000 (14:27 -0700)
Co-authored-by: Piet Delport
Co-authored-by: Hugo Lopes Tavares
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
(cherry picked from commit 7ba7eae50803b11766421cb8aae1780058a57e2b)

Co-authored-by: Daniƫl van Noord <13665637+DanielNoord@users.noreply.github.com>
Lib/doctest.py
Lib/test/test_doctest.py
Misc/NEWS.d/next/Library/2022-03-16-18-25-19.bpo-2604.jeopdL.rst [new file with mode: 0644]

index d2c8828e5ed978b52a0a43f4724e503e4850fea1..3caf4d9949e7b9c057e716135407a0334d268e58 100644 (file)
@@ -2159,6 +2159,7 @@ class DocTestCase(unittest.TestCase):
         unittest.TestCase.__init__(self)
         self._dt_optionflags = optionflags
         self._dt_checker = checker
+        self._dt_globs = test.globs.copy()
         self._dt_test = test
         self._dt_setUp = setUp
         self._dt_tearDown = tearDown
@@ -2175,7 +2176,9 @@ class DocTestCase(unittest.TestCase):
         if self._dt_tearDown is not None:
             self._dt_tearDown(test)
 
+        # restore the original globs
         test.globs.clear()
+        test.globs.update(self._dt_globs)
 
     def runTest(self):
         test = self._dt_test
index 47b8575cec563378c6b5971bebaceec69984bf84..dba19103e80d138e3f1c03944942842ab837a970 100644 (file)
@@ -3107,6 +3107,22 @@ def test_no_trailing_whitespace_stripping():
     """
 
 
+def test_run_doctestsuite_multiple_times():
+    """
+    It was not possible to run the same DocTestSuite multiple times
+    http://bugs.python.org/issue2604
+    http://bugs.python.org/issue9736
+
+    >>> import unittest
+    >>> import test.sample_doctest
+    >>> suite = doctest.DocTestSuite(test.sample_doctest)
+    >>> suite.run(unittest.TestResult())
+    <unittest.result.TestResult run=9 errors=0 failures=4>
+    >>> suite.run(unittest.TestResult())
+    <unittest.result.TestResult run=9 errors=0 failures=4>
+    """
+
+
 def load_tests(loader, tests, pattern):
     tests.addTest(doctest.DocTestSuite(doctest))
     tests.addTest(doctest.DocTestSuite())
diff --git a/Misc/NEWS.d/next/Library/2022-03-16-18-25-19.bpo-2604.jeopdL.rst b/Misc/NEWS.d/next/Library/2022-03-16-18-25-19.bpo-2604.jeopdL.rst
new file mode 100644 (file)
index 0000000..c0fd000
--- /dev/null
@@ -0,0 +1 @@
+Fix bug where doctests using globals would fail when run multiple times.