| function doubler(k, v) |
| { |
| assertEq(typeof k, "string"); |
| |
| if (typeof v == "number") |
| return 2 * v; |
| |
| return v; |
| } |
| |
| var x = JSON.parse('{"a":5,"b":6}', doubler); |
| assertEq(x.hasOwnProperty('a'), true); |
| assertEq(x.hasOwnProperty('b'), true); |
| assertEq(x.a, 10); |
| assertEq(x.b, 12); |
| |
| x = JSON.parse('[3, 4, 5]', doubler); |
| assertEq(x[0], 6); |
| assertEq(x[1], 8); |
| assertEq(x[2], 10); |
| |
| // make sure reviver isn't called after a failed parse |
| var called = false; |
| function dontCallMe(k, v) |
| { |
| called = true; |
| } |
| |
| try |
| { |
| JSON.parse('{{{{{{{}}}}', dontCallMe); |
| throw new Error("didn't throw?"); |
| } |
| catch (e) |
| { |
| assertEq(e instanceof SyntaxError, true, "wrong exception: " + e); |
| } |
| assertEq(called, false); |
| |
| /******************************************************************************/ |
| |
| if (typeof reportCompare === "function") |
| reportCompare(true, true); |
| |
| print("Tests complete"); |