Skip to content

Commit 41e74cc

Browse files
committed
Extra debug logging
1 parent efa38b2 commit 41e74cc

File tree

4 files changed

+82
-21
lines changed

4 files changed

+82
-21
lines changed

src/tasks/SwiftPluginTaskProvider.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,11 @@ export class SwiftPluginTaskProvider implements vscode.TaskProvider {
9999
task.scope ?? vscode.TaskScope.Workspace,
100100
task.name,
101101
"swift-plugin",
102-
new SwiftExecution(swift, swiftArgs, {
103-
cwd,
104-
presentation: task.presentationOptions,
105-
}),
102+
task.execution ??
103+
new SwiftExecution(swift, swiftArgs, {
104+
cwd,
105+
presentation: task.presentationOptions,
106+
}),
106107
task.problemMatchers
107108
);
108109
newTask.detail = task.detail ?? `swift ${swiftArgs.join(" ")}`;

test/integration-tests/tasks/SwiftPluginTaskProvider.test.ts

+9-10
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
cleanOutput,
2929
executeTaskAndWaitForResult,
3030
waitForEndTaskProcess,
31+
waitForNoRunningTasks,
3132
} from "../../utilities/tasks";
3233
import { mutable } from "../../utilities/types";
3334
import { SwiftExecution } from "../../../src/tasks/SwiftExecution";
@@ -165,6 +166,7 @@ suite("SwiftPluginTaskProvider Test Suite", function () {
165166
suite(name, () => {
166167
let resetSettings: (() => Promise<void>) | undefined;
167168
beforeEach(async function () {
169+
await waitForNoRunningTasks();
168170
resetSettings = await updateSettings(settings);
169171
});
170172

@@ -198,21 +200,18 @@ suite("SwiftPluginTaskProvider Test Suite", function () {
198200
suite("createSwiftPluginTask", () => {
199201
let taskProvider: SwiftPluginTaskProvider;
200202

201-
setup(() => {
203+
beforeEach(async () => {
202204
taskProvider = workspaceContext.pluginProvider;
205+
await waitForNoRunningTasks();
203206
});
204207

205208
test("Exit code on success", async () => {
206-
const task = taskProvider.createSwiftPluginTask(
207-
folderContext.swiftPackage.plugins[0],
208-
folderContext.toolchain,
209-
{
210-
cwd: folderContext.folder,
211-
scope: folderContext.workspaceFolder,
212-
}
213-
);
209+
const task = (
210+
await vscode.tasks.fetchTasks({ type: "swift-plugin " })
211+
)[0] as SwiftTask;
214212
const { exitCode, output } = await executeTaskAndWaitForResult(task);
215-
expect(exitCode).to.equal(0);
213+
expect(exitCode, output).to.equal(0);
214+
console.log("output: " + output);
216215
expect(cleanOutput(output)).to.include("Hello, World!");
217216
});
218217

test/integration-tests/ui/ProjectPanelProvider.test.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { WorkspaceContext } from "../../../src/WorkspaceContext";
3535
import { Version } from "../../../src/utilities/version";
3636
import { wait } from "../../../src/utilities/utilities";
3737
import { SwiftOutputChannel } from "../../../src/ui/SwiftOutputChannel";
38+
import { Commands } from "../../../src/commands";
3839

3940
suite("ProjectPanelProvider Test Suite", function () {
4041
let workspaceContext: WorkspaceContext;
@@ -189,7 +190,10 @@ suite("ProjectPanelProvider Test Suite", function () {
189190
return snippet;
190191
}
191192
);
192-
const result = await vscode.commands.executeCommand("swift.runSnippet", snippet?.name);
193+
const result = await vscode.commands.executeCommand(
194+
Commands.RUN_SNIPPET,
195+
snippet?.name
196+
);
193197
expect(result).to.be.true;
194198
});
195199
});

test/utilities/tasks.ts

+63-6
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,20 @@ export async function executeTaskAndWaitForResult(
3737
fixture: SwiftTaskFixture | SwiftTask
3838
): Promise<{ exitCode?: number; output: string }> {
3939
const task = "task" in fixture ? fixture.task : fixture;
40-
const exitPromise = waitForEndTaskProcess(task);
4140
const endPromise = waitForEndTask(task);
42-
vscode.tasks.executeTask(task);
43-
return await new Promise(res =>
41+
const promise = new Promise<{ exitCode?: number; output: string }>(res =>
4442
vscode.tasks.onDidStartTask(async ({ execution }) => {
45-
let output = "";
4643
const runningTask = execution.task as SwiftTask;
44+
if (task.detail !== runningTask.detail) {
45+
return;
46+
}
47+
let output = "";
4748
const disposables = [runningTask.execution.onDidWrite(e => (output += e))];
49+
const exitPromise = new Promise<number>(res => {
50+
disposables.push(
51+
runningTask.execution.onDidClose(e => res(typeof e === "number" ? e : -1))
52+
);
53+
});
4854
const exitCode = await exitPromise;
4955
await endPromise;
5056
await new Promise(r => setTimeout(r, 500));
@@ -55,7 +61,57 @@ export async function executeTaskAndWaitForResult(
5561
});
5662
})
5763
);
64+
await vscode.tasks.executeTask(task);
65+
return await promise;
5866
}
67+
// export async function executeTaskAndWaitForResult(
68+
// fixture: SwiftTaskFixture | SwiftTask,
69+
// expectOutput: boolean = true
70+
// ): Promise<{ exitCode?: number; output: string }> {
71+
// const task = "task" in fixture ? fixture.task : fixture;
72+
// // const exitPromise = waitForEndTaskProcess(task);
73+
// const writePromise = expectOutput ? waitForWrite(task.execution) : Promise.resolve();
74+
// writePromise;
75+
// const promise: Promise<{ exitCode?: number; output: string }> = new Promise(
76+
// res =>
77+
// vscode.tasks.onDidEndTaskProcess(async e => {
78+
// const runningTask = e.execution.task as SwiftTask;
79+
// if (runningTask.detail !== task.detail) {
80+
// return;
81+
// }
82+
// res({
83+
// output: runningTask.execution.swiftProcess.getOutput(),
84+
// exitCode: e.exitCode,
85+
// });
86+
// })
87+
// // vscode.tasks.onDidStartTask(async ({ execution }) => {
88+
// // let output = "";
89+
// // const runningTask = execution.task as SwiftTask;
90+
// // if (runningTask.detail !== task.detail) {
91+
// // return;
92+
// // }
93+
// // const runningWritePromise = expectOutput
94+
// // ? waitForWrite(runningTask.execution)
95+
// // : Promise.resolve();
96+
// // const runningExitPromise = waitForEndTaskProcess(runningTask);
97+
// // const disposables = [
98+
// // runningTask.execution.onDidWrite(e => {
99+
// // output += e;
100+
// // console.log("onDidWrite: " + e);
101+
// // }),
102+
// // ];
103+
// // const exitCode = await Promise.race([exitPromise, runningExitPromise]);
104+
// // await Promise.race([writePromise, runningWritePromise]);
105+
// // disposables.forEach(d => d.dispose());
106+
// // res({
107+
// // output,
108+
// // exitCode,
109+
// // });
110+
// // })
111+
// );
112+
// await vscode.tasks.executeTask(task);
113+
// return await promise;
114+
// }
59115

60116
/**
61117
* Wait for the writeable fixture to write some output
@@ -65,8 +121,9 @@ export async function executeTaskAndWaitForResult(
65121
*/
66122
export async function waitForWrite(fixture: { onDidWrite: vscode.Event<string> }): Promise<string> {
67123
return new Promise<string>(res => {
68-
const disposable = fixture.onDidWrite(e => {
69-
disposable.dispose();
124+
let disposable: vscode.Disposable | undefined = undefined;
125+
disposable = fixture.onDidWrite(e => {
126+
disposable?.dispose();
70127
res(e);
71128
});
72129
});

0 commit comments

Comments
 (0)