diff options
Diffstat (limited to 'tests/test_util_inspect.py')
-rw-r--r-- | tests/test_util_inspect.py | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/tests/test_util_inspect.py b/tests/test_util_inspect.py index 65070d6d1..4da61df47 100644 --- a/tests/test_util_inspect.py +++ b/tests/test_util_inspect.py @@ -18,7 +18,7 @@ from inspect import Parameter import pytest from sphinx.util import inspect -from sphinx.util.inspect import stringify_signature +from sphinx.util.inspect import stringify_signature, is_builtin_class_method def test_signature(): @@ -30,10 +30,10 @@ def test_signature(): inspect.signature('') # builitin classes - with pytest.raises(TypeError): + with pytest.raises(ValueError): inspect.signature(int) - with pytest.raises(TypeError): + with pytest.raises(ValueError): inspect.signature(str) # normal function @@ -97,7 +97,7 @@ def test_signature_methods(): # wrapped bound method sig = inspect.signature(wrapped_bound_method) - assert stringify_signature(sig) == '(arg1, **kwargs)' + assert stringify_signature(sig) == '(*args, **kwargs)' def test_signature_partialmethod(): @@ -127,7 +127,7 @@ def test_signature_partialmethod(): def test_signature_annotations(): from typing_test_data import (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, - f11, f12, f13, f14, f15, f16, f17, f18, f19, Node) + f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, Node) # Class annotations sig = inspect.signature(f0) @@ -184,6 +184,10 @@ def test_signature_annotations(): sig = inspect.signature(f13) assert stringify_signature(sig) == '() -> Optional[str]' + # optional union + sig = inspect.signature(f20) + assert stringify_signature(sig) == '() -> Optional[Union[int, str]]' + # Any sig = inspect.signature(f14) assert stringify_signature(sig) == '() -> Any' @@ -579,3 +583,21 @@ def test_getdoc_inherited_decorated_method(): assert inspect.getdoc(Bar.meth, getattr, False, Bar, "meth") is None assert inspect.getdoc(Bar.meth, getattr, True, Bar, "meth") == "docstring." + + +def test_is_builtin_class_method(): + class MyInt(int): + def my_method(self): + pass + + assert inspect.is_builtin_class_method(MyInt, 'to_bytes') + assert inspect.is_builtin_class_method(MyInt, '__init__') + assert not inspect.is_builtin_class_method(MyInt, 'my_method') + assert not inspect.is_builtin_class_method(MyInt, 'does_not_exist') + assert not inspect.is_builtin_class_method(4, 'still does not crash') + + class ObjectWithMroAttr: + def __init__(self, mro_attr): + self.__mro__ = mro_attr + + assert not inspect.is_builtin_class_method(ObjectWithMroAttr([1, 2, 3]), 'still does not crash') |