| |
| var assert = require('assert'); |
| var CE = require('../'); |
| |
| describe('CustomEvent', function () { |
| |
| describe('new CustomEvent()', function () { |
| |
| it('should create a `CustomEvent` instance', function () { |
| var e = new CE('cat'); |
| |
| assert.equal(e.type, 'cat'); |
| assert.equal(e.bubbles, false); |
| assert.equal(e.cancelable, false); |
| assert.equal(e.detail, undefined); |
| }); |
| |
| it('should create a `CustomEvent` instance with a `details` object', function () { |
| var e = new CE('meow', { detail: { foo: 'bar' } }); |
| |
| assert.equal(e.type, 'meow'); |
| assert.equal(e.bubbles, false); |
| assert.equal(e.cancelable, false); |
| assert.equal(e.detail.foo, 'bar'); |
| }); |
| |
| it('should create a `CustomEvent` instance with a `bubbles` boolean', function () { |
| var e = new CE('purr', { bubbles: true }); |
| |
| assert.equal(e.type, 'purr'); |
| assert.equal(e.bubbles, true); |
| assert.equal(e.cancelable, false); |
| assert.equal(e.detail, undefined); |
| }); |
| |
| it('should create a `CustomEvent` instance with a `cancelable` boolean', function () { |
| var e = new CE('scratch', { cancelable: true }); |
| |
| assert.equal(e.type, 'scratch'); |
| assert.equal(e.bubbles, false); |
| assert.equal(e.cancelable, true); |
| assert.equal(e.detail, undefined); |
| }); |
| |
| it('should create a `CustomEvent` instance that is dispatchable', function (done) { |
| var e = new CE('claw', { |
| bubbles: true, |
| cancelable: true, |
| detail: { canhaz: 'cheeseburger' } |
| }); |
| |
| function onclaw (ev) { |
| if (!ev) ev = window.event; |
| assert.equal(e.bubbles, true); |
| assert.equal(e.cancelable, true); |
| assert.equal(e.detail.canhaz, 'cheeseburger'); |
| done(); |
| } |
| |
| if (document.body.dispatchEvent) { |
| document.body.addEventListener('claw', onclaw, false); |
| document.body.dispatchEvent(e); |
| } else { |
| // IE <= 8 will only allow us to fire "known" event names, |
| // so we need to fire "click" instead of "claw :\ |
| document.body.attachEvent('onclick', onclaw); |
| |
| // need to fire event in a separate tick for some reason… |
| setTimeout(function () { |
| e.type = 'click'; |
| e.eventName = 'click'; |
| e.eventType = 'click'; |
| |
| document.body.fireEvent('onclick', e); |
| }, 50); |
| } |
| }); |
| |
| }); |
| |
| }); |