tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Set.js (1965B)


      1 /*
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/licenses/publicdomain/
      4 */
      5 
      6 load(libdir + "asserts.js");
      7 
      8 var set = new Set();
      9 set.add(set);
     10 
     11 var magic = deserialize(serialize(set));
     12 assertEq(magic.size, 1);
     13 assertEq(magic.values().next().value, magic);
     14 
     15 var values = [
     16    "a", "\uDEFF", undefined, null, -3.5, true, false, NaN, 155, -2
     17 ]
     18 
     19 set = new Set();
     20 for (var value of values) {
     21    set.add(value)
     22 }
     23 
     24 magic = deserialize(serialize(set));
     25 var i = 0;
     26 for (value of magic) {
     27    assertEq(value, values[i++]);
     28 }
     29 
     30 assertDeepEq([...set.keys()], [...magic.keys()]);
     31 assertDeepEq([...set.values()], [...magic.values()]);
     32 
     33 var obj = {a: 1};
     34 obj.set = new Set();
     35 obj.set.add(obj);
     36 
     37 magic = deserialize(serialize(obj));
     38 
     39 assertEq(magic.set.values().next().value, magic);
     40 assertEq(magic.a, 1);
     41 
     42 set = new Set();
     43 set.add(new Number(1));
     44 set.add(new String("aaaa"));
     45 set.add(new Date(NaN));
     46 
     47 magic = deserialize(serialize(set));
     48 
     49 values = magic.values();
     50 assertEq(values.next().value.valueOf(), 1);
     51 assertEq(values.next().value.valueOf(), "aaaa");
     52 assertEq(values.next().value.valueOf(), NaN);
     53 assertEq(values.next().done, true);
     54 
     55 // Make sure expandos aren't cloned (Bug 1041172)
     56 set = new Set();
     57 set.a = "aaaaa";
     58 magic = deserialize(serialize(set));
     59 assertEq("a" in magic, false);
     60 assertEq(Object.keys(magic).length, 0);
     61 
     62 // Busted [[Prototype]] shouldn't matter
     63 set = new Set();
     64 Object.setPrototypeOf(set, null);
     65 Set.prototype.add.call(set, "aaa");
     66 magic = deserialize(serialize(set));
     67 assertEq(magic.has("aaa"), true);
     68 assertEq(magic.size, 1);
     69 
     70 // Can't fuzz around with Set after it is cloned
     71 obj = {
     72    a: new Set(),
     73    get b() {
     74        obj.a.delete("test");
     75        return "invoked";
     76    }
     77 }
     78 obj.a.add("test");
     79 assertEq(obj.a.has("test"), true);
     80 magic = deserialize(serialize(obj));
     81 assertEq(obj.a.has("test"), false);
     82 assertEq(magic.a.size, 1);
     83 assertEq([...magic.a.keys()].toString(), "test");
     84 assertEq(magic.b, "invoked");