16246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei/* 26246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * Copyright (C) 2017 The Android Open Source Project 36246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * 46246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * Licensed under the Apache License, Version 2.0 (the "License"); 56246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * you may not use this file except in compliance with the License. 66246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * You may obtain a copy of the License at 76246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * 86246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * http://www.apache.org/licenses/LICENSE-2.0 96246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * 106246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * Unless required by applicable law or agreed to in writing, software 116246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * distributed under the License is distributed on an "AS IS" BASIS, 126246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * See the License for the specific language governing permissions and 146246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei * limitations under the License. 156246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei */ 166246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleipackage com.android.settings.fuelgauge; 176246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 186246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport android.content.Context; 196246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport android.content.Intent; 206246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport android.os.BatteryManager; 216246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 229f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner; 236246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport com.android.settings.TestConfig; 246246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport com.android.settings.Utils; 256246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 266246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport org.junit.Before; 276246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport org.junit.Test; 286246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport org.junit.runner.RunWith; 296246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport org.mockito.Mock; 306246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport org.mockito.MockitoAnnotations; 316246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport org.robolectric.RuntimeEnvironment; 326246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport org.robolectric.annotation.Config; 336246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 346246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport static com.google.common.truth.Truth.assertThat; 35114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei 36114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyuleiimport static org.mockito.Matchers.any; 37114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyuleiimport static org.mockito.Mockito.doReturn; 386246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport static org.mockito.Mockito.never; 39114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyuleiimport static org.mockito.Mockito.spy; 4088b27fdeac1215b26eb84c4a1bc9c2b3a0d25522jackqdyuleiimport static org.mockito.Mockito.times; 416246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleiimport static org.mockito.Mockito.verify; 426246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 436246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei@RunWith(SettingsRobolectricTestRunner.class) 446246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 456246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyuleipublic class BatteryBroadcastReceiverTest { 466246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei private static final String BATTERY_INIT_LEVEL = "100%"; 476246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei private static final String BATTERY_INIT_STATUS = "Not charging"; 486246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei private static final int BATTERY_INTENT_LEVEL = 80; 496246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei private static final int BATTERY_INTENT_SCALE = 100; 506246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 516246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei @Mock 526246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei private BatteryBroadcastReceiver.OnBatteryChangedListener mBatteryListener; 536246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei private BatteryBroadcastReceiver mBatteryBroadcastReceiver; 546246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei private Context mContext; 556246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei private Intent mChargingIntent; 566246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 576246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei @Before 586246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei public void setUp() { 596246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei MockitoAnnotations.initMocks(this); 60114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei mContext = spy(RuntimeEnvironment.application); 616246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 626246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(mContext); 636246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mBatteryBroadcastReceiver.mBatteryLevel = BATTERY_INIT_LEVEL; 646246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mBatteryBroadcastReceiver.mBatteryStatus = BATTERY_INIT_STATUS; 656246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mBatteryBroadcastReceiver.setBatteryChangedListener(mBatteryListener); 666246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 676246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED); 686246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mChargingIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_INTENT_LEVEL); 696246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mChargingIntent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_INTENT_SCALE); 706246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mChargingIntent.putExtra(BatteryManager.EXTRA_STATUS, 716246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei BatteryManager.BATTERY_STATUS_CHARGING); 726246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei } 736246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 746246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei @Test 756246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei public void testOnReceive_batteryDataChanged_dataUpdated() { 766246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); 776246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 786246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei assertThat(mBatteryBroadcastReceiver.mBatteryLevel).isEqualTo( 796246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei Utils.getBatteryPercentage(mChargingIntent)); 806246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo( 816246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei Utils.getBatteryStatus(mContext.getResources(), mChargingIntent)); 826246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei verify(mBatteryListener).onBatteryChanged(); 836246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei } 846246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 856246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei @Test 866246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei public void testOnReceive_batteryDataNotChanged_listenerNotInvoked() { 876246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei final String batteryLevel = Utils.getBatteryPercentage(mChargingIntent); 886246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei final String batteryStatus = Utils.getBatteryStatus(mContext.getResources(), 896246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mChargingIntent); 906246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mBatteryBroadcastReceiver.mBatteryLevel = batteryLevel; 916246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mBatteryBroadcastReceiver.mBatteryStatus = batteryStatus; 926246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 936246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); 946246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 956246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei assertThat(mBatteryBroadcastReceiver.mBatteryLevel).isEqualTo(batteryLevel); 966246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(batteryStatus); 976246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei verify(mBatteryListener, never()).onBatteryChanged(); 986246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei } 996246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei 100114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei @Test 101114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei public void testRegister_updateBatteryStatus() { 102114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei doReturn(mChargingIntent).when(mContext).registerReceiver(any(), any()); 103114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei 104114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei mBatteryBroadcastReceiver.register(); 10588b27fdeac1215b26eb84c4a1bc9c2b3a0d25522jackqdyulei mBatteryBroadcastReceiver.register(); 106114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei 107114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei assertThat(mBatteryBroadcastReceiver.mBatteryLevel).isEqualTo( 108114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei Utils.getBatteryPercentage(mChargingIntent)); 109114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo( 110114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei Utils.getBatteryStatus(mContext.getResources(), mChargingIntent)); 11188b27fdeac1215b26eb84c4a1bc9c2b3a0d25522jackqdyulei // 2 times because register will force update the battery 11288b27fdeac1215b26eb84c4a1bc9c2b3a0d25522jackqdyulei verify(mBatteryListener, times(2)).onBatteryChanged(); 113114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei } 114114cf2a1a75a4e46243aa2b27e007add7899d08fjackqdyulei 1156246fad7ff75753ec984c1c008c25b9edc49b6eejackqdyulei} 116