Skip to content

Commit 8428eee

Browse files
committed
- Split the original test case into smaller test cases
- Switch to assert directly on executeCommand return
1 parent cae3f5d commit 8428eee

File tree

11 files changed

+176
-79
lines changed

11 files changed

+176
-79
lines changed

assets/test/Swift-Markdown/Package.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ let package = Package(
77
// FIXME: Can be changed back to Swift-Markdown when
88
// https://github.com/swiftlang/swift-package-manager/issues/7931
99
// is released in the toolchain
10+
// NB: The name here needs to match the name of the dependencies under assets/test/dependencies/Package.swift
1011
name: "swift-markdown",
1112
products: [
1213
// Products define the executables and libraries a package produces, making them visible to other packages.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"configurations": [
3+
{
4+
"type": "swift-lldb",
5+
"request": "launch",
6+
"args": [],
7+
"cwd": "${workspaceFolder:dependencies}",
8+
"name": "Debug dependencies",
9+
"program": "${workspaceFolder:dependencies}/.build/debug/dependencies",
10+
"preLaunchTask": "swift: Build Debug dependencies"
11+
},
12+
{
13+
"type": "swift-lldb",
14+
"request": "launch",
15+
"args": [],
16+
"cwd": "${workspaceFolder:dependencies}",
17+
"name": "Release dependencies",
18+
"program": "${workspaceFolder:dependencies}/.build/release/dependencies",
19+
"preLaunchTask": "swift: Build Release dependencies"
20+
}
21+
]
22+
}

src/commands.ts

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

67+
export enum COMMANDS {
68+
ResolveDependencies = "swift.resolveDependencies",
69+
UpdateDependencies = "swift.updateDependencies",
70+
RunTestsMultipleTimes = "swift.runTestsMultipleTimes",
71+
ResetPackage = "swift.resetPackage",
72+
UseLocalDependency = "swift.useLocalDependency",
73+
UneditDependency = "swift.uneditDependency",
74+
runTestsMultipleTimes = "runTestsMultipleTimes",
75+
}
76+
6777
/**
6878
* Registers this extension's commands in the given {@link vscode.ExtensionContext context}.
6979
*/
7080
export function register(ctx: WorkspaceContext): vscode.Disposable[] {
7181
return [
7282
vscode.commands.registerCommand("swift.newFile", uri => newSwiftFile(uri)),
73-
vscode.commands.registerCommand("swift.resolveDependencies", () =>
83+
vscode.commands.registerCommand(COMMANDS.ResolveDependencies, () =>
7484
resolveDependencies(ctx)
7585
),
76-
vscode.commands.registerCommand("swift.updateDependencies", () => updateDependencies(ctx)),
86+
vscode.commands.registerCommand(COMMANDS.UpdateDependencies, () => updateDependencies(ctx)),
7787
vscode.commands.registerCommand("swift.run", () => runBuild(ctx)),
7888
vscode.commands.registerCommand("swift.debug", () => debugBuild(ctx)),
7989
vscode.commands.registerCommand("swift.cleanBuild", () => cleanBuild(ctx)),
80-
vscode.commands.registerCommand("swift.runTestsMultipleTimes", item => {
90+
vscode.commands.registerCommand(COMMANDS.RunTestsMultipleTimes, item => {
8191
if (ctx.currentFolder) {
8292
return runTestMultipleTimes(ctx.currentFolder, item, false);
8393
}
94+
return false;
8495
}),
8596
vscode.commands.registerCommand("swift.runTestsUntilFailure", item => {
8697
if (ctx.currentFolder) {
8798
return runTestMultipleTimes(ctx.currentFolder, item, true);
8899
}
100+
return false;
89101
}),
90102
// Note: This is only available on macOS (gated in `package.json`) because its the only OS that has the iOS SDK available.
91103
vscode.commands.registerCommand("swift.switchPlatform", () => switchPlatform()),
92-
vscode.commands.registerCommand("swift.resetPackage", () => resetPackage(ctx)),
104+
vscode.commands.registerCommand(COMMANDS.ResetPackage, () => resetPackage(ctx)),
93105
vscode.commands.registerCommand("swift.runScript", () => runSwiftScript(ctx)),
94106
vscode.commands.registerCommand("swift.openPackage", () => {
95107
if (ctx.currentFolder) {
96108
return openPackage(ctx.toolchain.swiftVersion, ctx.currentFolder.folder);
97109
}
110+
return false;
98111
}),
99112
vscode.commands.registerCommand("swift.runSnippet", () => runSnippet(ctx)),
100113
vscode.commands.registerCommand("swift.debugSnippet", () => debugSnippet(ctx)),
@@ -106,30 +119,35 @@ export function register(ctx: WorkspaceContext): vscode.Disposable[] {
106119
vscode.commands.registerCommand("swift.insertFunctionComment", () =>
107120
insertFunctionComment(ctx)
108121
),
109-
vscode.commands.registerCommand("swift.useLocalDependency", item => {
122+
vscode.commands.registerCommand(COMMANDS.UseLocalDependency, item => {
110123
if (item instanceof PackageNode) {
111124
return useLocalDependency(item.name, ctx);
112125
}
126+
return false;
113127
}),
114128
vscode.commands.registerCommand("swift.editDependency", item => {
115129
if (item instanceof PackageNode) {
116130
return editDependency(item.name, ctx);
117131
}
132+
return false;
118133
}),
119-
vscode.commands.registerCommand("swift.uneditDependency", item => {
134+
vscode.commands.registerCommand(COMMANDS.UneditDependency, item => {
120135
if (item instanceof PackageNode) {
121136
return uneditDependency(item.name, ctx);
122137
}
138+
return false;
123139
}),
124140
vscode.commands.registerCommand("swift.openInWorkspace", item => {
125141
if (item instanceof PackageNode) {
126142
return openInWorkspace(item);
127143
}
144+
return false;
128145
}),
129146
vscode.commands.registerCommand("swift.openExternal", item => {
130147
if (item instanceof PackageNode) {
131148
return openInExternalEditor(item);
132149
}
150+
return false;
133151
}),
134152
vscode.commands.registerCommand("swift.attachDebugger", () => attachDebugger(ctx)),
135153
vscode.commands.registerCommand("swift.clearDiagnosticsCollection", () =>
@@ -142,3 +160,5 @@ export function register(ctx: WorkspaceContext): vscode.Disposable[] {
142160
),
143161
];
144162
}
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/resolve.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export async function resolveDependencies(ctx: WorkspaceContext) {
2626
if (!current) {
2727
return;
2828
}
29-
await resolveFolderDependencies(current);
29+
return await resolveFolderDependencies(current);
3030
}
3131

3232
/**
@@ -57,4 +57,5 @@ export async function resolveFolderDependencies(
5757
checkAlreadyRunning
5858
);
5959
updateAfterError(success, folderContext);
60+
return success;
6061
}

src/commands/dependencies/unedit.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ export async function uneditDependency(identifier: string, ctx: WorkspaceContext
3030
}
3131
ctx.outputChannel.log(`unedit dependency ${identifier}`, currentFolder.name);
3232
const status = `Reverting edited dependency ${identifier} (${currentFolder.name})`;
33-
ctx.statusItem.showStatusWhileRunning(status, async () => {
34-
await uneditFolderDependency(currentFolder, identifier, ctx);
33+
return await ctx.statusItem.showStatusWhileRunning(status, async () => {
34+
return await uneditFolderDependency(currentFolder, identifier, ctx);
3535
});
3636
}
3737

@@ -67,6 +67,7 @@ export async function uneditFolderDependency(
6767
vscode.workspace.updateWorkspaceFolders(folderIndex, 1);
6868
}
6969
}
70+
return true;
7071
} catch (error) {
7172
const execError = error as { stderr: string };
7273
// if error contains "has uncommited changes" then ask if user wants to force the unedit

src/commands/dependencies/update.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export async function updateDependencies(ctx: WorkspaceContext) {
2626
if (!current) {
2727
return;
2828
}
29-
await updateFolderDependencies(current);
29+
return await updateFolderDependencies(current);
3030
}
3131

3232
/**
@@ -46,7 +46,7 @@ export async function updateFolderDependencies(folderContext: FolderContext) {
4646
folderContext.workspaceContext.toolchain
4747
);
4848

49-
await executeTaskWithUI(task, "Updating Dependencies", folderContext).then(result => {
50-
updateAfterError(result, folderContext);
51-
});
49+
const result = await executeTaskWithUI(task, "Updating Dependencies", folderContext);
50+
updateAfterError(result, folderContext);
51+
return result;
5252
}

src/commands/dependencies/useLocal.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@ import { executeTaskWithUI } from "../utilities";
2424
* @param identifier Identifier for dependency
2525
* @param ctx workspace context
2626
*/
27-
export async function useLocalDependency(identifier: string, ctx: WorkspaceContext) {
27+
export async function useLocalDependency(
28+
identifier: string,
29+
ctx: WorkspaceContext
30+
): Promise<boolean> {
2831
const currentFolder = ctx.currentFolder;
2932
if (!currentFolder) {
30-
return;
33+
return false;
3134
}
3235
const folders = await vscode.window.showOpenDialog({
3336
canSelectFiles: false,
@@ -39,7 +42,7 @@ export async function useLocalDependency(identifier: string, ctx: WorkspaceConte
3942
});
4043

4144
if (!folders) {
42-
return;
45+
return false;
4346
}
4447
const folder = folders[0];
4548
const task = createSwiftTask(
@@ -58,8 +61,17 @@ export async function useLocalDependency(identifier: string, ctx: WorkspaceConte
5861
`Use local version of ${identifier}`,
5962
currentFolder,
6063
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+
}
6175
);
62-
if (success) {
63-
ctx.fireEvent(currentFolder, FolderOperation.resolvedUpdated);
64-
}
76+
return success;
6577
}

src/commands/resetPackage.ts

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export async function resetPackage(ctx: WorkspaceContext) {
2626
if (!current) {
2727
return;
2828
}
29-
await folderResetPackage(current);
29+
return await folderResetPackage(current);
3030
}
3131

3232
/**
@@ -47,22 +47,32 @@ export async function folderResetPackage(folderContext: FolderContext) {
4747
folderContext.workspaceContext.toolchain
4848
);
4949

50-
await executeTaskWithUI(task, "Reset Package", folderContext).then(async success => {
51-
if (!success) {
52-
return;
53-
}
54-
const resolveTask = createSwiftTask(
55-
["package", "resolve"],
56-
SwiftTaskProvider.resolvePackageName,
57-
{
58-
cwd: folderContext.folder,
59-
scope: folderContext.workspaceFolder,
60-
prefix: folderContext.name,
61-
presentationOptions: { reveal: vscode.TaskRevealKind.Silent },
62-
},
63-
folderContext.workspaceContext.toolchain
64-
);
50+
return await executeTaskWithUI(task, "Reset Package", folderContext).then(
51+
async success => {
52+
if (!success) {
53+
return false;
54+
}
55+
const resolveTask = createSwiftTask(
56+
["package", "resolve"],
57+
SwiftTaskProvider.resolvePackageName,
58+
{
59+
cwd: folderContext.folder,
60+
scope: folderContext.workspaceFolder,
61+
prefix: folderContext.name,
62+
presentationOptions: { reveal: vscode.TaskRevealKind.Silent },
63+
},
64+
folderContext.workspaceContext.toolchain
65+
);
6566

66-
await executeTaskWithUI(resolveTask, "Resolving Dependencies", folderContext);
67-
});
67+
const result = await executeTaskWithUI(
68+
resolveTask,
69+
"Resolving Dependencies",
70+
folderContext
71+
);
72+
return result;
73+
},
74+
reason => {
75+
return reason;
76+
}
77+
);
6878
}

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 = false,
34+
showErrors = true,
3535
checkAlreadyRunning: boolean = false
3636
): Promise<boolean> {
3737
try {

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

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

4546
suite("Test Explorer Suite", function () {
4647
const MAX_TEST_RUN_TIME_MINUTES = 5;
@@ -303,7 +304,7 @@ suite("Test Explorer Suite", function () {
303304
// Stub the showInputBox method to return the input text
304305
windowMock.showInputBox.resolves(`${numIterations}`);
305306

306-
vscode.commands.executeCommand("swift.runTestsMultipleTimes", testItems[0]);
307+
vscode.commands.executeCommand(COMMANDS.runTestsMultipleTimes, testItems[0]);
307308

308309
const testRun = await eventPromise(testExplorer.onCreateTestRun);
309310

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

421-
vscode.commands.executeCommand("swift.runTestsMultipleTimes", testItems[0]);
422+
vscode.commands.executeCommand(COMMANDS.runTestsMultipleTimes, testItems[0]);
422423

423424
const testRun = await eventPromise(testExplorer.onCreateTestRun);
424425

0 commit comments

Comments
 (0)