Skip to content

Commit 276dc9b

Browse files
committed
Avoid folder events test improperly recording the defaultPackage addition in extension setup
1 parent 5ddedba commit 276dc9b

File tree

1 file changed

+42
-21
lines changed

1 file changed

+42
-21
lines changed

test/integration-tests/WorkspaceContext.test.ts

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { createBuildAllTask } from "../../src/tasks/SwiftTaskProvider";
2020
import { Version } from "../../src/utilities/version";
2121
import { SwiftExecution } from "../../src/tasks/SwiftExecution";
2222
import { activateExtensionForSuite } from "./utilities/testutilities";
23+
import { FolderContext } from "../../src/FolderContext";
2324

2425
function assertContainsArg(execution: SwiftExecution, arg: string) {
2526
assert(execution?.args.find(a => a === arg));
@@ -36,39 +37,53 @@ suite("WorkspaceContext Test Suite", () => {
3637
let workspaceContext: WorkspaceContext;
3738
const packageFolder: vscode.Uri = testAssetUri("defaultPackage");
3839

39-
activateExtensionForSuite({
40-
async setup(ctx) {
41-
workspaceContext = ctx;
42-
},
43-
});
44-
4540
suite("Folder Events", () => {
41+
activateExtensionForSuite({
42+
async setup(ctx) {
43+
workspaceContext = ctx;
44+
},
45+
// No default assets as we want to verify against a clean workspace.
46+
testAssets: [],
47+
});
48+
4649
test("Add", async () => {
47-
let count = 0;
4850
let observer: vscode.Disposable | undefined;
51+
const recordedFolders: {
52+
folder: FolderContext | null;
53+
operation: FolderOperation;
54+
}[] = [];
55+
4956
try {
50-
observer = workspaceContext?.onDidChangeFolders(({ folder, operation }) => {
51-
assert(folder !== null);
52-
assert.strictEqual(folder!.swiftPackage.name, "package2");
53-
switch (operation) {
54-
case FolderOperation.add:
55-
count++;
56-
break;
57-
}
57+
observer = workspaceContext.onDidChangeFolders(changedFolderRecord => {
58+
recordedFolders.push(changedFolderRecord);
5859
});
60+
5961
const workspaceFolder = vscode.workspace.workspaceFolders?.values().next().value;
60-
if (!workspaceFolder) {
61-
throw new Error("No workspace folders found in workspace");
62-
}
63-
await workspaceContext?.addPackageFolder(testAssetUri("package2"), workspaceFolder);
64-
assert.strictEqual(count, 1);
62+
63+
assert.ok(workspaceFolder, "No workspace folders found in workspace");
64+
65+
await workspaceContext.addPackageFolder(testAssetUri("package2"), workspaceFolder);
66+
67+
const foldersNames = recordedFolders.map(({ folder }) => folder?.swiftPackage.name);
68+
assert.deepStrictEqual(foldersNames, ["package2"]);
69+
70+
const addedCount = recordedFolders.filter(
71+
({ operation }) => operation === FolderOperation.add
72+
).length;
73+
assert.strictEqual(addedCount, 1, "Expected only one add folder operation");
6574
} finally {
6675
observer?.dispose();
6776
}
68-
}).timeout(15000);
77+
}).timeout(60000);
6978
});
7079

7180
suite("Tasks", async function () {
81+
activateExtensionForSuite({
82+
async setup(ctx) {
83+
workspaceContext = ctx;
84+
},
85+
});
86+
7287
// Was hitting a timeout in suiteSetup during CI build once in a while
7388
this.timeout(5000);
7489

@@ -158,6 +173,12 @@ suite("WorkspaceContext Test Suite", () => {
158173
});
159174

160175
suite("Toolchain", () => {
176+
activateExtensionForSuite({
177+
async setup(ctx) {
178+
workspaceContext = ctx;
179+
},
180+
});
181+
161182
test("get project templates", async () => {
162183
// This is only supported in swift versions >=5.8.0
163184
const swiftVersion = workspaceContext.toolchain.swiftVersion;

0 commit comments

Comments
 (0)