feat(notion-writer): dialect->Notion enhanced markdown translator
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Tests for md_translate.py — run with `python test_md_translate.py`."""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
import md_translate
|
||||
|
||||
|
||||
def test_passthrough_basics():
|
||||
src = "# Heading\n\n- item\n\n```python\nx=1\n```"
|
||||
assert md_translate.translate(src) == src
|
||||
|
||||
|
||||
def test_callout_note():
|
||||
out = md_translate.translate("> [!NOTE]\n> Be careful")
|
||||
assert '<callout icon="ℹ️" color="blue_bg">' in out
|
||||
assert "\tBe careful" in out
|
||||
assert "</callout>" in out
|
||||
|
||||
|
||||
def test_callout_warning_color():
|
||||
out = md_translate.translate("> [!WARNING]\n> Danger")
|
||||
assert 'color="yellow_bg"' in out
|
||||
assert 'icon="⚠️"' in out
|
||||
|
||||
|
||||
def test_columns():
|
||||
src = "::: columns\n::: column\nLeft\n:::\n::: column\nRight\n:::\n:::"
|
||||
out = md_translate.translate(src)
|
||||
assert "<columns>" in out
|
||||
assert out.count("<column>") == 2
|
||||
assert "</columns>" in out
|
||||
assert "\tLeft" in out or "\t\tLeft" in out
|
||||
|
||||
|
||||
def test_toggle_children_indented():
|
||||
src = "<details>\n<summary>More</summary>\nBody line\n</details>"
|
||||
out = md_translate.translate(src)
|
||||
assert "<summary>More</summary>" in out
|
||||
assert "\tBody line" in out
|
||||
|
||||
|
||||
def test_mention_url():
|
||||
out = md_translate.translate(
|
||||
"See @[ADR](https://notion.so/X-abcdef0123456789abcdef0123456789).")
|
||||
assert "<mention-page url=" in out
|
||||
assert ">ADR</mention-page>" in out
|
||||
|
||||
|
||||
def test_mention_invalid_plain():
|
||||
out = md_translate.translate("ping @[Bob](not-an-id)")
|
||||
assert "@Bob" in out
|
||||
assert "mention-page" not in out
|
||||
|
||||
|
||||
def run_all():
|
||||
tests = [
|
||||
test_passthrough_basics,
|
||||
test_callout_note,
|
||||
test_callout_warning_color,
|
||||
test_columns,
|
||||
test_toggle_children_indented,
|
||||
test_mention_url,
|
||||
test_mention_invalid_plain,
|
||||
]
|
||||
for t in tests:
|
||||
print(f"\n{t.__name__}")
|
||||
t()
|
||||
print("\n" + "=" * 50)
|
||||
print(f"✅ All {len(tests)} tests passed")
|
||||
print("=" * 50)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_all()
|
||||
Reference in New Issue
Block a user