{ "version": "1.4", "category": "decode", "description": "Strict mode indentation validation - non-multiple indentation, tab characters, custom indent sizes", "tests": [ { "name": "throws on object field with non-multiple indentation (3 spaces with indent=2)", "input": "a:\n b: 1", "expected": null, "shouldError": true, "options": { "indent": 2, "strict": true }, "specSection": "14.3" }, { "name": "throws on list item with non-multiple indentation (3 spaces with indent=2)", "input": "items[2]:\n - id: 1\n - id: 2", "expected": null, "shouldError": true, "options": { "indent": 2, "strict": true }, "specSection": "14.3" }, { "name": "throws on non-multiple indentation with custom indent=4 (3 spaces)", "input": "a:\n b: 1", "expected": null, "shouldError": true, "options": { "indent": 4, "strict": true }, "specSection": "14.3" }, { "name": "accepts correct indentation with custom indent size (4 spaces with indent=4)", "input": "a:\n b: 1", "expected": { "a": { "b": 1 } }, "options": { "indent": 4, "strict": true }, "specSection": "12" }, { "name": "throws on tab character used in indentation", "input": "a:\n\tb: 1", "expected": null, "shouldError": true, "options": { "strict": true }, "specSection": "14.3" }, { "name": "throws on mixed tabs and spaces in indentation", "input": "a:\n \tb: 1", "expected": null, "shouldError": true, "options": { "strict": true }, "specSection": "14.3" }, { "name": "throws on tab at start of line", "input": "\ta: 1", "expected": null, "shouldError": true, "options": { "strict": true }, "specSection": "14.3" }, { "name": "accepts tabs in quoted string values", "input": "text: \"hello\tworld\"", "expected": { "text": "hello\tworld" }, "options": { "strict": true }, "specSection": "12" }, { "name": "accepts tabs in quoted keys", "input": "\"key\ttab\": value", "expected": { "key\ttab": "value" }, "options": { "strict": true }, "specSection": "12" }, { "name": "accepts tabs in quoted array elements", "input": "items[2]: \"a\tb\",\"c\td\"", "expected": { "items": ["a\tb", "c\td"] }, "options": { "strict": true }, "specSection": "12" }, { "name": "accepts non-multiple indentation when strict=false", "input": "a:\n b: 1", "expected": { "a": { "b": 1 } }, "options": { "indent": 2, "strict": false }, "specSection": "12" }, { "name": "accepts deeply nested non-multiples when strict=false", "input": "a:\n b:\n c: 1", "expected": { "a": { "b": { "c": 1 } } }, "options": { "indent": 2, "strict": false }, "specSection": "12" }, { "name": "parses empty lines without validation errors", "input": "a: 1\n\nb: 2", "expected": { "a": 1, "b": 2 }, "options": { "strict": true }, "specSection": "12" }, { "name": "parses root-level content (0 indentation) as always valid", "input": "a: 1\nb: 2\nc: 3", "expected": { "a": 1, "b": 2, "c": 3 }, "options": { "strict": true }, "specSection": "12" }, { "name": "parses lines with only spaces without validation if empty", "input": "a: 1\n \nb: 2", "expected": { "a": 1, "b": 2 }, "options": { "strict": true }, "specSection": "12" } ] }