mirror of
https://github.com/python/cpython
synced 2024-10-14 09:31:57 +00:00
gh-117692: Fix AttributeError
in DocTestFinder
on wrapped builtin_or_method
(#117699)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
f90ff03672
commit
4bb7d121bc
|
@ -1140,7 +1140,14 @@ def _find_lineno(self, obj, source_lines):
|
|||
obj = obj.fget
|
||||
if inspect.isfunction(obj) and getattr(obj, '__doc__', None):
|
||||
# We don't use `docstring` var here, because `obj` can be changed.
|
||||
obj = inspect.unwrap(obj).__code__
|
||||
obj = inspect.unwrap(obj)
|
||||
try:
|
||||
obj = obj.__code__
|
||||
except AttributeError:
|
||||
# Functions implemented in C don't necessarily
|
||||
# have a __code__ attribute.
|
||||
# If there's no code, there's no lineno
|
||||
return None
|
||||
if inspect.istraceback(obj): obj = obj.tb_frame
|
||||
if inspect.isframe(obj): obj = obj.f_code
|
||||
if inspect.iscode(obj):
|
||||
|
|
|
@ -2553,6 +2553,20 @@ def test_look_in_unwrapped():
|
|||
'one other test'
|
||||
"""
|
||||
|
||||
@doctest_skip_if(support.check_impl_detail(cpython=False))
|
||||
def test_wrapped_c_func():
|
||||
"""
|
||||
# https://github.com/python/cpython/issues/117692
|
||||
>>> import binascii
|
||||
>>> from test.test_doctest.decorator_mod import decorator
|
||||
|
||||
>>> c_func_wrapped = decorator(binascii.b2a_hex)
|
||||
>>> tests = doctest.DocTestFinder(exclude_empty=False).find(c_func_wrapped)
|
||||
>>> for test in tests:
|
||||
... print(test.lineno, test.name)
|
||||
None b2a_hex
|
||||
"""
|
||||
|
||||
def test_unittest_reportflags():
|
||||
"""Default unittest reporting flags can be set to control reporting
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fixes a bug when :class:`doctest.DocTestFinder` was failing on wrapped
|
||||
``builtin_function_or_method``.
|
Loading…
Reference in a new issue