fix(evdev): Resource-Leak und Handling unbekannter Keycodes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-11 21:19:07 +02:00
parent 80a01903e8
commit 107508eeb9
2 changed files with 61 additions and 12 deletions
+38
View File
@@ -375,3 +375,41 @@ class TestRecordHotkeyEvdev:
record_hotkey(lambda n, c: results.append((n, c)), cancel)
assert results == [("KEY_F12", False)]
def test_skips_unknown_keycodes(self):
import threading
from unittest.mock import MagicMock, patch
unknown_event = MagicMock()
unknown_event.type = 1 # EV_KEY
unknown_event.code = 9999 # unbekannter Keycode
unknown_event.value = 1 # Keydown
known_event = MagicMock()
known_event.type = 1 # EV_KEY
known_event.code = 88 # KEY_F12
known_event.value = 1 # Keydown
fake_device = MagicMock()
fake_device.fd = 42
fake_device.read.return_value = iter([unknown_event, known_event])
fake_device.close = MagicMock()
cancel = threading.Event()
results: list[tuple[str, bool]] = []
with patch(
"whisper_local.tray._hotkey_record_evdev.find_all_keyboards",
return_value=[fake_device],
), patch(
"whisper_local.tray._hotkey_record_evdev.selectors.DefaultSelector"
) as mock_sel_cls:
mock_sel = MagicMock()
mock_sel_cls.return_value = mock_sel
sel_key = MagicMock()
sel_key.data = fake_device
mock_sel.select.return_value = [(sel_key, None)]
from whisper_local.tray._hotkey_record_evdev import record_hotkey
record_hotkey(lambda n, c: results.append((n, c)), cancel)
assert results == [("KEY_F12", False)]