// Any copyright is dedicated to the Public Domain. // http://creativecommons.org/licenses/publicdomain/ var gTestfile = "json-stringify-replacer-array-revocable-proxy.js"; //----------------------------------------------------------------------------- var BUGNUMBER = 1196497; var summary = "Don't assert when JSON.stringify is passed a revocable proxy to an array, " + "then that proxy is revoked midflight during stringification"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ var arr = []; var { proxy, revoke } = Proxy.revocable(arr, { get(thisv, prop, receiver) { // First (and only) get will be for "length", to determine the length of the // list of properties to serialize. Returning 0 uses the empty list, // resulting in |a: 0| being ignored below. assertEq(thisv, arr); assertEq(prop, "length"); assertEq(receiver, proxy); revoke(); return 0; } }); assertEq(JSON.stringify({a: 0}, proxy), "{}"); /******************************************************************************/ if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete");