1 /*
2  * Copyright (C) 2019 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.util;
18 
19 import static android.provider.DeviceConfig.Properties;
20 
21 import static com.google.common.truth.Truth.assertThat;
22 
23 import android.provider.DeviceConfig.OnPropertiesChangedListener;
24 
25 import androidx.annotation.NonNull;
26 import androidx.test.filters.SmallTest;
27 import androidx.test.runner.AndroidJUnit4;
28 
29 import com.android.systemui.SysuiTestCase;
30 import com.android.systemui.util.concurrency.FakeExecutor;
31 import com.android.systemui.util.time.FakeSystemClock;
32 
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 
37 @SmallTest
38 @RunWith(AndroidJUnit4.class)
39 public class DeviceConfigProxyFakeTest extends SysuiTestCase {
40     private static final String NAMESPACE = "foobar";
41 
42     private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
43 
44     private DeviceConfigProxyFake mDeviceConfigProxyFake;
45 
46     @Before
setup()47     public void setup() {
48         mDeviceConfigProxyFake = new DeviceConfigProxyFake();
49     }
50 
51     @Test
testOnPropertiesChanged()52     public void testOnPropertiesChanged() {
53         TestableListener onPropertiesChangedListener = new TestableListener();
54         String key = "foo";
55         String value = "bar";
56 
57         mDeviceConfigProxyFake.addOnPropertiesChangedListener(
58                 NAMESPACE, mFakeExecutor, onPropertiesChangedListener);
59 
60         mDeviceConfigProxyFake.setProperty(NAMESPACE, key, value, false);
61         mFakeExecutor.runAllReady();
62         assertThat(onPropertiesChangedListener.mProperties).isNotNull();
63         assertThat(onPropertiesChangedListener.mProperties.getKeyset().size()).isEqualTo(1);
64         assertThat(onPropertiesChangedListener.mProperties.getString(key, "")).isEqualTo(value);
65     }
66 
67     @Test
testOnMultiplePropertiesChanged()68     public void testOnMultiplePropertiesChanged() {
69         TestableListener onPropertiesChangedListener = new TestableListener();
70         String keyA = "foo";
71         String valueA = "bar";
72         String keyB = "bada";
73         String valueB = "boom";
74 
75         mDeviceConfigProxyFake.addOnPropertiesChangedListener(
76                 NAMESPACE, mFakeExecutor, onPropertiesChangedListener);
77         mDeviceConfigProxyFake.setProperty(NAMESPACE, keyA, valueA, false);
78         mFakeExecutor.runAllReady();
79         assertThat(onPropertiesChangedListener.mProperties).isNotNull();
80         assertThat(onPropertiesChangedListener.mProperties.getKeyset().size()).isEqualTo(1);
81         assertThat(onPropertiesChangedListener.mProperties.getString(keyA, "")).isEqualTo(valueA);
82 
83         mDeviceConfigProxyFake.setProperty(NAMESPACE, keyB, valueB, false);
84         mFakeExecutor.runAllReady();
85         assertThat(onPropertiesChangedListener.mProperties).isNotNull();
86         assertThat(onPropertiesChangedListener.mProperties.getKeyset().size()).isEqualTo(1);
87         assertThat(onPropertiesChangedListener.mProperties.getString(keyB, "")).isEqualTo(valueB);
88     }
89 
90     private static class TestableListener implements OnPropertiesChangedListener {
91         Properties mProperties;
92 
TestableListener()93         TestableListener() {
94         }
95         @Override
onPropertiesChanged(@onNull Properties properties)96         public void onPropertiesChanged(@NonNull Properties properties) {
97             mProperties = properties;
98         }
99     }
100 }
101