tor-browser

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

await-using-causes-awaits.js (1951B)


      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 wasStartedBeforeAwait = false;
      8  let didEvaluatePrecedingBlockStatementsBeforeAwait = false;
      9  let didEvaluateFollowingBlockStatementsBeforeAwait = false;
     10  let allStatementsRanBeforeAwait = false;
     11 
     12  async function testAwaitUsingCausesAnAwait(evaluateAwaitUsing) {
     13    let isRunningBeforeAwait = true;
     14 
     15    async function f() {
     16      wasStartedBeforeAwait = isRunningBeforeAwait;
     17      outer: {
     18        didEvaluatePrecedingBlockStatementsBeforeAwait = isRunningBeforeAwait;
     19        if (!evaluateAwaitUsing) break outer;
     20        await using _ = {
     21          [Symbol.asyncDispose]() {
     22            disposed.push(1);
     23          }
     24        };
     25        didEvaluateFollowingBlockStatementsBeforeAwait = isRunningBeforeAwait;
     26      }
     27      allStatementsRanBeforeAwait = isRunningBeforeAwait;
     28    }
     29 
     30    let p = f();
     31    isRunningBeforeAwait = false;
     32    await p;
     33  }
     34  testAwaitUsingCausesAnAwait(false);
     35  drainJobQueue();
     36  assertEq(wasStartedBeforeAwait, true);
     37  assertEq(didEvaluatePrecedingBlockStatementsBeforeAwait, true);
     38  assertEq(allStatementsRanBeforeAwait, true);
     39  assertArrayEq(disposed, []);
     40 
     41  wasStartedBeforeAwait = false;
     42  didEvaluatePrecedingBlockStatementsBeforeAwait = false;
     43  didEvaluateFollowingBlockStatementsBeforeAwait = false;
     44  allStatementsRanBeforeAwait = false;
     45  testAwaitUsingCausesAnAwait(true);
     46  drainJobQueue();
     47  assertEq(wasStartedBeforeAwait, true);
     48  // the await using statement is supposed to cause an await right before the scope
     49  // end thus the block statements should be evaluated synchronously until the scope end.
     50  assertEq(didEvaluatePrecedingBlockStatementsBeforeAwait, true);
     51  assertEq(didEvaluateFollowingBlockStatementsBeforeAwait, true);
     52  assertEq(allStatementsRanBeforeAwait, false);
     53  assertArrayEq(disposed, [1]);
     54 }