summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/js/40_testing.js18
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