pulsar/spec/panel-container-spec.js
2019-02-28 19:30:03 +01:00

161 lines
5.2 KiB
JavaScript

'use strict'
const Panel = require('../src/panel')
const PanelContainer = require('../src/panel-container')
describe('PanelContainer', () => {
let container
class TestPanelItem {}
beforeEach(() => {
container = new PanelContainer({ viewRegistry: atom.views })
})
describe('::addPanel(panel)', () => {
it('emits an onDidAddPanel event with the index the panel was inserted at', () => {
const addPanelSpy = jasmine.createSpy()
container.onDidAddPanel(addPanelSpy)
const panel1 = new Panel({ item: new TestPanelItem() }, atom.views)
container.addPanel(panel1)
expect(addPanelSpy).toHaveBeenCalledWith({ panel: panel1, index: 0 })
const panel2 = new Panel({ item: new TestPanelItem() }, atom.views)
container.addPanel(panel2)
expect(addPanelSpy).toHaveBeenCalledWith({ panel: panel2, index: 1 })
})
})
describe('when a panel is destroyed', () => {
it('emits an onDidRemovePanel event with the index of the removed item', () => {
const removePanelSpy = jasmine.createSpy()
container.onDidRemovePanel(removePanelSpy)
const panel1 = new Panel({ item: new TestPanelItem() }, atom.views)
container.addPanel(panel1)
const panel2 = new Panel({ item: new TestPanelItem() }, atom.views)
container.addPanel(panel2)
expect(removePanelSpy).not.toHaveBeenCalled()
panel2.destroy()
expect(removePanelSpy).toHaveBeenCalledWith({ panel: panel2, index: 1 })
panel1.destroy()
expect(removePanelSpy).toHaveBeenCalledWith({ panel: panel1, index: 0 })
})
})
describe('::destroy()', () => {
it('destroys the container and all of its panels', () => {
const destroyedPanels = []
const panel1 = new Panel({ item: new TestPanelItem() }, atom.views)
panel1.onDidDestroy(() => {
destroyedPanels.push(panel1)
})
container.addPanel(panel1)
const panel2 = new Panel({ item: new TestPanelItem() }, atom.views)
panel2.onDidDestroy(() => {
destroyedPanels.push(panel2)
})
container.addPanel(panel2)
container.destroy()
expect(container.getPanels().length).toBe(0)
expect(destroyedPanels).toEqual([panel1, panel2])
})
})
describe('panel priority', () => {
describe('left / top panel container', () => {
let initialPanel
beforeEach(() => {
// 'left' logic is the same as 'top'
container = new PanelContainer({ location: 'left' })
initialPanel = new Panel({ item: new TestPanelItem() }, atom.views)
container.addPanel(initialPanel)
})
describe('when a panel with low priority is added', () => {
it('is inserted at the beginning of the list', () => {
const addPanelSpy = jasmine.createSpy()
container.onDidAddPanel(addPanelSpy)
const panel = new Panel(
{ item: new TestPanelItem(), priority: 0 },
atom.views
)
container.addPanel(panel)
expect(addPanelSpy).toHaveBeenCalledWith({ panel, index: 0 })
expect(container.getPanels()[0]).toBe(panel)
})
})
describe('when a panel with priority between two other panels is added', () => {
it('is inserted at the between the two panels', () => {
const addPanelSpy = jasmine.createSpy()
let panel = new Panel(
{ item: new TestPanelItem(), priority: 1000 },
atom.views
)
container.addPanel(panel)
container.onDidAddPanel(addPanelSpy)
panel = new Panel(
{ item: new TestPanelItem(), priority: 101 },
atom.views
)
container.addPanel(panel)
expect(addPanelSpy).toHaveBeenCalledWith({ panel, index: 1 })
expect(container.getPanels()[1]).toBe(panel)
})
})
})
describe('right / bottom panel container', () => {
let initialPanel
beforeEach(() => {
// 'bottom' logic is the same as 'right'
container = new PanelContainer({ location: 'right' })
initialPanel = new Panel({ item: new TestPanelItem() }, atom.views)
container.addPanel(initialPanel)
})
describe('when a panel with high priority is added', () => {
it('is inserted at the beginning of the list', () => {
const addPanelSpy = jasmine.createSpy()
container.onDidAddPanel(addPanelSpy)
const panel = new Panel(
{ item: new TestPanelItem(), priority: 1000 },
atom.views
)
container.addPanel(panel)
expect(addPanelSpy).toHaveBeenCalledWith({ panel, index: 0 })
expect(container.getPanels()[0]).toBe(panel)
})
})
describe('when a panel with low priority is added', () => {
it('is inserted at the end of the list', () => {
const addPanelSpy = jasmine.createSpy()
container.onDidAddPanel(addPanelSpy)
const panel = new Panel(
{ item: new TestPanelItem(), priority: 0 },
atom.views
)
container.addPanel(panel)
expect(addPanelSpy).toHaveBeenCalledWith({ panel, index: 1 })
expect(container.getPanels()[1]).toBe(panel)
})
})
})
})
})