mirror of
https://github.com/nasa/openmct.git
synced 2025-05-05 18:18:26 +00:00
* Updated Karma and Jasmine versions * Added DOMObserver class. Supports promise-based testing of DOM changes Update asynchronous test specs to use promises or done() instead of waitsFor/runs * Modified ActionCapability to duplicate context object properties as own properties for better object equality comparisons * Global find + replace to fix syntax issues * Fixed various issues caused by non-deterministic runtime order of tests in Jasmine 3. Fixed issues caused by changes to determination of object equality * Addressed review comments * Resolved merge conflicts with master * Fixed style errors * Use spy.calls.count() instead of manually tracking
240 lines
8.8 KiB
JavaScript
240 lines
8.8 KiB
JavaScript
/*****************************************************************************
|
|
* Open MCT, Copyright (c) 2014-2018, United States Government
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
* Administration. All rights reserved.
|
|
*
|
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
* Open MCT includes source code licensed under additional open source
|
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
* this source code distribution or the Licensing information page available
|
|
* at runtime from the About dialog for additional information.
|
|
*****************************************************************************/
|
|
|
|
define(['./TimeAPI'], function (TimeAPI) {
|
|
describe("The Time API", function () {
|
|
var api,
|
|
timeSystemKey,
|
|
timeSystem,
|
|
clockKey,
|
|
clock,
|
|
bounds,
|
|
eventListener,
|
|
toi;
|
|
|
|
beforeEach(function () {
|
|
api = new TimeAPI();
|
|
timeSystemKey = "timeSystemKey";
|
|
timeSystem = {key: timeSystemKey};
|
|
clockKey = "someClockKey";
|
|
clock = jasmine.createSpyObj("clock", [
|
|
"on",
|
|
"off",
|
|
"currentValue"
|
|
]);
|
|
clock.currentValue.and.returnValue(100);
|
|
clock.key = clockKey;
|
|
bounds = {start: 0, end: 1};
|
|
eventListener = jasmine.createSpy("eventListener");
|
|
toi = 111;
|
|
});
|
|
|
|
it("Supports setting and querying of time of interest", function () {
|
|
expect(api.timeOfInterest()).not.toBe(toi);
|
|
api.timeOfInterest(toi);
|
|
expect(api.timeOfInterest()).toBe(toi);
|
|
});
|
|
|
|
it("Allows setting of valid bounds", function () {
|
|
bounds = {start: 0, end: 1};
|
|
expect(api.bounds()).not.toBe(bounds);
|
|
expect(api.bounds.bind(api, bounds)).not.toThrow();
|
|
expect(api.bounds()).toEqual(bounds);
|
|
});
|
|
|
|
it("Disallows setting of invalid bounds", function () {
|
|
bounds = {start: 1, end: 0};
|
|
expect(api.bounds()).not.toEqual(bounds);
|
|
expect(api.bounds.bind(api, bounds)).toThrow();
|
|
expect(api.bounds()).not.toEqual(bounds);
|
|
|
|
bounds = {start: 1};
|
|
expect(api.bounds()).not.toEqual(bounds);
|
|
expect(api.bounds.bind(api, bounds)).toThrow();
|
|
expect(api.bounds()).not.toEqual(bounds);
|
|
});
|
|
|
|
it("Allows setting of previously registered time system with bounds", function () {
|
|
api.addTimeSystem(timeSystem);
|
|
expect(api.timeSystem()).not.toBe(timeSystem);
|
|
expect(function () {
|
|
api.timeSystem(timeSystem, bounds);
|
|
}).not.toThrow();
|
|
expect(api.timeSystem()).toBe(timeSystem);
|
|
});
|
|
|
|
it("Disallows setting of time system without bounds", function () {
|
|
api.addTimeSystem(timeSystem);
|
|
expect(api.timeSystem()).not.toBe(timeSystem);
|
|
expect(function () {
|
|
api.timeSystem(timeSystemKey);
|
|
}).toThrow();
|
|
expect(api.timeSystem()).not.toBe(timeSystem);
|
|
});
|
|
|
|
it("allows setting of timesystem without bounds with clock", function () {
|
|
api.addTimeSystem(timeSystem);
|
|
api.addClock(clock);
|
|
api.clock(clockKey, {start: 0, end: 1});
|
|
expect(api.timeSystem()).not.toBe(timeSystem);
|
|
expect(function () {
|
|
api.timeSystem(timeSystemKey);
|
|
}).not.toThrow();
|
|
expect(api.timeSystem()).toBe(timeSystem);
|
|
|
|
});
|
|
|
|
it("Emits an event when time system changes", function () {
|
|
api.addTimeSystem(timeSystem);
|
|
expect(eventListener).not.toHaveBeenCalled();
|
|
api.on("timeSystem", eventListener);
|
|
api.timeSystem(timeSystemKey, bounds);
|
|
expect(eventListener).toHaveBeenCalledWith(timeSystem);
|
|
});
|
|
|
|
it("Emits an event when time of interest changes", function () {
|
|
expect(eventListener).not.toHaveBeenCalled();
|
|
api.on("timeOfInterest", eventListener);
|
|
api.timeOfInterest(toi);
|
|
expect(eventListener).toHaveBeenCalledWith(toi);
|
|
});
|
|
|
|
it("Emits an event when bounds change", function () {
|
|
expect(eventListener).not.toHaveBeenCalled();
|
|
api.on("bounds", eventListener);
|
|
api.bounds(bounds);
|
|
expect(eventListener).toHaveBeenCalledWith(bounds, false);
|
|
});
|
|
|
|
it("If bounds are set and TOI lies inside them, do not change TOI", function () {
|
|
api.timeOfInterest(6);
|
|
api.bounds({start: 1, end: 10});
|
|
expect(api.timeOfInterest()).toEqual(6);
|
|
});
|
|
|
|
it("If bounds are set and TOI lies outside them, reset TOI", function () {
|
|
api.timeOfInterest(11);
|
|
api.bounds({start: 1, end: 10});
|
|
expect(api.timeOfInterest()).toBeUndefined();
|
|
});
|
|
|
|
it("Maintains delta during tick", function () {
|
|
});
|
|
|
|
|
|
it("Allows registered time system to be activated", function () {
|
|
});
|
|
|
|
it("Allows a registered tick source to be activated", function () {
|
|
var mockTickSource = jasmine.createSpyObj("mockTickSource", [
|
|
"on",
|
|
"off",
|
|
"currentValue"
|
|
]);
|
|
mockTickSource.key = 'mockTickSource';
|
|
});
|
|
|
|
describe(" when enabling a tick source", function () {
|
|
var mockTickSource;
|
|
var anotherMockTickSource;
|
|
var mockOffsets = {
|
|
start: 0,
|
|
end: 1
|
|
};
|
|
|
|
beforeEach(function () {
|
|
mockTickSource = jasmine.createSpyObj("clock", [
|
|
"on",
|
|
"off",
|
|
"currentValue"
|
|
]);
|
|
mockTickSource.currentValue.and.returnValue(10);
|
|
mockTickSource.key = "mts";
|
|
|
|
anotherMockTickSource = jasmine.createSpyObj("clock", [
|
|
"on",
|
|
"off",
|
|
"currentValue"
|
|
]);
|
|
anotherMockTickSource.key = "amts";
|
|
anotherMockTickSource.currentValue.and.returnValue(10);
|
|
|
|
api.addClock(mockTickSource);
|
|
api.addClock(anotherMockTickSource);
|
|
});
|
|
|
|
it("sets bounds based on current value", function () {
|
|
api.clock("mts", mockOffsets);
|
|
expect(api.bounds()).toEqual({start: 10, end: 11});
|
|
});
|
|
|
|
it("a new tick listener is registered", function () {
|
|
api.clock("mts", mockOffsets);
|
|
expect(mockTickSource.on).toHaveBeenCalledWith("tick", jasmine.any(Function));
|
|
});
|
|
|
|
it("listener of existing tick source is reregistered", function () {
|
|
api.clock("mts", mockOffsets);
|
|
api.clock("amts", mockOffsets);
|
|
expect(mockTickSource.off).toHaveBeenCalledWith("tick", jasmine.any(Function));
|
|
});
|
|
|
|
it("Allows the active clock to be set and unset", function () {
|
|
expect(api.clock()).toBeUndefined();
|
|
api.clock("mts", mockOffsets);
|
|
expect(api.clock()).toBeDefined();
|
|
api.stopClock();
|
|
expect(api.clock()).toBeUndefined();
|
|
});
|
|
|
|
});
|
|
|
|
it("on tick, observes offsets, and indicates tick in bounds callback", function () {
|
|
var mockTickSource = jasmine.createSpyObj("clock", [
|
|
"on",
|
|
"off",
|
|
"currentValue"
|
|
]);
|
|
mockTickSource.currentValue.and.returnValue(100);
|
|
var tickCallback;
|
|
var boundsCallback = jasmine.createSpy("boundsCallback");
|
|
var clockOffsets = {
|
|
start: -100,
|
|
end: 100
|
|
};
|
|
mockTickSource.key = "mts";
|
|
|
|
api.addClock(mockTickSource);
|
|
api.clock("mts", clockOffsets);
|
|
|
|
api.on("bounds", boundsCallback);
|
|
|
|
tickCallback = mockTickSource.on.calls.mostRecent().args[1];
|
|
tickCallback(1000);
|
|
expect(boundsCallback).toHaveBeenCalledWith({
|
|
start: 900,
|
|
end: 1100
|
|
}, true);
|
|
});
|
|
});
|
|
});
|