tor-browser

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

asyncHelpers-throwsAsync-func-never-settles.js (1148B)


      1 // |reftest| async
      2 // Copyright (C) 2024 Julián Espina. All rights reserved.
      3 // This code is governed by the BSD license found in the LICENSE file.
      4 /*---
      5 description: |
      6    assert.throwsAsync returns a promise that never settles if func returns a thenable that never settles.
      7 flags: [async]
      8 includes: [asyncHelpers.js]
      9 ---*/
     10 
     11 var realDone = $DONE;
     12 var doneCalls = 0
     13 globalThis.$DONE = function () {
     14  doneCalls++;
     15 }
     16 
     17 function delay() {
     18  var later = Promise.resolve();
     19  for (var i = 0; i < 100; i++) {
     20    later = later.then();
     21  }
     22  return later;
     23 }
     24 
     25 (async function () {
     26  // Spy on the promise returned by an invocation of assert.throwsAsync
     27  // with a function that returns a thenable which never settles.
     28  var neverSettlingThenable = { then: function () { } };
     29  const p = assert.throwsAsync(TypeError, function () { return neverSettlingThenable });
     30  assert(p instanceof Promise, "assert.throwsAsync should return a promise");
     31  p.then($DONE, $DONE);
     32 })()
     33  // Give it a long time to try.
     34  .then(delay, delay)
     35  .then(function () {
     36    assert.sameValue(doneCalls, 0, "$DONE should not have been called")
     37  })
     38  .then(realDone, realDone);