tor-browser

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

disposable-stack-move.js (1802B)


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