"""Speed authority between a locator socket client and the GUI field. The data_processor uses the speed a socket client streams unless the live config sets `ignore_socket_speed`; then `gpr_speed_m_s` from the GUI field applies. Each GPR-like page (gpr, legacy_gpr, sar3d) has its own checkbox and field, and the field is editable only while it is the one in force. """ from __future__ import annotations import os import unittest os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") from PyQt6.QtWidgets import QApplication # noqa: E402 from python_app.gui.app_window import AppWindow # noqa: E402 from python_app.tests.gui_test_support import isolated_window _app: QApplication | None = None _window: AppWindow | None = None # mode -> (checkbox, speed field) attributes of its page _PAGES = { "gpr": ("_gpr_ignore_socket_speed_enabled", "_gpr_speed_m_s"), "legacy_gpr": ("_legacy_gpr_ignore_socket_speed_enabled", "_legacy_gpr_speed_m_s"), "sar3d": ("_sar3d_ignore_socket_speed_enabled", "_sar3d_speed_m_s"), } def setUpModule() -> None: global _app, _window _app = QApplication.instance() or QApplication([]) _window = isolated_window(unittest.addModuleCleanup) def tearDownModule() -> None: if _window is not None: _window.close() class SocketSpeedControlsTest(unittest.TestCase): def test_speed_field_is_editable_only_while_the_socket_is_ignored(self) -> None: assert _window is not None for mode, (checkbox_name, speed_name) in _PAGES.items(): checkbox, speed = getattr(_window, checkbox_name), getattr(_window, speed_name) for ignore in (True, False): checkbox.setChecked(ignore) self.assertEqual(speed.isEnabled(), ignore, msg=f"{mode}, ignore={ignore}") def test_live_config_takes_the_active_page(self) -> None: assert _window is not None for mode, (checkbox_name, speed_name) in _PAGES.items(): _window._set_combo_current_text(_window._processing_mode, mode) getattr(_window, checkbox_name).setChecked(True) getattr(_window, speed_name).setValue(1.25) config = _window._live_processing_config() self.assertTrue(config.ignore_socket_speed, msg=mode) self.assertAlmostEqual(config.gpr_speed_m_s, 1.25, msg=mode) getattr(_window, checkbox_name).setChecked(False) self.assertFalse(_window._live_processing_config().ignore_socket_speed, msg=mode) if __name__ == "__main__": unittest.main()