diff --git a/AGENTS.md b/AGENTS.md index 61cdba5e..c9dd276c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -59,6 +59,15 @@ pytest tests/ --cov=src/fenrirscreenreader --cov-report=html can run multiple foreground X terminal instances. Ask user to run tests that need real Fenrir instances or root access. +### Packaging Test Layouts + +- Debian `pybuild` runs copied tests from a nested `.pybuild/.../build` tree + and may omit top-level source directories such as `config/`. +- Tests that inspect source resources must locate them by walking upward from + the resolved test path; do not assume a fixed `Path(__file__).parents[N]`. +- Packaging-sensitive test changes should be checked from both the source tree + and a representative nested build directory under `/tmp`. + ## Creating Commands Use `commands/command_template.py` as base. Required methods: diff --git a/src/fenrirscreenreader/fenrirVersion.py b/src/fenrirscreenreader/fenrirVersion.py index 7db4e2ec..d562216c 100644 --- a/src/fenrirscreenreader/fenrirVersion.py +++ b/src/fenrirscreenreader/fenrirVersion.py @@ -4,5 +4,5 @@ # Fenrir TTY screen reader # By Chrys, Storm Dragon, and contributors. -version = "2026.08.21" +version = "2026.09.12" code_name = "testing" diff --git a/tests/unit/config_test_utils.py b/tests/unit/config_test_utils.py new file mode 100644 index 00000000..ef075db9 --- /dev/null +++ b/tests/unit/config_test_utils.py @@ -0,0 +1,16 @@ +from configparser import ConfigParser +from pathlib import Path + + +def load_source_settings(): + """Load settings.conf from a checkout or a nested package build tree.""" + for parent in Path(__file__).resolve().parents: + settings_path = parent / "config/settings/settings.conf" + if settings_path.is_file(): + config = ConfigParser(interpolation=None) + config.read(settings_path) + return config + + raise FileNotFoundError( + "Could not find config/settings/settings.conf above the test directory" + ) diff --git a/tests/unit/test_generic_sound_driver.py b/tests/unit/test_generic_sound_driver.py index 040e476d..b14e0fbc 100644 --- a/tests/unit/test_generic_sound_driver.py +++ b/tests/unit/test_generic_sound_driver.py @@ -1,5 +1,3 @@ -from configparser import ConfigParser -from pathlib import Path from unittest.mock import Mock import pytest @@ -7,6 +5,8 @@ import pytest from fenrirscreenreader.core.settingsData import settings_data from fenrirscreenreader.soundDriver import genericDriver +from .config_test_utils import load_source_settings + class SettingsManager: def __init__(self, settings): @@ -26,8 +26,7 @@ def _sound_driver(settings): def _configured_sound_settings(): - config = ConfigParser(interpolation=None) - config.read(Path(__file__).parents[2] / "config/settings/settings.conf") + config = load_source_settings() return { "generic_play_file_command": config.get( "sound", "generic_play_file_command" diff --git a/tests/unit/test_generic_speech_driver.py b/tests/unit/test_generic_speech_driver.py index 315212ad..92ad9072 100644 --- a/tests/unit/test_generic_speech_driver.py +++ b/tests/unit/test_generic_speech_driver.py @@ -1,11 +1,10 @@ -from configparser import ConfigParser -from pathlib import Path - import pytest from fenrirscreenreader.core.settingsData import settings_data from fenrirscreenreader.speechDriver import genericDriver +from .config_test_utils import load_source_settings + def test_build_speech_command_replaces_snake_case_placeholders(): speech_driver = genericDriver.driver() @@ -43,8 +42,7 @@ def test_build_speech_command_replaces_snake_case_placeholders(): def _configured_speech_command(): - config = ConfigParser(interpolation=None) - config.read(Path(__file__).parents[2] / "config/settings/settings.conf") + config = load_source_settings() return config.get("speech", "generic_speech_command")