Skip to content

Commit 9d4d894

Browse files
committed
Add another events test and fix from @iirvine
1 parent 5bbfbd9 commit 9d4d894

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

spec/suites/core/EventsSpec.js

+21
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,27 @@ describe('Events', function() {
181181
expect(spy1).not.toHaveBeenCalled();
182182
expect(spy2).not.toHaveBeenCalled();
183183
});
184+
it('doesnt lose track of listeners when removing non existent ones', function () {
185+
var obj = new Klass(),
186+
spy = jasmine.createSpy(),
187+
spy2 = jasmine.createSpy(),
188+
foo = {},
189+
foo2 = {};
190+
191+
L.Util.stamp(foo);
192+
L.Util.stamp(foo2);
193+
194+
obj.addEventListener('test', spy, foo2);
195+
196+
obj.removeEventListener('test', spy, foo); // Decrements test_idx to 0, even though event listener isn't registered with foo's _leaflet_id
197+
obj.removeEventListener('test', spy, foo2); // Doesn't get removed
198+
199+
obj.addEventListener('test', spy2, foo);
200+
201+
obj.fireEvent('test');
202+
203+
expect(spy).not.toHaveBeenCalled();
204+
});
184205
});
185206

186207
describe('#on, #off & #fire', function() {

src/core/Events.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ L.Mixin.Events = {
9999
}
100100
}
101101

102-
if (contextId && listeners.length === 0 && events[objKey]) {
102+
if (contextId && listeners.length === 0 && events[objKey] && events[objKey][contextId]) {
103103
objLenKey = objKey + '_len';
104104
delete events[objKey][contextId];
105105
events[objLenKey] = (events[objLenKey] || 1) - 1;

0 commit comments

Comments
 (0)