@@ -37,14 +37,20 @@ export async function executeTaskAndWaitForResult(
37
37
fixture : SwiftTaskFixture | SwiftTask
38
38
) : Promise < { exitCode ?: number ; output : string } > {
39
39
const task = "task" in fixture ? fixture . task : fixture ;
40
- const exitPromise = waitForEndTaskProcess ( task ) ;
41
40
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 =>
44
42
vscode . tasks . onDidStartTask ( async ( { execution } ) => {
45
- let output = "" ;
46
43
const runningTask = execution . task as SwiftTask ;
44
+ if ( task . detail !== runningTask . detail ) {
45
+ return ;
46
+ }
47
+ let output = "" ;
47
48
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
+ } ) ;
48
54
const exitCode = await exitPromise ;
49
55
await endPromise ;
50
56
await new Promise ( r => setTimeout ( r , 500 ) ) ;
@@ -55,7 +61,57 @@ export async function executeTaskAndWaitForResult(
55
61
} ) ;
56
62
} )
57
63
) ;
64
+ await vscode . tasks . executeTask ( task ) ;
65
+ return await promise ;
58
66
}
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
+ // }
59
115
60
116
/**
61
117
* Wait for the writeable fixture to write some output
@@ -65,8 +121,9 @@ export async function executeTaskAndWaitForResult(
65
121
*/
66
122
export async function waitForWrite ( fixture : { onDidWrite : vscode . Event < string > } ) : Promise < string > {
67
123
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 ( ) ;
70
127
res ( e ) ;
71
128
} ) ;
72
129
} ) ;
0 commit comments