Fix bug w/ markers mutated inside of change listeners

This commit is contained in:
Max Brunsfeld
2015-05-19 17:48:53 -07:00
parent 23f2a6a58f
commit 2bfbb7619e
2 changed files with 18 additions and 3 deletions

View File

@@ -1085,6 +1085,21 @@ describe "DisplayBuffer", ->
expect(changeHandler).toHaveBeenCalled()
expect(markerChangedHandler).toHaveBeenCalled()
it "emits the correct events when markers are mutated inside event listeners", ->
marker.onDidChange ->
if marker.getHeadScreenPosition().isEqual([5, 9])
marker.setHeadScreenPosition([5, 8])
marker.setHeadScreenPosition([5, 9])
headChanges = for [event] in markerChangedHandler.argsForCall
{old: event.oldHeadScreenPosition, new: event.newHeadScreenPosition}
expect(headChanges).toEqual [
{old: [5, 10], new: [5, 9]}
{old: [5, 9], new: [5, 8]}
]
describe "::findMarkers(attributes)", ->
it "allows the startBufferRow and endBufferRow to be specified", ->
marker1 = displayBuffer.markBufferRange([[0, 0], [3, 0]], class: 'a')

View File

@@ -346,15 +346,15 @@ class Marker
isValid
}
@emit 'changed', changeEvent if Grim.includeDeprecatedAPIs
@emitter.emit 'did-change', changeEvent
@oldHeadBufferPosition = newHeadBufferPosition
@oldHeadScreenPosition = newHeadScreenPosition
@oldTailBufferPosition = newTailBufferPosition
@oldTailScreenPosition = newTailScreenPosition
@wasValid = isValid
@emit 'changed', changeEvent if Grim.includeDeprecatedAPIs
@emitter.emit 'did-change', changeEvent
getPixelRange: ->
@displayBuffer.pixelRangeForScreenRange(@getScreenRange(), false)