From d1bd60338274d7245cb0f3eb118b9b15bc0abc0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Sun, 22 Sep 2019 20:39:09 +0200 Subject: [PATCH] unit tests --- src/Terminal.ts | 9 +-- src/common/input/WriteBuffer.test.ts | 88 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 src/common/input/WriteBuffer.test.ts diff --git a/src/Terminal.ts b/src/Terminal.ts index aa55ebcb..f95873b8 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -140,7 +140,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp public currentParam: string | number; // write buffer - private _deferredWriteBuffer: WriteBuffer; + private _writeBuffer: WriteBuffer; // Store if user went browsing history in scrollback private _userScrolling: boolean; @@ -232,7 +232,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp this._setupOptionsListeners(); this._setup(); - this._deferredWriteBuffer = new WriteBuffer(data => this._inputHandler.parse(data)); + this._writeBuffer = new WriteBuffer(data => this._inputHandler.parse(data)); } public dispose(): void { @@ -1595,10 +1595,11 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp } public write(data: string | Uint8Array, callback?: () => void): void { - this._deferredWriteBuffer.write(data, callback); + this._writeBuffer.write(data, callback); } + public writeSync(data: string | Uint8Array): void { - this._deferredWriteBuffer.writeSync(data); + this._writeBuffer.writeSync(data); } } diff --git a/src/common/input/WriteBuffer.test.ts b/src/common/input/WriteBuffer.test.ts new file mode 100644 index 00000000..ab9433da --- /dev/null +++ b/src/common/input/WriteBuffer.test.ts @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2019 The xterm.js authors. All rights reserved. + * @license MIT + */ + +import { assert } from 'chai'; +import { WriteBuffer } from './WriteBuffer'; + +declare let Buffer: any; + +function toBytes(s: string): Uint8Array { + return Buffer.from(s); +} + +function fromBytes(bytes: Uint8Array): string { + return bytes.toString(); +} + +describe('WriteBuffer', () => { + let wb: WriteBuffer; + let stack: (string | Uint8Array)[] = []; + let cbStack: string[] = []; + beforeEach(() => { + stack = []; + cbStack = []; + wb = new WriteBuffer(data => { stack.push(data); }); + }); + describe('write input', () => { + it('string', done => { + wb.write('a._'); + wb.write('b.x', () => { cbStack.push('b'); }); + wb.write('c._'); + wb.write('d.x', () => { cbStack.push('d'); }); + wb.write('e', () => { + assert.deepEqual(stack, ['a._', 'b.x', 'c._', 'd.x', 'e']); + assert.deepEqual(cbStack, ['b', 'd']); + done(); + }); + }); + it('bytes', done => { + wb.write(toBytes('a._')); + wb.write(toBytes('b.x'), () => { cbStack.push('b'); }); + wb.write(toBytes('c._')); + wb.write(toBytes('d.x'), () => { cbStack.push('d'); }); + wb.write(toBytes('e'), () => { + assert.deepEqual(stack.map(val => typeof val === 'string' ? '' : fromBytes(val)), ['a._', 'b.x', 'c._', 'd.x', 'e']); + assert.deepEqual(cbStack, ['b', 'd']); + done(); + }); + }); + it('string/bytes mixed', done => { + wb.write('a._'); + wb.write('b.x', () => { cbStack.push('b'); }); + wb.write(toBytes('c._')); + wb.write(toBytes('d.x'), () => { cbStack.push('d'); }); + wb.write(toBytes('e'), () => { + assert.deepEqual(stack.map(val => typeof val === 'string' ? val : fromBytes(val)), ['a._', 'b.x', 'c._', 'd.x', 'e']); + assert.deepEqual(cbStack, ['b', 'd']); + done(); + }); + }); + it('write callback works for empty chunks', done => { + wb.write('a', () => { cbStack.push('a'); }); + wb.write('', () => { cbStack.push('b'); }); + wb.write(toBytes('c'), () => { cbStack.push('c'); }); + wb.write(new Uint8Array(0), () => { cbStack.push('d'); }); + wb.write('e', () => { + assert.deepEqual(stack.map(val => typeof val === 'string' ? val : fromBytes(val)), ['a', '', 'c', '', 'e']); + assert.deepEqual(cbStack, ['a', 'b', 'c', 'd']); + done(); + }); + }); + it('writeSync', done => { + wb.write('a', () => { cbStack.push('a'); }); + wb.write('b', () => { cbStack.push('b'); }); + wb.write('c', () => { cbStack.push('c'); }); + wb.writeSync('d'); + assert.deepEqual(stack, ['a', 'b', 'c', 'd']); + assert.deepEqual(cbStack, ['a', 'b', 'c']); + wb.write('x', () => { cbStack.push('x'); }); + wb.write('', () => { + assert.deepEqual(stack, ['a', 'b', 'c', 'd', 'x', '']); + assert.deepEqual(cbStack, ['a', 'b', 'c', 'x']); + done(); + }); + }); + }); +});