2026-04-06 20:23:48 +02:00
|
|
|
import asyncio
|
2026-04-08 10:28:52 +02:00
|
|
|
import sys
|
2026-04-06 20:23:48 +02:00
|
|
|
from unittest.mock import AsyncMock, MagicMock, patch
|
|
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
2026-04-08 10:28:52 +02:00
|
|
|
pytestmark = pytest.mark.skipif(sys.platform != "linux", reason="evdev only available on Linux")
|
2026-04-06 20:23:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
|
def listener():
|
2026-04-08 10:28:52 +02:00
|
|
|
from whisper_local.hotkey._evdev import EvdevHotkeyListener
|
|
|
|
|
return EvdevHotkeyListener(key_name="KEY_F12")
|
2026-04-06 20:23:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|