38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
"""Synthetic key-state checks; never reads a keyboard or records audio."""
|
|
|
|
from unittest.mock import Mock, patch
|
|
|
|
import _push_to_talk as ptt
|
|
|
|
down = [ptt.key.KEY_LEFTMETA, ptt.key.KEY_D]
|
|
|
|
|
|
def check(states, expected, error=None):
|
|
device = Mock()
|
|
device.active_keys.side_effect = states
|
|
device.read_loop.return_value = iter([object(), object()])
|
|
if error:
|
|
device.read_loop.side_effect = error
|
|
with (
|
|
patch.object(ptt, "list_devices", return_value=["keyboard"]),
|
|
patch.object(ptt, "InputDevice", return_value=device),
|
|
patch.object(ptt.signal, "signal"),
|
|
patch.object(ptt.subprocess, "run") as run,
|
|
):
|
|
try:
|
|
ptt.main("handy")
|
|
except (OSError, KeyboardInterrupt):
|
|
assert error is not None
|
|
assert [call.args[0][1] for call in run.call_args_list] == expected
|
|
device.close.assert_called_once()
|
|
|
|
|
|
check([[]], []) # Released before the listener starts: do not record.
|
|
check([down, []], ["--toggle-transcription", "--toggle-transcription"])
|
|
check([down, down, down, [ptt.key.KEY_D]], ["--toggle-transcription"] * 2)
|
|
check([down, down], ["--toggle-transcription", "--cancel"], OSError("unplugged"))
|
|
check([down, down], ["--toggle-transcription", "--cancel"], KeyboardInterrupt())
|
|
assert ptt.held([ptt.key.KEY_RIGHTMETA, ptt.key.KEY_D])
|
|
assert not ptt.held([ptt.key.KEY_LEFTMETA])
|
|
print("Push-to-talk release, repeat, disconnect and cancellation checks passed")
|