83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
import re
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
STATIC = ROOT / "frontend"
|
|
TOKENS = STATIC / "shared" / "tokens.css"
|
|
LEGACY_STYLESHEETS = (
|
|
"styles/styles.css",
|
|
"styles/renovation.css",
|
|
"styles/redesign-v2.css",
|
|
"styles/design-system.css",
|
|
"styles/theme.css",
|
|
)
|
|
|
|
|
|
class CssGovernanceTests(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls) -> None:
|
|
cls.html = (STATIC / "index.html").read_text(encoding="utf-8")
|
|
cls.tokens = TOKENS.read_text(encoding="utf-8")
|
|
|
|
def test_token_layer_loads_before_application_styles(self) -> None:
|
|
expected_order = (
|
|
"/shared/tokens.css",
|
|
"/styles/styles.css",
|
|
"/styles/renovation.css",
|
|
"/styles/redesign-v2.css",
|
|
"/styles/design-system.css",
|
|
"/styles/theme.css",
|
|
"/pages/heaven/page.css",
|
|
)
|
|
positions = [self.html.index(path) for path in expected_order]
|
|
self.assertEqual(positions, sorted(positions))
|
|
|
|
def test_token_file_has_three_layer_contract(self) -> None:
|
|
for heading in (
|
|
"/* Primitive tokens */",
|
|
"/* Semantic tokens */",
|
|
"/* Component tokens */",
|
|
"/* Compatibility aliases.",
|
|
):
|
|
self.assertIn(heading, self.tokens)
|
|
for variable in (
|
|
"--color-action:",
|
|
"--surface-canvas:",
|
|
"--text-primary:",
|
|
"--card-bg:",
|
|
"--control-height:",
|
|
"--sidebar-width:",
|
|
):
|
|
self.assertIn(variable, self.tokens)
|
|
|
|
def test_light_and_dark_semantics_share_one_owner(self) -> None:
|
|
self.assertIn(':root[data-theme="dark"] {', self.tokens)
|
|
global_root = re.compile(r'(?m)^:root(?:\[data-theme="dark"\])?\s*\{')
|
|
for filename in LEGACY_STYLESHEETS:
|
|
stylesheet = (STATIC / filename).read_text(encoding="utf-8")
|
|
self.assertIsNone(global_root.search(stylesheet), filename)
|
|
|
|
def test_wentian_tokens_remain_isolated(self) -> None:
|
|
self.assertNotRegex(self.tokens, r"--wt-[a-z0-9-]+\s*:")
|
|
wentian = (STATIC / "pages" / "heaven" / "page.css").read_text(encoding="utf-8")
|
|
self.assertRegex(wentian, r"--wt-[a-z0-9-]+\s*:")
|
|
|
|
def test_compatibility_aliases_cover_historical_layers(self) -> None:
|
|
for variable in (
|
|
"--blue:",
|
|
"--up:",
|
|
"--xb-blue-500:",
|
|
"--r2-blue:",
|
|
"--chart-background:",
|
|
"--dragon-profile-list-width:",
|
|
):
|
|
self.assertIn(variable, self.tokens)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|