tor-browser

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

async-disposable-stack-defer-dispose.js (1759B)


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