tor-browser

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

async-disposable-stack-adopt-dispose.js (1995B)


      1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management
      2 
      3 load(libdir + "asserts.js");
      4 
      5 {
      6  const values = [];
      7  const stack = new AsyncDisposableStack();
      8  assertEq(stack.adopt(1, (v) => values.push(v)), 1);
      9  const obj = { value: 2 };
     10  assertEq(stack.adopt(obj, (v) => values.push(v.value)), obj);
     11  assertEq(stack.disposed, false);
     12  stack.disposeAsync();
     13  drainJobQueue();
     14  assertEq(stack.disposed, true);
     15  assertArrayEq(values, [2, 1]);
     16  stack.disposeAsync();
     17  drainJobQueue();
     18  assertArrayEq(values, [2, 1]);
     19  assertThrowsInstanceOf(() => stack.adopt(3, (v) => values.push(v)), ReferenceError);
     20  assertArrayEq(values, [2, 1]);
     21 }
     22 
     23 {
     24  const values = [];
     25  const stack = new AsyncDisposableStack();
     26  assertEq(stack.adopt(1, (v) => values.push(v)), 1);
     27  const obj = { value: 2 };
     28  assertEq(stack.adopt(obj, (v) => values.push(v.value)), obj);
     29  assertEq(stack.disposed, false);
     30  async function testDisposalsWithAwaitUsing() {
     31    {
     32      await using stk = stack;
     33      stk.use({
     34        [Symbol.asyncDispose]() {
     35          values.push(3);
     36        },
     37      });
     38      stk.adopt(4, (v) => values.push(v));
     39    }
     40  }
     41  testDisposalsWithAwaitUsing();
     42  drainJobQueue();
     43  assertEq(stack.disposed, true);
     44  assertArrayEq(values, [4, 3, 2, 1]);
     45 }
     46 
     47 {
     48  const disposed = [];
     49  const stack = new AsyncDisposableStack();
     50  stack.adopt(null, (v) => disposed.push(v));
     51  stack.adopt(undefined, (v) => disposed.push(v));
     52  stack.adopt(1, (v) => disposed.push(v));
     53  stack.disposeAsync();
     54  drainJobQueue();
     55  assertArrayEq(disposed, [1, undefined, null]);
     56 }
     57 
     58 {
     59  assertThrowsInstanceOf(() => {
     60    const stack = new AsyncDisposableStack();
     61    stack.adopt(1, undefined);
     62  }, TypeError);
     63 
     64  assertThrowsInstanceOf(() => {
     65    const stack = new AsyncDisposableStack();
     66    stack.adopt(1, null);
     67  }, TypeError);
     68 
     69  assertThrowsInstanceOf(() => {
     70    const stack = new AsyncDisposableStack();
     71    stack.adopt(1, 1);
     72  }, TypeError);
     73 }