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