'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) }) }) }) }) })