From 70ba349a858d2fcb810e60db53a5ba142b8f365c Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 11 May 2019 20:58:51 -0700 Subject: [PATCH] Fix invalid index check, add api tests --- src/public/Terminal.api.ts | 11 ++++++++++- src/public/Terminal.ts | 10 ++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/public/Terminal.api.ts b/src/public/Terminal.api.ts index 935e1603..031e03d5 100644 --- a/src/public/Terminal.api.ts +++ b/src/public/Terminal.api.ts @@ -300,6 +300,13 @@ describe('API Integration Tests', () => { }); describe('getLine', () => { + it('invalid index', async function(): Promise { + this.timeout(10000); + await openTerminal({ rows: 5 }); + assert.equal(await page.evaluate(`window.term.buffer.getLine(-1)`), undefined); + assert.equal(await page.evaluate(`window.term.buffer.getLine(5)`), undefined); + }); + it('isWrapped', async function(): Promise { this.timeout(10000); await openTerminal({ cols: 5 }); @@ -331,7 +338,9 @@ describe('API Integration Tests', () => { it('getCell', async function(): Promise { this.timeout(10000); - await openTerminal(); + await openTerminal({ cols: 5 }); + assert.equal(await page.evaluate(`window.term.buffer.getLine(0).getCell(-1)`), undefined); + assert.equal(await page.evaluate(`window.term.buffer.getLine(0).getCell(5)`), undefined); assert.equal(await page.evaluate(`window.term.buffer.getLine(0).getCell(0).char`), ''); assert.equal(await page.evaluate(`window.term.buffer.getLine(0).getCell(0).width`), 1); await page.evaluate(`window.term.write('ać–‡')`); diff --git a/src/public/Terminal.ts b/src/public/Terminal.ts index dd07c735..0c6a7745 100644 --- a/src/public/Terminal.ts +++ b/src/public/Terminal.ts @@ -180,7 +180,13 @@ class BufferApiView implements IBufferApi { public get viewportY(): number { return this._buffer.ydisp; } public get baseY(): number { return this._buffer.ybase; } public get length(): number { return this._buffer.lines.length; } - public getLine(y: number): IBufferLineApi | undefined { return new BufferLineApiView(this._buffer.lines.get(y)); } + public getLine(y: number): IBufferLineApi | undefined { + const line = this._buffer.lines.get(y); + if (!line) { + return undefined; + } + return new BufferLineApiView(line); + } } class BufferLineApiView implements IBufferLineApi { @@ -188,7 +194,7 @@ class BufferLineApiView implements IBufferLineApi { public get isWrapped(): boolean { return this._line.isWrapped; } public getCell(x: number): IBufferCellApi | undefined { - if (x < 0 && x >= this._line.length) { + if (x < 0 || x >= this._line.length) { return undefined; } return new BufferCellApiView(this._line, x);