Implemented local settings save in ~/.local/share/stormux. Also, I think I got interrupt on any keypress working better when using -x.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import pytest
|
||||
from unittest.mock import Mock
|
||||
|
||||
from fenrirscreenreader.screenDriver.ptyDriver import PTYConstants
|
||||
from fenrirscreenreader.screenDriver.ptyDriver import Terminal
|
||||
@@ -52,3 +53,59 @@ def test_optional_float_setting_uses_default_when_missing():
|
||||
)
|
||||
== PTYConstants.OUTPUT_READ_TIMEOUT
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_pty_stdin_input_interrupts_output_when_all_keys_interrupt_enabled():
|
||||
pty_driver = PtyDriver()
|
||||
settings_manager = Mock()
|
||||
settings_manager.get_setting_as_bool.return_value = True
|
||||
settings_manager.get_setting.return_value = ""
|
||||
output_manager = Mock()
|
||||
pty_driver.env = {
|
||||
"runtime": {
|
||||
"SettingsManager": settings_manager,
|
||||
"OutputManager": output_manager,
|
||||
}
|
||||
}
|
||||
|
||||
pty_driver.interrupt_output_on_stdin_input(b"a")
|
||||
|
||||
output_manager.interrupt_output.assert_called_once_with()
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_pty_stdin_input_honors_interrupt_disabled():
|
||||
pty_driver = PtyDriver()
|
||||
settings_manager = Mock()
|
||||
settings_manager.get_setting_as_bool.return_value = False
|
||||
output_manager = Mock()
|
||||
pty_driver.env = {
|
||||
"runtime": {
|
||||
"SettingsManager": settings_manager,
|
||||
"OutputManager": output_manager,
|
||||
}
|
||||
}
|
||||
|
||||
pty_driver.interrupt_output_on_stdin_input(b"a")
|
||||
|
||||
output_manager.interrupt_output.assert_not_called()
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_pty_stdin_input_leaves_filtered_interrupts_to_key_events():
|
||||
pty_driver = PtyDriver()
|
||||
settings_manager = Mock()
|
||||
settings_manager.get_setting_as_bool.return_value = True
|
||||
settings_manager.get_setting.return_value = "KEY_ENTER"
|
||||
output_manager = Mock()
|
||||
pty_driver.env = {
|
||||
"runtime": {
|
||||
"SettingsManager": settings_manager,
|
||||
"OutputManager": output_manager,
|
||||
}
|
||||
}
|
||||
|
||||
pty_driver.interrupt_output_on_stdin_input(b"a")
|
||||
|
||||
output_manager.interrupt_output.assert_not_called()
|
||||
|
||||
@@ -8,10 +8,12 @@ for all configurable settings that could cause crashes or accessibility issues.
|
||||
import pytest
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from unittest.mock import Mock
|
||||
|
||||
# Import the settings manager
|
||||
from fenrirscreenreader.core.settingsData import settings_data
|
||||
from fenrirscreenreader.core.settingsManager import SettingsManager
|
||||
from fenrirscreenreader.commands.commands import save_settings
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@@ -198,3 +200,93 @@ class TestValidationSkipsUnknownSettings:
|
||||
def test_focus_settings_define_tui_toggle():
|
||||
"""Focus settings should include the TUI toggle used by on-screen handlers."""
|
||||
assert settings_data["focus"]["tui"] is False
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@pytest.mark.settings
|
||||
class TestSettingsPathSelection:
|
||||
"""Test root/user settings load and save path selection."""
|
||||
|
||||
def setup_method(self):
|
||||
self.manager = SettingsManager()
|
||||
|
||||
def configure_paths(self, tmp_path):
|
||||
system_root = tmp_path / "etc" / "fenrirscreenreader"
|
||||
system_file = system_root / "settings" / "settings.conf"
|
||||
user_file = (
|
||||
tmp_path
|
||||
/ "home"
|
||||
/ "Username"
|
||||
/ ".local"
|
||||
/ "share"
|
||||
/ "stormux"
|
||||
/ "fenrirscreenreader"
|
||||
/ "settings"
|
||||
/ "settings.conf"
|
||||
)
|
||||
self.manager.system_settings_root = str(system_root) + "/"
|
||||
self.manager.system_settings_file = str(system_file)
|
||||
self.manager.user_settings_file = str(user_file)
|
||||
return system_file, user_file
|
||||
|
||||
def test_non_root_loads_user_settings_when_present(
|
||||
self, tmp_path, monkeypatch
|
||||
):
|
||||
system_file, user_file = self.configure_paths(tmp_path)
|
||||
system_file.parent.mkdir(parents=True)
|
||||
system_file.write_text("[general]\n", encoding="utf-8")
|
||||
user_file.parent.mkdir(parents=True)
|
||||
user_file.write_text("[general]\n", encoding="utf-8")
|
||||
monkeypatch.setattr("os.geteuid", lambda: 1000)
|
||||
|
||||
assert self.manager.resolve_settings_file() == str(user_file)
|
||||
|
||||
def test_non_root_falls_back_to_system_settings(
|
||||
self, tmp_path, monkeypatch
|
||||
):
|
||||
system_file, _user_file = self.configure_paths(tmp_path)
|
||||
system_file.parent.mkdir(parents=True)
|
||||
system_file.write_text("[general]\n", encoding="utf-8")
|
||||
monkeypatch.setattr("os.geteuid", lambda: 1000)
|
||||
|
||||
assert self.manager.resolve_settings_file() == str(system_file)
|
||||
|
||||
def test_root_uses_system_settings_even_when_user_settings_exists(
|
||||
self, tmp_path, monkeypatch
|
||||
):
|
||||
system_file, user_file = self.configure_paths(tmp_path)
|
||||
system_file.parent.mkdir(parents=True)
|
||||
system_file.write_text("[general]\n", encoding="utf-8")
|
||||
user_file.parent.mkdir(parents=True)
|
||||
user_file.write_text("[general]\n", encoding="utf-8")
|
||||
monkeypatch.setattr("os.geteuid", lambda: 0)
|
||||
|
||||
assert self.manager.resolve_settings_file() == str(system_file)
|
||||
|
||||
def test_save_default_path_follows_effective_user(
|
||||
self, tmp_path, monkeypatch
|
||||
):
|
||||
system_file, user_file = self.configure_paths(tmp_path)
|
||||
|
||||
monkeypatch.setattr("os.geteuid", lambda: 1000)
|
||||
assert self.manager.get_default_save_settings_file() == str(user_file)
|
||||
|
||||
monkeypatch.setattr("os.geteuid", lambda: 0)
|
||||
assert self.manager.get_default_save_settings_file() == str(system_file)
|
||||
|
||||
def test_save_settings_command_uses_default_save_path(self):
|
||||
manager = Mock()
|
||||
output_manager = Mock()
|
||||
command = save_settings.command()
|
||||
command.initialize(
|
||||
{
|
||||
"runtime": {
|
||||
"SettingsManager": manager,
|
||||
"OutputManager": output_manager,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
command.run()
|
||||
|
||||
manager.save_settings.assert_called_once_with()
|
||||
|
||||
Reference in New Issue
Block a user