mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-11-10 10:17:11 +03:00
115 lines
3.7 KiB
JavaScript
115 lines
3.7 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');
|
|
});
|
|
});
|
|
});
|