diff options
Diffstat (limited to 'runtime/js/40_testing.js')
-rw-r--r-- | runtime/js/40_testing.js | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/runtime/js/40_testing.js b/runtime/js/40_testing.js index e8b07d494..90da6ddb0 100644 --- a/runtime/js/40_testing.js +++ b/runtime/js/40_testing.js @@ -12,6 +12,7 @@ AggregateError, ArrayPrototypeFilter, ArrayPrototypePush, + ArrayPrototypeShift, ArrayPrototypeSome, DateNow, Error, @@ -30,7 +31,7 @@ } = window.__bootstrap.primordials; let testStepsEnabled = false; - let opSanitizerDelayResolve = null; + const opSanitizerDelayResolveQueue = []; // Even if every resource is closed by the end of a test, there can be a delay // until the pending ops have all finished. This function returns a promise @@ -42,23 +43,16 @@ // before that, though, in order to give time for worker message ops to finish // (since timeouts of 0 don't queue tasks in the timer queue immediately). function opSanitizerDelay() { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { setTimeout(() => { - if (opSanitizerDelayResolve !== null) { - reject(new Error("There is an op sanitizer delay already.")); - } else { - opSanitizerDelayResolve = resolve; - } + ArrayPrototypePush(opSanitizerDelayResolveQueue, resolve); }, 0); }); } function handleOpSanitizerDelayMacrotask() { - if (opSanitizerDelayResolve !== null) { - opSanitizerDelayResolve(); - opSanitizerDelayResolve = null; - } - return true; + ArrayPrototypeShift(opSanitizerDelayResolveQueue)?.(); + return opSanitizerDelayResolveQueue.length === 0; } // Wrap test function in additional assertion that makes sure |