summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Proxy/json-stringify-replacer-array-revocable-proxy.js
blob: 5d667e353a792d6d4952125fc6673be7d71bbe49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 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");