mirror of https://github.com/aliasrobotics/cai.git
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
"""Regression: mission planner responses are often markdown-fenced JSON."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from cai.continuous_ops.model_parse import _extract_json_object, _strip_markdown_json_fence
|
|
|
|
|
|
def test_strip_markdown_json_fence() -> None:
|
|
raw = '```json\n{"tasks": ["a"], "tasks_markdown": "- a"}\n```'
|
|
assert '"tasks"' in _strip_markdown_json_fence(raw)
|
|
|
|
|
|
def test_extract_json_plain() -> None:
|
|
assert _extract_json_object('{"tick_seconds": 30, "tasks": ["x"]}') == {
|
|
"tick_seconds": 30,
|
|
"tasks": ["x"],
|
|
}
|
|
|
|
|
|
def test_extract_json_fenced() -> None:
|
|
body = '```json\n{\n "tasks": ["check disk", "check load"],\n "tasks_markdown": "- a\\n- b"\n}\n```'
|
|
data = _extract_json_object(body)
|
|
assert data is not None
|
|
assert data["tasks"] == ["check disk", "check load"]
|
|
|
|
|
|
def test_extract_json_preamble() -> None:
|
|
body = 'Here is the plan:\n```json\n{"tasks": ["t1"], "tasks_markdown": "- t1"}\n```\nHope this helps.'
|
|
data = _extract_json_object(body)
|
|
assert data is not None
|
|
assert data["tasks"] == ["t1"]
|
|
|
|
|
|
def test_extract_json_trailing_after_brace() -> None:
|
|
body = '{"tasks": ["only"]}\n\n(Some notes)'
|
|
data = _extract_json_object(body)
|
|
assert data is not None
|
|
assert data["tasks"] == ["only"]
|