diff --git a/spec/app/text-buffer-spec.coffee b/spec/app/text-buffer-spec.coffee index 9db25070b..68aa8872d 100644 --- a/spec/app/text-buffer-spec.coffee +++ b/spec/app/text-buffer-spec.coffee @@ -781,6 +781,12 @@ describe 'Buffer', -> expect(buffer.positionForCharacterIndex(20)).toEqual [3, 0] describe "markers", -> + [markerAddedHandler, markerRemovedHandler] = [] + + beforeEach -> + buffer.on('marker-added', markerAddedHandler = jasmine.createSpy("markerAddedHandler")) + buffer.on('marker-removed', markerRemovedHandler = jasmine.createSpy("markerRemovedHandler")) + describe "marker creation", -> it "allows markers to be created with ranges and positions", -> marker1 = buffer.markRange([[4, 20], [4, 23]]) @@ -800,6 +806,10 @@ describe 'Buffer', -> expect(marker.getHeadPosition()).toEqual [4, 20] expect(marker.getTailPosition()).toEqual [4, 23] + it "emits the 'marker-added' event when markers are created", -> + marker = buffer.markRange([[4, 20], [4, 23]]) + expect(markerAddedHandler).toHaveBeenCalledWith(marker) + describe "marker manipulation", -> marker = null beforeEach -> @@ -995,6 +1005,10 @@ describe 'Buffer', -> buffer.undo() expect(buffer.getMarker(marker2.id)).toBeUndefined() + it "emits 'marker-removed' when markers are destroyed", -> + marker.destroy() + expect(markerRemovedHandler).toHaveBeenCalledWith(marker) + describe "marker updates due to buffer changes", -> [marker1, marker2, marker3] = [] diff --git a/src/app/text-buffer.coffee b/src/app/text-buffer.coffee index 63a6c9676..facb40b6d 100644 --- a/src/app/text-buffer.coffee +++ b/src/app/text-buffer.coffee @@ -476,6 +476,8 @@ class Buffer attributes }, options)) @validMarkers[marker.id] = marker + @trigger 'marker-added', marker + marker # Public: Constructs a new marker at a given position. # @@ -645,8 +647,10 @@ class Buffer ### destroyMarker: (id) -> - delete @validMarkers[id] - delete @invalidMarkers[id] + if marker = @validMarkers[id] ? @invalidMarkers[id] + delete @validMarkers[id] + delete @invalidMarkers[id] + @trigger 'marker-removed', marker scheduleModifiedEvents: -> clearTimeout(@stoppedChangingTimeout) if @stoppedChangingTimeout