feat: add pynput hotkey backend for Windows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+54
-2
@@ -4,8 +4,6 @@ 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():
|
||||
@@ -13,6 +11,7 @@ def listener():
|
||||
return EvdevHotkeyListener(key_name="KEY_F12")
|
||||
|
||||
|
||||
@pytest.mark.skipif(sys.platform != "linux", reason="evdev only available on Linux")
|
||||
class TestHotkeyListener:
|
||||
def test_init_stores_key_name(self, listener):
|
||||
assert listener.key_name == "KEY_F12"
|
||||
@@ -37,3 +36,56 @@ class TestHotkeyListener:
|
||||
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)
|
||||
|
||||
|
||||
class TestPynputKeyMapping:
|
||||
"""Tests für die Key-Name-Übersetzung von evdev zu pynput."""
|
||||
|
||||
def test_map_function_key(self):
|
||||
from whisper_local.hotkey._pynput import _evdev_to_pynput_key
|
||||
from pynput.keyboard import Key
|
||||
assert _evdev_to_pynput_key("KEY_F12") == Key.f12
|
||||
|
||||
def test_map_f1(self):
|
||||
from whisper_local.hotkey._pynput import _evdev_to_pynput_key
|
||||
from pynput.keyboard import Key
|
||||
assert _evdev_to_pynput_key("KEY_F1") == Key.f1
|
||||
|
||||
def test_map_unknown_key_raises(self):
|
||||
from whisper_local.hotkey._pynput import _evdev_to_pynput_key
|
||||
with pytest.raises(ValueError, match="Unbekannter Key-Name"):
|
||||
_evdev_to_pynput_key("KEY_NONEXISTENT_999")
|
||||
|
||||
|
||||
class TestPynputHotkeyListener:
|
||||
def test_init_stores_key_name(self):
|
||||
from whisper_local.hotkey._pynput import PynputHotkeyListener
|
||||
listener = PynputHotkeyListener("KEY_F12")
|
||||
assert listener.key_name == "KEY_F12"
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_handle_key_event_press(self):
|
||||
from whisper_local.hotkey._pynput import PynputHotkeyListener
|
||||
listener = PynputHotkeyListener("KEY_F12")
|
||||
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_handle_key_event_release(self):
|
||||
from whisper_local.hotkey._pynput import PynputHotkeyListener
|
||||
listener = PynputHotkeyListener("KEY_F12")
|
||||
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):
|
||||
from whisper_local.hotkey._pynput import PynputHotkeyListener
|
||||
listener = PynputHotkeyListener("KEY_F12")
|
||||
await listener._handle_key_event(key_down=True)
|
||||
await listener._handle_key_event(key_down=False)
|
||||
|
||||
Reference in New Issue
Block a user