diff --git a/src/SelectionManager.test.ts b/src/SelectionManager.test.ts index e0ff6789..70eba55b 100644 --- a/src/SelectionManager.test.ts +++ b/src/SelectionManager.test.ts @@ -166,4 +166,15 @@ describe('SelectionManager', () => { assert.equal(selectionManager.selectionText, '1\n2\n3\n4\n5'); }); }); + + describe('selectionText', () => { + it('should return the empty string when start or end selections are not set', () => { + assert.equal(selectionManager.selectionText, ''); + selectionManager.model.selectionStart = [0, 0]; + assert.equal(selectionManager.selectionText, ''); + selectionManager.model.selectionStart = null; + selectionManager.model.selectionEnd = [0, 0]; + assert.equal(selectionManager.selectionText, ''); + }); + }); }); diff --git a/src/SelectionModel.test.ts b/src/SelectionModel.test.ts index f617772d..621026ed 100644 --- a/src/SelectionModel.test.ts +++ b/src/SelectionModel.test.ts @@ -106,6 +106,10 @@ describe('SelectionManager', () => { model.selectionEnd = [1, 2]; assert.equal(model.finalSelectionEnd, null); }); + it('should return null if there is no selection end or selection start length', () => { + model.selectionStart = [1, 2]; + assert.equal(model.finalSelectionEnd, null); + }); it('should return selection start + length if there is no selection end', () => { model.selectionStart = [2, 2]; model.selectionStartLength = 2; diff --git a/src/SelectionModel.ts b/src/SelectionModel.ts index 03c99abe..f6491ae5 100644 --- a/src/SelectionModel.ts +++ b/src/SelectionModel.ts @@ -30,6 +30,7 @@ export class SelectionModel { constructor( private _terminal: ITerminal ) { + this.clearSelection(); } /** @@ -39,6 +40,7 @@ export class SelectionModel { this.selectionStart = null; this.selectionEnd = null; this.isSelectAllActive = false; + this.selectionStartLength = 0; } /** @@ -49,7 +51,7 @@ export class SelectionModel { return [0, 0]; } - if (!this.selectionEnd) { + if (!this.selectionEnd || !this.selectionStart) { return this.selectionStart; } @@ -71,6 +73,9 @@ export class SelectionModel { // Use the selection start if the end doesn't exist or they're reversed if (!this.selectionEnd || this._areSelectionValuesReversed()) { + if (this.selectionStartLength === 0) { + return null; + } return [this.selectionStart[0] + this.selectionStartLength, this.selectionStart[1]]; }