Skip to content

Commit 447603c

Browse files
committed
Specifically test ordering in CustomExecution test
Part of microsoft#100733
1 parent a57cb45 commit 447603c

1 file changed

Lines changed: 49 additions & 20 deletions

File tree

extensions/vscode-api-tests/src/singlefolder-tests/workspace.tasks.test.ts

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as assert from 'assert';
7-
import { window, tasks, Disposable, TaskDefinition, Task, EventEmitter, CustomExecution, Pseudoterminal, TaskScope, commands, Task2, env, UIKind, ShellExecution, TaskExecution } from 'vscode';
7+
import { window, tasks, Disposable, TaskDefinition, Task, EventEmitter, CustomExecution, Pseudoterminal, TaskScope, commands, Task2, env, UIKind, ShellExecution, TaskExecution, Terminal } from 'vscode';
88

99
// Disable tasks tests:
1010
// - Web https://github.com/microsoft/vscode/issues/90528
@@ -28,26 +28,55 @@ import { window, tasks, Disposable, TaskDefinition, Task, EventEmitter, CustomEx
2828
const taskType: string = 'customTesting';
2929
const taskName = 'First custom task';
3030
let isPseudoterminalClosed = false;
31+
let terminal: Terminal | undefined;
32+
// There's a strict order that should be observed here:
33+
// 1. The terminal opens
34+
// 2. The terminal is written to.
35+
// 3. The terminal is closed.
36+
enum TestOrder {
37+
Start,
38+
TerminalOpened,
39+
TerminalWritten,
40+
TerminalClosed
41+
}
42+
43+
let testOrder = TestOrder.Start;
44+
3145
disposables.push(window.onDidOpenTerminal(term => {
32-
disposables.push(window.onDidWriteTerminalData(e => {
33-
try {
34-
assert.equal(e.data, 'testing\r\n');
35-
} catch (e) {
36-
done(e);
37-
}
38-
disposables.push(window.onDidCloseTerminal(() => {
39-
try {
40-
// Pseudoterminal.close should have fired by now, additionally we want
41-
// to make sure all events are flushed before continuing with more tests
42-
assert.ok(isPseudoterminalClosed);
43-
} catch (e) {
44-
done(e);
45-
return;
46-
}
47-
done();
48-
}));
49-
term.dispose();
50-
}));
46+
try {
47+
assert.equal(testOrder, TestOrder.Start);
48+
} catch (e) {
49+
done(e);
50+
}
51+
testOrder = TestOrder.TerminalOpened;
52+
terminal = term;
53+
}));
54+
disposables.push(window.onDidWriteTerminalData(e => {
55+
try {
56+
assert.equal(testOrder, TestOrder.TerminalOpened);
57+
testOrder = TestOrder.TerminalWritten;
58+
assert.notEqual(terminal, undefined);
59+
assert.equal(e.data, 'testing\r\n');
60+
} catch (e) {
61+
done(e);
62+
}
63+
64+
if (terminal) {
65+
terminal.dispose();
66+
}
67+
}));
68+
disposables.push(window.onDidCloseTerminal(() => {
69+
try {
70+
assert.equal(testOrder, TestOrder.TerminalWritten);
71+
testOrder = TestOrder.TerminalClosed;
72+
// Pseudoterminal.close should have fired by now, additionally we want
73+
// to make sure all events are flushed before continuing with more tests
74+
assert.ok(isPseudoterminalClosed);
75+
} catch (e) {
76+
done(e);
77+
return;
78+
}
79+
done();
5180
}));
5281
disposables.push(tasks.registerTaskProvider(taskType, {
5382
provideTasks: () => {

0 commit comments

Comments
 (0)