refactor: 문서 개선 중
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import json
|
||||
import os
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
SCRIPT = ROOT / "scripts" / "verify-project-layout.py"
|
||||
|
||||
spec = importlib.util.spec_from_file_location("verify_project_layout", SCRIPT)
|
||||
layout = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(layout)
|
||||
|
||||
|
||||
def _section(line: int, level: int, title: str, start: int, end: int, text: str) -> dict:
|
||||
return {
|
||||
"heading": {"line": line, "level": level, "text": title},
|
||||
"start_line": start,
|
||||
"end_line": end,
|
||||
"text": text,
|
||||
}
|
||||
|
||||
|
||||
class TechVizContextFallbackTest(unittest.TestCase):
|
||||
def _check(self, document: str, context: dict) -> bool | None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
doc = root / "document.md"
|
||||
ctx = root / "context.json"
|
||||
doc.write_text(document, encoding="utf-8")
|
||||
ctx.write_text(json.dumps(context, ensure_ascii=False), encoding="utf-8")
|
||||
return layout._context_snapshot_matches(str(doc), str(ctx))
|
||||
|
||||
def test_parent_predecessor_is_only_the_preamble_before_current_child(self):
|
||||
document = "\n".join([
|
||||
"# Root",
|
||||
"root",
|
||||
"## Parent",
|
||||
"preamble",
|
||||
"### Current",
|
||||
"current",
|
||||
"### Next",
|
||||
"next",
|
||||
"## Tail",
|
||||
"tail",
|
||||
])
|
||||
context = {
|
||||
"anchor": {"kind": "heading", "value": "Current", "line": 5},
|
||||
"previous_section": _section(
|
||||
3, 2, "Parent", 3, 4, "## Parent\npreamble"
|
||||
),
|
||||
"current_section": _section(
|
||||
5, 3, "Current", 5, 6, "### Current\ncurrent"
|
||||
),
|
||||
"next_section": _section(
|
||||
7, 3, "Next", 7, 8, "### Next\nnext"
|
||||
),
|
||||
}
|
||||
self.assertTrue(self._check(document, context))
|
||||
|
||||
changed = document.replace("preamble", "changed preamble")
|
||||
self.assertFalse(self._check(changed, context))
|
||||
|
||||
def test_fenced_hash_lines_do_not_end_neighbor_section(self):
|
||||
document = "\n".join([
|
||||
"# Root",
|
||||
"## Current",
|
||||
"current",
|
||||
"## Data",
|
||||
"intro",
|
||||
"~~~text",
|
||||
"# not a heading",
|
||||
"## also not a heading",
|
||||
"~~~",
|
||||
"tail",
|
||||
"## End",
|
||||
"end",
|
||||
])
|
||||
context = {
|
||||
"anchor": {"kind": "heading", "value": "Current", "line": 2},
|
||||
"previous_section": _section(
|
||||
1, 1, "Root", 1, 1, "# Root"
|
||||
),
|
||||
"current_section": _section(
|
||||
2, 2, "Current", 2, 3, "## Current\ncurrent"
|
||||
),
|
||||
"next_section": _section(
|
||||
4, 2, "Data", 4, 10,
|
||||
"## Data\nintro\n~~~text\n# not a heading\n"
|
||||
"## also not a heading\n~~~\ntail",
|
||||
),
|
||||
}
|
||||
self.assertTrue(self._check(document, context))
|
||||
|
||||
def test_legacy_context_without_anchor_uses_current_heading(self):
|
||||
document = "\n".join([
|
||||
"# Root",
|
||||
"## Previous",
|
||||
"previous",
|
||||
"## Current",
|
||||
"current",
|
||||
"## Next",
|
||||
"next",
|
||||
])
|
||||
context = {
|
||||
"previous_section": {
|
||||
"heading": {"text": "Previous"},
|
||||
"text": "## Previous\nprevious",
|
||||
},
|
||||
"current_section": {
|
||||
"heading": {"text": "Current"},
|
||||
"text": "## Current\ncurrent",
|
||||
},
|
||||
"next_section": {
|
||||
"heading": {"text": "Next"},
|
||||
"text": "## Next\nnext",
|
||||
},
|
||||
}
|
||||
self.assertTrue(self._check(document, context))
|
||||
|
||||
def test_keycloak_session_store_seven_fresh_contexts_match_without_techviz(self):
|
||||
ids = [
|
||||
"a1-transport-vs-discovery",
|
||||
"d2-upgrade-direction",
|
||||
"lab-topology",
|
||||
"measurement-control",
|
||||
"observation-points",
|
||||
"open-questions-answered",
|
||||
"wrong-predictions",
|
||||
]
|
||||
document = ROOT / "docs" / "keycloak-session-store" / "final" / "document.md"
|
||||
base = ROOT / "docs" / "keycloak-session-store" / "final" / ".techviz"
|
||||
for diagram_id in ids:
|
||||
with self.subTest(diagram_id=diagram_id):
|
||||
context = base / diagram_id / "context.json"
|
||||
self.assertTrue(
|
||||
layout._context_snapshot_matches(str(document), str(context))
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user