In addition to using const and let, this also upgrades our linter config and removes lint (mostly whitespace).
149 lines
3.8 KiB
JavaScript
149 lines
3.8 KiB
JavaScript
import EventTarget from '../../../src/ol/events/EventTarget.js';
|
|
import Observable from '../../../src/ol/Observable.js';
|
|
|
|
|
|
describe('ol.Observable', function() {
|
|
|
|
describe('constructor', function() {
|
|
|
|
it('creates a new observable', function() {
|
|
const observable = new Observable();
|
|
expect(observable).to.be.a(Observable);
|
|
expect(observable).to.be.a(EventTarget);
|
|
});
|
|
|
|
});
|
|
|
|
describe('#on()', function() {
|
|
let observable, listener;
|
|
beforeEach(function() {
|
|
observable = new Observable();
|
|
listener = sinon.spy();
|
|
});
|
|
|
|
it('registers a listener for events of the given type', function() {
|
|
observable.on('foo', listener);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.calledOnce).to.be(true);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.callCount).to.be(2);
|
|
});
|
|
|
|
it('accepts an array of event types', function() {
|
|
observable.on(['foo', 'bar'], listener);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.calledOnce).to.be(true);
|
|
|
|
observable.dispatchEvent('bar');
|
|
expect(listener.callCount).to.be(2);
|
|
});
|
|
|
|
it('returns a listener key', function() {
|
|
const key = observable.on('foo', listener);
|
|
|
|
expect(typeof key).to.be('object');
|
|
});
|
|
|
|
});
|
|
|
|
describe('#once()', function() {
|
|
let observable, listener;
|
|
beforeEach(function() {
|
|
observable = new Observable();
|
|
listener = sinon.spy();
|
|
});
|
|
|
|
it('registers a listener that is only called once', function() {
|
|
observable.once('foo', listener);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.calledOnce).to.be(true);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.callCount).to.be(1);
|
|
});
|
|
|
|
it('is safe to dispatch events of same type in a once listener', function() {
|
|
let callCount = 0;
|
|
observable.once('change', function() {
|
|
observable.changed();
|
|
observable.changed();
|
|
});
|
|
observable.on('change', function() {
|
|
++callCount;
|
|
});
|
|
expect(function() {
|
|
observable.changed();
|
|
}).to.not.throwException();
|
|
expect(callCount).to.be(3);
|
|
});
|
|
|
|
it('accepts an array of event types (called once for each)', function() {
|
|
observable.once(['foo', 'bar'], listener);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.calledOnce).to.be(true);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.callCount).to.be(1);
|
|
|
|
observable.dispatchEvent('bar');
|
|
expect(listener.callCount).to.be(2);
|
|
|
|
observable.dispatchEvent('bar');
|
|
expect(listener.callCount).to.be(2);
|
|
});
|
|
|
|
it('returns a listener key', function() {
|
|
const key = observable.once('foo', listener);
|
|
|
|
expect(typeof key).to.be('object');
|
|
});
|
|
|
|
});
|
|
|
|
describe('#un()', function() {
|
|
let observable, listener;
|
|
beforeEach(function() {
|
|
observable = new Observable();
|
|
listener = sinon.spy();
|
|
});
|
|
|
|
it('unregisters a previously registered listener', function() {
|
|
observable.on('foo', listener);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.calledOnce).to.be(true);
|
|
|
|
observable.un('foo', listener);
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.calledOnce).to.be(true);
|
|
});
|
|
|
|
});
|
|
|
|
describe('ol.Observable.unByKey()', function() {
|
|
let observable, listener;
|
|
beforeEach(function() {
|
|
observable = new Observable();
|
|
listener = sinon.spy();
|
|
});
|
|
|
|
it('unregisters a listener given the key returned by `on`', function() {
|
|
const key = observable.on('foo', listener);
|
|
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.calledOnce).to.be(true);
|
|
|
|
Observable.unByKey(key);
|
|
observable.dispatchEvent('foo');
|
|
expect(listener.callCount).to.be(1);
|
|
});
|
|
|
|
});
|
|
|
|
});
|