Skip to content

Commit c3123a7

Browse files
committed
- Update enum name to match convention
- Move tests to a more appropriate location under integration-tests/commands
1 parent 8428eee commit c3123a7

File tree

8 files changed

+230
-248
lines changed

8 files changed

+230
-248
lines changed

assets/test/dependencies/.vscode/launch.json

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/commands.ts

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export function registerToolchainCommands(
6464
];
6565
}
6666

67-
export enum COMMANDS {
67+
export enum Commands {
6868
ResolveDependencies = "swift.resolveDependencies",
6969
UpdateDependencies = "swift.updateDependencies",
7070
RunTestsMultipleTimes = "swift.runTestsMultipleTimes",
@@ -80,34 +80,31 @@ export enum COMMANDS {
8080
export function register(ctx: WorkspaceContext): vscode.Disposable[] {
8181
return [
8282
vscode.commands.registerCommand("swift.newFile", uri => newSwiftFile(uri)),
83-
vscode.commands.registerCommand(COMMANDS.ResolveDependencies, () =>
83+
vscode.commands.registerCommand(Commands.ResolveDependencies, () =>
8484
resolveDependencies(ctx)
8585
),
86-
vscode.commands.registerCommand(COMMANDS.UpdateDependencies, () => updateDependencies(ctx)),
86+
vscode.commands.registerCommand(Commands.UpdateDependencies, () => updateDependencies(ctx)),
8787
vscode.commands.registerCommand("swift.run", () => runBuild(ctx)),
8888
vscode.commands.registerCommand("swift.debug", () => debugBuild(ctx)),
8989
vscode.commands.registerCommand("swift.cleanBuild", () => cleanBuild(ctx)),
90-
vscode.commands.registerCommand(COMMANDS.RunTestsMultipleTimes, item => {
90+
vscode.commands.registerCommand(Commands.RunTestsMultipleTimes, item => {
9191
if (ctx.currentFolder) {
9292
return runTestMultipleTimes(ctx.currentFolder, item, false);
9393
}
94-
return false;
9594
}),
9695
vscode.commands.registerCommand("swift.runTestsUntilFailure", item => {
9796
if (ctx.currentFolder) {
9897
return runTestMultipleTimes(ctx.currentFolder, item, true);
9998
}
100-
return false;
10199
}),
102100
// Note: This is only available on macOS (gated in `package.json`) because its the only OS that has the iOS SDK available.
103101
vscode.commands.registerCommand("swift.switchPlatform", () => switchPlatform()),
104-
vscode.commands.registerCommand(COMMANDS.ResetPackage, () => resetPackage(ctx)),
102+
vscode.commands.registerCommand(Commands.ResetPackage, () => resetPackage(ctx)),
105103
vscode.commands.registerCommand("swift.runScript", () => runSwiftScript(ctx)),
106104
vscode.commands.registerCommand("swift.openPackage", () => {
107105
if (ctx.currentFolder) {
108106
return openPackage(ctx.toolchain.swiftVersion, ctx.currentFolder.folder);
109107
}
110-
return false;
111108
}),
112109
vscode.commands.registerCommand("swift.runSnippet", () => runSnippet(ctx)),
113110
vscode.commands.registerCommand("swift.debugSnippet", () => debugSnippet(ctx)),
@@ -119,29 +116,25 @@ export function register(ctx: WorkspaceContext): vscode.Disposable[] {
119116
vscode.commands.registerCommand("swift.insertFunctionComment", () =>
120117
insertFunctionComment(ctx)
121118
),
122-
vscode.commands.registerCommand(COMMANDS.UseLocalDependency, item => {
119+
vscode.commands.registerCommand(Commands.UseLocalDependency, item => {
123120
if (item instanceof PackageNode) {
124121
return useLocalDependency(item.name, ctx);
125122
}
126-
return false;
127123
}),
128124
vscode.commands.registerCommand("swift.editDependency", item => {
129125
if (item instanceof PackageNode) {
130126
return editDependency(item.name, ctx);
131127
}
132-
return false;
133128
}),
134-
vscode.commands.registerCommand(COMMANDS.UneditDependency, item => {
129+
vscode.commands.registerCommand(Commands.UneditDependency, item => {
135130
if (item instanceof PackageNode) {
136131
return uneditDependency(item.name, ctx);
137132
}
138-
return false;
139133
}),
140134
vscode.commands.registerCommand("swift.openInWorkspace", item => {
141135
if (item instanceof PackageNode) {
142136
return openInWorkspace(item);
143137
}
144-
return false;
145138
}),
146139
vscode.commands.registerCommand("swift.openExternal", item => {
147140
if (item instanceof PackageNode) {
@@ -160,5 +153,3 @@ export function register(ctx: WorkspaceContext): vscode.Disposable[] {
160153
),
161154
];
162155
}
163-
164-
// Note: This is only available on macOS (gated in `package.json`) because its the only OS that has the iOS SDK available.

src/commands/dependencies/unedit.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export async function uneditDependency(identifier: string, ctx: WorkspaceContext
3535
});
3636
}
3737

38-
export async function uneditFolderDependency(
38+
async function uneditFolderDependency(
3939
folder: FolderContext,
4040
identifier: string,
4141
ctx: WorkspaceContext,

src/commands/dependencies/useLocal.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,9 @@ export async function useLocalDependency(
6161
`Use local version of ${identifier}`,
6262
currentFolder,
6363
true
64-
).then(
65-
success => {
66-
if (success) {
67-
ctx.fireEvent(currentFolder, FolderOperation.resolvedUpdated);
68-
}
69-
return success;
70-
},
71-
reason => {
72-
console.log(`reason:${reason}`);
73-
return false;
74-
}
7564
);
65+
if (success) {
66+
ctx.fireEvent(currentFolder, FolderOperation.resolvedUpdated);
67+
}
7668
return success;
7769
}

src/commands/utilities.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export async function executeTaskWithUI(
3131
task: vscode.Task,
3232
description: string,
3333
folderContext: FolderContext,
34-
showErrors = true,
34+
showErrors = false,
3535
checkAlreadyRunning: boolean = false
3636
): Promise<boolean> {
3737
try {
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the VS Code Swift open source project
4+
//
5+
// Copyright (c) 2024 the VS Code Swift project authors
6+
// Licensed under Apache License v2.0
7+
//
8+
// See LICENSE.txt for license information
9+
// See CONTRIBUTORS.txt for the list of VS Code Swift project authors
10+
//
11+
// SPDX-License-Identifier: Apache-2.0
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
import { expect } from "chai";
16+
import * as vscode from "vscode";
17+
import {
18+
PackageDependenciesProvider,
19+
PackageNode,
20+
} from "../../../src/ui/PackageDependencyProvider";
21+
import { folderContextPromise, globalWorkspaceContextPromise } from "../extension.test";
22+
import { executeTaskAndWaitForResult, waitForNoRunningTasks } from "../../utilities";
23+
import { getBuildAllTask, SwiftTask } from "../../../src/tasks/SwiftTaskProvider";
24+
import { testAssetUri } from "../../fixtures";
25+
import { FolderContext } from "../../../src/FolderContext";
26+
import { WorkspaceContext } from "../../../src/WorkspaceContext";
27+
import * as sinon from "sinon";
28+
import { Commands } from "../../../src/commands";
29+
30+
suite("Dependency Commmands Test Suite", function () {
31+
// full workflow's interaction with spm is also longer than the default timeout
32+
this.timeout(2 * 60 * 1000);
33+
34+
suite("spm Resolve Update Contract Tests", function () {
35+
let folderContext: FolderContext;
36+
let workspaceContext: WorkspaceContext;
37+
38+
suiteSetup(async function () {
39+
workspaceContext = await globalWorkspaceContextPromise;
40+
await waitForNoRunningTasks();
41+
folderContext = await folderContextPromise("dependencies");
42+
await workspaceContext.focusFolder(folderContext);
43+
});
44+
45+
test("Contract: spm resolve", async () => {
46+
const result = await vscode.commands.executeCommand(Commands.ResolveDependencies);
47+
expect(result).to.be.true;
48+
});
49+
50+
test("Contract: spm update", async () => {
51+
const result = await vscode.commands.executeCommand(Commands.UpdateDependencies);
52+
expect(result).to.be.true;
53+
});
54+
});
55+
56+
suite("Full Work Flow Test Suite", function () {
57+
let folderContext: FolderContext;
58+
let workspaceContext: WorkspaceContext;
59+
let tasks: SwiftTask;
60+
let treeProvider: PackageDependenciesProvider;
61+
let item: PackageNode;
62+
63+
suiteSetup(async function () {
64+
workspaceContext = await globalWorkspaceContextPromise;
65+
await waitForNoRunningTasks();
66+
folderContext = await folderContextPromise("dependencies");
67+
await workspaceContext.focusFolder(folderContext);
68+
treeProvider = new PackageDependenciesProvider(workspaceContext);
69+
70+
const items = await treeProvider.getChildren();
71+
item = items.find(n => n.name === "swift-markdown") as PackageNode;
72+
});
73+
74+
suiteTeardown(() => {
75+
treeProvider?.dispose();
76+
});
77+
78+
setup(async function () {
79+
// Check before each test case start:
80+
// Expect to fail without setting up local version
81+
tasks = (await getBuildAllTask(folderContext)) as SwiftTask;
82+
const { exitCode, output } = await executeTaskAndWaitForResult(tasks);
83+
expect(exitCode).to.not.equal(0);
84+
expect(output).to.include("PackageLib");
85+
expect(output).to.include("required");
86+
});
87+
88+
teardown(async function () {
89+
// Expect to fail again now dependency is missing
90+
const { exitCode, output } = await executeTaskAndWaitForResult(tasks);
91+
expect(exitCode).to.not.equal(0);
92+
expect(output).to.include("PackageLib");
93+
expect(output).to.include("required");
94+
});
95+
96+
const useLocalDependencyTest = async () => {
97+
// Contract: spm edit with user supplied local version of dependency
98+
const windowMock = sinon.stub(vscode.window, "showOpenDialog");
99+
windowMock.resolves([testAssetUri("Swift-Markdown")]);
100+
const result = await vscode.commands.executeCommand(Commands.UseLocalDependency, item);
101+
expect(result).to.be.true;
102+
windowMock.restore();
103+
104+
// This will now pass as we have the required library
105+
const { exitCode, output } = await executeTaskAndWaitForResult(tasks);
106+
expect(exitCode).to.equal(0);
107+
expect(output).to.include("defaultpackage");
108+
expect(output).to.include("not used by any target");
109+
};
110+
111+
test("Use local dependency - Reset", async () => {
112+
await useLocalDependencyTest();
113+
114+
// Contract: spm reset
115+
const result = await vscode.commands.executeCommand(Commands.ResetPackage);
116+
expect(result).to.be.true;
117+
});
118+
119+
test("Use local dependency - Add to workspace - Unedit", async () => {
120+
await useLocalDependencyTest();
121+
122+
// Contract: spm unedit
123+
const result = await vscode.commands.executeCommand(Commands.UneditDependency, item);
124+
expect(result).to.be.true;
125+
});
126+
});
127+
});

test/integration-tests/testexplorer/TestExplorerIntegration.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import {
4141
reduceTestItemChildren,
4242
} from "../../../src/TestExplorer/TestUtils";
4343
import { runnableTag } from "../../../src/TestExplorer/TestDiscovery";
44-
import { COMMANDS } from "../../../src/commands";
44+
import { Commands } from "../../../src/commands";
4545

4646
suite("Test Explorer Suite", function () {
4747
const MAX_TEST_RUN_TIME_MINUTES = 5;
@@ -304,7 +304,7 @@ suite("Test Explorer Suite", function () {
304304
// Stub the showInputBox method to return the input text
305305
windowMock.showInputBox.resolves(`${numIterations}`);
306306

307-
vscode.commands.executeCommand(COMMANDS.runTestsMultipleTimes, testItems[0]);
307+
vscode.commands.executeCommand(Commands.runTestsMultipleTimes, testItems[0]);
308308

309309
const testRun = await eventPromise(testExplorer.onCreateTestRun);
310310

@@ -419,7 +419,7 @@ suite("Test Explorer Suite", function () {
419419
// Stub the showInputBox method to return the input text
420420
windowMock.showInputBox.resolves(`${numIterations}`);
421421

422-
vscode.commands.executeCommand(COMMANDS.runTestsMultipleTimes, testItems[0]);
422+
vscode.commands.executeCommand(Commands.runTestsMultipleTimes, testItems[0]);
423423

424424
const testRun = await eventPromise(testExplorer.onCreateTestRun);
425425

0 commit comments

Comments
 (0)