tor-browser

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

async-disposal-in-async-function-preserves-return-value.js (1181B)


      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  let thenCalled = false;
      8  async function testReturnValueIsPreserved() {
      9    await using a = {
     10      [Symbol.asyncDispose]: () => disposed.push("a")
     11    };
     12    await using b = {
     13      [Symbol.asyncDispose]: () => disposed.push("b")
     14    };
     15    return 200;
     16  }
     17  testReturnValueIsPreserved().then((val) => {
     18    thenCalled = true;
     19    assertEq(val, 200);
     20  });
     21  drainJobQueue();
     22  assertEq(thenCalled, true);
     23  assertArrayEq(disposed, ["b", "a"]);
     24 }
     25 
     26 {
     27  const disposed = [];
     28  let thenCalled = false;
     29  async function testReturnValuePreservedWhenWithFinally() {
     30    try {
     31      await using a = {
     32        [Symbol.asyncDispose]: () => disposed.push("a")
     33      }
     34      return 1;
     35    } finally {
     36      await using b = {
     37        [Symbol.asyncDispose]: () => disposed.push("b")
     38      }
     39      return 2;
     40    }
     41  }
     42  testReturnValuePreservedWhenWithFinally().then((val) => {
     43    thenCalled = true;
     44    assertEq(val, 2);
     45  });
     46  drainJobQueue();
     47  assertEq(thenCalled, true);
     48  assertArrayEq(disposed, ["a", "b"]);
     49 }