Coverage for tests/unit/validate_type/test_get_kwargs.py: 75%
53 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-04 03:33 -0600
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-04 03:33 -0600
1import os
3from muutils.validate_type import get_fn_allowed_kwargs
6def test_with_positional_args_only():
7 def fn(a, b, c):
8 pass
10 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c"}
13def test_with_keyword_args_only():
14 def fn(*, a, b, c):
15 pass
17 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c"}
20def test_with_mixed_args():
21 def fn(a, b, *, c, d):
22 pass
24 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c", "d"}
27def test_with_positional_only_args():
28 def fn(a, b, /, c, d):
29 pass
31 assert get_fn_allowed_kwargs(fn) == {"c", "d"}
34def test_with_var_args():
35 def fn(a, b, *args, c, d, **kwargs):
36 pass
38 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c", "d"}
41def test_with_no_args():
42 def fn():
43 pass
45 assert get_fn_allowed_kwargs(fn) == set()
48def test_with_builtin_function():
49 try:
50 get_fn_allowed_kwargs(len)
51 except ValueError as e:
52 assert "Cannot retrieve signature" in str(e)
55def test_with_problematic_function():
56 try:
57 get_fn_allowed_kwargs(os.path.basename)
58 except ValueError as e:
59 assert "Cannot retrieve signature" in str(e)
62def test_with_class_method():
63 class MyClass:
64 @classmethod
65 def cls_method(cls, a, b=2, *, c=3):
66 pass
68 assert get_fn_allowed_kwargs(MyClass.cls_method) == {"a", "b", "c"}
71def test_with_lambda():
72 lambda_fn = lambda a, b, c=3: a + b + c # noqa: E731
73 assert get_fn_allowed_kwargs(lambda_fn) == {"a", "b", "c"}
76def test_with_function_defaults():
77 def fn(a, b=2, *, c=3):
78 pass
80 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c"}
83def test_with_complicated_defaults_and_types():
84 def fn(
85 a: int, b: str = "default", *, c: list = [1, 2, 3], d: dict = {"key": "value"}
86 ):
87 pass
89 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c", "d"}