1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 package com.android.settings.fuelgauge; 16 17 import static com.google.common.truth.Truth.assertThat; 18 19 import static org.mockito.ArgumentMatchers.any; 20 import static org.mockito.Mockito.doReturn; 21 import static org.mockito.Mockito.spy; 22 import static org.mockito.Mockito.verify; 23 import static org.mockito.Mockito.when; 24 25 import android.content.Context; 26 import android.content.Intent; 27 import android.hardware.usb.UsbManager; 28 import android.os.BatteryManager; 29 30 import androidx.lifecycle.Lifecycle; 31 import androidx.lifecycle.LifecycleOwner; 32 import androidx.preference.PreferenceScreen; 33 34 import com.android.settings.core.BasePreferenceController; 35 import com.android.settings.testutils.shadow.ShadowEntityHeaderController; 36 import com.android.settings.testutils.shadow.ShadowUtils; 37 import com.android.settings.widget.EntityHeaderController; 38 import com.android.settingslib.fuelgauge.BatteryUtils; 39 import com.android.settingslib.widget.UsageProgressBarPreference; 40 41 import org.junit.After; 42 import org.junit.Before; 43 import org.junit.Test; 44 import org.junit.runner.RunWith; 45 import org.mockito.Mock; 46 import org.mockito.MockitoAnnotations; 47 import org.robolectric.RobolectricTestRunner; 48 import org.robolectric.RuntimeEnvironment; 49 import org.robolectric.annotation.Config; 50 51 // LINT.IfChange 52 @RunWith(RobolectricTestRunner.class) 53 @Config(shadows = {ShadowEntityHeaderController.class, ShadowUtils.class}) 54 public class BatteryHeaderPreferenceControllerTest { 55 56 private static final String PREF_KEY = "battery_header"; 57 private static final int BATTERY_LEVEL = 60; 58 private static final int BATTERY_MAX_LEVEL = 100; 59 60 @Mock private PreferenceScreen mPreferenceScreen; 61 @Mock private BatteryBroadcastReceiver mBatteryBroadcastReceiver; 62 @Mock private EntityHeaderController mEntityHeaderController; 63 @Mock private UsageProgressBarPreference mBatteryUsageProgressBarPreference; 64 @Mock private UsbManager mUsbManager; 65 @Mock private LifecycleOwner mLifecycleOwner; 66 67 private BatteryHeaderPreferenceController mController; 68 private Context mContext; 69 private Intent mBatteryIntent; 70 71 @Before setUp()72 public void setUp() { 73 MockitoAnnotations.initMocks(this); 74 75 mContext = spy(RuntimeEnvironment.application); 76 when(mContext.getSystemService(UsbManager.class)).thenReturn(mUsbManager); 77 ShadowEntityHeaderController.setUseMock(mEntityHeaderController); 78 79 mBatteryIntent = new Intent(); 80 mBatteryIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_LEVEL); 81 mBatteryIntent.putExtra(BatteryManager.EXTRA_SCALE, 100); 82 mBatteryIntent.putExtra(BatteryManager.EXTRA_PLUGGED, 1); 83 doReturn(mBatteryIntent).when(mContext).registerReceiver(any(), any()); 84 85 doReturn(mBatteryUsageProgressBarPreference) 86 .when(mPreferenceScreen) 87 .findPreference(PREF_KEY); 88 89 mController = spy(new BatteryHeaderPreferenceController(mContext, PREF_KEY)); 90 mController.mBatteryUsageProgressBarPreference = mBatteryUsageProgressBarPreference; 91 92 BatteryUtils.setChargingStringV2Enabled(null); 93 } 94 95 @After tearDown()96 public void tearDown() { 97 ShadowEntityHeaderController.reset(); 98 ShadowUtils.reset(); 99 } 100 101 @Test onStateChanged_onCreate_receiverCreated()102 public void onStateChanged_onCreate_receiverCreated() { 103 mController.onStateChanged(mLifecycleOwner, Lifecycle.Event.ON_CREATE); 104 105 assertThat(mController.mBatteryBroadcastReceiver).isNotNull(); 106 } 107 108 @Test onStateChanged_onStart_receiverRegistered()109 public void onStateChanged_onStart_receiverRegistered() { 110 mController.mBatteryBroadcastReceiver = mBatteryBroadcastReceiver; 111 112 mController.onStateChanged(mLifecycleOwner, Lifecycle.Event.ON_START); 113 114 verify(mBatteryBroadcastReceiver).register(); 115 } 116 117 @Test onStateChanged_onStop_receiverUnregistered()118 public void onStateChanged_onStop_receiverUnregistered() { 119 mController.mBatteryBroadcastReceiver = mBatteryBroadcastReceiver; 120 121 mController.onStateChanged(mLifecycleOwner, Lifecycle.Event.ON_STOP); 122 123 verify(mBatteryBroadcastReceiver).unRegister(); 124 } 125 126 @Test displayPreference_displayBatteryLevel()127 public void displayPreference_displayBatteryLevel() { 128 mController.displayPreference(mPreferenceScreen); 129 130 verify(mBatteryUsageProgressBarPreference).setUsageSummary(formatBatteryPercentageText()); 131 verify(mBatteryUsageProgressBarPreference).setPercent(BATTERY_LEVEL, BATTERY_MAX_LEVEL); 132 } 133 134 @Test quickUpdateHeaderPreference_onlyUpdateBatteryLevelAndChargingState()135 public void quickUpdateHeaderPreference_onlyUpdateBatteryLevelAndChargingState() { 136 mController.quickUpdateHeaderPreference(); 137 138 verify(mBatteryUsageProgressBarPreference).setUsageSummary(formatBatteryPercentageText()); 139 verify(mBatteryUsageProgressBarPreference).setPercent(BATTERY_LEVEL, BATTERY_MAX_LEVEL); 140 } 141 142 @Test getAvailabilityStatus_returnAvailableUnsearchable()143 public void getAvailabilityStatus_returnAvailableUnsearchable() { 144 assertThat(mController.getAvailabilityStatus()) 145 .isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE); 146 } 147 148 @Test displayPreference_batteryNotPresent_isInvisible()149 public void displayPreference_batteryNotPresent_isInvisible() { 150 ShadowUtils.setIsBatteryPresent(false); 151 152 mController.displayPreference(mPreferenceScreen); 153 154 assertThat(mBatteryUsageProgressBarPreference.isVisible()).isFalse(); 155 } 156 157 @Test displayPreference_init_setEmptyBottomSummary()158 public void displayPreference_init_setEmptyBottomSummary() { 159 mController.displayPreference(mPreferenceScreen); 160 161 verify(mBatteryUsageProgressBarPreference).setBottomSummary(""); 162 } 163 formatBatteryPercentageText()164 private CharSequence formatBatteryPercentageText() { 165 return com.android.settings.Utils.formatPercentage(BATTERY_LEVEL); 166 } 167 } 168 // LINT.ThenChange(BatteryHeaderPreferenceTest.java) 169