blob: 58d7ae6000812b3e1e09d890e888639d78db9d1b [file] [log] [blame]
from __future__ import annotations
import sys
from inspect import getmembers, isfunction
from typing import Any
import appdirs
import pytest
import platformdirs
def test_has_backward_compatible_class() -> None:
from platformdirs import AppDirs # noqa: PLC0415
assert AppDirs is platformdirs.PlatformDirs
def test_has_all_functions() -> None:
# Get all public function names from appdirs
appdirs_function_names = [f[0] for f in getmembers(appdirs, isfunction) if not f[0].startswith("_")]
# Exception will be raised if any appdirs functions aren't in platformdirs.
for function_name in appdirs_function_names:
getattr(platformdirs, function_name)
def test_has_all_properties() -> None:
# Get names of all the properties of appdirs.AppDirs
appdirs_property_names = [p[0] for p in getmembers(appdirs.AppDirs, lambda member: isinstance(member, property))]
# Exception will be raised if any appdirs.AppDirs properties aren't in platformdirs.AppDirs
for property_name in appdirs_property_names:
getattr(platformdirs.AppDirs, property_name)
@pytest.mark.parametrize(
"params",
[
{},
{"appname": "foo"},
{"appname": "foo", "appauthor": "bar"},
{"appname": "foo", "appauthor": "bar", "version": "v1.0"},
],
ids=[
"no_args",
"app_name",
"app_name_with_app_author",
"app_name_author_version",
],
)
def test_compatibility(params: dict[str, Any], func: str) -> None:
# Only test functions that are part of appdirs
if getattr(appdirs, func, None) is None:
pytest.skip(f"`{func}` does not exist in `appdirs`")
if sys.platform == "darwin":
msg = { # pragma: no cover
"user_log_dir": "without appname produces NoneType error",
}
if func in msg: # pragma: no cover
pytest.skip(f"`appdirs.{func}` {msg[func]} on macOS") # pragma: no cover
elif sys.platform != "win32":
msg = { # pragma: no cover
"user_log_dir": "Uses XDG_STATE_DIR instead of appdirs.user_data_dir per the XDG spec",
}
if func in msg: # pragma: no cover
pytest.skip(f"`appdirs.{func}` {msg[func]} on Unix") # pragma: no cover
new = getattr(platformdirs, func)(*params)
old = getattr(appdirs, func)(*params)
assert new == old.rstrip("/")