1 /* 2 * Copyright (C) 2024 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 17 package android.tools 18 19 import android.tools.traces.formatRealTimestamp 20 import android.tools.utils.CleanFlickerEnvironmentRule 21 import com.google.common.truth.Truth 22 import org.junit.ClassRule 23 import org.junit.FixMethodOrder 24 import org.junit.Test 25 import org.junit.runners.MethodSorters 26 27 /** Contains utils formatting tests. To run this test: `atest FlickerLibTest:TimeUtilsTest` */ 28 @FixMethodOrder(MethodSorters.NAME_ASCENDING) 29 class TimeUtilsTest { 30 @Test canFormatElapsedTimenull31 fun canFormatElapsedTime() { 32 Truth.assertThat(Timestamp.formatElapsedTimestamp(0)).isEqualTo("0ns") 33 Truth.assertThat(Timestamp.formatElapsedTimestamp(1000)).isEqualTo("1000ns") 34 Truth.assertThat(Timestamp.formatElapsedTimestamp(MILLISECOND - 1)).isEqualTo("999999ns") 35 Truth.assertThat(Timestamp.formatElapsedTimestamp(MILLISECOND)).isEqualTo("1ms0ns") 36 Truth.assertThat(Timestamp.formatElapsedTimestamp(10 * MILLISECOND)).isEqualTo("10ms0ns") 37 38 Truth.assertThat(Timestamp.formatElapsedTimestamp(SECOND - 1)).isEqualTo("999ms999999ns") 39 Truth.assertThat(Timestamp.formatElapsedTimestamp(SECOND)).isEqualTo("1s0ms0ns") 40 Truth.assertThat(Timestamp.formatElapsedTimestamp(SECOND + MILLISECOND)) 41 .isEqualTo("1s1ms0ns") 42 43 Truth.assertThat(Timestamp.formatElapsedTimestamp(MINUTE - 1)).isEqualTo("59s999ms999999ns") 44 Truth.assertThat(Timestamp.formatElapsedTimestamp(MINUTE)).isEqualTo("1m0s0ms0ns") 45 Truth.assertThat(Timestamp.formatElapsedTimestamp(MINUTE + SECOND + MILLISECOND)) 46 .isEqualTo("1m1s1ms0ns") 47 Truth.assertThat(Timestamp.formatElapsedTimestamp(MINUTE + SECOND + MILLISECOND + 1)) 48 .isEqualTo("1m1s1ms1ns") 49 50 Truth.assertThat(Timestamp.formatElapsedTimestamp(HOUR - 1)) 51 .isEqualTo("59m59s999ms999999ns") 52 Truth.assertThat(Timestamp.formatElapsedTimestamp(HOUR)).isEqualTo("1h0m0s0ms0ns") 53 Truth.assertThat(Timestamp.formatElapsedTimestamp(HOUR + MINUTE + SECOND + MILLISECOND)) 54 .isEqualTo("1h1m1s1ms0ns") 55 56 Truth.assertThat(Timestamp.formatElapsedTimestamp(DAY - 1)) 57 .isEqualTo("23h59m59s999ms999999ns") 58 Truth.assertThat(Timestamp.formatElapsedTimestamp(DAY)).isEqualTo("1d0h0m0s0ms0ns") 59 Truth.assertThat( 60 Timestamp.formatElapsedTimestamp(DAY + HOUR + MINUTE + SECOND + MILLISECOND) 61 ) 62 .isEqualTo("1d1h1m1s1ms0ns") 63 } 64 65 @Test canFormatRealTimenull66 fun canFormatRealTime() { 67 Truth.assertThat(formatRealTimestamp(0)).isEqualTo("1970-01-01T00:00:00.000000000") 68 Truth.assertThat( 69 formatRealTimestamp( 70 NOV_10_2022 + 22 * HOUR + 4 * MINUTE + 54 * SECOND + 186 * MILLISECOND + 123212 71 ) 72 ) 73 .isEqualTo("2022-11-10T22:04:54.186123212") 74 Truth.assertThat( 75 formatRealTimestamp( 76 NOV_10_2022 + 22 * HOUR + 4 * MINUTE + 54 * SECOND + 186 * MILLISECOND + 2 77 ) 78 ) 79 .isEqualTo("2022-11-10T22:04:54.186000002") 80 Truth.assertThat(formatRealTimestamp(NOV_10_2022)) 81 .isEqualTo("2022-11-10T00:00:00.000000000") 82 Truth.assertThat(formatRealTimestamp(NOV_10_2022 + 1)) 83 .isEqualTo("2022-11-10T00:00:00.000000001") 84 } 85 86 companion object { 87 private const val MILLISECOND = 1000000L 88 private const val SECOND = 1000 * MILLISECOND 89 private const val MINUTE = 60 * SECOND 90 private const val HOUR = 60 * MINUTE 91 private const val DAY = 24 * HOUR 92 private const val NOV_10_2022 = 1668038400000 * MILLISECOND 93 94 @ClassRule @JvmField val ENV_CLEANUP = CleanFlickerEnvironmentRule() 95 } 96 } 97