UNPKG

polyfill-service

Version:
150 lines (131 loc) 3.85 kB
/* global expect,it */ // Safari fails this test. However, no-one would ever do this // as it would just create an event that can never be dispatched/listened for // it doesn't cause any problem it.skip('should throw exception when instantiated with no parameters', function() { expect(function() { new Event(); }).to.throwException(); }); it('should have correct default properties', function() { var testEvent = new Event('click'); expect(testEvent.type).to.be('click'); expect(testEvent.bubbles).to.be(false); expect(testEvent.cancelable).to.be(false); }); it('should modify default properties if optional EventInit parameter is passed', function() { var testEvent = new Event('test', { bubbles: true, cancelable: true }); expect(testEvent.type).to.be('test'); expect(testEvent.bubbles).to.be(true); expect(testEvent.cancelable).to.be(true); }); it('should be able to fire an event that can be listened to', function(done) { var testEvent = new Event('test', { bubbles: true, cancelable: true }); var testEl = document.createElement('div'); testEl.addEventListener('test', function(ev) { expect(ev.type).to.be('test'); expect(ev.bubbles).to.be(true); expect(ev.cancelable).to.be(true); done(); }); testEl.dispatchEvent(testEvent); }); it('should bubble the event', function(done) { var testEvent = new Event('test', { bubbles: true, cancelable: true }); var testEl = document.createElement('div'); document.body.appendChild(testEl); document.body.addEventListener('test', function(ev) { expect(ev.type).to.be('test'); expect(ev.bubbles).to.be(true); expect(ev.cancelable).to.be(true); done(); }); testEl.dispatchEvent(testEvent); }); it('should not trigger an event handler once removed', function() { var testEvent = new Event('test', { bubbles: true, cancelable: true }); var listener = function() { throw new Error('listener was fired, but should have been removed'); }; var testEl = document.createElement('div'); testEl.addEventListener('test', listener); testEl.removeEventListener('test', listener); testEl.dispatchEvent(testEvent); }); it('should trigger an event handler once added, removed, and added again', function () { // NOTE: The event must be a real DOM event or the // dispatchEvent polyfill will catch the fireEvent // error, simulate firing the event by running the // event listeners. var fired = false; var listener = function() { fired = true; document.removeEventListener('click', listener); }; document.addEventListener('click', listener); document.removeEventListener('click', listener); document.addEventListener('click', listener); // click the document document.dispatchEvent(new Event('click')); expect(fired).to.be(true); }); it('should have the correct target when using delegation', function () { var fired = false; var el = document.body.firstChild; var listener = function(e) { if (e.target === el) fired = true; document.removeEventListener('click', listener); }; document.addEventListener('click', listener); el.dispatchEvent(new Event('click', { bubbles: true })); expect(fired).to.be(true); }); it('should successfully call window.addEventListener or throw exception', function() { var eventsToTest = [ 'click', 'dblclick', 'keyup', 'keypress', 'keydown', 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseenter', 'mouseleave', 'mouseout', 'storage', 'storagecommit', 'textinput' ]; var threwLast; var threw; var listener = function() {}; for(var i = 0; i < eventsToTest.length; i++) { var eventType = eventsToTest[i]; try { window.addEventListener(eventType, listener); threw = false; } catch(ignore) { threw = true; } if (typeof (threwLast) != 'undefined') { expect(threw).to.be(threwLast); } threwLast = threw; } });