diff --git a/src/Buffer.test.ts b/src/Buffer.test.ts index 09d22c5d..82aa0224 100644 --- a/src/Buffer.test.ts +++ b/src/Buffer.test.ts @@ -89,9 +89,19 @@ describe('Buffer', () => { }); it('should return a range for the last row', () => { buffer.fillViewportRows(); - ( buffer.lines.get(23)).isWrapped = true; + ( buffer.lines.get(23)).isWrapped = true; assert.deepEqual(buffer.getWrappedRangeForLine(buffer.lines.length - 1), { first: 22, last: 23 }); }); + it('should return a range for a row that wraps upward to first row', () => { + buffer.fillViewportRows(); + ( buffer.lines.get(1)).isWrapped = true; + assert.deepEqual(buffer.getWrappedRangeForLine(1), { first: 0, last: 1 }); + }); + it('should return a range for a row that wraps downward to last row', () => { + buffer.fillViewportRows(); + ( buffer.lines.get(buffer.lines.length - 1)).isWrapped = true; + assert.deepEqual(buffer.getWrappedRangeForLine(buffer.lines.length - 2), { first: 22, last: 23 }); + }); }); }); diff --git a/src/Buffer.ts b/src/Buffer.ts index 235411c3..379214ae 100644 --- a/src/Buffer.ts +++ b/src/Buffer.ts @@ -267,7 +267,7 @@ export class Buffer implements IBuffer { first--; } // Scan downwards for wrapped lines - while (last + 1 < this.lines.length - 1 && (this.lines.get(last + 1)).isWrapped) { + while (last + 1 < this.lines.length && (this.lines.get(last + 1)).isWrapped) { last++; } return { first, last }; diff --git a/src/SelectionManager.test.ts b/src/SelectionManager.test.ts index 06cea766..8e89ea3f 100644 --- a/src/SelectionManager.test.ts +++ b/src/SelectionManager.test.ts @@ -298,6 +298,16 @@ describe('SelectionManager', () => { assert.deepEqual(selectionManager.model.finalSelectionStart, [0, 0]); assert.deepEqual(selectionManager.model.finalSelectionEnd, [terminal.cols, 0], 'The actual selection spans the entire column'); }); + it('should select the entire wrapped line', () => { + buffer.lines.set(0, stringToRow('foo')); + const line2 = stringToRow('bar'); + (line2).isWrapped = true; + buffer.lines.set(1, line2); + selectionManager.selectLineAt(0); + assert.equal(selectionManager.selectionText, 'foobar', 'The selected text is correct'); + assert.deepEqual(selectionManager.model.finalSelectionStart, [0, 0]); + assert.deepEqual(selectionManager.model.finalSelectionEnd, [terminal.cols, 1], 'The actual selection spans the entire column'); + }); }); describe('selectAll', () => {