1 /*
2  * Copyright (C) 2021 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 com.android.systemui.statusbar.disableflags
18 
19 import androidx.test.filters.SmallTest
20 import com.android.systemui.SysuiTestCase
21 import com.google.common.truth.Truth.assertThat
22 import org.junit.Assert.assertThrows
23 import org.junit.Test
24 
25 @SmallTest
26 class DisableFlagsLoggerTest : SysuiTestCase() {
27     private val disable1Flags = listOf(
28             DisableFlagsLogger.DisableFlag(0b100, 'A', 'a'),
29             DisableFlagsLogger.DisableFlag(0b010, 'B', 'b'),
30             DisableFlagsLogger.DisableFlag(0b001, 'C', 'c'),
31     )
32     private val disable2Flags = listOf(
33             DisableFlagsLogger.DisableFlag(0b10, 'M', 'm'),
34             DisableFlagsLogger.DisableFlag(0b01, 'N', 'n'),
35     )
36 
37     private val disableFlagsLogger = DisableFlagsLogger(disable1Flags, disable2Flags)
38 
39     @Test
40     fun getDisableFlagsString_nullLocalModification_localModNotLogged() {
41         val result = disableFlagsLogger.getDisableFlagsString(
42                 DisableFlagsLogger.DisableState(1, 1),
43                 newAfterLocalModification = null
44         )
45 
46         assertThat(result).doesNotContain("local modification")
47     }
48 
49     @Test
50     fun getDisableFlagsString_newAfterLocalModificationSameAsNew_localModNotLogged() {
51         val newState = DisableFlagsLogger.DisableState(
52                 0b001, // abC
53                 0b10 // mn
54         )
55 
56         val result = disableFlagsLogger.getDisableFlagsString(newState, newState)
57 
58         assertThat(result).doesNotContain("local modification")
59     }
60 
61     @Test
62     fun getDisableFlagsString_newAfterLocalModificationDifferent_localModAndDiffLogged() {
63         val result = disableFlagsLogger.getDisableFlagsString(
64                 new = DisableFlagsLogger.DisableState(
65                         0b000, // abc
66                         0b00 // mn
67                 ),
68                 newAfterLocalModification = DisableFlagsLogger.DisableState(
69                         0b100, // Abc
70                         0b10 // Mn
71                 )
72         )
73 
74         assertThat(result).contains("local modification: Abc.Mn (changed: A.M)")
75     }
76 
77     @Test
78     fun getDisableFlagsString_onlyDisable2Different_diffLoggedCorrectly() {
79         val result = disableFlagsLogger.getDisableFlagsString(
80             DisableFlagsLogger.DisableState(
81                 0b001, // abC
82                 0b01, // mN
83             ),
84             DisableFlagsLogger.DisableState(
85                 0b001, // abC
86                 0b00 // mn
87             )
88         )
89 
90         assertThat(result).contains("(changed: .n)")
91     }
92 
93     @Test
94     fun constructor_defaultDisableFlags_noException() {
95         // Just creating the logger with the default params will trigger the exception if there
96         // is one.
97         DisableFlagsLogger()
98     }
99 
100     @Test
101     fun constructor_disable1_FlagIsSetSymbolNotUnique_exception() {
102         assertThrows(IllegalArgumentException::class.java) {
103             DisableFlagsLogger(
104                     disable1FlagsList = listOf(
105                             DisableFlagsLogger.DisableFlag(0b100, 'A', 'a'),
106                             DisableFlagsLogger.DisableFlag(0b010, 'A', 'b'),
107                     ),
108                     listOf()
109             )
110         }
111     }
112 
113     @Test
114     fun constructor_disable1_FlagNotSetSymbolNotUnique_exception() {
115         assertThrows(IllegalArgumentException::class.java) {
116             DisableFlagsLogger(
117                     disable1FlagsList = listOf(
118                             DisableFlagsLogger.DisableFlag(0b100, 'A', 'a'),
119                             DisableFlagsLogger.DisableFlag(0b010, 'B', 'a'),
120                     ),
121                     listOf()
122             )
123         }
124     }
125 
126     @Test
127     fun constructor_disable2_FlagIsSetSymbolNotUnique_exception() {
128         assertThrows(IllegalArgumentException::class.java) {
129             DisableFlagsLogger(
130                     disable1FlagsList = listOf(),
131                     disable2FlagsList = listOf(
132                             DisableFlagsLogger.DisableFlag(0b100, 'A', 'a'),
133                             DisableFlagsLogger.DisableFlag(0b010, 'A', 'b'),
134                     ),
135             )
136         }
137     }
138 
139     @Test
140     fun constructor_disable2_FlagNotSetSymbolNotUnique_exception() {
141         assertThrows(IllegalArgumentException::class.java) {
142             DisableFlagsLogger(
143                     disable1FlagsList = listOf(),
144                     disable2FlagsList = listOf(
145                             DisableFlagsLogger.DisableFlag(0b100, 'A', 'a'),
146                             DisableFlagsLogger.DisableFlag(0b010, 'B', 'a'),
147                     ),
148             )
149         }
150     }
151 }
152