import unittest from tests.test_static_contract import assert_source_contains from pathlib import Path ROOT = Path(__file__).parents[1] class ReaderAccessibilityTests(unittest.TestCase): @classmethod def setUpClass(cls): cls.reader = (ROOT / "static/reader.js").read_text(encoding="utf-8") cls.html = (ROOT / "static/reader.html").read_text(encoding="utf-8") cls.css = (ROOT / "static/reader.css").read_text(encoding="utf-8") def test_reader_controls_and_regions_have_accessible_contracts(self): for value in ('role="status"', 'id="page-number"', 'id="page-total"'): self.assertIn(value, self.html) for value in ('["#back", "返回"]', '["#page-number", "页码"]', '["#zoom", "缩放百分比"]'): assert_source_contains(self, value, self.reader) for value in ('setAttribute("role", "region")', 'setAttribute("aria-label", `第 ${page} 页`)', 'setAttribute("aria-modal", "true")', 'focus({ preventScroll: true })', 'composedPath()'): assert_source_contains(self, value, self.reader) self.assertRegex(self.css, r'prefers-contrast\s*:\s*more') for value in ('aria-label="下载原文件"', 'role="tablist"', 'role="tab"', 'aria-controls="toc-panel"', 'role="tabpanel"'): self.assertIn(value, self.html)