diff options
author | Moshe Atlow <moshe@atlow.co.il> | 2023-04-22 23:32:12 +0300 |
---|---|---|
committer | Node.js GitHub Bot <github-bot@iojs.org> | 2023-04-24 22:32:01 +0000 |
commit | dccd25e5bb524d56bc8ad7f703204a9852f574a4 (patch) | |
tree | fca03688f909d7428b26f2738546cd07310e4eea /lib | |
parent | dac02632a6394458727cf448178d96c2636f4455 (diff) | |
download | node-new-dccd25e5bb524d56bc8ad7f703204a9852f574a4.tar.gz |
test_runner: fix test runner concurrency
PR-URL: https://github.com/nodejs/node/pull/47675
Fixes: https://github.com/nodejs/node/issues/47365
Fixes: https://github.com/nodejs/node/issues/47696
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/internal/per_context/primordials.js | 8 | ||||
-rw-r--r-- | lib/internal/test_runner/runner.js | 26 | ||||
-rw-r--r-- | lib/internal/test_runner/test.js | 2 | ||||
-rw-r--r-- | lib/internal/test_runner/tests_stream.js | 4 |
4 files changed, 24 insertions, 16 deletions
diff --git a/lib/internal/per_context/primordials.js b/lib/internal/per_context/primordials.js index 59c285cd16..d7a846b29e 100644 --- a/lib/internal/per_context/primordials.js +++ b/lib/internal/per_context/primordials.js @@ -565,13 +565,7 @@ primordials.SafePromiseAllSettled = (promises, mapFn) => * @returns {Promise<void>} */ primordials.SafePromiseAllSettledReturnVoid = async (promises, mapFn) => { - for (let i = 0; i < promises.length; i++) { - try { - await (mapFn != null ? mapFn(promises[i], i) : promises[i]); - } catch { - // In all settled, we can ignore errors. - } - } + await primordials.SafePromiseAllSettled(promises, mapFn); }; /** diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js index 0c31e75f70..27be482958 100644 --- a/lib/internal/test_runner/runner.js +++ b/lib/internal/test_runner/runner.js @@ -207,10 +207,6 @@ class FileTest extends Test { const testNumber = nesting === 0 ? (this.root.harness.counters.topLevel + 1) : node.id; const method = pass ? 'ok' : 'fail'; this.reporter[method](nesting, this.name, testNumber, node.description, diagnostics, directive); - if (nesting === 0) { - this.failedSubtests ||= !pass; - } - this.#reportedChildren++; countCompletedTest({ name: node.description, finished: true, @@ -237,22 +233,36 @@ class FileTest extends Test { break; } } + #accumulateReportItem({ kind, node, comments, nesting = 0 }) { + if (kind !== TokenKind.TAP_TEST_POINT) { + return; + } + this.#reportedChildren++; + if (nesting === 0 && !node.status.pass) { + this.failedSubtests = true; + } + } + #drainBuffer() { + if (this.#buffer.length > 0) { + ArrayPrototypeForEach(this.#buffer, (ast) => this.#handleReportItem(ast)); + this.#buffer = []; + } + } addToReport(ast) { + this.#accumulateReportItem(ast); if (!this.isClearToSend()) { ArrayPrototypePush(this.#buffer, ast); return; } - this.reportStarted(); + this.#drainBuffer(); this.#handleReportItem(ast); } reportStarted() {} report() { + this.#drainBuffer(); const skipReporting = this.#skipReporting(); if (!skipReporting) { super.reportStarted(); - } - ArrayPrototypeForEach(this.#buffer, (ast) => this.#handleReportItem(ast)); - if (!skipReporting) { super.report(); } } diff --git a/lib/internal/test_runner/test.js b/lib/internal/test_runner/test.js index 8388a1797f..1f888bc627 100644 --- a/lib/internal/test_runner/test.js +++ b/lib/internal/test_runner/test.js @@ -658,7 +658,7 @@ class Test extends AsyncResource { this.reporter.coverage(this.nesting, kFilename, coverage); } - this.reporter.push(null); + this.reporter.end(); } } diff --git a/lib/internal/test_runner/tests_stream.js b/lib/internal/test_runner/tests_stream.js index c32d57d3b4..68379fed11 100644 --- a/lib/internal/test_runner/tests_stream.js +++ b/lib/internal/test_runner/tests_stream.js @@ -59,6 +59,10 @@ class TestsStream extends Readable { this.#emit('test:coverage', { __proto__: null, nesting, file, summary }); } + end() { + this.#tryPush(null); + } + #emit(type, data) { this.emit(type, data); this.#tryPush({ type, data }); |