2 * Copyright (C) 2017 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.settings.enterprise;
19 import android.content.Context;
20 import android.support.v7.preference.Preference;
22 import com.android.settings.SettingsRobolectricTestRunner;
23 import com.android.settings.TestConfig;
24 import com.android.settings.core.DynamicAvailabilityPreferenceController;
25 import com.android.settings.core.PreferenceAvailabilityObserver;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 import org.mockito.Answers;
31 import org.mockito.Mock;
32 import org.mockito.MockitoAnnotations;
33 import org.robolectric.annotation.Config;
35 import java.util.Arrays;
36 import java.util.List;
38 import static com.google.common.truth.Truth.assertThat;
39 import static org.mockito.Mockito.anyBoolean;
40 import static org.mockito.Mockito.eq;
41 import static org.mockito.Mockito.mock;
42 import static org.mockito.Mockito.never;
43 import static org.mockito.Mockito.reset;
44 import static org.mockito.Mockito.verify;
47 * Tests for {@link ExposureChangesCategoryPreferenceController}.
49 @RunWith(SettingsRobolectricTestRunner.class)
50 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
51 public final class ExposureChangesCategoryPreferenceControllerTest {
53 private static final String KEY_1 = "key_1";
54 private static final String KEY_2 = "key_2";
55 private static final String KEY_EXPOSURE_CHANGES_CATEGORY = "exposure_changes_category";
57 @Mock(answer = Answers.RETURNS_DEEP_STUBS)
58 private Context mContext;
59 private List<DynamicAvailabilityPreferenceController> mControllers;
60 private ExposureChangesCategoryPreferenceController mController;
61 @Mock private PreferenceAvailabilityObserver mObserver;
65 MockitoAnnotations.initMocks(this);
66 mControllers = Arrays.asList(mock(DynamicAvailabilityPreferenceController.class),
67 mock(DynamicAvailabilityPreferenceController.class));
68 mController = new ExposureChangesCategoryPreferenceController(mContext,
69 null /* lifecycle */, mControllers, true /* controllingUi */);
70 mController.setAvailabilityObserver(mObserver);
74 public void testInitialization() {
75 verify(mControllers.get(0)).setAvailabilityObserver(mController);
76 verify(mControllers.get(1)).setAvailabilityObserver(mController);
80 public void testGetAvailabilityObserver() {
81 assertThat(mController.getAvailabilityObserver()).isEqualTo(mObserver);
85 public void testOnPreferenceAvailabilityUpdated() {
86 final Preference preference = new Preference(mContext, null, 0, 0);
87 preference.setVisible(true);
89 mController.updateState(preference);
90 assertThat(preference.isVisible()).isFalse();
92 mController.onPreferenceAvailabilityUpdated(KEY_1, true);
93 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, true);
94 assertThat(preference.isVisible()).isTrue();
97 mController.onPreferenceAvailabilityUpdated(KEY_2, true);
98 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, true);
99 assertThat(preference.isVisible()).isTrue();
102 mController.onPreferenceAvailabilityUpdated(KEY_1, false);
103 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, true);
104 assertThat(preference.isVisible()).isTrue();
107 mController.onPreferenceAvailabilityUpdated(KEY_2, false);
108 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, false);
109 assertThat(preference.isVisible()).isFalse();
113 public void testUpdateState() {
114 final Preference preference = new Preference(mContext, null, 0, 0);
115 preference.setVisible(false);
117 mController.onPreferenceAvailabilityUpdated(KEY_1, true);
118 mController.updateState(preference);
119 assertThat(preference.isVisible()).isTrue();
123 public void testIsAvailableForUi() {
124 assertThat(mController.isAvailable()).isTrue();
125 verify(mObserver, never()).onPreferenceAvailabilityUpdated(
126 eq(KEY_EXPOSURE_CHANGES_CATEGORY), anyBoolean());
128 mController.onPreferenceAvailabilityUpdated(KEY_1, true);
130 assertThat(mController.isAvailable()).isTrue();
131 verify(mObserver, never()).onPreferenceAvailabilityUpdated(
132 eq(KEY_EXPOSURE_CHANGES_CATEGORY), anyBoolean());
134 mController.onPreferenceAvailabilityUpdated(KEY_1, false);
136 assertThat(mController.isAvailable()).isTrue();
137 verify(mObserver, never()).onPreferenceAvailabilityUpdated(
138 eq(KEY_EXPOSURE_CHANGES_CATEGORY), anyBoolean());
142 public void testIsAvailableForSearch() {
143 final ExposureChangesCategoryPreferenceController controller
144 = new ExposureChangesCategoryPreferenceController(mContext, null /* lifecycle */,
145 mControllers, false /* controllingUi */);
146 controller.setAvailabilityObserver(mObserver);
147 verify(mControllers.get(0)).setAvailabilityObserver(controller);
148 verify(mControllers.get(1)).setAvailabilityObserver(controller);
150 assertThat(controller.isAvailable()).isFalse();
151 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, false);
154 controller.onPreferenceAvailabilityUpdated(KEY_1, true);
155 verify(mObserver, never()).onPreferenceAvailabilityUpdated(
156 eq(KEY_EXPOSURE_CHANGES_CATEGORY), anyBoolean());
157 assertThat(controller.isAvailable()).isTrue();
158 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, true);
161 controller.onPreferenceAvailabilityUpdated(KEY_2, true);
162 verify(mObserver, never()).onPreferenceAvailabilityUpdated(
163 eq(KEY_EXPOSURE_CHANGES_CATEGORY), anyBoolean());
164 assertThat(controller.isAvailable()).isTrue();
165 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, true);
168 controller.onPreferenceAvailabilityUpdated(KEY_1, false);
169 verify(mObserver, never()).onPreferenceAvailabilityUpdated(
170 eq(KEY_EXPOSURE_CHANGES_CATEGORY), anyBoolean());
171 assertThat(controller.isAvailable()).isTrue();
172 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, true);
175 controller.onPreferenceAvailabilityUpdated(KEY_2, false);
176 verify(mObserver, never()).onPreferenceAvailabilityUpdated(
177 eq(KEY_EXPOSURE_CHANGES_CATEGORY), anyBoolean());
178 assertThat(controller.isAvailable()).isFalse();
179 verify(mObserver).onPreferenceAvailabilityUpdated(KEY_EXPOSURE_CHANGES_CATEGORY, false);
183 public void testHandlePreferenceTreeClick() {
184 assertThat(mController.handlePreferenceTreeClick(new Preference(mContext, null, 0, 0)))
189 public void testGetPreferenceKey() {
190 assertThat(mController.getPreferenceKey()).isEqualTo(KEY_EXPOSURE_CHANGES_CATEGORY);