core/tests/components/tts/common.py

90 lines
2.4 KiB
Python

"""Provide common tests tools for tts."""
from __future__ import annotations
from typing import Any
import voluptuous as vol
from homeassistant.components.tts import (
CONF_LANG,
PLATFORM_SCHEMA,
Provider,
TtsAudioType,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from tests.common import MockPlatform
SUPPORT_LANGUAGES = ["de_DE", "en_GB", "en_US"]
TEST_LANGUAGES = ["de", "en"]
DEFAULT_LANG = "en_US"
class MockProvider(Provider):
"""Test speech API provider."""
def __init__(self, lang: str) -> None:
"""Initialize test provider."""
self._lang = lang
self.name = "Test"
@property
def default_language(self) -> str:
"""Return the default language."""
return self._lang
@property
def supported_languages(self) -> list[str]:
"""Return list of supported languages."""
return SUPPORT_LANGUAGES
@callback
def async_get_supported_voices(self, language: str) -> list[str] | None:
"""Return list of supported languages."""
if language == "en-US":
return ["James Earl Jones", "Fran Drescher"]
return None
@property
def supported_options(self) -> list[str]:
"""Return list of supported options like voice, emotions."""
return ["voice", "age"]
def get_tts_audio(
self, message: str, language: str, options: dict[str, Any] | None = None
) -> TtsAudioType:
"""Load TTS dat."""
return ("mp3", b"")
class MockTTS(MockPlatform):
"""A mock TTS platform."""
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Optional(CONF_LANG, default=DEFAULT_LANG): vol.In(
SUPPORT_LANGUAGES + TEST_LANGUAGES
)
}
)
def __init__(
self, provider: type[MockProvider] | None = None, **kwargs: Any
) -> None:
"""Initialize."""
super().__init__(**kwargs)
if provider is None:
provider = MockProvider
self._provider = provider
async def async_get_engine(
self,
hass: HomeAssistant,
config: ConfigType,
discovery_info: DiscoveryInfoType | None = None,
) -> Provider | None:
"""Set up a mock speech component."""
return self._provider(config.get(CONF_LANG, DEFAULT_LANG))