115 lines
3.1 KiB
Python
115 lines
3.1 KiB
Python
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])
|