Source code
Revision control
Copy as Markdown
Other Tools
// Any copyright is dedicated to the Public Domain.
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");