"""The server's half of the shared grammar fixture (core/testdata/grammar.json). The same cases run against the core (derive.rs) and the web (markdown.ts). A case that passes in one language and fails in another is a note that changes shape when it syncs — a checklist that stops being one, or a tag that is a label on the phone and plain text on the server. """ from __future__ import annotations import json from pathlib import Path import pytest from inkwell.notes.checklist import parse_items, render_item from inkwell.notes.tags import parse_tags, split_body_tags FIXTURE = json.loads( (Path(__file__).resolve().parents[1] / "core" / "testdata" / "grammar.json").read_text(encoding="utf-8") ) @pytest.mark.parametrize("case", FIXTURE["task_lines"], ids=lambda c: repr(c["line"])) def test_task_lines(case): got = [(i.text, i.checked) for i in parse_items(case["line"])] want = [] if case["item"] is None else [(case["item"]["text"], case["item"]["checked"])] assert got == want @pytest.mark.parametrize("case", FIXTURE["rendered_items"], ids=lambda c: repr(c["line"])) def test_rendered_items(case): assert render_item(case["text"], case["checked"]) == case["line"] @pytest.mark.parametrize("case", FIXTURE["tags"], ids=lambda c: repr(c["body"])) def test_tags(case): assert parse_tags(case["body"]) == case["tags"] @pytest.mark.parametrize("case", FIXTURE["lifts"], ids=lambda c: repr(c["body"])) def test_lifts(case): standalone, inline, lifted = split_body_tags(case["body"]) assert (standalone, inline, lifted) == (case["standalone"], case["inline"], case["lifted"])