diff --git a/src/SelectionManager.test.ts b/src/SelectionManager.test.ts index eb9322b6..dcc9cb5a 100644 --- a/src/SelectionManager.test.ts +++ b/src/SelectionManager.test.ts @@ -209,4 +209,20 @@ describe('SelectionManager', () => { assert.equal(selectionManager.selectionText, '1\n2\n3\n4\n5'); }); }); + + describe('hasSelection', () => { + it('should return whether there is a selection', () => { + selectionManager.model.selectionStart = [0, 0]; + selectionManager.model.selectionStartLength = 0; + assert.equal(selectionManager.hasSelection, false); + selectionManager.model.selectionEnd = [0, 0]; + assert.equal(selectionManager.hasSelection, false); + selectionManager.model.selectionEnd = [1, 0]; + assert.equal(selectionManager.hasSelection, true); + selectionManager.model.selectionEnd = [0, 1]; + assert.equal(selectionManager.hasSelection, true); + selectionManager.model.selectionEnd = [1, 1]; + assert.equal(selectionManager.hasSelection, true); + }); + }); }); diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts index a769afd1..0937f0af 100644 --- a/src/SelectionManager.ts +++ b/src/SelectionManager.ts @@ -183,7 +183,12 @@ export class SelectionManager extends EventEmitter { * Gets whether there is an active text selection. */ public get hasSelection(): boolean { - return !!this._model.finalSelectionStart && !!this._model.finalSelectionEnd; + const start = this._model.finalSelectionStart; + const end = this._model.finalSelectionEnd; + if (!start || !end) { + return false; + } + return start[0] !== end[0] || start[1] !== end[1]; } /**