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