import Tooltip from '../../src/index.js'; import '@popperjs/test-utils'; import then from '@popperjs/test-utils/utils/then.js'; import '@popperjs/test-utils/utils/customEventPolyfill.js'; const jasmineWrapper = document.getElementById('jasmineWrapper'); let reference; let instance; function createReference() { reference = document.createElement('div'); reference.style.width = '100px'; reference.style.height = '100px'; reference.style.margin = '100px'; reference.innerText = 'reference'; jasmineWrapper.appendChild(reference); } describe('[tooltip.js]', () => { describe('manual', () => { beforeEach(() => { createReference(); }); it('should show tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', }); instance.show(); then(() => { expect(document.querySelector('.tooltip')).not.toBeNull(); done(); }); }); it('should hide tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', }); instance.show(); then(() => instance.hide()); then(() => { expect(document.querySelector('.tooltip').style.display).toBe('none'); done(); }); }); it('should toggle (show) tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', }); instance.toggle(); then(() => { expect(document.querySelector('.tooltip')).not.toBeNull(); done(); }); }); it('should toggle (hide) tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', }); instance.show(); then(() => instance.toggle()); then(() => { expect(document.querySelector('.tooltip').style.display).toBe('none'); done(); }); }); it('should show, hide and show again a tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', }); instance.show(); then(() => instance.hide()); then(() => instance.show()); then(() => { expect(document.querySelector('.tooltip')).not.toBeNull(); done(); }); }); it('should dispose tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', }); instance.show(); then(() => instance.dispose()); then(() => { expect(document.querySelector('.tooltip')).toBeNull(); }); then(() => { reference.click(); }); then(() => { expect(document.querySelector('.tooltip')).toBeNull(); done(); }); }); it('should dispose tooltip despite never being shown', done => { instance = new Tooltip(reference, { title: 'foobar', }); instance.dispose(); then(() => { expect(document.querySelector('.tooltip')).toBeNull(); }); then(() => { reference.dispatchEvent(new CustomEvent('mouseenter')); }); then(() => { expect(document.querySelector('.tooltip')).toBeNull(); done(); }); }); }); describe('container', () => { beforeEach(() => { createReference(); }); it('should show tooltip as child of body', done => { instance = new Tooltip(reference, { title: 'foobar', container: 'body', }); instance.show(); then(() => { expect(document.querySelector('.tooltip').parentNode).toBe( document.body ); instance.dispose(); done(); }); }); }); describe('content', () => { beforeEach(() => { createReference(); }); it('should show text tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', }); instance.show(); then(() => { expect( document.querySelector('.tooltip .tooltip-inner').textContent ).toBe('foobar'); done(); }); }); it('should show HTML tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', html: true, }); instance.show(); then(() => { expect( document.querySelector('.tooltip .tooltip-inner').innerHTML ).toBe('foobar'); done(); }); }); it('should show stripped out HTML tooltip', done => { instance = new Tooltip(reference, { title: 'foobar', html: true, }); instance.show(); then(() => { expect( document.querySelector('.tooltip .tooltip-inner').textContent ).toBe('foobar'); done(); }); }); it('should use a DOM node as tooltip content', done => { const content = document.createElement('div'); content.innerText = 'foobar'; instance = new Tooltip(reference, { title: content, html: true, }); instance.show(); then(() => { expect( document.querySelector('.tooltip .tooltip-inner').innerHTML ).toBe('