Files
cthulhu/tests/test_speech_default_policy_regressions.py

92 lines
3.1 KiB
Python

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