describe('pixi/utils/EventTarget', function () { 'use strict'; var expect = chai.expect; var EventTarget = PIXI.EventTarget; it('Module exists', function () { expect(EventTarget).to.be.an('object'); }); it('Confirm new instance', function () { var obj = {}; EventTarget.mixin(obj); pixi_utils_EventTarget_like(obj); }); it('simple on/emit case works', function (done) { var myData = {}, obj = {}; EventTarget.mixin(obj); obj.on('myevent', function (event) { expect(event).to.be.an.instanceOf(PIXI.Event); expect(event).to.have.property('stopped', false); expect(event).to.have.property('stoppedImmediate', false); expect(event).to.have.property('target', obj); expect(event).to.have.property('type', 'myevent'); expect(event).to.have.property('data', myData); expect(event).to.respondTo('stopPropagation'); expect(event).to.respondTo('stopImmediatePropagation'); done(); }); obj.emit('myevent', myData); }); it('simple once case works', function () { var called = 0, obj = {}; EventTarget.mixin(obj); obj.once('myevent', function() { called++; }); obj.emit('myevent'); obj.emit('myevent'); obj.emit('myevent'); obj.emit('myevent'); obj.emit('myevent'); expect(called).to.equal(1); }); it('simple off case works', function (done) { var obj = {}; EventTarget.mixin(obj); function onMyEvent() { done(new Error('Event listener should not have been called')); } obj.on('myevent', onMyEvent); obj.off('myevent', onMyEvent); obj.emit('myevent'); done(); }); it('simple propagation case works', function (done) { var myData = {}, pobj = {}, obj = { parent: pobj }; EventTarget.mixin(pobj); EventTarget.mixin(obj); pobj.on('myevent', function () { done(); }); obj.emit('myevent'); }); it('simple stopPropagation case works', function (done) { var myData = {}, pobj = {}, obj = { parent: pobj }; EventTarget.mixin(pobj); EventTarget.mixin(obj); pobj.on('myevent', function () { done(new Error('Event listener should not have been called on the parent element')); }); obj.on('myevent', function (evt) { evt.stopPropagation(); }); obj.emit('myevent'); done(); }); it('simple stopImmediatePropagation case works', function (done) { var myData = {}, pobj = {}, obj = { parent: pobj }; EventTarget.mixin(pobj); EventTarget.mixin(obj); pobj.on('myevent', function () { done(new Error('Event listener should not have been called on the parent')); }); obj.on('myevent', function (evt) { evt.stopImmediatePropagation(); }); obj.on('myevent', function () { done(new Error('Event listener should not have been called on the second')); }); obj.emit('myevent'); done(); }); it('multiple dispatches work properly', function () { var called = 0, obj = {}; EventTarget.mixin(obj); function onMyEvent() { called++; } obj.on('myevent', onMyEvent); obj.emit('myevent'); obj.emit('myevent'); obj.emit('myevent'); obj.emit('myevent'); expect(called).to.equal(4); }); it('multiple events work properly', function () { var called = 0, obj = {}; EventTarget.mixin(obj); function onMyEvent() { called++; } obj.on('myevent1', onMyEvent); obj.on('myevent2', onMyEvent); obj.on('myevent3', onMyEvent); obj.emit('myevent1'); obj.emit('myevent2'); obj.emit('myevent3'); expect(called).to.equal(3); }); it('multiple events one removed works properly', function () { var called = 0, obj = {}; EventTarget.mixin(obj); function onMyEvent() { called++; } obj.on('myevent1', onMyEvent); obj.on('myevent2', onMyEvent); obj.on('myevent3', onMyEvent); obj.emit('myevent1'); obj.emit('myevent2'); obj.emit('myevent3'); obj.off('myevent2', onMyEvent); obj.emit('myevent1'); obj.emit('myevent2'); obj.emit('myevent3'); expect(called).to.equal(5); }); });