bpo-2604: Make doctest.DocTestCase reset globs in teardown (GH-31932)

Co-authored-by: Piet Delport
Co-authored-by: Hugo Lopes Tavares
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
Daniël van Noord 2022-03-22 22:01:15 +01:00 committed by GitHub
parent 4aea656d62
commit 7ba7eae508
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 0 deletions

View file

@ -2171,6 +2171,7 @@ def __init__(self, test, optionflags=0, setUp=None, tearDown=None,
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
@ -2187,7 +2188,9 @@ def tearDown(self):
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

View file

@ -3135,6 +3135,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())

View file

@ -0,0 +1 @@
Fix bug where doctests using globals would fail when run multiple times.