import textwrap
import pytest
from toon_mcp import json_to_toon, system_prompt_to_toon, toon_to_json
def test_json_toon_roundtrip_simple():
data = {"a": 1, "b": [1, 2, 3], "c": {"nested": True}}
toon_text = json_to_toon(data)
result = toon_to_json(toon_text)
assert result == data
def test_json_toon_roundtrip_with_strings():
data = {
"user": {"id": 42, "name": "Alice"},
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"},
],
}
toon_text = json_to_toon(data)
result = toon_to_json(toon_text)
assert result == data
def test_system_prompt_to_toon_basic():
prompt = textwrap.dedent(
"""
You are a careful assistant.
- Respond concisely.
- Use Python examples when relevant.
"""
).strip()
toon_prompt = system_prompt_to_toon(prompt)
# The TOON output should at least be non-empty and contain the key name.
assert "system_prompt" in toon_prompt
def test_json_to_toon_rejects_non_serialisable():
class NotJsonSerializable:
pass
with pytest.raises(TypeError):
json_to_toon(NotJsonSerializable())
def test_toon_to_json_rejects_non_string():
with pytest.raises(TypeError):
toon_to_json(123) # type: ignore[arg-type]
def test_system_prompt_to_toon_rejects_non_string():
with pytest.raises(TypeError):
system_prompt_to_toon({"not": "a string"}) # type: ignore[arg-type]