zapretgui/tests/test_fluent_widgets_accessibility.py
2026-06-15 20:33:06 +03:00

101 lines
5.2 KiB
Python

from __future__ import annotations
import os
import unittest
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
from PyQt6.QtWidgets import QApplication
class FluentWidgetsAccessibilityTests(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls._app = QApplication.instance() or QApplication([])
def test_settings_card_title_has_screen_reader_state(self) -> None:
from ui.fluent_widgets import SettingsCard
card = SettingsCard("DNS Серверы")
self.addCleanup(card.deleteLater)
self.assertEqual(card.property("screenReaderStateText"), "Раздел настроек: DNS Серверы")
self.assertEqual(card.accessibleName(), "Раздел настроек: DNS Серверы")
self.assertEqual(card._title_label.property("screenReaderStateText"), "Раздел настроек: DNS Серверы")
def test_settings_card_set_title_updates_screen_reader_state(self) -> None:
from ui.fluent_widgets import SettingsCard
card = SettingsCard()
self.addCleanup(card.deleteLater)
card.set_title("Диагностика")
self.assertEqual(card.property("screenReaderStateText"), "Раздел настроек: Диагностика")
self.assertEqual(card.accessibleName(), "Раздел настроек: Диагностика")
self.assertEqual(card._title_label.property("screenReaderStateText"), "Раздел настроек: Диагностика")
card.set_title("Инструменты")
self.assertEqual(card.property("screenReaderStateText"), "Раздел настроек: Инструменты")
self.assertEqual(card._title_label.property("screenReaderStateText"), "Раздел настроек: Инструменты")
def test_settings_row_title_and_description_have_screen_reader_state(self) -> None:
from ui.fluent_widgets import SettingsRow
row = SettingsRow("fa5s.palette", "Цвет акцента", "Открывает выбор цвета")
self.addCleanup(row.deleteLater)
expected = "Настройка: Цвет акцента. Открывает выбор цвета"
self.assertEqual(row.property("screenReaderStateText"), expected)
self.assertEqual(row.accessibleName(), expected)
self.assertEqual(row.accessibleDescription(), "Открывает выбор цвета")
self.assertEqual(row._title_label.property("screenReaderStateText"), "Настройка: Цвет акцента")
self.assertEqual(row._desc_label.property("screenReaderStateText"), "Описание настройки: Открывает выбор цвета")
def test_settings_row_updates_screen_reader_state_after_text_changes(self) -> None:
from ui.fluent_widgets import SettingsRow
row = SettingsRow("fa5s.palette", "Цвет акцента", "Открывает выбор цвета")
self.addCleanup(row.deleteLater)
row.set_title("Интенсивность")
row.set_description("Меняет силу эффекта")
expected = "Настройка: Интенсивность. Меняет силу эффекта"
self.assertEqual(row.property("screenReaderStateText"), expected)
self.assertEqual(row.accessibleName(), expected)
self.assertEqual(row.accessibleDescription(), "Меняет силу эффекта")
self.assertEqual(row._title_label.property("screenReaderStateText"), "Настройка: Интенсивность")
self.assertEqual(row._desc_label.property("screenReaderStateText"), "Описание настройки: Меняет силу эффекта")
def test_semantic_notice_reads_warning_text_for_screen_reader(self) -> None:
from ui.fluent_widgets import SemanticNotice
notice = SemanticNotice("Проверьте параметры перед запуском", tone="warning")
self.addCleanup(notice.deleteLater)
expected = "Предупреждение: Проверьте параметры перед запуском"
self.assertEqual(notice.accessibleName(), expected)
self.assertEqual(notice.property("screenReaderStateText"), expected)
self.assertEqual(notice._text_label.property("screenReaderStateText"), expected)
notice.setText("Изменения применятся после перезапуска")
expected = "Предупреждение: Изменения применятся после перезапуска"
self.assertEqual(notice.accessibleName(), expected)
self.assertEqual(notice.property("screenReaderStateText"), expected)
self.assertEqual(notice._text_label.property("screenReaderStateText"), expected)
def test_premium_badge_reads_text_for_screen_reader(self) -> None:
from ui.fluent_widgets import build_premium_badge
badge = build_premium_badge("Premium")
self.addCleanup(badge.deleteLater)
self.assertEqual(badge.accessibleName(), "Метка Premium: Premium")
self.assertEqual(badge.property("screenReaderStateText"), "Метка Premium: Premium")
if __name__ == "__main__":
unittest.main()