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()