SequenceDiagram/scripts/core/EventObject_spec.js

199 lines
4.2 KiB
JavaScript

import EventObject from './EventObject.js';
describe('EventObject', () => {
let o = null;
beforeEach(() => {
o = new EventObject();
});
describe('trigger', () => {
it('invokes registered listeners', () => {
let triggered = 0;
o.addEventListener('foo', () => {
++ triggered;
});
o.trigger('foo');
expect(triggered).toEqual(1);
});
it('invokes with the given parameters', () => {
let capturedParam1 = null;
let capturedParam2 = null;
o.addEventListener('foo', (param1, param2) => {
capturedParam1 = param1;
capturedParam2 = param2;
});
o.trigger('foo', ['a', 'b']);
expect(capturedParam1).toEqual('a');
expect(capturedParam2).toEqual('b');
});
it('only invokes relevant callbacks', () => {
let triggered = 0;
o.addEventListener('foo', () => {
++ triggered;
});
o.trigger('bar');
expect(triggered).toEqual(0);
});
it('forwards to registered objects', () => {
let capturedType = null;
o.addEventForwarding({trigger: (type) => {
capturedType = type;
}});
o.trigger('bar');
expect(capturedType).toEqual('bar');
});
it('forwards with the given parameters', () => {
let capturedParams = null;
o.addEventForwarding({trigger: (type, params) => {
capturedParams = params;
}});
o.trigger('bar', ['a', 'b']);
expect(capturedParams[0]).toEqual('a');
expect(capturedParams[1]).toEqual('b');
});
});
describe('countEventListeners', () => {
it('returns the number of event listeners of a given type', () => {
o.addEventListener('foo', () => null);
o.addEventListener('foo', () => null);
expect(o.countEventListeners('foo')).toEqual(2);
});
it('does not count unrequested types', () => {
o.addEventListener('foo', () => null);
o.addEventListener('foo', () => null);
o.addEventListener('bar', () => null);
expect(o.countEventListeners('bar')).toEqual(1);
});
it('returns 0 for events which have no listeners', () => {
expect(o.countEventListeners('foo')).toEqual(0);
});
});
describe('removeEventListener', () => {
it('removes the requested listener', () => {
let triggered = 0;
const fn = () => {
++ triggered;
};
o.addEventListener('foo', fn);
o.trigger('foo');
expect(triggered).toEqual(1);
triggered = 0;
o.removeEventListener('foo', fn);
o.trigger('foo');
expect(triggered).toEqual(0);
});
it('leaves other listeners', () => {
let triggered = 0;
const fn1 = () => null;
const fn2 = () => {
++ triggered;
};
o.addEventListener('foo', fn1);
o.addEventListener('foo', fn2);
o.removeEventListener('foo', fn1);
o.trigger('foo');
expect(triggered).toEqual(1);
});
it('leaves other listener types', () => {
let triggered = 0;
const fn = () => {
++ triggered;
};
o.addEventListener('foo', fn);
o.addEventListener('bar', fn);
o.removeEventListener('foo', fn);
o.trigger('bar');
expect(triggered).toEqual(1);
});
it('silently ignores non-existent listeners', () => {
expect(() => o.removeEventListener('foo', () => null))
.not.toThrow();
});
});
describe('removeAllEventListeners', () => {
it('removes all listeners for the requested type', () => {
let triggered = 0;
const fn = () => {
++ triggered;
};
o.addEventListener('foo', fn);
o.trigger('foo');
expect(triggered).toEqual(1);
triggered = 0;
o.removeAllEventListeners('foo');
o.trigger('foo');
expect(triggered).toEqual(0);
});
it('leaves other listener types', () => {
let triggered = 0;
const fn = () => {
++ triggered;
};
o.addEventListener('foo', fn);
o.addEventListener('bar', fn);
o.removeAllEventListeners('foo');
o.trigger('bar');
expect(triggered).toEqual(1);
});
it('silently ignores non-existent types', () => {
expect(() => o.removeAllEventListeners('foo')).not.toThrow();
});
it('removes all listener types when given no argument', () => {
let triggered = 0;
const fn = () => {
++ triggered;
};
o.addEventListener('foo', fn);
o.addEventListener('bar', fn);
o.removeAllEventListeners();
o.trigger('foo');
o.trigger('bar');
expect(triggered).toEqual(0);
});
});
});