Commit 2f08ccf8 authored by timvolodine's avatar timvolodine Committed by Commit bot

[Android] Make BatteryStatusManagerTest compilable on M

BatteryStatusManagerTest does not compile on M because of the
changes to the BatteryManager class. This patch introduces
AndroidBatteryManagerWrapper to make the system battery manager
testable on M.

BUG=488690

Review URL: https://codereview.chromium.org/1130253012

Cr-Commit-Position: refs/heads/master@{#330723}
parent 8fd5dec9
...@@ -45,18 +45,31 @@ class BatteryStatusManager { ...@@ -45,18 +45,31 @@ class BatteryStatusManager {
// This is to workaround a Galaxy Nexus bug, see the comment in the constructor. // This is to workaround a Galaxy Nexus bug, see the comment in the constructor.
private final boolean mIgnoreBatteryPresentState; private final boolean mIgnoreBatteryPresentState;
// Only used in L (API level 21 and higher). // Only used in L (API level 21) and higher.
private BatteryManager mLollipopBatteryManager; private AndroidBatteryManagerWrapper mAndroidBatteryManager;
private boolean mEnabled = false; private boolean mEnabled = false;
private BatteryStatusManager( @VisibleForTesting
Context context, BatteryStatusCallback callback, boolean ignoreBatteryPresentState, static class AndroidBatteryManagerWrapper {
@Nullable BatteryManager batteryManager) { private final BatteryManager mBatteryManager;
protected AndroidBatteryManagerWrapper(BatteryManager batteryManager) {
mBatteryManager = batteryManager;
}
public int getIntProperty(int id) {
return mBatteryManager.getIntProperty(id);
}
}
private BatteryStatusManager(Context context, BatteryStatusCallback callback,
boolean ignoreBatteryPresentState,
@Nullable AndroidBatteryManagerWrapper batteryManager) {
mAppContext = context.getApplicationContext(); mAppContext = context.getApplicationContext();
mCallback = callback; mCallback = callback;
mIgnoreBatteryPresentState = ignoreBatteryPresentState; mIgnoreBatteryPresentState = ignoreBatteryPresentState;
mLollipopBatteryManager = batteryManager; mAndroidBatteryManager = batteryManager;
} }
BatteryStatusManager(Context context, BatteryStatusCallback callback) { BatteryStatusManager(Context context, BatteryStatusCallback callback) {
...@@ -64,7 +77,8 @@ class BatteryStatusManager { ...@@ -64,7 +77,8 @@ class BatteryStatusManager {
// Android 4.2.1, it always reports false. See http://crbug.com/384348. // Android 4.2.1, it always reports false. See http://crbug.com/384348.
this(context, callback, Build.MODEL.equals("Galaxy Nexus"), this(context, callback, Build.MODEL.equals("Galaxy Nexus"),
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
? (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE) ? new AndroidBatteryManagerWrapper(
(BatteryManager) context.getSystemService(Context.BATTERY_SERVICE))
: null); : null);
} }
...@@ -72,10 +86,8 @@ class BatteryStatusManager { ...@@ -72,10 +86,8 @@ class BatteryStatusManager {
* Creates a BatteryStatusManager without the Galaxy Nexus workaround for consistency in * Creates a BatteryStatusManager without the Galaxy Nexus workaround for consistency in
* testing. * testing.
*/ */
static BatteryStatusManager createBatteryStatusManagerForTesting( static BatteryStatusManager createBatteryStatusManagerForTesting(Context context,
Context context, BatteryStatusCallback callback, @Nullable AndroidBatteryManagerWrapper batteryManager) {
BatteryStatusCallback callback,
@Nullable BatteryManager batteryManager) {
return new BatteryStatusManager(context, callback, false, batteryManager); return new BatteryStatusManager(context, callback, false, batteryManager);
} }
...@@ -143,7 +155,7 @@ class BatteryStatusManager { ...@@ -143,7 +155,7 @@ class BatteryStatusManager {
batteryStatus.dischargingTime = dischargingTimeSeconds; batteryStatus.dischargingTime = dischargingTimeSeconds;
batteryStatus.level = level; batteryStatus.level = level;
if (mLollipopBatteryManager != null) { if (mAndroidBatteryManager != null) {
updateBatteryStatusForLollipop(batteryStatus); updateBatteryStatusForLollipop(batteryStatus);
} }
...@@ -152,14 +164,14 @@ class BatteryStatusManager { ...@@ -152,14 +164,14 @@ class BatteryStatusManager {
@TargetApi(Build.VERSION_CODES.LOLLIPOP) @TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void updateBatteryStatusForLollipop(BatteryStatus batteryStatus) { private void updateBatteryStatusForLollipop(BatteryStatus batteryStatus) {
assert mLollipopBatteryManager != null; assert mAndroidBatteryManager != null;
// On Lollipop we can provide a better estimate for chargingTime and dischargingTime. // On Lollipop we can provide a better estimate for chargingTime and dischargingTime.
double remainingCapacityRatio = mLollipopBatteryManager.getIntProperty( double remainingCapacityRatio = mAndroidBatteryManager.getIntProperty(
BatteryManager.BATTERY_PROPERTY_CAPACITY) / 100.0; BatteryManager.BATTERY_PROPERTY_CAPACITY) / 100.0;
double batteryCapacityMicroAh = mLollipopBatteryManager.getIntProperty( double batteryCapacityMicroAh = mAndroidBatteryManager.getIntProperty(
BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER); BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
double averageCurrentMicroA = mLollipopBatteryManager.getIntProperty( double averageCurrentMicroA = mAndroidBatteryManager.getIntProperty(
BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE); BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);
if (batteryStatus.charging) { if (batteryStatus.charging) {
......
...@@ -35,9 +35,6 @@ public class BatteryStatusManagerTest extends AndroidTestCase { ...@@ -35,9 +35,6 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
private BatteryStatusManager mManager; private BatteryStatusManager mManager;
// Can be non-null only for versions L and higher.
private BatteryManagerForTesting mLollipopManager;
private void verifyValues( private void verifyValues(
boolean charging, double chargingTime, double dischargingTime, double level) { boolean charging, double chargingTime, double dischargingTime, double level) {
assertEquals(charging, mCharging); assertEquals(charging, mCharging);
...@@ -46,11 +43,16 @@ public class BatteryStatusManagerTest extends AndroidTestCase { ...@@ -46,11 +43,16 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
assertEquals(level, mLevel); assertEquals(level, mLevel);
} }
private static class BatteryManagerForTesting extends BatteryManager { private static class FakeAndroidBatteryManager
extends BatteryStatusManager.AndroidBatteryManagerWrapper {
private int mChargeCounter; private int mChargeCounter;
private int mCapacity; private int mCapacity;
private int mAverageCurrent; private int mAverageCurrent;
private FakeAndroidBatteryManager() {
super(null);
}
@Override @Override
public int getIntProperty(int id) { public int getIntProperty(int id) {
switch(id) { switch(id) {
...@@ -65,30 +67,30 @@ public class BatteryStatusManagerTest extends AndroidTestCase { ...@@ -65,30 +67,30 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
return 0; return 0;
} }
public void setIntProperty(int id, int value) { public FakeAndroidBatteryManager setIntProperty(int id, int value) {
switch(id) { switch(id) {
case BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER : case BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER :
mChargeCounter = value; mChargeCounter = value;
return; return this;
case BatteryManager.BATTERY_PROPERTY_CAPACITY: case BatteryManager.BATTERY_PROPERTY_CAPACITY:
mCapacity = value; mCapacity = value;
return; return this;
case BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE: case BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE:
mAverageCurrent = value; mAverageCurrent = value;
return; return this;
} }
fail(); fail();
return this;
} }
} }
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
initializeManager(null); initializeBatteryManager(null);
} }
public void initializeManager(BatteryManagerForTesting managerForTesting) { public void initializeBatteryManager(FakeAndroidBatteryManager managerForTesting) {
mLollipopManager = managerForTesting;
mManager = BatteryStatusManager.createBatteryStatusManagerForTesting( mManager = BatteryStatusManager.createBatteryStatusManagerForTesting(
getContext(), mCallback, managerForTesting); getContext(), mCallback, managerForTesting);
} }
...@@ -174,17 +176,17 @@ public class BatteryStatusManagerTest extends AndroidTestCase { ...@@ -174,17 +176,17 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
public void testLollipopChargingTimeEstimate() { public void testLollipopChargingTimeEstimate() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
initializeManager(new BatteryManagerForTesting());
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED); Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true); intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_USB); intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_USB);
intent.putExtra(BatteryManager.EXTRA_LEVEL, 50); intent.putExtra(BatteryManager.EXTRA_LEVEL, 50);
intent.putExtra(BatteryManager.EXTRA_SCALE, 100); intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER, 1000); initializeBatteryManager(
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY, 50); new FakeAndroidBatteryManager()
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE, 100); .setIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER, 1000)
.setIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY, 50)
.setIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE, 100));
mManager.onReceive(intent); mManager.onReceive(intent);
verifyValues(true, 0.5 * 10 * 3600, Double.POSITIVE_INFINITY, 0.5); verifyValues(true, 0.5 * 10 * 3600, Double.POSITIVE_INFINITY, 0.5);
...@@ -194,8 +196,6 @@ public class BatteryStatusManagerTest extends AndroidTestCase { ...@@ -194,8 +196,6 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
public void testLollipopDischargingTimeEstimate() { public void testLollipopDischargingTimeEstimate() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
initializeManager(new BatteryManagerForTesting());
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED); Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true); intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
intent.putExtra(BatteryManager.EXTRA_PLUGGED, 0); intent.putExtra(BatteryManager.EXTRA_PLUGGED, 0);
...@@ -203,9 +203,11 @@ public class BatteryStatusManagerTest extends AndroidTestCase { ...@@ -203,9 +203,11 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
intent.putExtra(BatteryManager.EXTRA_SCALE, 100); intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING); intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING);
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER, 1000); initializeBatteryManager(
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY, 60); new FakeAndroidBatteryManager()
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE, -100); .setIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER, 1000)
.setIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY, 60)
.setIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE, -100));
mManager.onReceive(intent); mManager.onReceive(intent);
verifyValues(false, Double.POSITIVE_INFINITY, 0.6 * 10 * 3600, 0.6); verifyValues(false, Double.POSITIVE_INFINITY, 0.6 * 10 * 3600, 0.6);
...@@ -215,8 +217,6 @@ public class BatteryStatusManagerTest extends AndroidTestCase { ...@@ -215,8 +217,6 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
public void testLollipopDischargingTimeEstimateRounding() { public void testLollipopDischargingTimeEstimateRounding() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
initializeManager(new BatteryManagerForTesting());
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED); Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.putExtra(BatteryManager.EXTRA_PRESENT, true); intent.putExtra(BatteryManager.EXTRA_PRESENT, true);
intent.putExtra(BatteryManager.EXTRA_PLUGGED, 0); intent.putExtra(BatteryManager.EXTRA_PLUGGED, 0);
...@@ -224,9 +224,11 @@ public class BatteryStatusManagerTest extends AndroidTestCase { ...@@ -224,9 +224,11 @@ public class BatteryStatusManagerTest extends AndroidTestCase {
intent.putExtra(BatteryManager.EXTRA_SCALE, 100); intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING); intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_NOT_CHARGING);
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER, 1999); initializeBatteryManager(
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY, 90); new FakeAndroidBatteryManager()
mLollipopManager.setIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE, -1000); .setIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER, 1999)
.setIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY, 90)
.setIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE, -1000));
mManager.onReceive(intent); mManager.onReceive(intent);
verifyValues(false, Double.POSITIVE_INFINITY, Math.floor(0.9 * 1.999 * 3600), 0.9); verifyValues(false, Double.POSITIVE_INFINITY, Math.floor(0.9 * 1.999 * 3600), 0.9);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment