tor-browser

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

finalizationRegistry-multiple.js (1030B)


      1 // Check we get the semantics right when registering the same target multiple
      2 // times and when unregister tokens die before the registry.
      3 
      4 gczeal(0);
      5 
      6 let vs = [];
      7 let r = new FinalizationRegistry(v => vs.push(v));
      8 let t;
      9 
     10 function check(n) {
     11  gc();
     12  drainJobQueue();
     13  assertEq(vs.length, n);
     14  vs = vs.sort();
     15  for (let i = 0; i < n; i++) {
     16    assertEq(vs[i], i);
     17  }
     18  vs = [];
     19 }
     20 
     21 // No token.
     22 
     23 t = {};
     24 r.register(t, 0);
     25 r.register(t, 1);
     26 check(0);
     27 t = undefined;
     28 check(2);
     29 
     30 // One token.
     31 
     32 t = {};
     33 let k = {};
     34 r.register(t, 0, k);
     35 r.register(t, 1, k);
     36 check(0);
     37 k = undefined;
     38 check(0);
     39 t = undefined;
     40 check(2);
     41 
     42 // Two tokens.
     43 
     44 t = {};
     45 let k1 = {};
     46 let k2 = {};
     47 r.register(t, 0, k1);
     48 r.register(t, 1, k1);
     49 r.register(t, 2, k2);
     50 r.register(t, 3, k2);
     51 check(0);
     52 t = undefined;
     53 check(4);
     54 
     55 // Two tokens with unregister.
     56 
     57 t = {};
     58 k1 = {};
     59 k2 = {};
     60 r.register(t, 0, k1);
     61 r.register(t, 1, k1);
     62 r.register(t, 2, k2);
     63 r.register(t, 3, k2);
     64 check(0);
     65 r.unregister(k2);
     66 check(0);
     67 k1 = undefined;
     68 check(0);
     69 t = undefined;
     70 check(2);