You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

225 lines
6.2 KiB
JavaScript

import { Event } from "../../Source/Cesium.js";
describe("Core/Event", function () {
var event;
var spyListener;
beforeEach(function () {
event = new Event();
spyListener = jasmine.createSpy("listener");
});
it("works with no scope", function () {
var someValue = 123;
event.addEventListener(spyListener);
event.raiseEvent(someValue);
expect(spyListener).toHaveBeenCalledWith(someValue);
spyListener.calls.reset();
event.removeEventListener(spyListener);
event.raiseEvent(someValue);
expect(spyListener).not.toHaveBeenCalled();
});
it("works with scope", function () {
var someValue = 123;
var scope = {};
event.addEventListener(spyListener, scope);
event.raiseEvent(someValue);
expect(spyListener).toHaveBeenCalledWith(someValue);
expect(spyListener.calls.first().object).toBe(scope);
spyListener.calls.reset();
event.removeEventListener(spyListener, scope);
event.raiseEvent(someValue);
expect(spyListener).not.toHaveBeenCalled();
});
it("can remove from within a callback", function () {
var doNothing = function (evt) {};
var removeEventCb = function (evt) {
event.removeEventListener(removeEventCb);
};
var doNothing2 = function (evt) {};
event.addEventListener(doNothing);
event.addEventListener(removeEventCb);
event.addEventListener(doNothing2);
event.raiseEvent();
expect(event.numberOfListeners).toEqual(2);
event.removeEventListener(doNothing);
event.removeEventListener(doNothing2);
expect(event.numberOfListeners).toEqual(0);
});
it("can remove multiple listeners within a callback", function () {
var removeEvent0 = event.addEventListener(function () {
removeEvent0();
});
event.addEventListener(function () {});
var removeEvent2 = event.addEventListener(function () {
removeEvent2();
});
event.addEventListener(function () {});
var removeEvent4 = event.addEventListener(function () {
removeEvent4();
});
event.addEventListener(function () {});
var removeEvent6 = event.addEventListener(function () {
removeEvent6();
});
event.addEventListener(function () {});
var removeEvent8 = event.addEventListener(function () {
removeEvent8();
});
event.addEventListener(function () {});
expect(event.numberOfListeners).toEqual(10);
event.raiseEvent();
expect(event.numberOfListeners).toEqual(5);
event.raiseEvent();
expect(event.numberOfListeners).toEqual(5);
});
it("addEventListener and removeEventListener works with same function of different scopes", function () {
var Scope = function () {
this.timesCalled = 0;
};
Scope.prototype.myCallback = function () {
this.timesCalled++;
};
var scope1 = new Scope();
var scope2 = new Scope();
event.addEventListener(Scope.prototype.myCallback, scope1);
event.addEventListener(Scope.prototype.myCallback, scope2);
event.raiseEvent();
expect(scope1.timesCalled).toEqual(1);
expect(scope2.timesCalled).toEqual(1);
event.removeEventListener(Scope.prototype.myCallback, scope1);
expect(event.numberOfListeners).toEqual(1);
event.raiseEvent();
expect(scope1.timesCalled).toEqual(1);
expect(scope2.timesCalled).toEqual(2);
event.removeEventListener(Scope.prototype.myCallback, scope2);
expect(event.numberOfListeners).toEqual(0);
});
it("numberOfListeners returns the correct number", function () {
var callback1 = function () {};
var callback2 = function () {};
expect(event.numberOfListeners).toEqual(0);
event.addEventListener(callback1);
expect(event.numberOfListeners).toEqual(1);
event.addEventListener(callback2);
expect(event.numberOfListeners).toEqual(2);
event.removeEventListener(callback2);
expect(event.numberOfListeners).toEqual(1);
});
it("removeEventListener indicates if the listener is registered with the event", function () {
var callback = function () {};
event.addEventListener(callback);
expect(event.numberOfListeners).toEqual(1);
expect(event.removeEventListener(callback)).toEqual(true);
expect(event.numberOfListeners).toEqual(0);
expect(event.removeEventListener(callback)).toEqual(false);
});
it("removeEventListener does not remove a registered listener of a different scope", function () {
var myFunc = function () {};
var scope = {};
event.addEventListener(myFunc, scope);
expect(event.removeEventListener(myFunc)).toEqual(false);
});
it("works with no listeners", function () {
event.raiseEvent(123);
});
it("addEventListener returns a function allowing removal", function () {
var someValue = 123;
var remove = event.addEventListener(spyListener);
event.raiseEvent(someValue);
expect(spyListener).toHaveBeenCalledWith(someValue);
spyListener.calls.reset();
remove();
event.raiseEvent(someValue);
expect(spyListener).not.toHaveBeenCalled();
});
it("addEventListener with scope returns a function allowing removal", function () {
var someValue = 123;
var scope = {};
var remove = event.addEventListener(spyListener, scope);
event.raiseEvent(someValue);
expect(spyListener).toHaveBeenCalledWith(someValue);
spyListener.calls.reset();
remove();
event.raiseEvent(someValue);
expect(spyListener).not.toHaveBeenCalled();
});
it("addEventListener throws with undefined listener", function () {
expect(function () {
event.addEventListener(undefined);
}).toThrowDeveloperError();
});
it("addEventListener throws with null listener", function () {
expect(function () {
event.addEventListener(null);
}).toThrowDeveloperError();
});
it("addEventListener throws with non-function listener", function () {
expect(function () {
event.addEventListener({});
}).toThrowDeveloperError();
});
it("removeEventListener throws with undefined listener", function () {
expect(function () {
event.removeEventListener(undefined);
}).toThrowDeveloperError();
});
it("removeEventListener throws with null listener", function () {
expect(function () {
event.removeEventListener(null);
}).toThrowDeveloperError();
});
});