1 /*
2  * Copyright (C) 2023 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.internal.config.sysui;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import androidx.test.filters.SmallTest;
22 
23 import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.Flag;
24 import com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.FlagResolver;
25 
26 import junit.framework.TestCase;
27 
28 import java.util.HashMap;
29 import java.util.Map;
30 
31 @SmallTest
32 public class SystemUiSystemPropertiesFlagsTest extends TestCase {
33 
34     public class TestableDebugResolver extends SystemUiSystemPropertiesFlags.DebugResolver {
35         final Map<String, Boolean> mTestData = new HashMap<>();
36 
37         @Override
getBoolean(String key, boolean defaultValue)38         public boolean getBoolean(String key, boolean defaultValue) {
39             Boolean testValue = mTestData.get(key);
40             return testValue == null ? defaultValue : testValue;
41         }
42 
set(Flag flag, Boolean value)43         public void set(Flag flag, Boolean value) {
44             mTestData.put(flag.mSysPropKey, value);
45         }
46     }
47 
48     private FlagResolver mProdResolver;
49     private TestableDebugResolver mDebugResolver;
50 
51     private Flag mReleasedFlag;
52     private Flag mTeamfoodFlag;
53     private Flag mDevFlag;
54 
setUp()55     public void setUp() {
56         mProdResolver = new SystemUiSystemPropertiesFlags.ProdResolver();
57         mDebugResolver = new TestableDebugResolver();
58         mReleasedFlag = SystemUiSystemPropertiesFlags.releasedFlag("mReleasedFlag");
59         mTeamfoodFlag = SystemUiSystemPropertiesFlags.teamfoodFlag("mTeamfoodFlag");
60         mDevFlag = SystemUiSystemPropertiesFlags.devFlag("mDevFlag");
61     }
62 
tearDown()63     public void tearDown() {
64         SystemUiSystemPropertiesFlags.TEST_RESOLVER = null;
65     }
66 
testProdResolverReturnsDefault()67     public void testProdResolverReturnsDefault() {
68         assertThat(mProdResolver.isEnabled(mReleasedFlag)).isTrue();
69         assertThat(mProdResolver.isEnabled(mTeamfoodFlag)).isFalse();
70         assertThat(mProdResolver.isEnabled(mDevFlag)).isFalse();
71     }
72 
testDebugResolverAndReleasedFlag()73     public void testDebugResolverAndReleasedFlag() {
74         assertThat(mDebugResolver.isEnabled(mReleasedFlag)).isTrue();
75 
76         mDebugResolver.set(mReleasedFlag, false);
77         assertThat(mDebugResolver.isEnabled(mReleasedFlag)).isFalse();
78 
79         mDebugResolver.set(mReleasedFlag, true);
80         assertThat(mDebugResolver.isEnabled(mReleasedFlag)).isTrue();
81     }
82 
assertTeamfoodFlag(Boolean flagValue, Boolean teamfood, boolean expected)83     private void assertTeamfoodFlag(Boolean flagValue, Boolean teamfood, boolean expected) {
84         mDebugResolver.set(mTeamfoodFlag, flagValue);
85         mDebugResolver.set(SystemUiSystemPropertiesFlags.TEAMFOOD, teamfood);
86         assertThat(mDebugResolver.isEnabled(mTeamfoodFlag)).isEqualTo(expected);
87     }
88 
testDebugResolverAndTeamfoodFlag()89     public void testDebugResolverAndTeamfoodFlag() {
90         assertTeamfoodFlag(null, null, false);
91         assertTeamfoodFlag(true, null, true);
92         assertTeamfoodFlag(false, null, false);
93         assertTeamfoodFlag(null, true, true);
94         assertTeamfoodFlag(true, true, true);
95         assertTeamfoodFlag(false, true, false);
96         assertTeamfoodFlag(null, false, false);
97         assertTeamfoodFlag(true, false, true);
98         assertTeamfoodFlag(false, false, false);
99     }
100 
testDebugResolverAndDevFlag()101     public void testDebugResolverAndDevFlag() {
102         assertThat(mDebugResolver.isEnabled(mDevFlag)).isFalse();
103 
104         mDebugResolver.set(mDevFlag, true);
105         assertThat(mDebugResolver.isEnabled(mDevFlag)).isTrue();
106 
107         mDebugResolver.set(mDevFlag, false);
108         assertThat(mDebugResolver.isEnabled(mDevFlag)).isFalse();
109     }
110 }
111