summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/tests/unit/test_symbols_as_weak_keys.js
blob: 24734b7594d34c1d54bfbc7913e7224e53fa982c (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
40
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
function run_test()
{
  if (!Services.prefs.getBoolPref("javascript.options.experimental.symbols_as_weakmap_keys")) {
    return;
  }

  var strKey = new String("strKey");
  var symKey = Symbol("symKey");

  var weakset = new WeakSet([strKey, symKey]);
  var weakmap = new WeakMap();
  weakmap.set(strKey, 23);
  weakmap.set(symKey, "oh no");

  var keys = ChromeUtils.nondeterministicGetWeakMapKeys(weakmap);
  equal(keys.length, 2, "length of nondeterministicGetWeakMapKeys");
  equal(weakmap.get(strKey), 23, "check strKey in weakmap");
  equal(weakmap.get(symKey), "oh no", "check symKey in weakmap");

  keys = ChromeUtils.nondeterministicGetWeakSetKeys(weakset);
  equal(keys.length, 2, "length of nondeterministicGetWeakSetKeys");
  ok(weakset.has(strKey), "check strKey in weakset");
  ok(weakset.has(symKey), "check symKey in weakset");

  strKey = null;
  keys = null;

  Cu.forceGC();

  keys = ChromeUtils.nondeterministicGetWeakMapKeys(weakmap);
  equal(keys.length, 1, "length of nondeterministicGetWeakMapKeys after GC");
  equal(weakmap.get(symKey), "oh no", "check symKey still in weakmap");

  keys = ChromeUtils.nondeterministicGetWeakSetKeys(weakset);
  equal(keys.length, 1, "length of nondeterministicGetWeakSetKeys after GC");
  ok(weakset.has(symKey), "check symKey still in weakset");
}