From 970fca86e52f52ae5fc59f714e6b672092bc989b Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 16 Jun 2018 21:24:38 +0200 Subject: [PATCH] Add some more terminal API tests --- .../src/singlefolder-tests/window.test.ts | 129 ++++++++++++++---- .../mainThreadTerminalService.ts | 4 +- .../electron-browser/terminalService.ts | 1 - 3 files changed, 104 insertions(+), 30 deletions(-) diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts index 1d73c5056e5..cedcbf2c5c1 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts @@ -6,7 +6,7 @@ 'use strict'; import * as assert from 'assert'; -import { workspace, window, commands, ViewColumn, TextEditorViewColumnChangeEvent, Uri, Selection, Position, CancellationTokenSource, TextEditorSelectionChangeKind } from 'vscode'; +import { workspace, window, commands, ViewColumn, TextEditorViewColumnChangeEvent, Uri, Selection, Position, CancellationTokenSource, TextEditorSelectionChangeKind, Terminal } from 'vscode'; import { join } from 'path'; import { closeAllEditors, pathEquals, createRandomFile } from '../utils'; @@ -462,37 +462,110 @@ suite('window namespace tests', () => { }); }); - test('createTerminal, Terminal.name', () => { - const terminal = window.createTerminal('foo'); - assert.equal(terminal.name, 'foo'); + suite('Terminal', () => { + test('createTerminal, Terminal.name', () => { + const terminal = window.createTerminal('foo'); + assert.equal(terminal.name, 'foo'); - assert.throws(() => { - (terminal).name = 'bar'; - }, 'Terminal.name should be readonly'); - }); - - test('terminal, sendText immediately after createTerminal should not throw', () => { - const terminal = window.createTerminal(); - assert.doesNotThrow(terminal.sendText.bind(terminal, 'echo "foo"')); - }); - - test('terminal, onDidCloseTerminal event fires when terminal is disposed', (done) => { - const terminal = window.createTerminal(); - window.onDidCloseTerminal((eventTerminal) => { - assert.equal(terminal, eventTerminal); - done(); + assert.throws(() => { + (terminal).name = 'bar'; + }, 'Terminal.name should be readonly'); + terminal.dispose(); }); - terminal.dispose(); - }); - test('terminal, processId immediately after createTerminal should fetch the pid', (done) => { - window.createTerminal().processId.then(id => { - assert.ok(id > 0); - done(); + test('sendText immediately after createTerminal should not throw', () => { + const terminal = window.createTerminal(); + assert.doesNotThrow(terminal.sendText.bind(terminal, 'echo "foo"')); + terminal.dispose(); }); - }); - test('terminal, name should set terminal.name', () => { - assert.equal(window.createTerminal('foo').name, 'foo'); + test('onDidCloseTerminal event fires when terminal is disposed', (done) => { + const terminal = window.createTerminal(); + const reg = window.onDidCloseTerminal((eventTerminal) => { + assert.equal(terminal, eventTerminal); + reg.dispose(); + done(); + }); + terminal.dispose(); + }); + + test('processId immediately after createTerminal should fetch the pid', (done) => { + const terminal = window.createTerminal(); + terminal.processId.then(id => { + assert.ok(id > 0); + terminal.dispose(); + done(); + }); + }); + + test('name in constructor should set terminal.name', () => { + const terminal = window.createTerminal('a'); + assert.equal(terminal.name, 'a'); + terminal.dispose(); + }); + + test('onDidOpenTerminal should fire when a terminal is created', (done) => { + const reg1 = window.onDidOpenTerminal(term => { + assert.equal(term.name, 'b'); + reg1.dispose(); + const reg2 = window.onDidCloseTerminal(() => { + reg2.dispose(); + done(); + }); + terminal.dispose(); + }); + const terminal = window.createTerminal('b'); + }); + + test('createTerminalRenderer should fire onDidOpenTerminal and onDidCloseTerminal', (done) => { + const reg1 = window.onDidOpenTerminal(term => { + assert.equal(term.name, 'c'); + reg1.dispose(); + const reg2 = window.onDidCloseTerminal(() => { + reg2.dispose(); + done(); + }); + term.dispose(); + }); + window.createTerminalRenderer('c'); + }); + + test('terminal renderers should get maximum dimensions set when shown', (done) => { + let terminal: Terminal; + const reg1 = window.onDidOpenTerminal(term => { + reg1.dispose(); + term.show(); + terminal = term; + }); + const renderer = window.createTerminalRenderer('foo'); + const reg2 = renderer.onDidChangeMaximumDimensions(dimensions => { + assert.ok(dimensions.cols > 0); + assert.ok(dimensions.rows > 0); + reg2.dispose(); + const reg3 = window.onDidCloseTerminal(() => { + reg3.dispose(); + done(); + }); + terminal.dispose(); + }); + }); + + + test('TerminalRenderer.write should fire Terminal.onData', (done) => { + const reg1 = window.onDidOpenTerminal(terminal => { + reg1.dispose(); + const reg2 = terminal.onData(data => { + assert.equal(data, 'bar'); + reg2.dispose(); + const reg3 = window.onDidCloseTerminal(() => { + reg3.dispose(); + done(); + }); + terminal.dispose(); + }); + renderer.write('bar'); + }); + const renderer = window.createTerminalRenderer('foo'); + }); }); }); diff --git a/src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts b/src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts index d59b8ce4761..b86310b3656 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts @@ -124,7 +124,9 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape public $registerOnDataListener(terminalId: number): void { const terminalInstance = this.terminalService.getInstanceFromId(terminalId); if (terminalInstance) { - terminalInstance.addDisposable(terminalInstance.onData(data => this._onTerminalData(terminalId, data))); + terminalInstance.addDisposable(terminalInstance.onData(data => { + this._onTerminalData(terminalId, data); + })); } } diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts index 372de48c35f..b7fd6898f18 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts @@ -92,7 +92,6 @@ export class TerminalService extends AbstractTerminalService implements ITermina } public createTerminalRenderer(name: string): ITerminalInstance { - console.log('createTerminalRenderer', name); return this.createTerminal({ name, isRendererOnly: true }); }