This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
"""Unit tests for ``src.json_utils.parse_json``.
|
||||
|
||||
IMP-28 L4 — `_parse_json` dedup unit u2.
|
||||
|
||||
Pins the shared helper semantics that previously lived in
|
||||
content_editor.py / design_director.py / kei_client.py (fuller form) and
|
||||
pipeline.py (simple form). The fuller form is a strict superset of the
|
||||
simple form; these tests cover both axes.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from src.json_utils import parse_json
|
||||
|
||||
|
||||
def test_parse_json_fenced_json_block():
|
||||
text = 'prefix\n```json\n{"a": 1, "b": "x"}\n```\nsuffix'
|
||||
assert parse_json(text) == {"a": 1, "b": "x"}
|
||||
|
||||
|
||||
def test_parse_json_plain_fenced_block():
|
||||
text = 'prefix\n```\n{"x": 2}\n```\nsuffix'
|
||||
assert parse_json(text) == {"x": 2}
|
||||
|
||||
|
||||
def test_parse_json_bare_braces():
|
||||
text = 'noise before {"y": 3, "z": [1, 2]} noise after'
|
||||
assert parse_json(text) == {"y": 3, "z": [1, 2]}
|
||||
|
||||
|
||||
def test_parse_json_list_prefix_dash_cleanup():
|
||||
text = '- {"b": 4}'
|
||||
assert parse_json(text) == {"b": 4}
|
||||
|
||||
|
||||
def test_parse_json_list_prefix_star_cleanup():
|
||||
text = '* {"c": 5}'
|
||||
assert parse_json(text) == {"c": 5}
|
||||
|
||||
|
||||
def test_parse_json_no_json_returns_none():
|
||||
assert parse_json("no json here at all") is None
|
||||
|
||||
|
||||
def test_parse_json_malformed_returns_none():
|
||||
assert parse_json("{ invalid json") is None
|
||||
|
||||
|
||||
def test_parse_json_prefix_free_no_op():
|
||||
text = '{"d": 6}'
|
||||
assert parse_json(text) == {"d": 6}
|
||||
|
||||
|
||||
def test_parse_json_fenced_preferred_over_bare_braces():
|
||||
text = 'outer {"outer": true} ```json\n{"inner": 1}\n```'
|
||||
assert parse_json(text) == {"inner": 1}
|
||||
Reference in New Issue
Block a user