BatteryStatusManagerTest.java revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.content.browser;
6
7import android.content.Context;
8import android.content.Intent;
9
10import android.os.BatteryManager;
11
12import android.test.AndroidTestCase;
13import android.test.suitebuilder.annotation.SmallTest;
14
15/**
16 * Test suite for BatteryStatusManager.
17 */
18public class BatteryStatusManagerTest extends AndroidTestCase {
19
20    private BatteryStatusManagerForTests mBatteryStatusManager;
21
22    @Override
23    public void setUp() throws Exception {
24        super.setUp();
25        mBatteryStatusManager = BatteryStatusManagerForTests.getInstance(getContext());
26    }
27
28    @SmallTest
29    public void testOnReceiveBatteryNotPluggedIn() {
30        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
31        intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
32        intent.putExtra(BatteryManager.EXTRA_PLUGGED, 0);
33        intent.putExtra(BatteryManager.EXTRA_LEVEL, 10);
34        intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
35        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING);
36
37        mBatteryStatusManager.onReceive(intent);
38
39        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
40        mBatteryStatusManager.verifyValues(false, Double.POSITIVE_INFINITY,
41                Double.POSITIVE_INFINITY, 0.1);
42    }
43
44    @SmallTest
45    public void testOnReceiveBatteryPluggedInACCharging() {
46        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
47        intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
48        intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_AC);
49        intent.putExtra(BatteryManager.EXTRA_LEVEL, 50);
50        intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
51        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
52
53        mBatteryStatusManager.onReceive(intent);
54
55        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
56        mBatteryStatusManager.verifyValues(true, Double.POSITIVE_INFINITY,
57                Double.POSITIVE_INFINITY, 0.5);
58    }
59
60    @SmallTest
61    public void testOnReceiveBatteryPluggedInACNotCharging() {
62        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
63        intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
64        intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_AC);
65        intent.putExtra(BatteryManager.EXTRA_LEVEL, 50);
66        intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
67        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING);
68
69        mBatteryStatusManager.onReceive(intent);
70
71        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
72        mBatteryStatusManager.verifyValues(true, Double.POSITIVE_INFINITY,
73                Double.POSITIVE_INFINITY, 0.5);
74    }
75
76    @SmallTest
77    public void testOnReceiveBatteryPluggedInUSBFull() {
78        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
79        intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
80        intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_USB);
81        intent.putExtra(BatteryManager.EXTRA_LEVEL, 100);
82        intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
83        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_FULL);
84
85        mBatteryStatusManager.onReceive(intent);
86
87        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
88        mBatteryStatusManager.verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
89    }
90
91    @SmallTest
92    public void testOnReceiveNoBattery() {
93        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
94        intent.putExtra(BatteryManager.EXTRA_PRESENT, false);
95        intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_USB);
96
97        mBatteryStatusManager.onReceive(intent);
98
99        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
100        mBatteryStatusManager.verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
101    }
102
103    @SmallTest
104    public void testOnReceiveNoPluggedStatus() {
105        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
106        intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
107
108        mBatteryStatusManager.onReceive(intent);
109
110        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
111        mBatteryStatusManager.verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
112    }
113
114    @SmallTest
115    public void testStartStopSucceeds() {
116        assertTrue(mBatteryStatusManager.start(0));
117        mBatteryStatusManager.stop();
118    }
119
120    // Helper class for testing.
121
122    private static class BatteryStatusManagerForTests extends BatteryStatusManager {
123
124        private boolean mCharging = false;
125        private double mChargingTime = 0;
126        private double mDischargingTime = 0;
127        private double mLevel = 0;
128        private String mCalls = "";
129
130        private BatteryStatusManagerForTests(Context context) {
131            super(context);
132        }
133
134        static BatteryStatusManagerForTests getInstance(Context context) {
135            return new BatteryStatusManagerForTests(context);
136        }
137
138        private void verifyValues(boolean charging, double chargingTime,
139                double dischargingTime, double level) {
140            assertEquals(charging, mCharging);
141            assertEquals(chargingTime, mChargingTime);
142            assertEquals(dischargingTime, mDischargingTime);
143            assertEquals(level, mLevel);
144        }
145
146        private void verifyCalls(String names) {
147            assertEquals(mCalls, names);
148        }
149
150        @Override
151        protected boolean ignoreBatteryPresentState() {
152            return false;
153        }
154
155        @Override
156        protected void gotBatteryStatus(boolean charging, double chargingTime,
157                double dischargingTime, double level) {
158            mCharging = charging;
159            mChargingTime = chargingTime;
160            mDischargingTime = dischargingTime;
161            mLevel = level;
162            mCalls = mCalls.concat("gotBatteryStatus");
163        }
164    }
165
166}
167