Add new item before destroying pending item

Fixes atom/tabs#278

Signed-off-by: Michelle Tilley <binarymuse@github.com>
This commit is contained in:
Katrina Uychaco
2016-03-03 17:46:02 -08:00
committed by Michelle Tilley
parent 2bdf4be904
commit e620232d35
2 changed files with 29 additions and 5 deletions

View File

@@ -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

View File

@@ -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