Ensure terminal tests don't leak terminals

Part of #76515
This commit is contained in:
Daniel Imms 2019-07-03 17:22:13 -07:00
parent 052f74b6c6
commit 112a60d637

View file

@ -8,35 +8,61 @@ import { doesNotThrow, equal, ok } from 'assert';
suite('window namespace tests', () => { suite('window namespace tests', () => {
(process.platform === 'win32' ? suite.skip /* https://github.com/microsoft/vscode/issues/75689 */ : suite)('Terminal', () => { (process.platform === 'win32' ? suite.skip /* https://github.com/microsoft/vscode/issues/75689 */ : suite)('Terminal', () => {
test('sendText immediately after createTerminal should not throw', () => { test('sendText immediately after createTerminal should not throw', (done) => {
const reg1 = window.onDidOpenTerminal(term => {
equal(terminal, term);
terminal.dispose();
reg1.dispose();
const reg2 = window.onDidCloseTerminal(() => {
reg2.dispose();
done();
});
});
const terminal = window.createTerminal(); const terminal = window.createTerminal();
doesNotThrow(terminal.sendText.bind(terminal, 'echo "foo"')); doesNotThrow(terminal.sendText.bind(terminal, 'echo "foo"'));
terminal.dispose();
}); });
test('onDidCloseTerminal event fires when terminal is disposed', (done) => { test('onDidCloseTerminal event fires when terminal is disposed', (done) => {
const terminal = window.createTerminal(); const reg1 = window.onDidOpenTerminal(term => {
const reg = window.onDidCloseTerminal((eventTerminal) => { equal(terminal, term);
equal(terminal, eventTerminal); terminal.dispose();
reg.dispose(); reg1.dispose();
done(); const reg2 = window.onDidCloseTerminal(() => {
reg2.dispose();
done();
});
}); });
terminal.dispose(); const terminal = window.createTerminal();
}); });
test('processId immediately after createTerminal should fetch the pid', (done) => { test('processId immediately after createTerminal should fetch the pid', (done) => {
const terminal = window.createTerminal(); const reg1 = window.onDidOpenTerminal(term => {
terminal.processId.then(id => { equal(terminal, term);
ok(id > 0); reg1.dispose();
terminal.dispose(); terminal.processId.then(id => {
done(); ok(id > 0);
terminal.dispose();
const reg2 = window.onDidCloseTerminal(() => {
reg2.dispose();
done();
});
});
}); });
const terminal = window.createTerminal();
}); });
test('name in constructor should set terminal.name', () => { test('name in constructor should set terminal.name', (done) => {
const reg1 = window.onDidOpenTerminal(term => {
equal(terminal, term);
terminal.dispose();
reg1.dispose();
const reg2 = window.onDidCloseTerminal(() => {
reg2.dispose();
done();
});
});
const terminal = window.createTerminal('a'); const terminal = window.createTerminal('a');
equal(terminal.name, 'a'); equal(terminal.name, 'a');
terminal.dispose();
}); });
test('onDidOpenTerminal should fire when a terminal is created', (done) => { test('onDidOpenTerminal should fire when a terminal is created', (done) => {
@ -113,10 +139,23 @@ suite('window namespace tests', () => {
secondCalled = true; secondCalled = true;
} }
if (firstCalled && secondCalled) { if (firstCalled && secondCalled) {
let firstDisposed = false;
let secondDisposed = false;
const reg4 = window.onDidCloseTerminal(term => {
if (term === terminal1) {
firstDisposed = true;
}
if (term === terminal2) {
secondDisposed = true;
}
if (firstDisposed && secondDisposed) {
reg4.dispose();
done();
}
});
terminal1.dispose(); terminal1.dispose();
terminal2.dispose(); terminal2.dispose();
reg3.dispose(); reg3.dispose();
done();
} }
}); });
await timeout(500); await timeout(500);
@ -133,8 +172,11 @@ suite('window namespace tests', () => {
terminal.onDidWriteData(e => { terminal.onDidWriteData(e => {
data += e; data += e;
if (data.indexOf('foo') !== -1) { if (data.indexOf('foo') !== -1) {
const reg3 = window.onDidCloseTerminal(() => {
reg3.dispose();
done();
});
terminal.dispose(); terminal.dispose();
done();
} }
}); });
terminal.sendText('foo'); terminal.sendText('foo');
@ -146,7 +188,11 @@ suite('window namespace tests', () => {
equal(t, terminal); equal(t, terminal);
equal(t.name, 'bg'); equal(t.name, 'bg');
ok(window.terminals.indexOf(terminal) !== -1); ok(window.terminals.indexOf(terminal) !== -1);
done(); const reg3 = window.onDidCloseTerminal(() => {
reg3.dispose();
done();
});
terminal.dispose();
}); });
}); });
}); });