Files
linuxcncWebWASM/scripts/test_document_capabilities.py

63 lines
2.9 KiB
Python

#!/usr/bin/env python3
import json
import sys
import unittest
from pathlib import Path
from tempfile import TemporaryDirectory
sys.path.insert(0, str(Path(__file__).resolve().parent))
from generate_document_capabilities import make_entries, parse_headings, slugify
class DocumentCapabilitiesTests(unittest.TestCase):
def test_slugify_is_ascii_and_deterministic(self):
self.assertEqual(slugify("G-Code & Motion"), "g-code-and-motion")
self.assertEqual(slugify("!!!"), "section")
def test_explicit_anchor_and_duplicate_heading_are_stable(self):
with TemporaryDirectory() as directory:
path = Path(directory) / "sample.adoc"
path.write_text("[[explicit]]\n== Same\n== Same\n", encoding="utf-8")
headings = parse_headings(path)
self.assertEqual(headings[0].anchor, "explicit")
self.assertEqual(headings[1].anchor, None)
def test_include_graph_and_project_documents_are_indexed(self):
with TemporaryDirectory() as directory:
root = Path(directory)
(root / "linuxcnc/docs/src/sub").mkdir(parents=True)
(root / "docs").mkdir()
(root / "linuxcnc/docs/src/Master_Documentation.adoc").write_text(
"include::sub/a.adoc[]\n", encoding="utf-8"
)
(root / "linuxcnc/docs/src/sub/a.adoc").write_text("[[a]]\n= HAL\n", encoding="utf-8")
(root / "docs/linuxcnc-web-wasm-source-map.md").write_text("# Source Map\n", encoding="utf-8")
(root / "docs/linuxcnc-web-wasm-simulation-coverage.md").write_text("# Coverage\n", encoding="utf-8")
entries, report = make_entries(root)
ids = {str(entry["capability_source_id"]) for entry in entries}
self.assertIn("doc:linuxcnc/docs/src/sub/a.adoc#a", ids)
self.assertIn("doc:docs/linuxcnc-web-wasm-source-map.md#source-map", ids)
self.assertEqual(report["duplicate_ids"], [])
def test_generated_entries_have_required_fields(self):
with TemporaryDirectory() as directory:
root = Path(directory)
(root / "linuxcnc/docs/src").mkdir(parents=True)
(root / "docs").mkdir()
(root / "linuxcnc/docs/src/Master_Documentation.adoc").write_text("= G-Code\n", encoding="utf-8")
for name in ("linuxcnc-web-wasm-source-map.md", "linuxcnc-web-wasm-simulation-coverage.md"):
(root / "docs" / name).write_text("# Project\n", encoding="utf-8")
entries, _ = make_entries(root)
for entry in entries:
self.assertTrue(entry["capability_source_id"])
self.assertTrue(entry["document"])
self.assertTrue(entry["anchor"])
self.assertTrue(entry["title"])
self.assertTrue(entry["source_sha"])
self.assertIn(entry["mapping_status"], {"mapped", "needs_review"})
if __name__ == "__main__":
unittest.main()