mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
bpo-35753: Fix crash in doctest with unwrap-able functions (GH-22981) (#25926)
Ignore objects that inspect.unwrap throws due to
too many wrappers. This is a very rare case, however
it can easily be surfaced when a module under doctest
imports unitest.mock.call into its namespace.
We simply skip any object that throws this exception.
This should handle the majority of cases.
(cherry picked from commit 565a31804c)
Co-authored-by: Alfred Perlstein <alfred@fb.com>
This commit is contained in:
parent
ce4fee210b
commit
10d6f6bfd7
3 changed files with 29 additions and 3 deletions
|
|
@ -15,6 +15,7 @@
|
|||
import unittest
|
||||
import tempfile
|
||||
import shutil
|
||||
import types
|
||||
import contextlib
|
||||
|
||||
# NOTE: There are some additional tests relating to interaction with
|
||||
|
|
@ -443,7 +444,7 @@ def basics(): r"""
|
|||
>>> tests = finder.find(sample_func)
|
||||
|
||||
>>> print(tests) # doctest: +ELLIPSIS
|
||||
[<DocTest sample_func from ...:27 (1 example)>]
|
||||
[<DocTest sample_func from test_doctest.py:28 (1 example)>]
|
||||
|
||||
The exact name depends on how test_doctest was invoked, so allow for
|
||||
leading path components.
|
||||
|
|
@ -698,6 +699,18 @@ def non_Python_modules(): r"""
|
|||
|
||||
class TestDocTestFinder(unittest.TestCase):
|
||||
|
||||
def test_issue35753(self):
|
||||
# This import of `call` should trigger issue35753 when
|
||||
# `support.run_doctest` is called due to unwrap failing,
|
||||
# however with a patched doctest this should succeed.
|
||||
from unittest.mock import call
|
||||
dummy_module = types.ModuleType("dummy")
|
||||
dummy_module.__dict__['inject_call'] = call
|
||||
try:
|
||||
support.run_doctest(dummy_module, verbosity=True)
|
||||
except ValueError as e:
|
||||
raise support.TestFailed("Doctest unwrap failed") from e
|
||||
|
||||
def test_empty_namespace_package(self):
|
||||
pkg_name = 'doctest_empty_pkg'
|
||||
with tempfile.TemporaryDirectory() as parent_dir:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue