2013-07-23 20:40:42 +04:00
|
|
|
{Site} = require 'telepath'
|
2013-09-20 00:51:53 +04:00
|
|
|
{View} = require 'atom'
|
2013-09-18 05:58:41 +04:00
|
|
|
PaneContainer = require '../src/pane-container'
|
|
|
|
Pane = require '../src/pane'
|
2013-09-18 01:54:33 +04:00
|
|
|
Environment = require './environment'
|
2013-06-21 02:57:34 +04:00
|
|
|
|
|
|
|
describe "PaneContainer replication", ->
|
2013-07-26 19:45:13 +04:00
|
|
|
[env1, env2, envConnection, container1, container2, pane1a, pane1b, pane1c] = []
|
2013-06-21 02:57:34 +04:00
|
|
|
|
|
|
|
class TestView extends View
|
|
|
|
@deserialize: ({name}) -> new TestView(name)
|
|
|
|
@content: -> @div tabindex: -1
|
|
|
|
initialize: (@name) -> @text(@name)
|
|
|
|
serialize: -> { deserializer: 'TestView', @name }
|
2013-06-26 21:40:26 +04:00
|
|
|
getState: -> @serialize()
|
2013-06-21 02:57:34 +04:00
|
|
|
getUri: -> "/tmp/#{@name}"
|
|
|
|
isEqual: (other) -> @name is other.name
|
|
|
|
|
|
|
|
beforeEach ->
|
|
|
|
registerDeserializer(TestView)
|
|
|
|
|
2013-07-26 19:45:13 +04:00
|
|
|
env1 = new Environment(siteId: 1)
|
|
|
|
env2 = env1.clone(siteId: 2)
|
|
|
|
envConnection = env1.connect(env2)
|
|
|
|
doc2 = null
|
|
|
|
|
|
|
|
env1.run ->
|
|
|
|
container1 = new PaneContainer
|
|
|
|
pane1a = new Pane(new TestView('A'))
|
|
|
|
container1.setRoot(pane1a)
|
|
|
|
pane1b = pane1a.splitRight(new TestView('B'))
|
|
|
|
pane1c = pane1b.splitDown(new TestView('C'))
|
|
|
|
|
|
|
|
doc1 = container1.getState()
|
|
|
|
doc2 = doc1.clone(env2.site)
|
|
|
|
envConnection.connect(doc1, doc2)
|
|
|
|
|
|
|
|
env2.run ->
|
|
|
|
container2 = deserialize(doc2)
|
2013-06-21 02:57:34 +04:00
|
|
|
|
|
|
|
afterEach ->
|
2013-08-30 05:37:03 +04:00
|
|
|
env1.destroy()
|
|
|
|
env2.destroy()
|
2013-06-21 02:57:34 +04:00
|
|
|
unregisterDeserializer(TestView)
|
|
|
|
|
|
|
|
it "replicates the inital state of a pane container with splits", ->
|
|
|
|
expect(container1.find('.row > :eq(0):contains(A)')).toExist()
|
|
|
|
expect(container1.find('.row > :eq(1)')).toHaveClass 'column'
|
|
|
|
expect(container1.find('.row > :eq(1) > :eq(0):contains(B)')).toExist()
|
|
|
|
expect(container1.find('.row > :eq(1) > :eq(1):contains(C)')).toExist()
|
|
|
|
|
|
|
|
expect(container2.find('.row > :eq(0):contains(A)')).toExist()
|
|
|
|
expect(container2.find('.row > :eq(1)')).toHaveClass 'column'
|
|
|
|
expect(container2.find('.row > :eq(1) > :eq(0):contains(B)')).toExist()
|
|
|
|
expect(container2.find('.row > :eq(1) > :eq(1):contains(C)')).toExist()
|
|
|
|
|
|
|
|
it "replicates the splitting of panes", ->
|
|
|
|
container1.attachToDom().width(400).height(200)
|
|
|
|
container2.attachToDom().width(400).height(200)
|
|
|
|
|
|
|
|
pane1d = pane1a.splitRight(new TestView('D'))
|
|
|
|
|
|
|
|
expect(container1.find('.row > :eq(1):contains(D)')).toExist()
|
|
|
|
expect(container2.find('.row > :eq(1):contains(D)')).toExist()
|
|
|
|
|
|
|
|
expect(container2.find('.row > :eq(1):contains(D)').outerWidth()).toBe container1.find('.row > :eq(1):contains(D)').outerWidth()
|
|
|
|
|
|
|
|
pane1d.splitDown(new TestView('E'))
|
|
|
|
|
|
|
|
expect(container1.find('.row > :eq(1)')).toHaveClass('column')
|
|
|
|
expect(container1.find('.row > :eq(1) > :eq(0):contains(D)')).toExist()
|
|
|
|
expect(container1.find('.row > :eq(1) > :eq(1):contains(E)')).toExist()
|
|
|
|
|
|
|
|
expect(container2.find('.row > :eq(1)')).toHaveClass('column')
|
|
|
|
expect(container2.find('.row > :eq(1) > :eq(0):contains(D)')).toExist()
|
|
|
|
expect(container2.find('.row > :eq(1) > :eq(1):contains(E)')).toExist()
|
|
|
|
|
|
|
|
it "replicates removal of panes", ->
|
|
|
|
pane1c.remove()
|
|
|
|
|
|
|
|
expect(container1.find('.row > :eq(0):contains(A)')).toExist()
|
|
|
|
expect(container1.find('.row > :eq(1):contains(B)')).toExist()
|
|
|
|
expect(container2.find('.row > :eq(0):contains(A)')).toExist()
|
|
|
|
expect(container2.find('.row > :eq(1):contains(B)')).toExist()
|
|
|
|
|
|
|
|
pane1b.remove()
|
|
|
|
|
|
|
|
expect(container1.find('> :eq(0):contains(A)')).toExist()
|
|
|
|
expect(container2.find('> :eq(0):contains(A)')).toExist()
|
|
|
|
|
|
|
|
pane1a.remove()
|
|
|
|
|
|
|
|
expect(container1.children()).not.toExist()
|
|
|
|
expect(container2.children()).not.toExist()
|
2013-07-26 19:45:13 +04:00
|
|
|
|
2013-08-08 21:01:01 +04:00
|
|
|
# FIXME: We need to get this passing again on master
|
|
|
|
xit "replicates splitting of panes containing edit sessions", ->
|
2013-07-26 19:45:13 +04:00
|
|
|
env1.run ->
|
2013-10-11 21:41:27 +04:00
|
|
|
pane1a.showItem(project.openSync('dir/a'))
|
2013-07-26 19:45:13 +04:00
|
|
|
pane1a.splitDown()
|
|
|
|
|
|
|
|
expect(project.getBuffers().length).toBe 1
|
|
|
|
expect(container1.find('.row > :eq(0) > :eq(0)').view().activeItem.getRelativePath()).toBe 'dir/a'
|
|
|
|
expect(container1.find('.row > :eq(0) > :eq(1)').view().activeItem.getRelativePath()).toBe 'dir/a'
|
|
|
|
|
|
|
|
env2.run ->
|
|
|
|
expect(container2.find('.row > :eq(0) > :eq(0)').view().activeItem.getRelativePath()).toBe 'dir/a'
|
|
|
|
expect(container2.find('.row > :eq(0) > :eq(1)').view().activeItem.getRelativePath()).toBe 'dir/a'
|