- Новый ui/widgets/stagger_float_in.py: при каждом показе вкладки её карточки выплывают снизу вверх одна за другой (эффект снимается по окончании; во время перехода между страницами не мешает ему). - Zapret KVN: глобус (ui/widgets/turning_globe.py) плавно сменяет материки и чуть парит, название выплывает и бликует, «Купить подписку» вынесена в шапку, возможности — две плитки рядом со значками, которые подпрыгивают при наведении. Группы больше не растягиваются по высоте стопки вкладок — пустоты между разделами нет. - «О программе»: по названию «Zapret 2 GUI» ходит блик, звезда Premium изредка поблёскивает, кнопка «Zapret KVN» со значком глобуса.
67 lines
3.1 KiB
Python
67 lines
3.1 KiB
Python
from __future__ import annotations
|
||
|
||
import os
|
||
import unittest
|
||
|
||
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
||
|
||
from PyQt6.QtWidgets import QApplication, QVBoxLayout, QWidget
|
||
|
||
from ui.pages.about_page_kvn_build import build_about_page_kvn_content
|
||
from ui.theme import get_theme_tokens
|
||
|
||
|
||
class AboutKvnAccessibilityTests(unittest.TestCase):
|
||
@classmethod
|
||
def setUpClass(cls) -> None:
|
||
cls._app = QApplication.instance() or QApplication([])
|
||
|
||
def test_kvn_link_cards_have_screen_reader_text(self) -> None:
|
||
parent = QWidget()
|
||
layout = QVBoxLayout(parent)
|
||
|
||
widgets = build_about_page_kvn_content(
|
||
layout,
|
||
tokens=get_theme_tokens(),
|
||
content_parent=parent,
|
||
on_open_kvn_channel=lambda: None,
|
||
on_open_kvn_bot=lambda: None,
|
||
on_open_kvn_github=lambda: None,
|
||
)
|
||
|
||
self.assertEqual(widgets.features_group.accessibleName(), "Раздел Zapret KVN: Возможности")
|
||
self.assertEqual(
|
||
widgets.features_group.property("screenReaderStateText"),
|
||
"Раздел Zapret KVN: Возможности",
|
||
)
|
||
self.assertEqual(widgets.links_group.accessibleName(), "Раздел Zapret KVN: Ссылки")
|
||
self.assertEqual(
|
||
widgets.links_group.property("screenReaderStateText"),
|
||
"Раздел Zapret KVN: Ссылки",
|
||
)
|
||
|
||
# BypassBlock живёт на «Справке» — во вкладке KVN его больше нет.
|
||
self.assertFalse(hasattr(widgets, "bypass_card"))
|
||
# Покупка вынесена в шапку отдельной акцентной кнопкой.
|
||
self.assertFalse(hasattr(widgets, "bot_card"))
|
||
self.assertEqual(widgets.bot_btn.accessibleName(), "Купить подписку Zapret KVN")
|
||
self.assertEqual(widgets.bot_btn.property("screenReaderStateText"), "Купить подписку Zapret KVN")
|
||
self.assertIn("@zapretvpns_bot", widgets.bot_btn.accessibleDescription())
|
||
self.assertEqual(widgets.yt_card.accessibleName(), "Ускорение YouTube и Discord")
|
||
self.assertEqual(widgets.game_card.accessibleName(), "Игровые серверы")
|
||
expected = {
|
||
widgets.tg_card: ("Открыть канал Zapret KVN", "Новости и обновления"),
|
||
widgets.gh_card: ("Открыть исходный код Zapret KVN", "Forgejo репозиторий Zapret KVN"),
|
||
}
|
||
for card, (name, description) in expected.items():
|
||
with self.subTest(name=name):
|
||
self.assertEqual(card.accessibleName(), name)
|
||
self.assertEqual(card.property("screenReaderStateText"), name)
|
||
self.assertIn(description, card.accessibleDescription())
|
||
self.assertEqual(card.button.accessibleName(), name)
|
||
self.assertEqual(card.button.property("screenReaderStateText"), name)
|
||
self.assertIn(description, card.button.accessibleDescription())
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|