diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index 5641c5cf1..1542a6641 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -2050,14 +2050,12 @@ describe "Editor", -> expect(editor.getEditSessions().length).toBe 2 spyOn(atom, "confirm") editor.destroyEditSessionIndex(0) - expect(atom.confirm).toHaveBeenCalled + expect(atom.confirm).toHaveBeenCalled() expect(editor.getEditSessions().length).toBe 2 expect(editor.getEditSessions()[0].buffer.isModified()).toBeTruthy() describe ".destroyInactiveEditSessions()", -> - it "destroys all non-active, non-modified edit sessions", -> - editor.setText("I'm dirty") - dirtySession = editor.activeEditSession + it "destroys every edit session except the active one", -> rootView.open('sample.txt') cssSession = rootView.open('css.css') rootView.open('coffee.coffee') @@ -2065,7 +2063,17 @@ describe "Editor", -> expect(editor.getEditSessions().length).toBe 5 editor.setActiveEditSessionIndex(2) editor.destroyInactiveEditSessions() - expect(editor.getActiveEditSessionIndex()).toBe 1 + expect(editor.getActiveEditSessionIndex()).toBe 0 + expect(editor.getEditSessions().length).toBe 1 + expect(editor.getEditSessions()[0]).toBe cssSession + + it "prompts to save dirty buffers before destroying", -> + editor.setText("I'm dirty") + dirtySession = editor.activeEditSession + rootView.open('sample.txt') expect(editor.getEditSessions().length).toBe 2 - expect(editor.getEditSessions()[0]).toBe dirtySession - expect(editor.getEditSessions()[1]).toBe cssSession + spyOn(atom, "confirm") + editor.destroyInactiveEditSessions() + expect(atom.confirm).toHaveBeenCalled() + expect(editor.getEditSessions().length).toBe 2 + expect(editor.getEditSessions()[0].buffer.isModified()).toBeTruthy() diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 3cbc9577f..e6864ad60 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -447,17 +447,18 @@ class Editor extends View destroyActiveEditSession: -> @destroyEditSessionIndex(@getActiveEditSessionIndex()) - destroyEditSessionIndex: (index) -> + destroyEditSessionIndex: (index, callback) -> return if @mini editSession = @editSessions[index] destroySession = => - if index is @getActiveEditSessionIndex() + if index is @getActiveEditSessionIndex() and @editSessions.length > 1 @loadPreviousEditSession() _.remove(@editSessions, editSession) editSession.destroy() @trigger 'editor:edit-session-removed', [editSession, index] @remove() if @editSessions.length is 0 + callback(index) if callback if editSession.buffer.isModified() @promptToSaveDirtySession(editSession, destroySession) @@ -465,13 +466,10 @@ class Editor extends View destroySession(editSession) destroyInactiveEditSessions: -> - index = 0 - while session = @editSessions[index] - if @activeEditSession is session or session.buffer.isModified() - index++ - else - @destroyEditSessionIndex(index) - + destroyIndex = (index) => + index++ if @activeEditSession is @editSessions[index] + @destroyEditSessionIndex(index, destroyIndex) if @editSessions[index] + destroyIndex(0) loadNextEditSession: -> nextIndex = (@getActiveEditSessionIndex() + 1) % @editSessions.length @setActiveEditSessionIndex(nextIndex)