Skip to content

Commit ba6a5ea

Browse files
committed
Don't perform test-suite-discovery when running specific tests
The change in c32340e to fix "Run All Tests" was also triggering full suite discovery for normal runs of tests. This could make the first test run have a fairly slow startup time. Fixes #5879
1 parent 378bbd3 commit ba6a5ea

3 files changed

Lines changed: 21 additions & 8 deletions

File tree

‎src/extension/test/vs_test_controller.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ export class VsCodeTestController implements TestEventListener, IAmDisposable {
136136
}
137137

138138
public async runTests(debug: boolean, includeCoverage: boolean, request: vs.TestRunRequest, _token: vs.CancellationToken): Promise<void> {
139-
await this.discoverer?.ensureSuitesDiscovered();
139+
// If we're running all tests, ensure we have discovered them first.
140+
if (!request.include)
141+
await this.discoverer?.ensureSuitesDiscovered();
140142

141143
const testsToRun = new Set<vs.TestItem>();
142144
const testsToExclude = new Set<vs.TestItem>();

‎src/shared/vscode/interfaces.ts‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,9 @@ export interface InternalExtensionApi {
138138
getLatestData(test: TestItem): TreeNode | undefined,
139139
handleDebugSessionEnd(e: DebugSession): void,
140140
coverageParser: CoverageParser,
141-
discoverer?: { ensureSuitesDiscovered(): Promise<void> }
142141
};
143142
testCoordinator: TestSessionCoordinator;
144-
testDiscoverer: { forceUpdate(uri: Uri): void, ensureSuitesDiscovered(): Promise<void>, testDiscoveryPerformed: Promise<void> | undefined } | undefined,
143+
testDiscoverer: { forceUpdate(uri: Uri): void, ensureSuitesDiscovered(): Promise<void>, testDiscoveryPerformed: Promise<void> | undefined },
145144
testModel: TestModel;
146145
toolingDaemon: DartToolingDaemon | undefined;
147146
webClient: WebClient;

‎src/test/dart/test/test_discovery.test.ts‎

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as fs from "fs";
33
import * as path from "path";
44
import * as vs from "vscode";
55
import { fsPath, tryDeleteFile } from "../../../shared/utils/fs";
6-
import { activate, checkTreeNodeResults, clearTestTree, defer, delay, getExpectedResults, helloWorldRenameTestFile, helloWorldTestDiscoveryFile, helloWorldTestDiscoveryLargeFile, helloWorldTestFolder, makeTestTextTree, openFile, privateApi, setTestContent, waitForResult } from "../../helpers";
6+
import { activate, checkTreeNodeResults, clearTestTree, defer, delay, fakeCancellationToken, getExpectedResults, helloWorldRenameTestFile, helloWorldTestDiscoveryFile, helloWorldTestDiscoveryLargeFile, helloWorldTestFolder, makeTestTextTree, openFile, privateApi, setTestContent, waitForResult } from "../../helpers";
77

88
describe("dart tests", () => {
99
beforeEach("activate", () => activate());
@@ -84,7 +84,7 @@ hello_world
8484
});
8585

8686
it("does not discover tests in folders excluded by settings", async () => {
87-
await privateApi.testController?.discoverer?.ensureSuitesDiscovered();
87+
await privateApi.testDiscoverer.ensureSuitesDiscovered();
8888
const results = makeTestTextTree();
8989
// Ensure results are valid.
9090
assert.equal(!!results.find((suite) => suite.includes("basic_test")), true, "basic_test was missing from the test list");
@@ -93,7 +93,7 @@ hello_world
9393
});
9494

9595
it("does not discover tests in folders excluded by analysis_options", async () => {
96-
await privateApi.testController?.discoverer?.ensureSuitesDiscovered();
96+
await privateApi.testDiscoverer.ensureSuitesDiscovered();
9797
const results = makeTestTextTree();
9898
// Ensure results are valid.
9999
assert.equal(!!results.find((suite) => suite.includes("basic_test")), true);
@@ -102,7 +102,7 @@ hello_world
102102
});
103103

104104
it("handles create/delete of test files on disk", async () => {
105-
await privateApi.testController?.discoverer?.ensureSuitesDiscovered();
105+
await privateApi.testDiscoverer.ensureSuitesDiscovered();
106106

107107
const newFilename = "disk_create_test.dart";
108108
const newFilePath = path.join(fsPath(helloWorldTestFolder), newFilename);
@@ -127,7 +127,7 @@ void main() => test("test inside ${newFilename}", () {});
127127
});
128128

129129
it("handles renaming of test files on disk", async () => {
130-
await privateApi.testController?.discoverer?.ensureSuitesDiscovered();
130+
await privateApi.testDiscoverer.ensureSuitesDiscovered();
131131

132132
const originalFilename = "disk_rename_original_test.dart";
133133
const originalFilePath = path.join(fsPath(helloWorldTestFolder), originalFilename);
@@ -146,4 +146,16 @@ void main() => test("test inside ${newFilename}", () {});
146146
await waitForResult(() => !makeTestTextTree().some((s) => s.includes(originalFilename)));
147147
await waitForResult(() => makeTestTextTree().some((s) => s.includes(newFilename)));
148148
});
149+
150+
it("discovers tests if runTests is called with undefined include", async () => {
151+
const request = new vs.TestRunRequest();
152+
await privateApi.testController.runTests(false, false, request, fakeCancellationToken);
153+
assert.ok(privateApi.testDiscoverer.testDiscoveryPerformed);
154+
});
155+
156+
it("does not discover tests if runTests is called with empty include", async () => {
157+
const request = new vs.TestRunRequest([]);
158+
await privateApi.testController.runTests(false, false, request, fakeCancellationToken);
159+
assert.ok(!privateApi.testDiscoverer.testDiscoveryPerformed);
160+
});
149161
});

0 commit comments

Comments
 (0)