diff --git a/spec/selection-spec.js b/spec/selection-spec.js index 8afc67575..e9cf1c617 100644 --- a/spec/selection-spec.js +++ b/spec/selection-spec.js @@ -85,6 +85,17 @@ describe('Selection', () => { }) }) + describe("when the selection's range is moved", () => { + it('notifies ::onDidChangeRange observers', () => { + selection.setBufferRange([[2, 0], [2, 10]]) + const changeScreenRangeHandler = jasmine.createSpy('changeScreenRangeHandler') + selection.onDidChangeRange(changeScreenRangeHandler) + buffer.insert([2, 5], 'abc') + expect(changeScreenRangeHandler).toHaveBeenCalled() + expect(changeScreenRangeHandler.mostRecentCall.args[0]).not.toBeUndefined() + }); + }); + describe("when only the selection's tail is moved (regression)", () => { it('notifies ::onDidChangeRange observers', () => { selection.setBufferRange([[2, 0], [2, 10]], {reversed: true}) @@ -93,6 +104,7 @@ describe('Selection', () => { buffer.insert([2, 5], 'abc') expect(changeScreenRangeHandler).toHaveBeenCalled() + expect(changeScreenRangeHandler.mostRecentCall.args[0]).not.toBeUndefined() }) }) diff --git a/src/selection.js b/src/selection.js index 209036be3..70e5e73df 100644 --- a/src/selection.js +++ b/src/selection.js @@ -1037,14 +1037,15 @@ class Selection { this.editor.cursorMoved(cursorMovedEvent) } - this.emitter.emit('did-change-range') - this.editor.selectionRangeChanged({ + const rangeChangedEvent = { oldBufferRange: new Range(oldHeadBufferPosition, oldTailBufferPosition), oldScreenRange: new Range(oldHeadScreenPosition, oldTailScreenPosition), newBufferRange: this.getBufferRange(), newScreenRange: this.getScreenRange(), selection: this - }) + } + this.emitter.emit('did-change-range', rangeChangedEvent) + this.editor.selectionRangeChanged(rangeChangedEvent) } markerDidDestroy () {