import pytest from unittest.mock import Mock from fenrirscreenreader.screenDriver.ptyDriver import PTYConstants from fenrirscreenreader.screenDriver.ptyDriver import Terminal from fenrirscreenreader.screenDriver.ptyDriver import driver as PtyDriver class DummyProcessInput: def __init__(self): self.data = [] def write(self, data): self.data.append(data) @pytest.mark.unit def test_csi_sequences_with_intermediate_characters_do_not_render_final_byte(): terminal = Terminal(10, 3, DummyProcessInput()) terminal.feed(b"\x1b[2026$p\x1b[2048$pX") screen = terminal.get_screen_content() assert screen["text"].splitlines()[0] == "X " assert "p" not in screen["text"] @pytest.mark.unit def test_private_sgr_sequence_from_fullscreen_apps_does_not_crash(): terminal = Terminal(10, 3, DummyProcessInput()) terminal.feed(b"\x1b[?25;7mX") screen = terminal.get_screen_content() assert screen["text"].splitlines()[0] == "X " @pytest.mark.unit def test_optional_float_setting_uses_default_when_missing(): settings_manager = type( "SettingsManager", (), {"get_setting": lambda self, section, setting: ""}, )() pty_driver = PtyDriver() assert ( pty_driver._get_optional_float_setting( settings_manager, "screen", "ptyOutputTimeout", PTYConstants.OUTPUT_READ_TIMEOUT, ) == 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()