Merge pull request #4991 from ahocevar/soft-remove-listeners

Do not remove listeners while dispatching event
This commit is contained in:
Andreas Hocevar
2016-03-08 17:46:03 +01:00
3 changed files with 66 additions and 10 deletions

View File

@@ -214,7 +214,7 @@ describe('ol.events', function() {
var key2 = ol.events.listen(target, 'foo', listener, {});
expect(key1.boundListener).to.not.equal(key2.boundListener);
expect(target.getListeners('foo')).to.eql(
[key2.boundListener, key1.boundListener]);
[key1.boundListener, key2.boundListener]);
});
});

View File

@@ -115,6 +115,38 @@ describe('ol.events.EventTarget', function() {
expect(events[0]).to.equal(event);
expect(events[0].target).to.equal(eventTarget);
});
it('is safe to remove listeners in listeners', function() {
eventTarget.addEventListener('foo', spy3);
eventTarget.addEventListener('foo', function() {
eventTarget.removeEventListener('foo', spy1);
eventTarget.removeEventListener('foo', spy2);
eventTarget.removeEventListener('foo', spy3);
});
eventTarget.addEventListener('foo', spy1);
eventTarget.addEventListener('foo', spy2);
expect(function() {
eventTarget.dispatchEvent('foo');
}).not.to.throwException();
expect(called).to.eql([3]);
expect(eventTarget.getListeners('foo')).to.have.length(1);
});
it('is safe to do weird things in listeners', function() {
eventTarget.addEventListener('foo', spy2);
eventTarget.addEventListener('foo', function weird(evt) {
eventTarget.removeEventListener('foo', weird);
eventTarget.removeEventListener('foo', spy1);
eventTarget.dispatchEvent('foo');
eventTarget.removeEventListener('foo', spy2);
eventTarget.dispatchEvent('foo');
evt.preventDefault();
});
eventTarget.addEventListener('foo', spy1);
expect(function() {
eventTarget.dispatchEvent('foo');
}).not.to.throwException();
expect(called).to.eql([2, 2]);
expect(eventTarget.getListeners('foo')).to.be(undefined);
});
});
describe('#dispose()', function() {