tor-browser

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

disposable-stack-adopt-dispose.js (1732B)


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