47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
"""The card gallery builder only rebuilds when it is run without arguments."""
|
|||
|
|
|
||
|
|
from pathlib import Path
|
||
|
|
import subprocess
|
||
|
|
import sys
|
||
|
|
import unittest
|
||
|
|
|
||
|
|
|
||
|
|
ROOT = Path(__file__).resolve().parents[1]
|
||
|
|
SCRIPT = ROOT / "scripts" / "build_cards.py"
|
||
|
|
GALLERY = ROOT / "assets" / "cards" / "gallery.html"
|
||
|
|
|
||
|
|
|
||
|
|
@unittest.skipUnless(SCRIPT.is_file() and GALLERY.is_file(), "card gallery is not part of this edition")
|
||
|
|
class CardGalleryBuilderTests(unittest.TestCase):
|
||
|
|
def run_script(self, *args):
|
||
|
|
return subprocess.run([sys.executable, str(SCRIPT), *args], capture_output=True, text=True, encoding="utf-8")
|
||
|
|
|
||
|
|
def test_help_explains_the_script_without_rebuilding(self):
|
||
|
|
before = GALLERY.stat().st_mtime_ns
|
||
|
|
run = self.run_script("--help")
|
||
|
|
self.assertEqual(run.returncode, 0)
|
||
|
|
self.assertIn("gallery.html", run.stdout)
|
||
|
|
self.assertNotIn("Built", run.stdout)
|
||
|
|
self.assertEqual(GALLERY.stat().st_mtime_ns, before)
|
||
|
|
|
||
|
|
def test_stray_arguments_are_rejected_without_rebuilding(self):
|
||
|
|
before = GALLERY.stat().st_mtime_ns
|
||
|
|
run = self.run_script("cards.json")
|
||
|
|
self.assertNotEqual(run.returncode, 0)
|
||
|
|
self.assertEqual(GALLERY.stat().st_mtime_ns, before)
|
||
|
|
|
||
|
|
def test_committed_gallery_matches_the_sources(self):
|
||
|
|
generated = [GALLERY, GALLERY.parent / "shared" / "land-mask.js"]
|
||
|
|
before = {path: path.read_bytes() for path in generated}
|
||
|
|
try:
|
||
|
|
run = self.run_script()
|
||
|
|
self.assertEqual(run.returncode, 0, run.stderr)
|
||
|
|
for path in generated:
|
||
|
|
self.assertEqual(path.read_bytes(), before[path], f"{path.name} is stale; rebuild it with scripts/build_cards.py")
|
||
|
|
finally:
|
||
|
|
for path, content in before.items():
|
||
|
|
path.write_bytes(content)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|