41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
import importlib.util
|
|
import os
|
|
import unittest
|
|
import xml.etree.ElementTree as ET
|
|
|
|
from tests.fakes import ROOT
|
|
|
|
GENERATED = {
|
|
"review_inside.py": ("werkrevisor-review-inside.svg", "werkrevisor-review-inside-dark.svg"),
|
|
"review_decisions.py": ("werkrevisor-review-decisions.svg", "werkrevisor-review-decisions-dark.svg"),
|
|
}
|
|
|
|
|
|
def generator(name):
|
|
spec = importlib.util.spec_from_file_location(name[:-3], os.path.join(ROOT, "tools", "diagrams", name))
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
class DiagramsTest(unittest.TestCase):
|
|
def test_the_checked_in_diagrams_are_the_output_of_their_generators(self):
|
|
for name, (light, dark) in GENERATED.items():
|
|
module = generator(name)
|
|
for palette, svg_name in ((module.LIGHT, light), (module.DARK, dark)):
|
|
with self.subTest(svg=svg_name):
|
|
with open(os.path.join(ROOT, "docs", svg_name)) as f:
|
|
self.assertEqual(f.read(), module.svg(palette),
|
|
f"run python3 tools/diagrams/{name} and commit docs/{svg_name}")
|
|
|
|
def test_every_diagram_is_well_formed_svg(self):
|
|
for svg_name in sorted(n for n in os.listdir(os.path.join(ROOT, "docs")) if n.endswith(".svg")):
|
|
with self.subTest(svg=svg_name):
|
|
root = ET.parse(os.path.join(ROOT, "docs", svg_name)).getroot()
|
|
self.assertEqual(root.tag, "{http://www.w3.org/2000/svg}svg")
|
|
self.assertEqual(root.get("viewBox"), "0 0 1600 900")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|