From b4264b53b66de274de0ca8d2d91fe9563799f930 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 4 Feb 2021 11:54:09 -0800 Subject: [PATCH] test: re-implement promises.setInterval() test robustly Fixes: https://github.com/nodejs/node/issues/37226 PR-URL: https://github.com/nodejs/node/pull/37230 Reviewed-By: Benjamin Gruenbaum --- test/parallel/test-timers-promisified.js | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/parallel/test-timers-promisified.js b/test/parallel/test-timers-promisified.js index 348f6c2ae0476d..3e68470c7dae97 100644 --- a/test/parallel/test-timers-promisified.js +++ b/test/parallel/test-timers-promisified.js @@ -348,6 +348,34 @@ process.on('multipleResolves', common.mustNotCall()); assert.strictEqual(loopCount, 5); })); } + + { + // Check that if we abort when we have some unresolved callbacks, + // we actually call them. + const controller = new AbortController(); + const { signal } = controller; + const delay = 10; + let totalIterations = 0; + const timeoutLoop = runInterval(async (iterationNumber) => { + await setTimeout(delay * 4); + if (iterationNumber <= 2) { + assert.strictEqual(signal.aborted, false); + } + if (iterationNumber === 2) { + controller.abort(); + } + if (iterationNumber > 2) { + assert.strictEqual(signal.aborted, true); + } + if (iterationNumber > totalIterations) { + totalIterations = iterationNumber; + } + }, delay, signal); + + timeoutLoop.catch(common.mustCall(() => { + assert.ok(totalIterations >= 3, `iterations was ${totalIterations} < 3`); + })); + } } {