diff --git a/spec/gutter-container-spec.coffee b/spec/gutter-container-spec.coffee index 03c9ebc10..e38367835 100644 --- a/spec/gutter-container-spec.coffee +++ b/spec/gutter-container-spec.coffee @@ -50,3 +50,13 @@ describe 'GutterContainer', -> otherGutterContainer = new GutterContainer fakeOtherTextEditor gutter = new Gutter 'gutter-name', otherGutterContainer expect(gutterContainer.removeGutter.bind(null, gutter)).toThrow() + + describe '::destroy', -> + it 'clears its array of gutters and destroys custom gutters', -> + newGutter = gutterContainer.addGutter {'test-gutter', priority: 1} + newGutterSpy = jasmine.createSpy() + newGutter.onDidDestroy(newGutterSpy) + + gutterContainer.destroy() + expect(newGutterSpy).toHaveBeenCalled() + expect(gutterContainer.getGutters()).toEqual [] diff --git a/src/gutter-container.coffee b/src/gutter-container.coffee index 1be52d519..4fa7c61fb 100644 --- a/src/gutter-container.coffee +++ b/src/gutter-container.coffee @@ -13,7 +13,12 @@ class GutterContainer @emitter = new Emitter destroy: -> - @gutters = null + # Create a copy, because `Gutter::destroy` removes the gutter from + # GutterContainer's @gutters. + guttersToDestroy = @gutters.slice(0) + for gutter in guttersToDestroy + gutter.destroy() if gutter.name isnt 'line-number' + @gutters = [] @emitter.dispose() # Creates and returns a {Gutter}.