import asyncio import sys from unittest.mock import AsyncMock, MagicMock, patch import pytest pytestmark = pytest.mark.skipif(sys.platform != "linux", reason="evdev only available on Linux") @pytest.fixture def listener(): from whisper_local.hotkey._evdev import EvdevHotkeyListener return EvdevHotkeyListener(key_name="KEY_F12") class TestHotkeyListener: def test_init_stores_key_name(self, listener): assert listener.key_name == "KEY_F12" @pytest.mark.asyncio async def test_key_down_calls_callback(self, listener): on_press = AsyncMock() listener.on_press = on_press await listener._handle_key_event(key_down=True) on_press.assert_awaited_once() @pytest.mark.asyncio async def test_key_up_calls_callback(self, listener): on_release = AsyncMock() listener.on_release = on_release await listener._handle_key_event(key_down=False) on_release.assert_awaited_once() @pytest.mark.asyncio async def test_no_callback_no_error(self, listener): await listener._handle_key_event(key_down=True) await listener._handle_key_event(key_down=False)