1/* 2 * Copyright (C) 2017 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 17package com.android.settings.development; 18 19import static com.android.settings.development.LocalTerminalPreferenceController.TERMINAL_APP_PACKAGE; 20import static org.mockito.Mockito.doReturn; 21import static org.mockito.Mockito.never; 22import static org.mockito.Mockito.spy; 23import static org.mockito.Mockito.verify; 24import static org.mockito.Mockito.when; 25 26import android.content.Context; 27import android.content.pm.PackageManager; 28import android.os.UserManager; 29import android.support.v14.preference.SwitchPreference; 30import android.support.v7.preference.PreferenceScreen; 31 32import com.android.settings.testutils.SettingsRobolectricTestRunner; 33import com.android.settingslib.wrapper.PackageManagerWrapper; 34 35import org.junit.Before; 36import org.junit.Test; 37import org.junit.runner.RunWith; 38import org.mockito.Mock; 39import org.mockito.MockitoAnnotations; 40 41@RunWith(SettingsRobolectricTestRunner.class) 42public class LocalTerminalPreferenceControllerTest { 43 44 @Mock 45 private Context mContext; 46 @Mock 47 private SwitchPreference mPreference; 48 @Mock 49 private PreferenceScreen mPreferenceScreen; 50 @Mock 51 private UserManager mUserManager; 52 @Mock 53 private PackageManagerWrapper mPackageManagerWrapper; 54 55 private LocalTerminalPreferenceController mController; 56 57 @Before 58 public void setup() { 59 MockitoAnnotations.initMocks(this); 60 when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); 61 when(mUserManager.isAdminUser()).thenReturn(true); 62 mController = spy(new LocalTerminalPreferenceController(mContext)); 63 doReturn(true).when(mController).isAvailable(); 64 doReturn(mPackageManagerWrapper).when(mController).getPackageManagerWrapper(); 65 when(mPreferenceScreen.findPreference(mController.getPreferenceKey())) 66 .thenReturn(mPreference); 67 mController.displayPreference(mPreferenceScreen); 68 } 69 70 @Test 71 public void displayPreference_shouldDisablePreferenceWhenNotAdmin() { 72 when(mUserManager.isAdminUser()).thenReturn(false); 73 mController.displayPreference(mPreferenceScreen); 74 75 verify(mPreference).setEnabled(false); 76 } 77 78 @Test 79 public void onPreferenceChanged_turnOnTerminal() { 80 mController.onPreferenceChange(null, true); 81 82 verify(mPackageManagerWrapper).setApplicationEnabledSetting(TERMINAL_APP_PACKAGE, 83 PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); 84 } 85 86 @Test 87 public void onPreferenceChanged_turnOffTerminal() { 88 mController.onPreferenceChange(null, false); 89 90 verify(mPackageManagerWrapper).setApplicationEnabledSetting(TERMINAL_APP_PACKAGE, 91 PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); 92 } 93 94 @Test 95 public void updateState_preferenceShouldBeChecked() { 96 when(mPackageManagerWrapper.getApplicationEnabledSetting(TERMINAL_APP_PACKAGE)).thenReturn( 97 PackageManager.COMPONENT_ENABLED_STATE_ENABLED); 98 mController.updateState(mPreference); 99 100 verify(mPreference).setChecked(true); 101 } 102 103 @Test 104 public void updateState_preferenceShouldNotBeChecked() { 105 when(mPackageManagerWrapper.getApplicationEnabledSetting(TERMINAL_APP_PACKAGE)).thenReturn( 106 PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); 107 mController.updateState(mPreference); 108 109 verify(mPreference).setChecked(false); 110 } 111 112 @Test 113 public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() { 114 mController.onDeveloperOptionsSwitchDisabled(); 115 116 verify(mPackageManagerWrapper).setApplicationEnabledSetting(TERMINAL_APP_PACKAGE, 117 PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); 118 verify(mPreference).setChecked(false); 119 verify(mPreference).setEnabled(false); 120 } 121 122 @Test 123 public void onDeveloperOptionsSwitchEnabled_shouldDoNothingWhenNotAdmin() { 124 when(mUserManager.isAdminUser()).thenReturn(false); 125 mController.onDeveloperOptionsSwitchDisabled(); 126 127 verify(mPreference, never()).setEnabled(true); 128 } 129 130 @Test 131 public void onDeveloperOptionsSwitchEnabled_preferenceShouldBeEnabledWhenAdmin() { 132 mController.onDeveloperOptionsSwitchEnabled(); 133 134 verify(mPreference).setEnabled(true); 135 } 136} 137