describe('DomEvent', function () { var el; function simulateClick(el) { if (document.createEvent) { var e = document.createEvent('MouseEvents'); e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); return el.dispatchEvent(e); } else if (el.fireEvent) { return el.fireEvent('onclick'); } } beforeEach(function () { el = document.createElement('div'); el.style.position = 'absolute'; el.style.top = el.style.left = '-10000px'; document.body.appendChild(el); }); afterEach(function () { document.body.removeChild(el); }); describe('#addListener', function () { it('adds a listener and calls it on event', function () { var listener1 = sinon.spy(), listener2 = sinon.spy(); L.DomEvent.addListener(el, 'click', listener1); L.DomEvent.addListener(el, 'click', listener2); simulateClick(el); expect(listener1.called).to.be.ok(); expect(listener2.called).to.be.ok(); }); it('binds "this" to the given context', function () { var obj = {foo: 'bar'}, result; L.DomEvent.addListener(el, 'click', function () { result = this; }, obj); simulateClick(el); expect(result).to.eql(obj); }); it('passes an event object to the listener', function () { var type; L.DomEvent.addListener(el, 'click', function (e) { type = e && e.type; }); simulateClick(el); expect(type).to.eql('click'); }); }); describe('#removeListener', function () { it('removes a previously added listener', function () { var listener = sinon.spy(); L.DomEvent.addListener(el, 'click', listener); L.DomEvent.removeListener(el, 'click', listener); simulateClick(el); expect(listener.called).to.not.be.ok(); }); }); describe('#stopPropagation', function () { it('stops propagation of the given event', function () { var child = document.createElement('div'), listener = sinon.spy(); el.appendChild(child); L.DomEvent.addListener(child, 'click', L.DomEvent.stopPropagation); L.DomEvent.addListener(el, 'click', listener); simulateClick(child); expect(listener.called).to.not.be.ok(); el.removeChild(child); }); }); describe('#preventDefault', function () { it('prevents the default action of event', function () { L.DomEvent.addListener(el, 'click', L.DomEvent.preventDefault); expect(simulateClick(el)).to.be(false); }); }); });