Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions tests/test_decoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,23 @@ def test_decode_array_delimiters():
assert decode('numbers: [1|2|3]') == {'numbers': [1, 2, 3]}


def test_decode_delimiter_name_normalization():
"""Test that delimiter names ('comma', 'tab', 'pipe') are normalized like the encoder does."""
toon = """products[2]{id,name,price}:
101,Laptop Pro,1299
102,Magic Mouse,79"""
expected = {
'products': [
{'id': 101, 'name': 'Laptop Pro', 'price': 1299},
{'id': 102, 'name': 'Magic Mouse', 'price': 79},
]
}

# Named delimiter (as passed by the CLI) must behave like the character form
assert decode(toon, {'default_delimiter': 'comma'}) == expected
assert decode(toon, {'default_delimiter': ','}) == expected


def test_decode_tabular_array():
"""Test decoding of tabular arrays."""
toon = """users[2]{id,name,role}:
Expand Down
11 changes: 10 additions & 1 deletion toon/decoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
COMMA, TAB, PIPE, COLON, QUOTE, NEWLINE, SPACE,
DEFAULT_DELIMITER, DEFAULT_STRICT,
EXPAND_PATHS_OFF, EXPAND_PATHS_SAFE,
DELIMITER_TAB, DELIMITER_PIPE, DELIMITER_COMMA,
LEFT_BRACKET, RIGHT_BRACKET, LEFT_BRACE, RIGHT_BRACE
)
from .utils import unescape_string, parse_literal
Expand Down Expand Up @@ -60,8 +61,16 @@ def __init__(
Args:
strict: Validate structure strictly
expand_paths: Path expansion mode ('off' | 'safe')
default_delimiter: Default delimiter for arrays
default_delimiter: Default delimiter for arrays (',' | 'tab' | 'pipe')
"""
# Normalize delimiter names to their character form
if default_delimiter == DELIMITER_TAB:
default_delimiter = TAB
elif default_delimiter == DELIMITER_PIPE:
default_delimiter = PIPE
elif default_delimiter == DELIMITER_COMMA:
default_delimiter = COMMA

self.strict = strict
self.expand_paths = expand_paths
self.default_delimiter = default_delimiter
Expand Down