diff options
Diffstat (limited to 'tests/run/pep448_extended_unpacking.pyx')
-rw-r--r-- | tests/run/pep448_extended_unpacking.pyx | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/run/pep448_extended_unpacking.pyx b/tests/run/pep448_extended_unpacking.pyx index 85d22a86c..ac3e903a0 100644 --- a/tests/run/pep448_extended_unpacking.pyx +++ b/tests/run/pep448_extended_unpacking.pyx @@ -500,6 +500,10 @@ def unpack_dict_simple(it): return {**it} +@cython.test_assert_path_exists('//MergedDictNode') +@cython.test_fail_if_path_exists( + '//MergedDictNode//MergedDictNode', +) def unpack_dict_from_iterable(it): """ >>> d = unpack_dict_from_iterable(dict(a=1, b=2, c=3)) @@ -572,3 +576,28 @@ def unpack_dict_keep_originals(a, b, c): True """ return {**a, **b, 2: 4, **c} + + +@cython.test_assert_path_exists( + '//MergedDictNode', + '//MergedDictNode//MergedDictNode', + '//MergedDictNode//MergedDictNode//DictNode', +) +def unpack_in_call(f): + """ + >>> def f(a=1, test=2, **kwargs): + ... return a, test, sorted(kwargs.items()) + >>> wrapped = unpack_in_call(f) + >>> wrapped(1) + (1, 1, [('more', 2)]) + >>> wrapped(test='overwritten') + (1, 1, [('more', 2)]) + >>> wrapped(b=3) + (1, 1, [('b', 3), ('more', 2)]) + >>> wrapped(more=4) + Traceback (most recent call last): + TypeError: function() got multiple values for keyword argument 'more' + """ + def wrapper(*args, **kwargs): + return f(*args, more=2, **{**kwargs, 'test': 1}) + return wrapper |