44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import sys
|
|
import time
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest import mock
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
|
|
|
|
from cthulhu import speechdispatcherfactory
|
|
|
|
|
|
class SpeechDispatcherInterruptRegressionTests(unittest.TestCase):
|
|
def _make_server(self):
|
|
server = speechdispatcherfactory.SpeechServer.__new__(speechdispatcherfactory.SpeechServer)
|
|
server._lastKeyEchoTime = None
|
|
server._cancel = mock.Mock()
|
|
server._apply_acss = mock.Mock()
|
|
server._send_command = mock.Mock()
|
|
server._speak = mock.Mock()
|
|
server._client = mock.Mock()
|
|
server._client.char = mock.Mock()
|
|
return server
|
|
|
|
def test_interrupting_string_speech_cancels_active_output_first(self):
|
|
server = self._make_server()
|
|
|
|
server.speak("long utterance", interrupt=True)
|
|
|
|
server._cancel.assert_called_once_with()
|
|
server._speak.assert_called_once_with("long utterance", None)
|
|
|
|
def test_recent_key_echo_suppresses_backend_cancel(self):
|
|
server = self._make_server()
|
|
server._lastKeyEchoTime = time.time()
|
|
|
|
server.speak("next", interrupt=True)
|
|
|
|
server._cancel.assert_not_called()
|
|
server._speak.assert_called_once_with("next", None)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|