mirror of
https://github.com/nasa/openmct.git
synced 2025-06-19 15:43:48 +00:00
* Remove legacy bundles * Replace legacy format management with vanilla JS * Redefine legacy formats in plugins instead of bundles * Remove 'draft' from API documentation * Remove focus from test spec * Register local time system using new API * Fixed broken custom formatter test spec * Make capitalization consistent * Rewrite test for terse formatting for time conductor * Make dependency on UTCTimeFormat explicit Co-authored-by: John Hill <john.c.hill@nasa.gov>
195 lines
6.8 KiB
JavaScript
195 lines
6.8 KiB
JavaScript
/*****************************************************************************
|
|
* Open MCT, Copyright (c) 2014-2021, 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.
|
|
*****************************************************************************/
|
|
|
|
import LocalClock from './LocalClock.js';
|
|
import UTCTimeSystem from './UTCTimeSystem';
|
|
import {
|
|
createOpenMct,
|
|
resetApplicationState
|
|
} from 'utils/testing';
|
|
import UTCTimeFormat from './UTCTimeFormat.js';
|
|
|
|
describe("The UTC Time System", () => {
|
|
const UTC_SYSTEM_AND_FORMAT_KEY = 'utc';
|
|
const DURATION_FORMAT_KEY = 'duration';
|
|
let openmct;
|
|
let utcTimeSystem;
|
|
let mockTimeout;
|
|
|
|
beforeEach(() => {
|
|
openmct = createOpenMct();
|
|
openmct.install(openmct.plugins.UTCTimeSystem());
|
|
});
|
|
|
|
afterEach(() => {
|
|
return resetApplicationState(openmct);
|
|
});
|
|
|
|
describe("plugin", function () {
|
|
|
|
beforeEach(function () {
|
|
mockTimeout = jasmine.createSpy("timeout");
|
|
utcTimeSystem = new UTCTimeSystem(mockTimeout);
|
|
});
|
|
|
|
it("is installed", () => {
|
|
let timeSystems = openmct.time.getAllTimeSystems();
|
|
let utc = timeSystems.find(ts => ts.key === UTC_SYSTEM_AND_FORMAT_KEY);
|
|
|
|
expect(utc).not.toEqual(-1);
|
|
});
|
|
|
|
it("can be set to be the main time system", () => {
|
|
openmct.time.timeSystem(UTC_SYSTEM_AND_FORMAT_KEY, {
|
|
start: 0,
|
|
end: 1
|
|
});
|
|
|
|
expect(openmct.time.timeSystem().key).toBe(UTC_SYSTEM_AND_FORMAT_KEY);
|
|
});
|
|
|
|
it("uses the utc time format", () => {
|
|
expect(utcTimeSystem.timeFormat).toBe(UTC_SYSTEM_AND_FORMAT_KEY);
|
|
});
|
|
|
|
it("is UTC based", () => {
|
|
expect(utcTimeSystem.isUTCBased).toBe(true);
|
|
});
|
|
|
|
it("defines expected metadata", () => {
|
|
expect(utcTimeSystem.key).toBe(UTC_SYSTEM_AND_FORMAT_KEY);
|
|
expect(utcTimeSystem.name).toBeDefined();
|
|
expect(utcTimeSystem.cssClass).toBeDefined();
|
|
expect(utcTimeSystem.durationFormat).toBeDefined();
|
|
});
|
|
});
|
|
|
|
describe("LocalClock class", function () {
|
|
let clock;
|
|
const timeoutHandle = {};
|
|
|
|
beforeEach(function () {
|
|
mockTimeout = jasmine.createSpy("timeout");
|
|
mockTimeout.and.returnValue(timeoutHandle);
|
|
|
|
clock = new LocalClock(0);
|
|
clock.start();
|
|
});
|
|
|
|
it("calls listeners on tick with current time", function () {
|
|
const mockListener = jasmine.createSpy("listener");
|
|
clock.on('tick', mockListener);
|
|
clock.tick();
|
|
expect(mockListener).toHaveBeenCalledWith(jasmine.any(Number));
|
|
});
|
|
});
|
|
|
|
describe("UTC Time Format", () => {
|
|
let utcTimeFormatter;
|
|
|
|
beforeEach(() => {
|
|
utcTimeFormatter = openmct.telemetry.getFormatter(UTC_SYSTEM_AND_FORMAT_KEY);
|
|
});
|
|
|
|
it("is installed by the plugin", () => {
|
|
expect(utcTimeFormatter).toBeDefined();
|
|
});
|
|
|
|
it("formats from ms since Unix epoch into Open MCT UTC time format", () => {
|
|
const TIME_IN_MS = 1638574560945;
|
|
const TIME_AS_STRING = "2021-12-03 23:36:00.945Z";
|
|
|
|
const formattedTime = utcTimeFormatter.format(TIME_IN_MS);
|
|
expect(formattedTime).toEqual(TIME_AS_STRING);
|
|
|
|
});
|
|
|
|
it("formats from ms since Unix epoch into terse UTC formats", () => {
|
|
const utcTimeFormatterInstance = new UTCTimeFormat();
|
|
|
|
const TIME_IN_MS = 1638574560945;
|
|
const EXPECTED_FORMATS = {
|
|
PRECISION_DEFAULT: "2021-12-03 23:36:00.945",
|
|
PRECISION_SECONDS: "2021-12-03 23:36:00",
|
|
PRECISION_MINUTES: "2021-12-03 23:36",
|
|
PRECISION_DAYS: "2021-12-03"
|
|
};
|
|
|
|
Object.keys(EXPECTED_FORMATS).forEach((formatKey) => {
|
|
const formattedTime = utcTimeFormatterInstance.format(TIME_IN_MS, utcTimeFormatterInstance.DATE_FORMATS[formatKey]);
|
|
expect(formattedTime).toEqual(EXPECTED_FORMATS[formatKey]);
|
|
});
|
|
});
|
|
|
|
it("parses from Open MCT UTC time format to ms since Unix epoch.", () => {
|
|
const TIME_IN_MS = 1638574560945;
|
|
const TIME_AS_STRING = "2021-12-03 23:36:00.945Z";
|
|
|
|
const parsedTime = utcTimeFormatter.parse(TIME_AS_STRING);
|
|
expect(parsedTime).toEqual(TIME_IN_MS);
|
|
});
|
|
|
|
it("validates correctly formatted Open MCT UTC times.", () => {
|
|
const TIME_AS_STRING = "2021-12-03 23:36:00.945Z";
|
|
|
|
const isValid = utcTimeFormatter.validate(TIME_AS_STRING);
|
|
expect(isValid).toBeTrue();
|
|
});
|
|
});
|
|
|
|
describe("Duration Format", () => {
|
|
let durationTimeFormatter;
|
|
|
|
beforeEach(() => {
|
|
durationTimeFormatter = openmct.telemetry.getFormatter(DURATION_FORMAT_KEY);
|
|
});
|
|
|
|
it("is installed by the plugin", () => {
|
|
expect(durationTimeFormatter).toBeDefined();
|
|
});
|
|
|
|
it("formats from ms into Open MCT duration format", () => {
|
|
const TIME_IN_MS = 2000;
|
|
const TIME_AS_STRING = "00:00:02";
|
|
|
|
const formattedTime = durationTimeFormatter.format(TIME_IN_MS);
|
|
expect(formattedTime).toEqual(TIME_AS_STRING);
|
|
|
|
});
|
|
|
|
it("parses from Open MCT duration format to ms", () => {
|
|
const TIME_IN_MS = 2000;
|
|
const TIME_AS_STRING = "00:00:02";
|
|
|
|
const parsedTime = durationTimeFormatter.parse(TIME_AS_STRING);
|
|
expect(parsedTime).toEqual(TIME_IN_MS);
|
|
});
|
|
|
|
it("validates correctly formatted Open MCT duration strings.", () => {
|
|
const TIME_AS_STRING = "00:00:02";
|
|
|
|
const isValid = durationTimeFormatter.validate(TIME_AS_STRING);
|
|
expect(isValid).toBeTrue();
|
|
});
|
|
});
|
|
});
|