summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMoshe Atlow <moshe@atlow.co.il>2023-04-22 23:32:12 +0300
committerNode.js GitHub Bot <github-bot@iojs.org>2023-04-24 22:32:01 +0000
commitdccd25e5bb524d56bc8ad7f703204a9852f574a4 (patch)
treefca03688f909d7428b26f2738546cd07310e4eea /lib
parentdac02632a6394458727cf448178d96c2636f4455 (diff)
downloadnode-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.js8
-rw-r--r--lib/internal/test_runner/runner.js26
-rw-r--r--lib/internal/test_runner/test.js2
-rw-r--r--lib/internal/test_runner/tests_stream.js4
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 });