zapretgui/tests/test_dpi_settings_accessibility.py
2026-06-12 22:04:05 +03:00

86 lines
3.2 KiB
Python

from __future__ import annotations
import os
import unittest
from types import SimpleNamespace
from unittest.mock import Mock
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
from PyQt6.QtCore import QEvent, Qt
from PyQt6.QtGui import QKeyEvent
from PyQt6.QtWidgets import QApplication
from settings.mode import ORCHESTRA_MODE, ZAPRET2_MODE
class DpiSettingsAccessibilityTests(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls._app = QApplication.instance() or QApplication([])
def test_launch_method_labels_are_named_for_screen_reader(self) -> None:
from settings.dpi.page import DpiSettingsPage
page = DpiSettingsPage(
dpi_settings_feature=SimpleNamespace(),
orchestra_feature=SimpleNamespace(),
runtime_actions=SimpleNamespace(handle_launch_method_changed=Mock()),
set_status=Mock(),
after_launch_method_changed=Mock(),
)
self.addCleanup(page.deleteLater)
self.assertEqual(
page._method_desc_label.property("screenReaderStateText"),
"Описание выбора метода запуска: Выберите способ запуска обхода блокировок",
)
self.assertEqual(
page.zapret2_header.property("screenReaderStateText"),
"Раздел метода запуска: Zapret 2 (winws2.exe)",
)
self.assertEqual(
page._zapret1_header.property("screenReaderStateText"),
"Раздел метода запуска: Zapret 1 (winws.exe)",
)
page._ensure_orchestra_settings_built()
self.assertEqual(
page._orchestra_label.property("screenReaderStateText"),
"Раздел метода запуска: Настройки оркестратора",
)
def test_launch_method_options_can_be_changed_with_arrow_keys(self) -> None:
from settings.dpi.page import DpiSettingsPage
requested: list[tuple[str, str]] = []
page = DpiSettingsPage(
dpi_settings_feature=SimpleNamespace(
describe_visibility=Mock(return_value=SimpleNamespace(show_orchestra_settings=False)),
),
orchestra_feature=SimpleNamespace(),
runtime_actions=SimpleNamespace(handle_launch_method_changed=Mock()),
set_status=Mock(),
after_launch_method_changed=Mock(),
)
self.addCleanup(page.deleteLater)
page._request_dpi_settings_action = lambda action, method="": requested.append((action, method))
page._update_method_selection(ZAPRET2_MODE)
page.show()
self._app.processEvents()
page.method_zapret2_mode.setFocus()
self._app.processEvents()
event = QKeyEvent(QEvent.Type.KeyPress, Qt.Key.Key_Down, Qt.KeyboardModifier.NoModifier)
page.method_zapret2_mode.keyPressEvent(event)
self._app.processEvents()
self.assertTrue(event.isAccepted())
self.assertTrue(page.method_orchestra.isSelected())
self.assertEqual(requested[-1], ("apply_launch_method", ORCHESTRA_MODE))
self.assertIs(self._app.focusWidget(), page.method_orchestra)
if __name__ == "__main__":
unittest.main()