Fix failing staticmethod tests if they are inherited (#8205)

* Fix failing staticmethod tests if they are inherited

* add comments, set default=None
This commit is contained in:
Anton 2020-12-30 19:00:37 -08:00 committed by GitHub
parent 7585221d55
commit 48c9a96a03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 1 deletions

View File

@ -29,6 +29,7 @@ Andy Freeland
Anthon van der Neut Anthon van der Neut
Anthony Shaw Anthony Shaw
Anthony Sottile Anthony Sottile
Anton Grinevich
Anton Lodder Anton Lodder
Antony Lee Antony Lee
Arel Cordero Arel Cordero

View File

@ -0,0 +1 @@
Fixed failing staticmethod test cases if they are inherited from a parent test class.

View File

@ -163,7 +163,12 @@ def getfuncargnames(
# it's passed as an unbound method or function, remove the first # it's passed as an unbound method or function, remove the first
# parameter name. # parameter name.
if is_method or ( if is_method or (
cls and not isinstance(cls.__dict__.get(name, None), staticmethod) # Not using `getattr` because we don't want to resolve the staticmethod.
# Not using `cls.__dict__` because we want to check the entire MRO.
cls
and not isinstance(
inspect.getattr_static(cls, name, default=None), staticmethod
)
): ):
arg_names = arg_names[1:] arg_names = arg_names[1:]
# Remove any names that will be replaced with mocks. # Remove any names that will be replaced with mocks.

View File

@ -59,6 +59,20 @@ def test_getfuncargnames_staticmethod():
assert getfuncargnames(A.static, cls=A) == ("arg1", "arg2") assert getfuncargnames(A.static, cls=A) == ("arg1", "arg2")
def test_getfuncargnames_staticmethod_inherited() -> None:
"""Test getfuncargnames for inherited staticmethods (#8061)"""
class A:
@staticmethod
def static(arg1, arg2, x=1):
raise NotImplementedError()
class B(A):
pass
assert getfuncargnames(B.static, cls=B) == ("arg1", "arg2")
def test_getfuncargnames_partial(): def test_getfuncargnames_partial():
"""Check getfuncargnames for methods defined with functools.partial (#5701)""" """Check getfuncargnames for methods defined with functools.partial (#5701)"""
import functools import functools