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

1import os 

2 

3from muutils.validate_type import get_fn_allowed_kwargs 

4 

5 

6def test_with_positional_args_only(): 

7 def fn(a, b, c): 

8 pass 

9 

10 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c"} 

11 

12 

13def test_with_keyword_args_only(): 

14 def fn(*, a, b, c): 

15 pass 

16 

17 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c"} 

18 

19 

20def test_with_mixed_args(): 

21 def fn(a, b, *, c, d): 

22 pass 

23 

24 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c", "d"} 

25 

26 

27def test_with_positional_only_args(): 

28 def fn(a, b, /, c, d): 

29 pass 

30 

31 assert get_fn_allowed_kwargs(fn) == {"c", "d"} 

32 

33 

34def test_with_var_args(): 

35 def fn(a, b, *args, c, d, **kwargs): 

36 pass 

37 

38 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c", "d"} 

39 

40 

41def test_with_no_args(): 

42 def fn(): 

43 pass 

44 

45 assert get_fn_allowed_kwargs(fn) == set() 

46 

47 

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) 

53 

54 

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) 

60 

61 

62def test_with_class_method(): 

63 class MyClass: 

64 @classmethod 

65 def cls_method(cls, a, b=2, *, c=3): 

66 pass 

67 

68 assert get_fn_allowed_kwargs(MyClass.cls_method) == {"a", "b", "c"} 

69 

70 

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"} 

74 

75 

76def test_with_function_defaults(): 

77 def fn(a, b=2, *, c=3): 

78 pass 

79 

80 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c"} 

81 

82 

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 

88 

89 assert get_fn_allowed_kwargs(fn) == {"a", "b", "c", "d"}