63 lines
2.9 KiB
Python
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()
|