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()