mirror of
https://github.com/pybind/pybind11.git
synced 2026-03-14 20:27:47 +00:00
Show kwargs in failed method invocation
With the previous commit, output can be very confusing because you only see positional arguments in the "invoked with" line, but you can have a failure from kwargs as well (in particular, when a value is invalidly specified via both via positional and kwargs). This commits adds kwargs to the output, and updates the associated tests to match.
This commit is contained in:
committed by
Wenzel Jakob
parent
caa1379e92
commit
231e167854
@@ -34,12 +34,8 @@ def test_named_arguments(msg):
|
||||
with pytest.raises(TypeError) as excinfo:
|
||||
# noinspection PyArgumentList
|
||||
kw_func2(x=5, y=10, z=12)
|
||||
assert msg(excinfo.value) == """
|
||||
kw_func2(): incompatible function arguments. The following argument types are supported:
|
||||
1. (x: int=100, y: int=200) -> str
|
||||
|
||||
Invoked with:
|
||||
"""
|
||||
assert excinfo.match(
|
||||
r'(?s)^kw_func2\(\): incompatible.*Invoked with: kwargs: ((x=5|y=10|z=12)(, |$)){3}$')
|
||||
|
||||
assert kw_func4() == "{13 17}"
|
||||
assert kw_func4(myList=[1, 2, 3]) == "{1 2 3}"
|
||||
@@ -74,7 +70,7 @@ def test_mixed_args_and_kwargs(msg):
|
||||
1. (arg0: int, arg1: float, *args) -> tuple
|
||||
|
||||
Invoked with: 1
|
||||
""" # noqa: E501
|
||||
""" # noqa: E501 line too long
|
||||
with pytest.raises(TypeError) as excinfo:
|
||||
assert mpa()
|
||||
assert msg(excinfo.value) == """
|
||||
@@ -82,7 +78,7 @@ def test_mixed_args_and_kwargs(msg):
|
||||
1. (arg0: int, arg1: float, *args) -> tuple
|
||||
|
||||
Invoked with:
|
||||
""" # noqa: E501
|
||||
""" # noqa: E501 line too long
|
||||
|
||||
assert mpk(-2, 3.5, pi=3.14159, e=2.71828) == (-2, 3.5, {'e': 2.71828, 'pi': 3.14159})
|
||||
assert mpak(7, 7.7, 7.77, 7.777, 7.7777, minusseven=-7) == (
|
||||
@@ -93,14 +89,20 @@ def test_mixed_args_and_kwargs(msg):
|
||||
assert mpakd(k=42) == (1, 3.14159, (), {'k': 42})
|
||||
assert mpakd(1, 1, 2, 3, 5, 8, then=13, followedby=21) == (
|
||||
1, 1, (2, 3, 5, 8), {'then': 13, 'followedby': 21})
|
||||
# Arguments specified both positionally and via kwargs is an error:
|
||||
# Arguments specified both positionally and via kwargs should fail:
|
||||
with pytest.raises(TypeError) as excinfo:
|
||||
assert mpakd(1, i=1)
|
||||
assert msg(excinfo.value) == """
|
||||
mixed_plus_args_kwargs_defaults(): got multiple values for argument 'i'
|
||||
"""
|
||||
mixed_plus_args_kwargs_defaults(): incompatible function arguments. The following argument types are supported:
|
||||
1. (i: int=1, j: float=3.14159, *args, **kwargs) -> tuple
|
||||
|
||||
Invoked with: 1; kwargs: i=1
|
||||
""" # noqa: E501 line too long
|
||||
with pytest.raises(TypeError) as excinfo:
|
||||
assert mpakd(1, 2, j=1)
|
||||
assert msg(excinfo.value) == """
|
||||
mixed_plus_args_kwargs_defaults(): got multiple values for argument 'j'
|
||||
"""
|
||||
mixed_plus_args_kwargs_defaults(): incompatible function arguments. The following argument types are supported:
|
||||
1. (i: int=1, j: float=3.14159, *args, **kwargs) -> tuple
|
||||
|
||||
Invoked with: 1, 2; kwargs: j=1
|
||||
""" # noqa: E501 line too long
|
||||
|
||||
Reference in New Issue
Block a user