from configparser import ConfigParser from pathlib import Path from unittest.mock import Mock import pytest from fenrirscreenreader.core.settingsData import settings_data from fenrirscreenreader.soundDriver import genericDriver class SettingsManager: def __init__(self, settings): self.settings = settings def get_setting(self, section, setting): return self.settings[setting] def _sound_driver(settings): sound_driver = genericDriver.driver() sound_driver.initialize( {"runtime": {"SettingsManager": SettingsManager(settings)}} ) sound_driver.set_volume(0.75) return sound_driver def _configured_sound_settings(): config = ConfigParser(interpolation=None) config.read(Path(__file__).parents[2] / "config/settings/settings.conf") return { "generic_play_file_command": config.get( "sound", "generic_play_file_command" ), "generic_frequency_command": config.get( "sound", "generic_frequency_command" ), } def test_play_frequency_replaces_snake_case_placeholders(monkeypatch): popen = Mock() monkeypatch.setattr(genericDriver.subprocess, "Popen", popen) sound_driver = _sound_driver( { "generic_play_file_command": "player fenrir_sound_file", "generic_frequency_command": ( "tone --volume fenrir_volume --duration fenrir_duration " "--frequency fenrir_frequency" ), } ) sound_driver.play_frequence( 440, 0.25, adjust_volume=0.5, interrupt=False ) assert popen.call_args.args[0] == [ "tone", "--volume", "0.375", "--duration", "0.25", "--frequency", "440", ] def test_play_sound_file_replaces_snake_case_placeholders( monkeypatch, tmp_path ): popen = Mock() monkeypatch.setattr(genericDriver.subprocess, "Popen", popen) sound_file = tmp_path / "sound file.ogg" sound_file.write_bytes(b"") sound_driver = _sound_driver( { "generic_play_file_command": ( "player --volume fenrir_volume fenrir_sound_file" ), "generic_frequency_command": "tone fenrir_frequency", } ) sound_driver.play_sound_file(str(sound_file), interrupt=False) assert popen.call_args.args[0] == [ "player", "--volume", "0.75", str(sound_file), ] @pytest.mark.parametrize( "settings", [settings_data["sound"], _configured_sound_settings()], ) def test_default_sound_commands_use_supported_placeholders( monkeypatch, tmp_path, settings ): popen = Mock() monkeypatch.setattr(genericDriver.subprocess, "Popen", popen) sound_file = tmp_path / "sound.ogg" sound_file.write_bytes(b"") sound_driver = _sound_driver(settings) sound_driver.play_frequence( 440, 0.25, adjust_volume=0.5, interrupt=False ) sound_driver.play_sound_file(str(sound_file), interrupt=False) for call in popen.call_args_list: assert not any("fenrir_" in argument for argument in call.args[0])