from types import SimpleNamespace from unittest.mock import Mock from fenrirscreenreader.commands.commands import voice_browser from fenrirscreenreader.commands.commands import voice_browser_safe from fenrirscreenreader.core import dynamicVoiceMenu from fenrirscreenreader.core.quickMenuManager import SpeechHelperMixin from fenrirscreenreader.utils.speechd_utils import get_synthesis_voice_name VOICE_LIST = ( " NAME LANGUAGE VARIANT\n" " Perfect Paul en-US none\n" " Big Bob en-US none\n" ) def completed_voice_list(): return SimpleNamespace(returncode=0, stdout=VOICE_LIST) def test_quick_menu_preserves_multiword_synthesis_voice_names(monkeypatch): monkeypatch.setattr( "fenrirscreenreader.core.quickMenuManager.subprocess.run", Mock(return_value=completed_voice_list()), ) helper = SpeechHelperMixin() helper.env = {"runtime": {"DebugManager": Mock()}} assert helper.get_module_voices("doubletalk") == [ "Perfect Paul", "Big Bob", ] def test_safe_voice_browser_preserves_multiword_synthesis_voice_names( monkeypatch, ): monkeypatch.setattr( voice_browser_safe.subprocess, "run", Mock(return_value=completed_voice_list()), ) browser = voice_browser_safe.command() browser.initialize({"runtime": {}}) assert browser.get_module_voices_with_timeout("doubletalk") == [ "Perfect Paul", "Big Bob", ] def test_interactive_voice_browser_preserves_multiword_synthesis_voice_names( monkeypatch, ): monkeypatch.setattr( voice_browser.subprocess, "run", Mock(return_value=completed_voice_list()), ) browser = voice_browser.command() assert browser.get_module_voices("doubletalk") == [ "Perfect Paul", "Big Bob", ] def test_dynamic_voice_menu_preserves_multiword_synthesis_voice_names( monkeypatch, ): monkeypatch.setattr( dynamicVoiceMenu.subprocess, "run", Mock(return_value=completed_voice_list()), ) assert dynamicVoiceMenu.get_module_voices("doubletalk") == [ "Perfect Paul", "Big Bob", ] def test_espeak_voice_selection_keeps_language_and_variant_behavior(): voice = get_synthesis_voice_name( "espeak-ng", "English (America)+female3 en-US female3", ) assert voice == "en-us+female3"