From 3877e96d7fe235043c904771c36e82411d65dd09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Tue, 9 Oct 2018 18:56:48 +0200 Subject: [PATCH] fix BufferLine resize --- src/BufferLine.test.ts | 27 +++++++++++++++++++++++++++ src/BufferLine.ts | 6 +++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/BufferLine.test.ts b/src/BufferLine.test.ts index a1a8e0ff1c..2db691765b 100644 --- a/src/BufferLine.test.ts +++ b/src/BufferLine.test.ts @@ -133,4 +133,31 @@ describe('BufferLine', function(): void { const line3 = line.clone(); chai.expect(TestBufferLine.prototype.toArray.apply(line3)).eql(line.toArray()); }); + it('resize enlarge', function(): void { + const line = new TestBufferLine(5, [1, 'a', 0, 'a'.charCodeAt(0)], false); + line.resize(10, [1, 'a', 0, 'a'.charCodeAt(0)]); + chai.expect(line.toArray()).eql(Array(10).fill([1, 'a', 0, 'a'.charCodeAt(0)])); + }); + it('resize shrink(true)', function(): void { + const line = new TestBufferLine(10, [1, 'a', 0, 'a'.charCodeAt(0)], false); + line.resize(5, [1, 'a', 0, 'a'.charCodeAt(0)], true); + chai.expect(line.toArray()).eql(Array(5).fill([1, 'a', 0, 'a'.charCodeAt(0)])); + }); + it('resize shrink(false)', function(): void { + const line = new TestBufferLine(10, [1, 'a', 0, 'a'.charCodeAt(0)], false); + line.resize(5, [1, 'a', 0, 'a'.charCodeAt(0)], false); + chai.expect(line.toArray()).eql(Array(5).fill([1, 'a', 0, 'a'.charCodeAt(0)])); + }); + it('resize shrink(false) + shrink(false)', function(): void { + const line = new TestBufferLine(20, [1, 'a', 0, 'a'.charCodeAt(0)], false); + line.resize(10, [1, 'a', 0, 'a'.charCodeAt(0)], false); + line.resize(5, [1, 'a', 0, 'a'.charCodeAt(0)], false); + chai.expect(line.toArray()).eql(Array(5).fill([1, 'a', 0, 'a'.charCodeAt(0)])); + }); + it('resize shrink(false) + enlarge', function(): void { + const line = new TestBufferLine(20, [1, 'a', 0, 'a'.charCodeAt(0)], false); + line.resize(10, [1, 'a', 0, 'a'.charCodeAt(0)], false); + line.resize(15, [1, 'a', 0, 'a'.charCodeAt(0)]); + chai.expect(line.toArray()).eql(Array(15).fill([1, 'a', 0, 'a'.charCodeAt(0)])); + }); }); diff --git a/src/BufferLine.ts b/src/BufferLine.ts index 4fdceee105..53f5d4d4a8 100644 --- a/src/BufferLine.ts +++ b/src/BufferLine.ts @@ -218,7 +218,11 @@ export class BufferLineTypedArray implements IBufferLine { if (cols > this.length) { const data = new Uint32Array(cols * CELL_SIZE); if (this._data) { - data.set(this._data); + if (cols * CELL_SIZE < this._data.length) { + data.set(this._data.subarray(0, cols * CELL_SIZE)); + } else { + data.set(this._data); + } } this._data = data; for (let i = this.length; i < cols; ++i) {