From 219a570a75f1c3df67ae0282e41848b87781fc51 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 20 Aug 2019 17:18:31 -0700 Subject: [PATCH] Fix discovery and execution of root-level tests in the parallel runner (#32980) --- src/testRunner/parallel/host.ts | 1 + src/testRunner/parallel/worker.ts | 36 ++++++++++++++----- .../initial-build/resolves-correctly.js | 12 +++---- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/testRunner/parallel/host.ts b/src/testRunner/parallel/host.ts index 50b18e39ac1..ad3f96ece63 100644 --- a/src/testRunner/parallel/host.ts +++ b/src/testRunner/parallel/host.ts @@ -626,6 +626,7 @@ namespace Harness.Parallel.Host { const perfData = readSavedPerfData(configOption); context.describe = addSuite as Mocha.SuiteFunction; + context.it = addSuite as Mocha.TestFunction; function addSuite(title: string) { // Note, sub-suites are not indexed (we assume such granularity is not required) diff --git a/src/testRunner/parallel/worker.ts b/src/testRunner/parallel/worker.ts index 7579242ffaa..bf41fcb4b1e 100644 --- a/src/testRunner/parallel/worker.ts +++ b/src/testRunner/parallel/worker.ts @@ -151,24 +151,42 @@ namespace Harness.Parallel.Worker { unitTestSuiteMap.set(suite.title, suite); } } + if (!unitTestTestMap && unitTestSuite.tests.length) { + unitTestTestMap = ts.createMap(); + for (const test of unitTestSuite.tests) { + unitTestTestMap.set(test.title, test); + } + } - if (!unitTestSuiteMap) { + if (!unitTestSuiteMap && !unitTestTestMap) { throw new Error(`Asked to run unit test ${task.file}, but no unit tests were discovered!`); } - const suite = unitTestSuiteMap.get(task.file); - if (!suite) { + let suite = unitTestSuiteMap.get(task.file); + const test = unitTestTestMap.get(task.file); + if (!suite && !test) { throw new Error(`Unit test with name "${task.file}" was asked to be run, but such a test does not exist!`); } const root = new Suite("", new Mocha.Context()); root.timeout(globalTimeout || 40_000); - root.addSuite(suite); - Object.setPrototypeOf(suite.ctx, root.ctx); + if (suite) { + root.addSuite(suite); + Object.setPrototypeOf(suite.ctx, root.ctx); + } + else if (test) { + const newSuite = new Suite("", new Mocha.Context()); + newSuite.addTest(test); + root.addSuite(newSuite); + Object.setPrototypeOf(newSuite.ctx, root.ctx); + Object.setPrototypeOf(test.ctx, root.ctx); + test.parent = newSuite; + suite = newSuite; + } - runSuite(task, suite, payload => { - suite.parent = unitTestSuite; - Object.setPrototypeOf(suite.ctx, unitTestSuite.ctx); + runSuite(task, suite!, payload => { + suite!.parent = unitTestSuite; + Object.setPrototypeOf(suite!.ctx, unitTestSuite.ctx); fn(payload); }); } @@ -284,6 +302,8 @@ namespace Harness.Parallel.Worker { // The root suite for all unit tests. let unitTestSuite: Suite; let unitTestSuiteMap: ts.Map; + // (Unit) Tests directly within the root suite + let unitTestTestMap: ts.Map; if (runUnitTests) { unitTestSuite = new Suite("", new Mocha.Context()); diff --git a/tests/baselines/reference/tsbuild/moduleSpecifiers/initial-build/resolves-correctly.js b/tests/baselines/reference/tsbuild/moduleSpecifiers/initial-build/resolves-correctly.js index a664688e748..2ba8fa80817 100644 --- a/tests/baselines/reference/tsbuild/moduleSpecifiers/initial-build/resolves-correctly.js +++ b/tests/baselines/reference/tsbuild/moduleSpecifiers/initial-build/resolves-correctly.js @@ -14,8 +14,8 @@ exports.__esModule = true; "program": { "fileInfos": { "../../../.ts/lib.es5.d.ts": { - "version": "146944634190", - "signature": "146944634190" + "version": "406734842058", + "signature": "406734842058" }, "../../../.ts/lib.es2015.d.ts": { "version": "57263133672", @@ -114,8 +114,8 @@ exports.__esModule = true; "program": { "fileInfos": { "../../../.ts/lib.es5.d.ts": { - "version": "146944634190", - "signature": "146944634190" + "version": "406734842058", + "signature": "406734842058" }, "../../../.ts/lib.es2015.d.ts": { "version": "57263133672", @@ -237,8 +237,8 @@ exports.getVar = getVar; "program": { "fileInfos": { "../../../.ts/lib.es5.d.ts": { - "version": "146944634190", - "signature": "146944634190" + "version": "406734842058", + "signature": "406734842058" }, "../../../.ts/lib.es2015.d.ts": { "version": "57263133672",