95ed9cdda2
Allow L.Mixin.Events.removeEventListener() to accept one or more space-separated event types. Omitting the fn parameter will remove all event handlers for the supplied event type(s). Also allow L.Mixin.Events.removeEventListener() to accept a map where the string keys represent one or more space-separated event types and the values represent handler functions previously attached for the event(s). Add unit tests for the above changes.
172 lines
4.4 KiB
JavaScript
172 lines
4.4 KiB
JavaScript
describe('Events', function() {
|
|
var Klass;
|
|
|
|
beforeEach(function() {
|
|
Klass = L.Class.extend({
|
|
includes: L.Mixin.Events
|
|
});
|
|
});
|
|
|
|
describe('#fireEvent', function() {
|
|
|
|
it('should fire all listeners added through #addEventListener', function() {
|
|
var obj = new Klass(),
|
|
spy = jasmine.createSpy(),
|
|
spy2 = jasmine.createSpy(),
|
|
spy3 = jasmine.createSpy(),
|
|
spy4 = jasmine.createSpy(),
|
|
spy5 = jasmine.createSpy();
|
|
spy6 = jasmine.createSpy();
|
|
|
|
obj.addEventListener('test', spy);
|
|
obj.addEventListener('test', spy2);
|
|
obj.addEventListener('other', spy3);
|
|
obj.addEventListener({ test: spy4, other: spy5 });
|
|
obj.addEventListener({'test other': spy6 })
|
|
|
|
expect(spy).not.toHaveBeenCalled();
|
|
expect(spy2).not.toHaveBeenCalled();
|
|
expect(spy3).not.toHaveBeenCalled();
|
|
expect(spy4).not.toHaveBeenCalled();
|
|
expect(spy5).not.toHaveBeenCalled();
|
|
expect(spy6).not.toHaveBeenCalled();
|
|
|
|
obj.fireEvent('test');
|
|
|
|
expect(spy).toHaveBeenCalled();
|
|
expect(spy2).toHaveBeenCalled();
|
|
expect(spy3).not.toHaveBeenCalled();
|
|
expect(spy4).toHaveBeenCalled();
|
|
expect(spy5).not.toHaveBeenCalled();
|
|
expect(spy6).toHaveBeenCalled();
|
|
expect(spy6.calls.length).toEqual(1);
|
|
});
|
|
|
|
|
|
it('should provide event object to listeners and execute them in the right context', function() {
|
|
var obj = new Klass(),
|
|
obj2 = new Klass(),
|
|
obj3 = new Klass(),
|
|
obj4 = new Klass(),
|
|
foo = {};
|
|
|
|
function listener1(e) {
|
|
expect(e.type).toEqual('test');
|
|
expect(e.target).toEqual(obj);
|
|
expect(this).toEqual(obj);
|
|
expect(e.baz).toEqual(1);
|
|
}
|
|
|
|
function listener2(e) {
|
|
expect(e.type).toEqual('test');
|
|
expect(e.target).toEqual(obj2);
|
|
expect(this).toEqual(foo);
|
|
expect(e.baz).toEqual(2);
|
|
}
|
|
|
|
function listener3(e) {
|
|
expect(e.type).toEqual('test');
|
|
expect(e.target).toEqual(obj3);
|
|
expect(this).toEqual(obj3);
|
|
expect(e.baz).toEqual(3);
|
|
}
|
|
|
|
function listener4(e) {
|
|
expect(e.type).toEqual('test');
|
|
expect(e.target).toEqual(obj4);
|
|
expect(this).toEqual(foo);
|
|
expect(e.baz).toEqual(4);
|
|
}
|
|
|
|
obj.addEventListener('test', listener1);
|
|
obj2.addEventListener('test', listener2, foo);
|
|
obj3.addEventListener({ test: listener3 });
|
|
obj4.addEventListener({ test: listener4 }, foo);
|
|
|
|
obj.fireEvent('test', {baz: 1});
|
|
obj2.fireEvent('test', {baz: 2});
|
|
obj3.fireEvent('test', {baz: 3});
|
|
obj4.fireEvent('test', {baz: 4});
|
|
});
|
|
|
|
it('should not call listeners removed through #removeEventListener', function() {
|
|
var obj = new Klass(),
|
|
spy = jasmine.createSpy(),
|
|
spy2 = jasmine.createSpy(),
|
|
spy3 = jasmine.createSpy(),
|
|
spy4 = jasmine.createSpy(),
|
|
spy5 = jasmine.createSpy();
|
|
|
|
obj.addEventListener('test', spy);
|
|
obj.removeEventListener('test', spy);
|
|
|
|
obj.fireEvent('test');
|
|
|
|
expect(spy).not.toHaveBeenCalled();
|
|
|
|
obj.addEventListener('test2', spy2);
|
|
obj.addEventListener('test2', spy3);
|
|
obj.removeEventListener('test2');
|
|
|
|
obj.fireEvent('test2');
|
|
|
|
expect(spy2).not.toHaveBeenCalled();
|
|
expect(spy3).not.toHaveBeenCalled();
|
|
|
|
obj.addEventListener('test3', spy4);
|
|
obj.addEventListener('test4', spy5);
|
|
obj.removeEventListener({
|
|
test3: spy4,
|
|
test4: spy5
|
|
});
|
|
|
|
obj.fireEvent('test3');
|
|
obj.fireEvent('test4');
|
|
|
|
expect(spy4).not.toHaveBeenCalled();
|
|
expect(spy5).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('#on, #off & #fire', function() {
|
|
|
|
it('should work like #addEventListener && #removeEventListener', function() {
|
|
var obj = new Klass(),
|
|
spy = jasmine.createSpy();
|
|
|
|
obj.on('test', spy);
|
|
obj.fire('test');
|
|
|
|
expect(spy).toHaveBeenCalled();
|
|
|
|
obj.off('test', spy);
|
|
obj.fireEvent('test');
|
|
|
|
expect(spy.callCount).toBeLessThan(2);
|
|
});
|
|
|
|
it('should not override existing methods with the same name', function() {
|
|
var spy1 = jasmine.createSpy(),
|
|
spy2 = jasmine.createSpy(),
|
|
spy3 = jasmine.createSpy();
|
|
|
|
var Klass2 = L.Class.extend({
|
|
includes: L.Mixin.Events,
|
|
on: spy1,
|
|
off: spy2,
|
|
fire: spy3
|
|
});
|
|
|
|
var obj = new Klass2();
|
|
|
|
obj.on();
|
|
expect(spy1).toHaveBeenCalled();
|
|
|
|
obj.off();
|
|
expect(spy2).toHaveBeenCalled();
|
|
|
|
obj.fire();
|
|
expect(spy3).toHaveBeenCalled();
|
|
});
|
|
});
|
|
}); |