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 { 18 TimestampConverterUtils, 19 timestampEqualityTester, 20} from 'common/time/test_utils'; 21import {TimestampUtils} from './timestamp_utils'; 22 23describe('TimestampUtils', () => { 24 const MILLISECOND = BigInt(1000000); 25 const SECOND = BigInt(1000) * MILLISECOND; 26 const MINUTE = BigInt(60) * SECOND; 27 const HOUR = BigInt(60) * MINUTE; 28 29 beforeAll(() => { 30 jasmine.addCustomEqualityTester(timestampEqualityTester); 31 }); 32 33 describe('compareFn', () => { 34 it('allows to sort arrays', () => { 35 const array = [ 36 TimestampConverterUtils.makeRealTimestamp(100n), 37 TimestampConverterUtils.makeRealTimestamp(10n), 38 TimestampConverterUtils.makeRealTimestamp(12n), 39 TimestampConverterUtils.makeRealTimestamp(110n), 40 TimestampConverterUtils.makeRealTimestamp(11n), 41 ]; 42 array.sort(TimestampUtils.compareFn); 43 44 const expected = [ 45 TimestampConverterUtils.makeRealTimestamp(10n), 46 TimestampConverterUtils.makeRealTimestamp(11n), 47 TimestampConverterUtils.makeRealTimestamp(12n), 48 TimestampConverterUtils.makeRealTimestamp(100n), 49 TimestampConverterUtils.makeRealTimestamp(110n), 50 ]; 51 expect(array).toEqual(expected); 52 }); 53 }); 54 55 describe('isNsFormat', () => { 56 it('accepts all expected inputs', () => { 57 expect(TimestampUtils.isNsFormat('123')).toBeTrue(); 58 expect(TimestampUtils.isNsFormat('123ns')).toBeTrue(); 59 expect(TimestampUtils.isNsFormat('123 ns')).toBeTrue(); 60 expect(TimestampUtils.isNsFormat(' 123 ns ')).toBeTrue(); 61 expect(TimestampUtils.isNsFormat(' 123 ')).toBeTrue(); 62 }); 63 64 it('rejects all expected inputs', () => { 65 expect(TimestampUtils.isNsFormat('1a23')).toBeFalse(); 66 expect(TimestampUtils.isNsFormat('a123 ns')).toBeFalse(); 67 expect(TimestampUtils.isNsFormat('')).toBeFalse(); 68 }); 69 }); 70 71 describe('isHumanElapsedTimeFormat', () => { 72 it('accepts all expected inputs', () => { 73 expect(TimestampUtils.isHumanElapsedTimeFormat('1000ns')).toBeTrue(); 74 expect(TimestampUtils.isHumanElapsedTimeFormat('1ms')).toBeTrue(); 75 expect(TimestampUtils.isHumanElapsedTimeFormat('1s')).toBeTrue(); 76 expect(TimestampUtils.isHumanElapsedTimeFormat('1s0ms')).toBeTrue(); 77 expect(TimestampUtils.isHumanElapsedTimeFormat('1s0ms0ns')).toBeTrue(); 78 expect(TimestampUtils.isHumanElapsedTimeFormat('0d1s1ms')).toBeTrue(); 79 expect(TimestampUtils.isHumanElapsedTimeFormat('1h0m')).toBeTrue(); 80 expect(TimestampUtils.isHumanElapsedTimeFormat('1h1m1s1ms')).toBeTrue(); 81 expect(TimestampUtils.isHumanElapsedTimeFormat('1d0s1ms')).toBeTrue(); 82 expect(TimestampUtils.isHumanElapsedTimeFormat('1d1h0m1s1ms')).toBeTrue(); 83 expect(TimestampUtils.isHumanElapsedTimeFormat('1d')).toBeTrue(); 84 }); 85 86 it('rejects all expected inputs', () => { 87 expect(TimestampUtils.isHumanElapsedTimeFormat('1n')).toBeFalse(); 88 expect(TimestampUtils.isHumanElapsedTimeFormat('1hr')).toBeFalse(); 89 expect(TimestampUtils.isHumanElapsedTimeFormat('1min')).toBeFalse(); 90 expect(TimestampUtils.isHumanElapsedTimeFormat('1sec')).toBeFalse(); 91 expect(TimestampUtils.isHumanElapsedTimeFormat('1')).toBeFalse(); 92 expect(TimestampUtils.isHumanElapsedTimeFormat('1m0')).toBeFalse(); 93 }); 94 }); 95 96 describe('isRealTimeOnlyFormat', () => { 97 it('accepts all expected inputs', () => { 98 expect(TimestampUtils.isRealTimeOnlyFormat('22:04:54.186')).toBeTrue(); 99 expect(TimestampUtils.isRealTimeOnlyFormat('22:04:54.186777')).toBeTrue(); 100 expect( 101 TimestampUtils.isRealTimeOnlyFormat('22:04:54.186234769'), 102 ).toBeTrue(); 103 }); 104 105 it('rejects all expected inputs', () => { 106 expect( 107 TimestampUtils.isRealTimeOnlyFormat('2022-11-10, 22:04:54.186123456'), 108 ).toBeFalse(); 109 expect( 110 TimestampUtils.isRealTimeOnlyFormat('2022-11-10T22:04:54.186123456'), 111 ).toBeFalse(); 112 expect( 113 TimestampUtils.isRealTimeOnlyFormat('2:04:54.186123456'), 114 ).toBeFalse(); 115 expect( 116 TimestampUtils.isRealTimeOnlyFormat('25:04:54.186123456'), 117 ).toBeFalse(); 118 expect( 119 TimestampUtils.isRealTimeOnlyFormat('22:4:54.186123456'), 120 ).toBeFalse(); 121 expect( 122 TimestampUtils.isRealTimeOnlyFormat('22:04:4.186123456'), 123 ).toBeFalse(); 124 expect( 125 TimestampUtils.isRealTimeOnlyFormat('22:60:54.186123456'), 126 ).toBeFalse(); 127 expect( 128 TimestampUtils.isRealTimeOnlyFormat('22:04:60.186123456'), 129 ).toBeFalse(); 130 expect( 131 TimestampUtils.isRealTimeOnlyFormat('22:04:54.1861234562'), 132 ).toBeFalse(); 133 expect(TimestampUtils.isRealTimeOnlyFormat('22:04:54.')).toBeFalse(); 134 }); 135 }); 136 137 describe('isRealDateTimeFormat', () => { 138 it('accepts all expected inputs', () => { 139 expect( 140 TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.186'), 141 ).toBeTrue(); 142 expect( 143 TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.186777'), 144 ).toBeTrue(); 145 expect( 146 TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.186234769'), 147 ).toBeTrue(); 148 }); 149 150 it('rejects all expected inputs', () => { 151 expect( 152 TimestampUtils.isRealDateTimeFormat('2022-11-10T22:04:54.186234769'), 153 ).toBeFalse(); 154 expect( 155 TimestampUtils.isRealDateTimeFormat('2022-13-10, 22:04:54.186123456'), 156 ).toBeFalse(); 157 expect( 158 TimestampUtils.isRealDateTimeFormat('2022-11-32, 22:04:54.186123456'), 159 ).toBeFalse(); 160 expect( 161 TimestampUtils.isRealDateTimeFormat('2022-11-10, 25:04:54.186123456'), 162 ).toBeFalse(); 163 expect( 164 TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:60:54.186123456'), 165 ).toBeFalse(); 166 expect( 167 TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:60.186123456'), 168 ).toBeFalse(); 169 expect( 170 TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.1861234568'), 171 ).toBeFalse(); 172 expect( 173 TimestampUtils.isRealDateTimeFormat('2022-11-10, 22:04:54.'), 174 ).toBeFalse(); 175 }); 176 }); 177 178 describe('isISOFormat', () => { 179 it('accepts all expected inputs', () => { 180 expect(TimestampUtils.isISOFormat('2022-11-10T22:04:54.186')).toBeTrue(); 181 expect( 182 TimestampUtils.isISOFormat('2022-11-10T22:04:54.186777'), 183 ).toBeTrue(); 184 expect( 185 TimestampUtils.isISOFormat('2022-11-10T22:04:54.186234769'), 186 ).toBeTrue(); 187 }); 188 189 it('rejects all expected inputs', () => { 190 expect( 191 TimestampUtils.isISOFormat('2022-11-10, 22:04:54.186234769'), 192 ).toBeFalse(); 193 expect( 194 TimestampUtils.isISOFormat('2022-13-10T22:04:54.186123456'), 195 ).toBeFalse(); 196 expect( 197 TimestampUtils.isISOFormat('2022-11-32T22:04:54.186123456'), 198 ).toBeFalse(); 199 expect( 200 TimestampUtils.isISOFormat('2022-11-10T25:04:54.186123456'), 201 ).toBeFalse(); 202 expect( 203 TimestampUtils.isISOFormat('2022-11-10T22:60:54.186123456'), 204 ).toBeFalse(); 205 expect( 206 TimestampUtils.isISOFormat('2022-11-10T22:04:60.186123456'), 207 ).toBeFalse(); 208 expect( 209 TimestampUtils.isISOFormat('2022-11-10T22:04:54.1861234568'), 210 ).toBeFalse(); 211 expect(TimestampUtils.isISOFormat('2022-11-10T22:04:54.')).toBeFalse(); 212 }); 213 }); 214}); 215