mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-11-10 10:17:11 +03:00
115 lines
3.6 KiB
JavaScript
115 lines
3.6 KiB
JavaScript
const Panel = require('../src/panel')
|
|
|
|
describe('Panel', () => {
|
|
class TestPanelItem {
|
|
getElement () {
|
|
if (!this.element) {
|
|
this.element = document.createElement('div')
|
|
this.element.tabIndex = -1
|
|
this.element.className = 'test-root'
|
|
}
|
|
return this.element
|
|
}
|
|
}
|
|
|
|
it("adds the item's element as a child of the panel", () => {
|
|
const panel = new Panel({ item: new TestPanelItem() }, atom.views)
|
|
const element = panel.getElement()
|
|
expect(element.tagName.toLowerCase()).toBe('atom-panel')
|
|
expect(element.firstChild).toBe(panel.getItem().getElement())
|
|
})
|
|
|
|
describe('destroying the panel', () => {
|
|
it('removes the element when the panel is destroyed', () => {
|
|
const panel = new Panel({ item: new TestPanelItem() }, atom.views)
|
|
const element = panel.getElement()
|
|
const jasmineContent = document.getElementById('jasmine-content')
|
|
jasmineContent.appendChild(element)
|
|
|
|
expect(element.parentNode).toBe(jasmineContent)
|
|
panel.destroy()
|
|
expect(element.parentNode).not.toBe(jasmineContent)
|
|
})
|
|
|
|
it('does not try to remove the element twice', () => {
|
|
const item = new TestPanelItem()
|
|
const panel = new Panel({ item }, atom.views)
|
|
const element = panel.getElement()
|
|
const jasmineContent = document.getElementById('jasmine-content')
|
|
jasmineContent.appendChild(element)
|
|
|
|
item.getElement().focus()
|
|
expect(item.getElement()).toHaveFocus()
|
|
|
|
// Avoid this error:
|
|
// NotFoundError: Failed to execute 'remove' on 'Element':
|
|
// The node to be removed is no longer a child of this node.
|
|
// Perhaps it was moved in a 'blur' event handler?
|
|
item.getElement().addEventListener('blur', () => panel.destroy())
|
|
panel.destroy()
|
|
})
|
|
})
|
|
|
|
describe('changing panel visibility', () => {
|
|
it('notifies observers added with onDidChangeVisible', () => {
|
|
const panel = new Panel({ item: new TestPanelItem() }, atom.views)
|
|
|
|
const spy = jasmine.createSpy()
|
|
panel.onDidChangeVisible(spy)
|
|
|
|
panel.hide()
|
|
expect(panel.isVisible()).toBe(false)
|
|
expect(spy).toHaveBeenCalledWith(false)
|
|
spy.reset()
|
|
|
|
panel.show()
|
|
expect(panel.isVisible()).toBe(true)
|
|
expect(spy).toHaveBeenCalledWith(true)
|
|
|
|
panel.destroy()
|
|
expect(panel.isVisible()).toBe(false)
|
|
expect(spy).toHaveBeenCalledWith(false)
|
|
})
|
|
|
|
it('initially renders panel created with visible: false', () => {
|
|
const panel = new Panel(
|
|
{ visible: false, item: new TestPanelItem() },
|
|
atom.views
|
|
)
|
|
const element = panel.getElement()
|
|
expect(element.style.display).toBe('none')
|
|
})
|
|
|
|
it('hides and shows the panel element when Panel::hide() and Panel::show() are called', () => {
|
|
const panel = new Panel({ item: new TestPanelItem() }, atom.views)
|
|
const element = panel.getElement()
|
|
expect(element.style.display).not.toBe('none')
|
|
|
|
panel.hide()
|
|
expect(element.style.display).toBe('none')
|
|
|
|
panel.show()
|
|
expect(element.style.display).not.toBe('none')
|
|
})
|
|
})
|
|
|
|
describe('when a class name is specified', () => {
|
|
it('initially renders panel created with visible: false', () => {
|
|
const panel = new Panel(
|
|
{ className: 'some classes', item: new TestPanelItem() },
|
|
atom.views
|
|
)
|
|
const element = panel.getElement()
|
|
|
|
expect(element).toHaveClass('some')
|
|
expect(element).toHaveClass('classes')
|
|
})
|
|
})
|
|
|
|
describe('creating an atom-panel via markup', () => {
|
|
it('does not throw an error', () => {
|
|
document.createElement('atom-panel')
|
|
})
|
|
})
|
|
})
|