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