#!/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()