mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-15 16:06:41 +03:00
fbbd63d96b
This change fixes tests on Chromecast by loading tests later in the process. Test scripts are now dynamically inserted by boot.js, rather than loaded by Karma. The bootstrapping code then awaits the completion of that before starting the Karma frameworks (Jasmine) to run the tests. This also removes the use of goog.provide/goog.require in tests and test utils. We don't need to load test utils or library sources dynamically in each test, and this gives us more explicit control over script loading and ordering. Closes #4094
186 lines
5.6 KiB
JavaScript
186 lines
5.6 KiB
JavaScript
/*! @license
|
|
* Shaka Player
|
|
* Copyright 2016 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
describe('EventManager', () => {
|
|
const Util = shaka.test.Util;
|
|
|
|
/** @type {!shaka.util.EventManager} */
|
|
let eventManager;
|
|
/** @type {!Event} */
|
|
let event1;
|
|
/** @type {!Event} */
|
|
let event2;
|
|
/** @type {!EventTarget} */
|
|
let target1;
|
|
/** @type {!EventTarget} */
|
|
let target2;
|
|
|
|
beforeEach(() => {
|
|
eventManager = new shaka.util.EventManager();
|
|
target1 = document.createElement('div');
|
|
target2 = document.createElement('div');
|
|
event1 = new Event('eventtype1');
|
|
event2 = new Event('eventtype2');
|
|
});
|
|
|
|
afterEach(() => {
|
|
eventManager.release();
|
|
});
|
|
|
|
describe('listen', () => {
|
|
it('listens for an event', () => {
|
|
const listener = jasmine.createSpy('listener');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener));
|
|
target1.dispatchEvent(event1);
|
|
|
|
expect(listener).toHaveBeenCalled();
|
|
});
|
|
|
|
it('listens for an event from mutiple targets', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
const listener2 = jasmine.createSpy('listener2');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
eventManager.listen(target2, 'eventtype1', Util.spyFunc(listener2));
|
|
|
|
target1.dispatchEvent(event1);
|
|
target2.dispatchEvent(event1);
|
|
|
|
expect(listener1).toHaveBeenCalled();
|
|
expect(listener2).toHaveBeenCalled();
|
|
});
|
|
|
|
it('listens for multiple events', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
const listener2 = jasmine.createSpy('listener2');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
eventManager.listen(target1, 'eventtype2', Util.spyFunc(listener2));
|
|
|
|
target1.dispatchEvent(event1);
|
|
target1.dispatchEvent(event2);
|
|
|
|
expect(listener1).toHaveBeenCalled();
|
|
expect(listener2).toHaveBeenCalled();
|
|
});
|
|
|
|
it('listens for multiple events from mutiple targets', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
const listener2 = jasmine.createSpy('listener2');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
eventManager.listen(target2, 'eventtype2', Util.spyFunc(listener2));
|
|
|
|
target1.dispatchEvent(event1);
|
|
target2.dispatchEvent(event2);
|
|
|
|
expect(listener1).toHaveBeenCalled();
|
|
expect(listener2).toHaveBeenCalled();
|
|
});
|
|
|
|
it('listens for an event with multiple listeners', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
const listener2 = jasmine.createSpy('listener2');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener2));
|
|
|
|
target1.dispatchEvent(event1);
|
|
|
|
expect(listener1).toHaveBeenCalled();
|
|
expect(listener2).toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('listenOnce', () => {
|
|
it('listens to an event only once', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
|
|
eventManager.listenOnce(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
|
|
target1.dispatchEvent(event1);
|
|
expect(listener1).toHaveBeenCalled();
|
|
listener1.calls.reset();
|
|
|
|
target1.dispatchEvent(event1);
|
|
expect(listener1).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('listens to an event with multiple listeners', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
const listener2 = jasmine.createSpy('listener2');
|
|
|
|
eventManager.listenOnce(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
eventManager.listenOnce(target1, 'eventtype1', Util.spyFunc(listener2));
|
|
|
|
target1.dispatchEvent(event1);
|
|
|
|
expect(listener1).toHaveBeenCalled();
|
|
expect(listener2).toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('unlisten', () => {
|
|
it('stops listening to an event', () => {
|
|
const listener = jasmine.createSpy('listener');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener));
|
|
eventManager.unlisten(target1, 'eventtype1');
|
|
|
|
target1.dispatchEvent(event1);
|
|
|
|
expect(listener).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('ignores other targets when removing listeners', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
const listener2 = jasmine.createSpy('listener2');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
eventManager.listen(target2, 'eventtype1', Util.spyFunc(listener2));
|
|
eventManager.unlisten(target2, 'eventtype1');
|
|
|
|
target1.dispatchEvent(event1);
|
|
|
|
expect(listener1).toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('removeAll', () => {
|
|
it('stops listening to multiple events', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
const listener2 = jasmine.createSpy('listener2');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
eventManager.listen(target1, 'eventtype2', Util.spyFunc(listener2));
|
|
|
|
eventManager.removeAll();
|
|
|
|
target1.dispatchEvent(event1);
|
|
target1.dispatchEvent(event2);
|
|
|
|
expect(listener1).not.toHaveBeenCalled();
|
|
expect(listener2).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('stops listening for an event with multiple listeners', () => {
|
|
const listener1 = jasmine.createSpy('listener1');
|
|
const listener2 = jasmine.createSpy('listener2');
|
|
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener1));
|
|
eventManager.listen(target1, 'eventtype1', Util.spyFunc(listener2));
|
|
|
|
eventManager.removeAll();
|
|
|
|
target1.dispatchEvent(event1);
|
|
|
|
expect(listener1).not.toHaveBeenCalled();
|
|
expect(listener2).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|