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.io.TraceType
20 import android.tools.traces.NullableDeviceStateDump
21 import android.tools.traces.getCurrentState
22 import android.tools.traces.getCurrentStateDumpNullable
23 import android.tools.utils.CleanFlickerEnvironmentRule
24 import com.google.common.truth.Truth
25 import org.junit.ClassRule
26 import org.junit.FixMethodOrder
27 import org.junit.Test
28 import org.junit.runners.MethodSorters
29 
30 /** Contains [android.os.traces] utils tests. */
31 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
32 class UtilsTest {
getCurrStatenull33     private fun getCurrState(
34         vararg dumpTypes: TraceType = arrayOf(TraceType.SF_DUMP, TraceType.WM_DUMP)
35     ): Pair<ByteArray, ByteArray> {
36         return getCurrentState(*dumpTypes)
37     }
38 
getCurrStateDumpnull39     private fun getCurrStateDump(
40         vararg dumpTypes: TraceType = arrayOf(TraceType.SF_DUMP, TraceType.WM_DUMP)
41     ): NullableDeviceStateDump {
42         return getCurrentStateDumpNullable(*dumpTypes, clearCacheAfterParsing = false)
43     }
44 
45     @Test
canFetchCurrentDeviceStatenull46     fun canFetchCurrentDeviceState() {
47         val currState = this.getCurrState()
48         Truth.assertThat(currState.first).isNotEmpty()
49         Truth.assertThat(currState.second).isNotEmpty()
50     }
51 
52     @Test
canFetchCurrentDeviceStateOnlyWmnull53     fun canFetchCurrentDeviceStateOnlyWm() {
54         val currStateDump = this.getCurrState(TraceType.WM_DUMP)
55         Truth.assertThat(currStateDump.first).isNotEmpty()
56         Truth.assertThat(currStateDump.second).isEmpty()
57         val currState = this.getCurrStateDump(TraceType.WM_DUMP)
58         Truth.assertThat(currState.wmState).isNotNull()
59         Truth.assertThat(currState.layerState).isNull()
60     }
61 
62     @Test
canFetchCurrentDeviceStateOnlyLayersnull63     fun canFetchCurrentDeviceStateOnlyLayers() {
64         val currStateDump = this.getCurrState(TraceType.SF_DUMP)
65         Truth.assertThat(currStateDump.first).isEmpty()
66         Truth.assertThat(currStateDump.second).isNotEmpty()
67         val currState = this.getCurrStateDump(TraceType.SF_DUMP)
68         Truth.assertThat(currState.wmState).isNull()
69         Truth.assertThat(currState.layerState).isNotNull()
70     }
71 
72     @Test
canParseCurrentDeviceStatenull73     fun canParseCurrentDeviceState() {
74         val currState = this.getCurrStateDump()
75         val wmArray = currState.wmState?.asTrace()?.entries ?: emptyList()
76         Truth.assertThat(wmArray).hasSize(1)
77         Truth.assertThat(wmArray.first().windowStates).isNotEmpty()
78         val layersArray = currState.layerState?.asTrace()?.entries ?: emptyList()
79         Truth.assertThat(layersArray).hasSize(1)
80         Truth.assertThat(layersArray.first().flattenedLayers).isNotEmpty()
81     }
82 
83     companion object {
84         @ClassRule @JvmField val ENV_CLEANUP = CleanFlickerEnvironmentRule()
85     }
86 }
87