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