• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 package com.android.settings.fuelgauge;
17 
18 import static com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType;
19 
20 import static com.google.common.truth.Truth.assertThat;
21 import static org.mockito.Matchers.any;
22 import static org.mockito.Matchers.anyInt;
23 import static org.mockito.Mockito.doReturn;
24 import static org.mockito.Mockito.never;
25 import static org.mockito.Mockito.spy;
26 import static org.mockito.Mockito.times;
27 import static org.mockito.Mockito.verify;
28 
29 import android.content.Context;
30 import android.content.Intent;
31 import android.os.BatteryManager;
32 import android.os.PowerManager;
33 
34 import com.android.settings.Utils;
35 import com.android.settings.testutils.SettingsRobolectricTestRunner;
36 
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.junit.runner.RunWith;
40 import org.mockito.Mock;
41 import org.mockito.MockitoAnnotations;
42 import org.robolectric.RuntimeEnvironment;
43 
44 @RunWith(SettingsRobolectricTestRunner.class)
45 public class BatteryBroadcastReceiverTest {
46 
47     private static final String BATTERY_INIT_LEVEL = "100%";
48     private static final String BATTERY_INIT_STATUS = "Not charging";
49     private static final int BATTERY_INTENT_LEVEL = 80;
50     private static final int BATTERY_INTENT_SCALE = 100;
51 
52     @Mock
53     private BatteryBroadcastReceiver.OnBatteryChangedListener mBatteryListener;
54     private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
55     private Context mContext;
56     private Intent mChargingIntent;
57 
58     @Before
setUp()59     public void setUp() {
60         MockitoAnnotations.initMocks(this);
61         mContext = spy(RuntimeEnvironment.application);
62 
63         mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(mContext);
64         mBatteryBroadcastReceiver.mBatteryLevel = BATTERY_INIT_LEVEL;
65         mBatteryBroadcastReceiver.mBatteryStatus = BATTERY_INIT_STATUS;
66         mBatteryBroadcastReceiver.setBatteryChangedListener(mBatteryListener);
67 
68         mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED);
69         mChargingIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_INTENT_LEVEL);
70         mChargingIntent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_INTENT_SCALE);
71         mChargingIntent
72             .putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
73     }
74 
75     @Test
testOnReceive_batteryLevelChanged_dataUpdated()76     public void testOnReceive_batteryLevelChanged_dataUpdated() {
77         mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent);
78 
79         assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
80             .isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
81         assertThat(mBatteryBroadcastReceiver.mBatteryStatus)
82             .isEqualTo(Utils.getBatteryStatus(mContext.getResources(), mChargingIntent));
83         verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL);
84     }
85 
86     @Test
testOnReceive_powerSaveModeChanged_listenerInvoked()87     public void testOnReceive_powerSaveModeChanged_listenerInvoked() {
88         mBatteryBroadcastReceiver.onReceive(mContext,
89                 new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
90 
91         verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_SAVER);
92     }
93 
94     @Test
testOnReceive_batteryDataNotChanged_listenerNotInvoked()95     public void testOnReceive_batteryDataNotChanged_listenerNotInvoked() {
96         final String batteryLevel = Utils.getBatteryPercentage(mChargingIntent);
97         final String batteryStatus =
98             Utils.getBatteryStatus(mContext.getResources(), mChargingIntent);
99         mBatteryBroadcastReceiver.mBatteryLevel = batteryLevel;
100         mBatteryBroadcastReceiver.mBatteryStatus = batteryStatus;
101 
102         mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent);
103 
104         assertThat(mBatteryBroadcastReceiver.mBatteryLevel).isEqualTo(batteryLevel);
105         assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(batteryStatus);
106         verify(mBatteryListener, never()).onBatteryChanged(anyInt());
107     }
108 
109     @Test
testRegister_updateBatteryStatus()110     public void testRegister_updateBatteryStatus() {
111         doReturn(mChargingIntent).when(mContext).registerReceiver(any(), any());
112 
113         mBatteryBroadcastReceiver.register();
114         mBatteryBroadcastReceiver.register();
115 
116         assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
117             .isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
118         assertThat(mBatteryBroadcastReceiver.mBatteryStatus)
119             .isEqualTo(Utils.getBatteryStatus(mContext.getResources(), mChargingIntent));
120         // 2 times because register will force update the battery
121         verify(mBatteryListener, times(2)).onBatteryChanged(BatteryUpdateType.MANUAL);
122     }
123 }
124