| /* |
| * Copyright (C) 2023 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.server.wm.flicker.helpers |
| |
| import com.android.server.wm.InitRule |
| import com.android.server.wm.flicker.Utils |
| import com.android.server.wm.traces.common.CrossPlatform |
| import com.android.server.wm.traces.common.Timestamp |
| import com.google.common.truth.Truth |
| import org.junit.ClassRule |
| import org.junit.FixMethodOrder |
| import org.junit.Test |
| import org.junit.runners.MethodSorters |
| |
| /** Contains [Utils] formatting tests. To run this test: `atest FlickerLibTest:TimeUtilsTest` */ |
| @FixMethodOrder(MethodSorters.NAME_ASCENDING) |
| class TimeUtilsTest { |
| @Test |
| fun canFormatElapsedTime() { |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(0)).isEqualTo("0ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(1000)).isEqualTo("1000ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(MILLISECOND - 1)).isEqualTo("999999ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(MILLISECOND)).isEqualTo("1ms0ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(10 * MILLISECOND)).isEqualTo("10ms0ns") |
| |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(SECOND - 1)).isEqualTo("999ms999999ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(SECOND)).isEqualTo("1s0ms0ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(SECOND + MILLISECOND)) |
| .isEqualTo("1s1ms0ns") |
| |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(MINUTE - 1)).isEqualTo("59s999ms999999ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(MINUTE)).isEqualTo("1m0s0ms0ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(MINUTE + SECOND + MILLISECOND)) |
| .isEqualTo("1m1s1ms0ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(MINUTE + SECOND + MILLISECOND + 1)) |
| .isEqualTo("1m1s1ms1ns") |
| |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(HOUR - 1)) |
| .isEqualTo("59m59s999ms999999ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(HOUR)).isEqualTo("1h0m0s0ms0ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(HOUR + MINUTE + SECOND + MILLISECOND)) |
| .isEqualTo("1h1m1s1ms0ns") |
| |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(DAY - 1)) |
| .isEqualTo("23h59m59s999ms999999ns") |
| Truth.assertThat(Timestamp.formatElapsedTimestamp(DAY)).isEqualTo("1d0h0m0s0ms0ns") |
| Truth.assertThat( |
| Timestamp.formatElapsedTimestamp(DAY + HOUR + MINUTE + SECOND + MILLISECOND) |
| ) |
| .isEqualTo("1d1h1m1s1ms0ns") |
| } |
| |
| @Test |
| fun canFormatRealTime() { |
| Truth.assertThat(Utils.formatRealTimestamp(0)).isEqualTo("1970-01-01T00:00:00.000000000") |
| Truth.assertThat( |
| Utils.formatRealTimestamp( |
| NOV_10_2022 + 22 * HOUR + 4 * MINUTE + 54 * SECOND + 186 * MILLISECOND + 123212 |
| ) |
| ) |
| .isEqualTo("2022-11-10T22:04:54.186123212") |
| Truth.assertThat( |
| Utils.formatRealTimestamp( |
| NOV_10_2022 + 22 * HOUR + 4 * MINUTE + 54 * SECOND + 186 * MILLISECOND + 2 |
| ) |
| ) |
| .isEqualTo("2022-11-10T22:04:54.186000002") |
| Truth.assertThat(Utils.formatRealTimestamp(NOV_10_2022)) |
| .isEqualTo("2022-11-10T00:00:00.000000000") |
| Truth.assertThat(Utils.formatRealTimestamp(NOV_10_2022 + 1)) |
| .isEqualTo("2022-11-10T00:00:00.000000001") |
| } |
| |
| @Test |
| fun formatToRightType() { |
| Truth.assertThat(CrossPlatform.timestamp.from(unixNanos = 1668117894186123212L).toString()) |
| .startsWith("2022-11-10T22:04:54.186123212") |
| Truth.assertThat( |
| CrossPlatform.timestamp.from(elapsedNanos = 10 * DAY + 12 * HOUR).toString() |
| ) |
| .startsWith("10d12h0m0s0ms0ns") |
| } |
| |
| companion object { |
| private const val MILLISECOND = 1000000L |
| private const val SECOND = 1000 * MILLISECOND |
| private const val MINUTE = 60 * SECOND |
| private const val HOUR = 60 * MINUTE |
| private const val DAY = 24 * HOUR |
| private const val NOV_10_2022 = 1668038400000 * MILLISECOND |
| |
| @ClassRule @JvmField val initRule = InitRule() |
| } |
| } |