252 lines
6.2 KiB
JSON
252 lines
6.2 KiB
JSON
{
|
|
"version": "1.4",
|
|
"category": "encode",
|
|
"description": "Primitive value encoding - strings, numbers, booleans, null",
|
|
"tests": [
|
|
{
|
|
"name": "encodes safe strings without quotes",
|
|
"input": "hello",
|
|
"expected": "hello",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "encodes safe string with underscore and numbers",
|
|
"input": "Ada_99",
|
|
"expected": "Ada_99",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes empty string",
|
|
"input": "",
|
|
"expected": "\"\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes string that looks like true",
|
|
"input": "true",
|
|
"expected": "\"true\"",
|
|
"specSection": "7.2",
|
|
"note": "String representation of boolean must be quoted"
|
|
},
|
|
{
|
|
"name": "quotes string that looks like false",
|
|
"input": "false",
|
|
"expected": "\"false\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes string that looks like null",
|
|
"input": "null",
|
|
"expected": "\"null\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes string that looks like integer",
|
|
"input": "42",
|
|
"expected": "\"42\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes string that looks like negative decimal",
|
|
"input": "-3.14",
|
|
"expected": "\"-3.14\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes string that looks like scientific notation",
|
|
"input": "1e-6",
|
|
"expected": "\"1e-6\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes string with leading zero",
|
|
"input": "05",
|
|
"expected": "\"05\"",
|
|
"specSection": "7.2",
|
|
"note": "Leading zeros make it non-numeric"
|
|
},
|
|
{
|
|
"name": "escapes newline in string",
|
|
"input": "line1\nline2",
|
|
"expected": "\"line1\\nline2\"",
|
|
"specSection": "7.1"
|
|
},
|
|
{
|
|
"name": "escapes tab in string",
|
|
"input": "tab\there",
|
|
"expected": "\"tab\\there\"",
|
|
"specSection": "7.1"
|
|
},
|
|
{
|
|
"name": "escapes carriage return in string",
|
|
"input": "return\rcarriage",
|
|
"expected": "\"return\\rcarriage\"",
|
|
"specSection": "7.1"
|
|
},
|
|
{
|
|
"name": "escapes backslash in string",
|
|
"input": "C:\\Users\\path",
|
|
"expected": "\"C:\\\\Users\\\\path\"",
|
|
"specSection": "7.1"
|
|
},
|
|
{
|
|
"name": "quotes string with array-like syntax",
|
|
"input": "[3]: x,y",
|
|
"expected": "\"[3]: x,y\"",
|
|
"specSection": "7.2",
|
|
"note": "Looks like array header"
|
|
},
|
|
{
|
|
"name": "quotes string starting with hyphen-space",
|
|
"input": "- item",
|
|
"expected": "\"- item\"",
|
|
"specSection": "7.2",
|
|
"note": "Looks like list item marker"
|
|
},
|
|
{
|
|
"name": "quotes single hyphen as object value",
|
|
"input": { "marker": "-" },
|
|
"expected": "marker: \"-\"",
|
|
"specSection": "7.2",
|
|
"note": "Single hyphen must be quoted to avoid list item ambiguity"
|
|
},
|
|
{
|
|
"name": "quotes string starting with hyphen as object value",
|
|
"input": { "note": "- item" },
|
|
"expected": "note: \"- item\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes single hyphen in array",
|
|
"input": { "items": ["-"] },
|
|
"expected": "items[1]: \"-\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes leading-hyphen string in array",
|
|
"input": { "tags": ["a", "- item", "b"] },
|
|
"expected": "tags[3]: a,\"- item\",b",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes string with bracket notation",
|
|
"input": "[test]",
|
|
"expected": "\"[test]\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "quotes string with brace notation",
|
|
"input": "{key}",
|
|
"expected": "\"{key}\"",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "encodes Unicode string without quotes",
|
|
"input": "café",
|
|
"expected": "café",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "encodes Chinese characters without quotes",
|
|
"input": "你好",
|
|
"expected": "你好",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "encodes emoji without quotes",
|
|
"input": "🚀",
|
|
"expected": "🚀",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "encodes string with emoji and spaces",
|
|
"input": "hello 👋 world",
|
|
"expected": "hello 👋 world",
|
|
"specSection": "7.2"
|
|
},
|
|
{
|
|
"name": "encodes positive integer",
|
|
"input": 42,
|
|
"expected": "42",
|
|
"specSection": "2"
|
|
},
|
|
{
|
|
"name": "encodes decimal number",
|
|
"input": 3.14,
|
|
"expected": "3.14",
|
|
"specSection": "2"
|
|
},
|
|
{
|
|
"name": "encodes negative integer",
|
|
"input": -7,
|
|
"expected": "-7",
|
|
"specSection": "2"
|
|
},
|
|
{
|
|
"name": "encodes zero",
|
|
"input": 0,
|
|
"expected": "0",
|
|
"specSection": "2"
|
|
},
|
|
{
|
|
"name": "encodes negative zero as zero",
|
|
"input": -0,
|
|
"expected": "0",
|
|
"specSection": "2",
|
|
"note": "Negative zero normalizes to zero"
|
|
},
|
|
{
|
|
"name": "encodes scientific notation as decimal",
|
|
"input": 1000000,
|
|
"expected": "1000000",
|
|
"specSection": "2",
|
|
"note": "1e6 input, but represented as decimal"
|
|
},
|
|
{
|
|
"name": "encodes small decimal from scientific notation",
|
|
"input": 0.000001,
|
|
"expected": "0.000001",
|
|
"specSection": "2",
|
|
"note": "1e-6 input"
|
|
},
|
|
{
|
|
"name": "encodes large number",
|
|
"input": 100000000000000000000,
|
|
"expected": "100000000000000000000",
|
|
"specSection": "2",
|
|
"note": "1e20"
|
|
},
|
|
{
|
|
"name": "encodes MAX_SAFE_INTEGER",
|
|
"input": 9007199254740991,
|
|
"expected": "9007199254740991",
|
|
"specSection": "2"
|
|
},
|
|
{
|
|
"name": "encodes repeating decimal with full precision",
|
|
"input": 0.3333333333333333,
|
|
"expected": "0.3333333333333333",
|
|
"specSection": "2",
|
|
"note": "Result of 1/3 in JavaScript"
|
|
},
|
|
{
|
|
"name": "encodes true",
|
|
"input": true,
|
|
"expected": "true",
|
|
"specSection": "2"
|
|
},
|
|
{
|
|
"name": "encodes false",
|
|
"input": false,
|
|
"expected": "false",
|
|
"specSection": "2"
|
|
},
|
|
{
|
|
"name": "encodes null",
|
|
"input": null,
|
|
"expected": "null",
|
|
"specSection": "2"
|
|
}
|
|
]
|
|
}
|