OSDN Git Service

4ca6609def7ec2f9b3e6ed026e8e4c30c13103c6
[android-x86/packages-apps-Settings.git] / tests / robotests / src / com / android / settings / development / BugReportInPowerPreferenceControllerTest.java
1 /*
2  * Copyright (C) 2016 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.settings.development;
18
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;
27
28 import com.android.settings.SettingsRobolectricTestRunner;
29 import com.android.settings.TestConfig;
30
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;
38
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;
51
52 @RunWith(SettingsRobolectricTestRunner.class)
53 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
54 public class BugReportInPowerPreferenceControllerTest {
55
56     @Mock(answer = RETURNS_DEEP_STUBS)
57     private PreferenceScreen mScreen;
58     @Mock
59     private UserManager mUserManager;
60     @Mock
61     private PackageManager mPackageManager;
62
63     private Context mContext;
64     private SwitchPreference mPreference;
65     private BugReportInPowerPreferenceController mController;
66
67     @Before
68     public void setUp() {
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());
78     }
79
80     @Test
81     public void displayPreference_hasDebugRestriction_shouldRemovePreference() {
82         when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
83
84         mController.displayPreference(mScreen);
85
86         verify(mScreen).removePreference(any(Preference.class));
87     }
88
89     @Test
90     public void displayPreference_noDebugRestriction_shouldNotRemovePreference() {
91         when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
92
93         mController.displayPreference(mScreen);
94
95         verify(mScreen, never()).removePreference(any(Preference.class));
96     }
97
98     @Test
99     public void enablePreference_hasDebugRestriction_shouldNotEnable() {
100         when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
101         mController.displayPreference(mScreen);
102         mPreference.setEnabled(false);
103
104         mController.enablePreference(true);
105
106         assertThat(mPreference.isEnabled()).isFalse();
107     }
108
109     @Test
110     public void enablePreference_noDebugRestriction_shouldEnable() {
111         when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
112         mController.displayPreference(mScreen);
113         mPreference.setEnabled(false);
114
115         mController.enablePreference(true);
116
117         assertThat(mPreference.isEnabled()).isTrue();
118     }
119
120     @Test
121     public void resetPreference_shouldUncheck() {
122         when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
123         mController.displayPreference(mScreen);
124         mPreference.setChecked(true);
125
126         mController.resetPreference();
127
128         assertThat(mPreference.isChecked()).isFalse();
129     }
130
131     @Test
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);
138
139         mController.handlePreferenceTreeClick(mPreference);
140
141         assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
142             Settings.Global.BUGREPORT_IN_POWER_MENU, 0)).isEqualTo(1);
143     }
144
145     @Test
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);
152
153         mController.updateState(mPreference);
154
155         assertThat(mPreference.isChecked()).isTrue();
156     }
157
158     @Test
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);
165
166         mController.updateState(mPreference);
167
168         assertThat(mPreference.isChecked()).isFalse();
169     }
170
171     @Test
172     public void updateBugreportOptions_shouldEnable() {
173         when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
174         mPreference.setEnabled(false);
175         mController.displayPreference(mScreen);
176
177         mController.updateBugreportOptions();
178
179         assertThat(mPreference.isEnabled()).isTrue();
180     }
181
182     @Test
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);
188
189         mController.updateBugreportOptions();
190
191         verify(mPackageManager).setComponentEnabledSetting(eq(componentName), anyInt(), anyInt());
192     }
193 }