1 /* 2 * Copyright (C) 2021 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.fuelgauge; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.Mockito.doReturn; 22 import static org.mockito.Mockito.spy; 23 import static org.mockito.Mockito.when; 24 25 import android.content.Context; 26 import android.content.pm.PackageManager; 27 28 import com.android.settingslib.widget.SelectorWithWidgetPreference; 29 30 import org.junit.Before; 31 import org.junit.Test; 32 import org.junit.runner.RunWith; 33 import org.mockito.Mock; 34 import org.mockito.MockitoAnnotations; 35 import org.robolectric.RobolectricTestRunner; 36 import org.robolectric.RuntimeEnvironment; 37 38 @RunWith(RobolectricTestRunner.class) 39 public class OptimizedPreferenceControllerTest { 40 private static final int UID = 12345; 41 private static final String PACKAGE_NAME = "com.android.app"; 42 43 private OptimizedPreferenceController mController; 44 private SelectorWithWidgetPreference mPreference; 45 private BatteryOptimizeUtils mBatteryOptimizeUtils; 46 47 @Mock PackageManager mMockPackageManager; 48 49 @Before setUp()50 public void setUp() throws Exception { 51 MockitoAnnotations.initMocks(this); 52 53 Context context = spy(RuntimeEnvironment.application); 54 BatteryUtils.getInstance(context).reset(); 55 doReturn(UID) 56 .when(mMockPackageManager) 57 .getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA); 58 59 mController = new OptimizedPreferenceController(context, UID, PACKAGE_NAME); 60 mPreference = new SelectorWithWidgetPreference(RuntimeEnvironment.application); 61 mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(context, UID, PACKAGE_NAME)); 62 mController.mBatteryOptimizeUtils = mBatteryOptimizeUtils; 63 } 64 65 @Test testUpdateState_invalidPackage_prefEnabled()66 public void testUpdateState_invalidPackage_prefEnabled() { 67 when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true); 68 69 mController.updateState(mPreference); 70 71 assertThat(mPreference.isEnabled()).isFalse(); 72 assertThat(mPreference.isChecked()).isTrue(); 73 } 74 75 @Test testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked()76 public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() { 77 when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); 78 when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true); 79 when(mBatteryOptimizeUtils.getAppOptimizationMode()) 80 .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED); 81 82 mController.updateState(mPreference); 83 84 assertThat(mPreference.isChecked()).isTrue(); 85 } 86 87 @Test testUpdateState_isSystemOrDefaultApp_prefUnchecked()88 public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() { 89 when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); 90 when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true); 91 92 mController.updateState(mPreference); 93 94 assertThat(mPreference.isChecked()).isFalse(); 95 assertThat(mPreference.isEnabled()).isFalse(); 96 } 97 98 @Test testUpdateState_isOptimizedStates_prefChecked()99 public void testUpdateState_isOptimizedStates_prefChecked() { 100 when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); 101 when(mBatteryOptimizeUtils.getAppOptimizationMode()) 102 .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED); 103 104 mController.updateState(mPreference); 105 106 assertThat(mPreference.isChecked()).isTrue(); 107 } 108 109 @Test testUpdateState_prefUnchecked()110 public void testUpdateState_prefUnchecked() { 111 when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); 112 113 mController.updateState(mPreference); 114 115 assertThat(mPreference.isChecked()).isFalse(); 116 } 117 118 @Test testHandlePreferenceTreeClick_samePrefKey_verifyAction()119 public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() { 120 mPreference.setKey(mController.KEY_OPTIMIZED_PREF); 121 mController.handlePreferenceTreeClick(mPreference); 122 123 assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue(); 124 } 125 126 @Test testHandlePreferenceTreeClick_incorrectPrefKey_noAction()127 public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() { 128 assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse(); 129 } 130 } 131