diff --git a/spec/pane-spec.coffee b/spec/pane-spec.coffee index 888ccf6e2..873749a19 100644 --- a/spec/pane-spec.coffee +++ b/spec/pane-spec.coffee @@ -132,13 +132,37 @@ describe "Pane", -> expect(-> pane.addItem('foo')).toThrow() expect(-> pane.addItem(1)).toThrow() - it "destroys any existing pending item if the new item is pending", -> + it "destroys any existing pending item", -> + pane = new Pane(paneParams(items: [])) + itemA = new Item("A") + itemB = new Item("B") + itemC = new Item("C") + pane.addItem(itemA, undefined, false, false) + pane.addItem(itemB, undefined, false, true) + pane.addItem(itemC, undefined, false, false) + expect(itemB.isDestroyed()).toBe true + + it "adds the new item before destroying any existing pending item", -> + eventOrder = [] + pane = new Pane(paneParams(items: [])) itemA = new Item("A") itemB = new Item("B") pane.addItem(itemA, undefined, false, true) - pane.addItem(itemB, undefined, false, true) - expect(itemA.isDestroyed()).toBe true + + pane.onDidAddItem ({item}) -> + eventOrder.push("add") if item is itemB + + pane.onDidRemoveItem ({item}) -> + eventOrder.push("remove") if item is itemA + + pane.addItem(itemB) + + waitsFor -> + eventOrder.length is 2 + + runs -> + expect(eventOrder).toEqual ["add", "remove"] describe "::activateItem(item)", -> pane = null diff --git a/src/pane.coffee b/src/pane.coffee index b944f763c..70f8b4bab 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -433,11 +433,11 @@ class Pane extends Model @subscriptionsPerItem.set item, itemSubscriptions @items.splice(index, 0, item) - pendingItem = @getPendingItem() - @destroyItem(pendingItem) if pendingItem? + lastPendingItem = @getPendingItem() @setPendingItem(item) if pending @emitter.emit 'did-add-item', {item, index, moved} + @destroyItem(lastPendingItem) if lastPendingItem? @setActiveItem(item) unless @getActiveItem()? item