import sys import unittest from pathlib import Path from unittest import mock sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src")) from cthulhu import settings from cthulhu import speech from cthulhu import cthulhu_state from cthulhu.scripts import default class SpeechDefaultPolicyRegressionTests(unittest.TestCase): def _make_settings_manager(self): values = { "enableSpeech": True, "onlySpeakDisplayedText": False, "messagesAreDetailed": True, "enableBraille": False, "enableBrailleMonitor": False, "enableFlashMessages": False, "voices": {settings.SYSTEM_VOICE: "system"}, "capitalizationStyle": settings.CAPITALIZATION_STYLE_NONE, "verbalizePunctuationStyle": settings.PUNCTUATION_STYLE_NONE, } manager = mock.Mock() manager.getSetting.side_effect = values.get return manager def _make_script(self): testScript = default.Script.__new__(default.Script) testScript.speechAndVerbosityManager = mock.Mock() return testScript def test_speech_speak_queues_by_default(self): server = mock.Mock() with ( mock.patch.object(speech, "_speechserver", server), mock.patch.object(speech, "_write_to_monitor"), mock.patch.object(speech.speech_history, "add"), mock.patch.object(cthulhu_state, "activeScript", None), ): speech.speak("status") server.speak.assert_called_once() self.assertFalse(server.speak.call_args.args[2]) def test_speech_speak_explicit_interrupt_is_preserved(self): server = mock.Mock() with ( mock.patch.object(speech, "_speechserver", server), mock.patch.object(speech, "_write_to_monitor"), mock.patch.object(speech.speech_history, "add"), mock.patch.object(cthulhu_state, "activeScript", None), ): speech.speak("status", interrupt=True) server.speak.assert_called_once() self.assertTrue(server.speak.call_args.args[2]) def test_present_message_queues_by_default(self): testScript = self._make_script() manager = self._make_settings_manager() with ( mock.patch.object(default.cthulhu.cthulhuApp, "settingsManager", manager), mock.patch.object(default.speech, "speak") as speak, ): default.Script.presentMessage(testScript, "Status") speak.assert_called_once_with("Status", "system", False) def test_present_message_explicit_interrupt_is_preserved(self): testScript = self._make_script() manager = self._make_settings_manager() with ( mock.patch.object(default.cthulhu.cthulhuApp, "settingsManager", manager), mock.patch.object(default.speech, "speak") as speak, ): default.Script.presentMessage(testScript, "Status", interrupt=True) speak.assert_called_once_with("Status", "system", True) if __name__ == "__main__": unittest.main()