Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions send2trash/mac/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
from sys import version_info

# NOTE: version of pyobjc only supports python >= 3.6 and 10.9+
macos_ver = tuple(int(part) for part in mac_ver()[0].split("."))
if version_info >= (3, 6) and macos_ver >= (10, 9):
macos_ver_str = mac_ver()[0]
macos_ver = tuple(int(part) for part in macos_ver_str.split(".")) if macos_ver_str else None
if version_info >= (3, 6) and (macos_ver is None or macos_ver >= (10, 9)):
try:
from send2trash.mac.modern import send2trash
except ImportError:
Expand Down
45 changes: 45 additions & 0 deletions tests/test_plat_mac.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import runpy
import sys
import types
from pathlib import Path

import pytest


SELECTOR = Path(__file__).parents[1] / "send2trash" / "mac" / "__init__.py"


def select_backend(monkeypatch, version, modern_available=True):
modern = types.ModuleType("send2trash.mac.modern")
legacy = types.ModuleType("send2trash.mac.legacy")
modern.send2trash = object()
legacy.send2trash = object()

monkeypatch.setattr("platform.mac_ver", lambda: (version, ("", "", ""), ""))
monkeypatch.setitem(sys.modules, modern.__name__, modern if modern_available else None)
monkeypatch.setitem(sys.modules, legacy.__name__, legacy)

namespace = runpy.run_path(str(SELECTOR))
return namespace["send2trash"], {"modern": modern.send2trash, "legacy": legacy.send2trash}


@pytest.mark.parametrize(
("version", "expected"),
[
("14.0", "modern"),
("10.9", "modern"),
("10.8", "legacy"),
("", "modern"),
],
)
def test_select_backend(monkeypatch, version, expected):
selected, backends = select_backend(monkeypatch, version)

assert selected is backends[expected]


@pytest.mark.parametrize("version", ["14.0", ""])
def test_modern_version_falls_back_when_modern_backend_is_unavailable(monkeypatch, version):
selected, backends = select_backend(monkeypatch, version, modern_available=False)

assert selected is backends["legacy"]
Loading