xref: /aosp_15_r20/development/tools/winscope/src/common/timestamp_utils_test.ts (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import {TimestampConverterUtils} from 'test/unit/timestamp_converter_utils';
18import {UnitTestUtils} from 'test/unit/utils';
19import {TimestampUtils} from './timestamp_utils';
20
21describe('TimestampUtils', () => {
22  const MILLISECOND = BigInt(1000000);
23  const SECOND = BigInt(1000) * MILLISECOND;
24  const MINUTE = BigInt(60) * SECOND;
25  const HOUR = BigInt(60) * MINUTE;
26
27  beforeAll(() => {
28    jasmine.addCustomEqualityTester(UnitTestUtils.timestampEqualityTester);
29  });
30
31  describe('compareFn', () => {
32    it('allows to sort arrays', () => {
33      const array = [
34        TimestampConverterUtils.makeRealTimestamp(100n),
35        TimestampConverterUtils.makeRealTimestamp(10n),
36        TimestampConverterUtils.makeRealTimestamp(12n),
37        TimestampConverterUtils.makeRealTimestamp(110n),
38        TimestampConverterUtils.makeRealTimestamp(11n),
39      ];
40      array.sort(TimestampUtils.compareFn);
41
42      const expected = [
43        TimestampConverterUtils.makeRealTimestamp(10n),
44        TimestampConverterUtils.makeRealTimestamp(11n),
45        TimestampConverterUtils.makeRealTimestamp(12n),
46        TimestampConverterUtils.makeRealTimestamp(100n),
47        TimestampConverterUtils.makeRealTimestamp(110n),
48      ];
49      expect(array).toEqual(expected);
50    });
51  });
52
53  describe('isNsFormat', () => {
54    it('accepts all expected inputs', () => {
55      expect(TimestampUtils.isNsFormat('123')).toBeTrue();
56      expect(TimestampUtils.isNsFormat('123ns')).toBeTrue();
57      expect(TimestampUtils.isNsFormat('123 ns')).toBeTrue();
58      expect(TimestampUtils.isNsFormat(' 123 ns ')).toBeTrue();
59      expect(TimestampUtils.isNsFormat('   123  ')).toBeTrue();
60    });
61
62    it('rejects all expected inputs', () => {
63      expect(TimestampUtils.isNsFormat('1a23')).toBeFalse();
64      expect(TimestampUtils.isNsFormat('a123 ns')).toBeFalse();
65      expect(TimestampUtils.isNsFormat('')).toBeFalse();
66    });
67  });
68
69  describe('isHumanElapsedTimeFormat', () => {
70    it('accepts all expected inputs', () => {
71      expect(TimestampUtils.isHumanElapsedTimeFormat('1000ns')).toBeTrue();
72      expect(TimestampUtils.isHumanElapsedTimeFormat('1ms')).toBeTrue();
73      expect(TimestampUtils.isHumanElapsedTimeFormat('1s')).toBeTrue();
74      expect(TimestampUtils.isHumanElapsedTimeFormat('1s0ms')).toBeTrue();
75      expect(TimestampUtils.isHumanElapsedTimeFormat('1s0ms0ns')).toBeTrue();
76      expect(TimestampUtils.isHumanElapsedTimeFormat('0d1s1ms')).toBeTrue();
77      expect(TimestampUtils.isHumanElapsedTimeFormat('1h0m')).toBeTrue();
78      expect(TimestampUtils.isHumanElapsedTimeFormat('1h1m1s1ms')).toBeTrue();
79      expect(TimestampUtils.isHumanElapsedTimeFormat('1d0s1ms')).toBeTrue();
80      expect(TimestampUtils.isHumanElapsedTimeFormat('1d1h0m1s1ms')).toBeTrue();
81      expect(TimestampUtils.isHumanElapsedTimeFormat('1d')).toBeTrue();
82    });
83
84    it('rejects all expected inputs', () => {
85      expect(TimestampUtils.isHumanElapsedTimeFormat('1n')).toBeFalse();
86      expect(TimestampUtils.isHumanElapsedTimeFormat('1hr')).toBeFalse();
87      expect(TimestampUtils.isHumanElapsedTimeFormat('1min')).toBeFalse();
88      expect(TimestampUtils.isHumanElapsedTimeFormat('1sec')).toBeFalse();
89      expect(TimestampUtils.isHumanElapsedTimeFormat('1')).toBeFalse();
90      expect(TimestampUtils.isHumanElapsedTimeFormat('1m0')).toBeFalse();
91    });
92  });
93
94  describe('isRealTimeOnlyFormat', () => {
95    it('accepts all expected inputs', () => {
96      expect(TimestampUtils.isRealTimeOnlyFormat('22:04:54.186')).toBeTrue();
97      expect(TimestampUtils.isRealTimeOnlyFormat('22:04:54.186777')).toBeTrue();
98      expect(
99        TimestampUtils.isRealTimeOnlyFormat('22:04:54.186234769'),
100      ).toBeTrue();
101    });
102
103    it('rejects all expected inputs', () => {
104      expect(
105        TimestampUtils.isRealTimeOnlyFormat('2022-11-10, 22:04:54.186123456'),
106      ).toBeFalse();
107      expect(
108        TimestampUtils.isRealTimeOnlyFormat('2022-11-10T22:04:54.186123456'),
109      ).toBeFalse();
110      expect(
111        TimestampUtils.isRealTimeOnlyFormat('2:04:54.186123456'),
112      ).toBeFalse();
113      expect(
114        TimestampUtils.isRealTimeOnlyFormat('25:04:54.186123456'),
115      ).toBeFalse();
116      expect(
117        TimestampUtils.isRealTimeOnlyFormat('22:4:54.186123456'),
118      ).toBeFalse();
119      expect(
120        TimestampUtils.isRealTimeOnlyFormat('22:04:4.186123456'),
121      ).toBeFalse();
122      expect(
123        TimestampUtils.isRealTimeOnlyFormat('22:60:54.186123456'),
124      ).toBeFalse();
125      expect(
126        TimestampUtils.isRealTimeOnlyFormat('22:04:60.186123456'),
127      ).toBeFalse();
128      expect(
129        TimestampUtils.isRealTimeOnlyFormat('22:04:54.1861234562'),
130      ).toBeFalse();
131      expect(TimestampUtils.isRealTimeOnlyFormat('22:04:54.')).toBeFalse();
132    });
133  });
134
135  describe('isRealDateTimeFormat', () => {
136    it('accepts all expected inputs', () => {
137      expect(
138        TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.186'),
139      ).toBeTrue();
140      expect(
141        TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.186777'),
142      ).toBeTrue();
143      expect(
144        TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.186234769'),
145      ).toBeTrue();
146    });
147
148    it('rejects all expected inputs', () => {
149      expect(
150        TimestampUtils.isRealDateTimeFormat('2022-11-10T22:04:54.186234769'),
151      ).toBeFalse();
152      expect(
153        TimestampUtils.isRealDateTimeFormat('2022-13-10, 22:04:54.186123456'),
154      ).toBeFalse();
155      expect(
156        TimestampUtils.isRealDateTimeFormat('2022-11-32, 22:04:54.186123456'),
157      ).toBeFalse();
158      expect(
159        TimestampUtils.isRealDateTimeFormat('2022-11-10, 25:04:54.186123456'),
160      ).toBeFalse();
161      expect(
162        TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:60:54.186123456'),
163      ).toBeFalse();
164      expect(
165        TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:60.186123456'),
166      ).toBeFalse();
167      expect(
168        TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.1861234568'),
169      ).toBeFalse();
170      expect(
171        TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.'),
172      ).toBeFalse();
173    });
174  });
175
176  describe('isISOFormat', () => {
177    it('accepts all expected inputs', () => {
178      expect(TimestampUtils.isISOFormat('2022-11-10T22:04:54.186')).toBeTrue();
179      expect(
180        TimestampUtils.isISOFormat('2022-11-10T22:04:54.186777'),
181      ).toBeTrue();
182      expect(
183        TimestampUtils.isISOFormat('2022-11-10T22:04:54.186234769'),
184      ).toBeTrue();
185    });
186
187    it('rejects all expected inputs', () => {
188      expect(
189        TimestampUtils.isISOFormat('2022-11-10, 22:04:54.186234769'),
190      ).toBeFalse();
191      expect(
192        TimestampUtils.isISOFormat('2022-13-10T22:04:54.186123456'),
193      ).toBeFalse();
194      expect(
195        TimestampUtils.isISOFormat('2022-11-32T22:04:54.186123456'),
196      ).toBeFalse();
197      expect(
198        TimestampUtils.isISOFormat('2022-11-10T25:04:54.186123456'),
199      ).toBeFalse();
200      expect(
201        TimestampUtils.isISOFormat('2022-11-10T22:60:54.186123456'),
202      ).toBeFalse();
203      expect(
204        TimestampUtils.isISOFormat('2022-11-10T22:04:60.186123456'),
205      ).toBeFalse();
206      expect(
207        TimestampUtils.isISOFormat('2022-11-10T22:04:54.1861234568'),
208      ).toBeFalse();
209      expect(TimestampUtils.isISOFormat('2022-11-10T22:04:54.')).toBeFalse();
210    });
211  });
212});
213