json.js (1997B)
1 function testBasic() { 2 // Latin1 3 var s = '[1, 2, "foo", "bar\\r\\n", {"xyz": 3}, [1, 2, 3]]'; 4 assertEq(isLatin1(s), true); 5 assertEq(JSON.stringify(JSON.parse(s)), '[1,2,"foo","bar\\r\\n",{"xyz":3},[1,2,3]]'); 6 7 // TwoByte 8 s = '[1, 2, "foo\u1200", "bar\\r\\n", {"xyz": 3}, [1, 2, 3]]'; 9 assertEq(JSON.stringify(JSON.parse(s)), '[1,2,"foo\u1200","bar\\r\\n",{"xyz":3},[1,2,3]]'); 10 } 11 testBasic(); 12 13 function testErrorPos() { 14 // Make sure the error location is calculated correctly. 15 16 // Latin1 17 var s = '[1, \n2,'; 18 try { 19 JSON.parse(s); 20 assertEq(0, 1); 21 } catch(e) { 22 assertEq(e instanceof SyntaxError, true); 23 assertEq(e.toString().includes("line 2 column 3"), true); 24 } 25 26 s = '[1, "\u1300",\n2,'; 27 try { 28 JSON.parse(s); 29 assertEq(0, 1); 30 } catch(e) { 31 assertEq(e instanceof SyntaxError, true); 32 assertEq(e.toString().includes("line 2 column 3"), true); 33 } 34 } 35 testErrorPos(); 36 37 function testEvalHack() { 38 // Latin1 39 var arr = eval("[1, 2, 3, \"abc\"]"); 40 assertEq(JSON.stringify(arr), '[1,2,3,"abc"]'); 41 assertEq(isLatin1(JSON.stringify(arr)), true); 42 43 // TwoByte 44 arr = eval("[1, 2, 3, \"abc\u1200\"]"); 45 assertEq(JSON.stringify(arr), '[1,2,3,"abc\u1200"]'); 46 } 47 testEvalHack(); 48 49 function testEvalHackNotJSON() { 50 // Latin1 51 var arr = eval("[]; var q; [1, 2, 3, \"abc\"]"); 52 assertEq(JSON.stringify(arr), '[1,2,3,"abc"]'); 53 54 // TwoByte 55 arr = eval("[]; var z; [1, 2, 3, \"abc\u1200\"]"); 56 assertEq(JSON.stringify(arr), '[1,2,3,"abc\u1200"]'); 57 58 var arr = eval("[1, 2, 3, \"abc\u2028\"]"); 59 assertEq(arr.length, 4); 60 assertEq(arr[3], "abc\u2028"); 61 } 62 testEvalHackNotJSON(); 63 64 function testQuote() { 65 // Latin1 66 var s = "abc--\x05-'\"-\n-\u00ff++"; 67 var res = JSON.stringify(s); 68 assertEq(res, '"abc--\\u0005-\'\\"-\\n-\xFF++"'); 69 assertEq(isLatin1(res), true); 70 71 // TwoByte 72 s += "\uAAAA"; 73 assertEq(JSON.stringify(s), '"abc--\\u0005-\'\\"-\\n-\xFF++\uAAAA"'); 74 } 75 testQuote();