Files
cthulhu/tests/test_speechserver_compat.py

122 lines
3.5 KiB
Python

"""Regression tests for speech server API compatibility."""
from __future__ import annotations
import pytest
from cthulhu import speechserver
from cthulhu.acss import ACSS
class DummySpeechServer(speechserver.SpeechServer):
factory_calls = []
active_servers_shutdown = False
@staticmethod
def getFactoryName():
return "Dummy"
@staticmethod
def getSpeechServers():
return ["server-a"]
@staticmethod
def getSpeechServer(info=None):
DummySpeechServer.factory_calls.append(info)
return DummySpeechServer()
@staticmethod
def shutdownActiveServers():
DummySpeechServer.active_servers_shutdown = True
def __init__(self):
self.calls = []
self._current_voice_properties = {}
def getInfo(self):
return ["Dummy", "dummy"]
def getVoiceFamilies(self):
return ["voice-a"]
def getVoiceFamiliesForLanguage(self, language, dialect="", maximum=None):
return [(language, dialect, maximum)]
def getOutputModule(self):
return "module-a"
def setOutputModule(self, module):
self.calls.append(("setOutputModule", module))
def updateCapitalizationStyle(self):
self.calls.append(("updateCapitalizationStyle",))
def updatePunctuationLevel(self):
self.calls.append(("updatePunctuationLevel",))
def increaseSpeechRate(self, step=5):
self.calls.append(("increaseSpeechRate", step))
def decreaseSpeechVolume(self, step=0.5):
self.calls.append(("decreaseSpeechVolume", step))
@pytest.mark.unit
def test_snake_case_factory_methods_delegate_to_legacy_methods():
DummySpeechServer.factory_calls.clear()
DummySpeechServer.active_servers_shutdown = False
server = DummySpeechServer.get_speech_server(("Dummy", "dummy"))
assert isinstance(server, DummySpeechServer)
assert DummySpeechServer.factory_calls == [("Dummy", "dummy")]
assert DummySpeechServer.get_speech_servers() == ["server-a"]
assert DummySpeechServer.get_factory_name() == "Dummy"
DummySpeechServer.shutdown_active_servers()
assert DummySpeechServer.active_servers_shutdown is True
@pytest.mark.unit
def test_snake_case_instance_methods_delegate_to_legacy_methods():
server = DummySpeechServer()
assert server.get_info() == ["Dummy", "dummy"]
assert server.get_voice_families() == ["voice-a"]
assert server.get_voice_families_for_language("en", variant="us") == [("en", "us", None)]
assert server.get_output_module() == "module-a"
server.set_output_module("module-b")
server.update_capitalization_style("none")
server.update_punctuation_level(speechserver.PunctuationStyle.SOME)
server.increase_speech_rate(9)
server.decrease_speech_volume(1.5)
assert server.calls == [
("setOutputModule", "module-b"),
("updateCapitalizationStyle",),
("updatePunctuationLevel",),
("increaseSpeechRate", 9),
("decreaseSpeechVolume", 1.5),
]
@pytest.mark.unit
def test_voice_property_helpers_store_and_clear_default_voice():
server = DummySpeechServer()
default_voice = {ACSS.FAMILY: {speechserver.VoiceFamily.NAME: "Voice A"}}
next_family = {speechserver.VoiceFamily.NAME: "Voice B"}
server.set_default_voice(default_voice)
assert server.get_voice_family() == default_voice[ACSS.FAMILY]
server.set_voice_family(next_family)
assert server.get_voice_family() == next_family
server.clear_cached_voice_properties()
assert server.get_voice_family() is None