122 lines
3.5 KiB
Python
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
|