2 * Copyright (C) 2016 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.development;
19 import android.content.ComponentName;
20 import android.content.Context;
21 import android.content.pm.PackageManager;
22 import android.provider.Settings;
23 import android.os.UserManager;
24 import android.support.v14.preference.SwitchPreference;
25 import android.support.v7.preference.Preference;
26 import android.support.v7.preference.PreferenceScreen;
28 import com.android.settings.SettingsRobolectricTestRunner;
29 import com.android.settings.TestConfig;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 import org.mockito.Mock;
35 import org.mockito.MockitoAnnotations;
36 import org.robolectric.annotation.Config;
37 import org.robolectric.shadows.ShadowApplication;
39 import static com.google.common.truth.Truth.assertThat;
40 import static org.mockito.Answers.RETURNS_DEEP_STUBS;
41 import static org.mockito.Matchers.any;
42 import static org.mockito.Matchers.anyBoolean;
43 import static org.mockito.Matchers.anyInt;
44 import static org.mockito.Matchers.anyString;
45 import static org.mockito.Matchers.eq;
46 import static org.mockito.Mockito.doCallRealMethod;
47 import static org.mockito.Mockito.never;
48 import static org.mockito.Mockito.spy;
49 import static org.mockito.Mockito.verify;
50 import static org.mockito.Mockito.when;
52 @RunWith(SettingsRobolectricTestRunner.class)
53 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
54 public class BugReportInPowerPreferenceControllerTest {
56 @Mock(answer = RETURNS_DEEP_STUBS)
57 private PreferenceScreen mScreen;
59 private UserManager mUserManager;
61 private PackageManager mPackageManager;
63 private Context mContext;
64 private SwitchPreference mPreference;
65 private BugReportInPowerPreferenceController mController;
69 MockitoAnnotations.initMocks(this);
70 ShadowApplication shadowContext = ShadowApplication.getInstance();
71 shadowContext.setSystemService(Context.USER_SERVICE, mUserManager);
72 mContext = spy(shadowContext.getApplicationContext());
73 when(mContext.getPackageManager()).thenReturn(mPackageManager);
74 mPreference = new SwitchPreference(mContext);
75 when(mScreen.findPreference(anyString())).thenReturn(mPreference);
76 mController = new BugReportInPowerPreferenceController(mContext);
77 mPreference.setKey(mController.getPreferenceKey());
81 public void displayPreference_hasDebugRestriction_shouldRemovePreference() {
82 when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
84 mController.displayPreference(mScreen);
86 verify(mScreen).removePreference(any(Preference.class));
90 public void displayPreference_noDebugRestriction_shouldNotRemovePreference() {
91 when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
93 mController.displayPreference(mScreen);
95 verify(mScreen, never()).removePreference(any(Preference.class));
99 public void enablePreference_hasDebugRestriction_shouldNotEnable() {
100 when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
101 mController.displayPreference(mScreen);
102 mPreference.setEnabled(false);
104 mController.enablePreference(true);
106 assertThat(mPreference.isEnabled()).isFalse();
110 public void enablePreference_noDebugRestriction_shouldEnable() {
111 when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
112 mController.displayPreference(mScreen);
113 mPreference.setEnabled(false);
115 mController.enablePreference(true);
117 assertThat(mPreference.isEnabled()).isTrue();
121 public void resetPreference_shouldUncheck() {
122 when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
123 mController.displayPreference(mScreen);
124 mPreference.setChecked(true);
126 mController.resetPreference();
128 assertThat(mPreference.isChecked()).isFalse();
132 public void handlePreferenceTreeClick_shouldUpdateSettings() {
133 when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
134 Settings.Secure.putInt(mContext.getContentResolver(),
135 Settings.Global.BUGREPORT_IN_POWER_MENU, 0);
136 mPreference.setChecked(true);
137 mController.displayPreference(mScreen);
139 mController.handlePreferenceTreeClick(mPreference);
141 assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
142 Settings.Global.BUGREPORT_IN_POWER_MENU, 0)).isEqualTo(1);
146 public void updateState_settingsOn_shouldCheck() {
147 when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
148 Settings.Secure.putInt(mContext.getContentResolver(),
149 Settings.Global.BUGREPORT_IN_POWER_MENU, 1);
150 mPreference.setChecked(false);
151 mController.displayPreference(mScreen);
153 mController.updateState(mPreference);
155 assertThat(mPreference.isChecked()).isTrue();
159 public void updateState_settingsOff_shouldUncheck() {
160 when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
161 Settings.Secure.putInt(mContext.getContentResolver(),
162 Settings.Global.BUGREPORT_IN_POWER_MENU, 0);
163 mPreference.setChecked(true);
164 mController.displayPreference(mScreen);
166 mController.updateState(mPreference);
168 assertThat(mPreference.isChecked()).isFalse();
172 public void updateBugreportOptions_shouldEnable() {
173 when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
174 mPreference.setEnabled(false);
175 mController.displayPreference(mScreen);
177 mController.updateBugreportOptions();
179 assertThat(mPreference.isEnabled()).isTrue();
183 public void updateBugreportOptions_shouldEnableBugReportStorage() {
184 final ComponentName componentName = new ComponentName("com.android.shell",
185 "com.android.shell.BugreportStorageProvider");
186 when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
187 mController.displayPreference(mScreen);
189 mController.updateBugreportOptions();
191 verify(mPackageManager).setComponentEnabledSetting(eq(componentName), anyInt(), anyInt());