test_validate_kwargs.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import pytest
  2. from pandas.util._validators import validate_bool_kwarg, validate_kwargs
  3. _fname = "func"
  4. def test_bad_kwarg():
  5. good_arg = "f"
  6. bad_arg = good_arg + "o"
  7. compat_args = {good_arg: "foo", bad_arg + "o": "bar"}
  8. kwargs = {good_arg: "foo", bad_arg: "bar"}
  9. msg = fr"{_fname}\(\) got an unexpected keyword argument '{bad_arg}'"
  10. with pytest.raises(TypeError, match=msg):
  11. validate_kwargs(_fname, kwargs, compat_args)
  12. @pytest.mark.parametrize("i", range(1, 3))
  13. def test_not_all_none(i):
  14. bad_arg = "foo"
  15. msg = (
  16. fr"the '{bad_arg}' parameter is not supported "
  17. fr"in the pandas implementation of {_fname}\(\)"
  18. )
  19. compat_args = {"foo": 1, "bar": "s", "baz": None}
  20. kwarg_keys = ("foo", "bar", "baz")
  21. kwarg_vals = (2, "s", None)
  22. kwargs = dict(zip(kwarg_keys[:i], kwarg_vals[:i]))
  23. with pytest.raises(ValueError, match=msg):
  24. validate_kwargs(_fname, kwargs, compat_args)
  25. def test_validation():
  26. # No exceptions should be raised.
  27. compat_args = {"f": None, "b": 1, "ba": "s"}
  28. kwargs = dict(f=None, b=1)
  29. validate_kwargs(_fname, kwargs, compat_args)
  30. @pytest.mark.parametrize("name", ["inplace", "copy"])
  31. @pytest.mark.parametrize("value", [1, "True", [1, 2, 3], 5.0])
  32. def test_validate_bool_kwarg_fail(name, value):
  33. msg = (
  34. f'For argument "{name}" expected type bool,'
  35. f" received type {type(value).__name__}"
  36. )
  37. with pytest.raises(ValueError, match=msg):
  38. validate_bool_kwarg(value, name)
  39. @pytest.mark.parametrize("name", ["inplace", "copy"])
  40. @pytest.mark.parametrize("value", [True, False, None])
  41. def test_validate_bool_kwarg(name, value):
  42. assert validate_bool_kwarg(value, name) == value