Merge "DO NOT MERGE Fix flaky tests in OverheatAlarm feature" into pi-dev
diff --git a/packages/SystemUI/src/com/android/systemui/power/OverheatAlarmController.java b/packages/SystemUI/src/com/android/systemui/power/OverheatAlarmController.java
index db15909..9fc7ed5 100644
--- a/packages/SystemUI/src/com/android/systemui/power/OverheatAlarmController.java
+++ b/packages/SystemUI/src/com/android/systemui/power/OverheatAlarmController.java
@@ -53,7 +53,8 @@
/**
* The constructor only used to create singleton sInstance.
*/
- private OverheatAlarmController(Context context) {
+ @VisibleForTesting
+ public OverheatAlarmController(Context context) {
mVibrator = (Vibrator) context.getSystemService(VIBRATOR_SERVICE);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/OverheatAlarmControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/OverheatAlarmControllerTest.java
index 651d2b7..d828c6d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/OverheatAlarmControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/OverheatAlarmControllerTest.java
@@ -18,9 +18,13 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import android.content.Context;
+import android.os.PowerManager;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -31,56 +35,60 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
@RunWith(AndroidTestingRunner.class)
-@RunWithLooper
+@RunWithLooper(setAsMainLooper = true)
@SmallTest
-public class OverheatAlarmControllerTest extends SysuiTestCase{
- OverheatAlarmController mOverheatAlarmController;
+public class OverheatAlarmControllerTest extends SysuiTestCase {
+ @Mock
+ Context mMockContext;
+ @Mock
+ PowerManager mMockPowerManager;
+
OverheatAlarmController mSpyOverheatAlarmController;
@Before
public void setUp() {
- mOverheatAlarmController = OverheatAlarmController.getInstance(mContext);
- mSpyOverheatAlarmController = spy(mOverheatAlarmController);
+ mMockContext = mock(Context.class);
+ mMockPowerManager = mock(PowerManager.class);
+ mSpyOverheatAlarmController = spy(new OverheatAlarmController(mMockContext));
+ when(mMockContext.getSystemService(Context.POWER_SERVICE)).thenReturn(mMockPowerManager);
}
@After
public void tearDown() {
- mSpyOverheatAlarmController.stopAlarm();
+ mMockContext = null;
+ mMockPowerManager = null;
+ mSpyOverheatAlarmController = null;
}
@Test
- public void testGetInstance() {
- assertThat(mOverheatAlarmController).isNotNull();
+ public void testStartAlarm_shouldPlaySound() {
+ mSpyOverheatAlarmController.startAlarm(mMockContext);
+ verify(mSpyOverheatAlarmController).playSound(mMockContext);
}
@Test
- public void testStartAlarm_PlaySound() {
- mSpyOverheatAlarmController.startAlarm(mContext);
- verify(mSpyOverheatAlarmController).playSound(mContext);
- }
-
- @Test
- public void testStartAlarm_InitVibrate() {
- mSpyOverheatAlarmController.startAlarm(mContext);
+ public void testStartAlarm_shouldStartVibrate() {
+ mSpyOverheatAlarmController.startAlarm(mMockContext);
verify(mSpyOverheatAlarmController).startVibrate();
}
@Test
- public void testStartAlarm_StartVibrate() {
- mSpyOverheatAlarmController.startAlarm(mContext);
+ public void testStartVibrate_shouldPerformVibrate() {
+ mSpyOverheatAlarmController.startVibrate();
verify(mSpyOverheatAlarmController).performVibrate();
}
@Test
- public void testStopAlarm_StopPlayer() {
+ public void testStopAlarm_shouldStopPlay() {
mSpyOverheatAlarmController.stopAlarm();
verify(mSpyOverheatAlarmController).stopPlayer();
}
@Test
- public void testStopAlarm_StopVibrate() {
+ public void testStopAlarm_shouldStopVibrate() {
mSpyOverheatAlarmController.stopAlarm();
verify(mSpyOverheatAlarmController).stopVibrate();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
index d37c285..0ea89c5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
@@ -16,20 +16,20 @@
package com.android.systemui.power;
-import static com.google.common.truth.Truth.assertThat;
-
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import android.app.KeyguardManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.support.test.runner.AndroidJUnit4;
@@ -52,11 +52,13 @@
public static final String FORMATTED_45M = "0h 45m";
public static final String FORMATTED_HOUR = "1h 0m";
private final NotificationManager mMockNotificationManager = mock(NotificationManager.class);
+ private final KeyguardManager mMockKeyguardManager = mock(KeyguardManager.class);
private PowerNotificationWarnings mPowerNotificationWarnings, mSpyPowerNotificationWarnings;
@Before
public void setUp() throws Exception {
// Test Instance.
+ mContext.addMockSystemService(KeyguardManager.class, mMockKeyguardManager);
mContext.addMockSystemService(NotificationManager.class, mMockNotificationManager);
mPowerNotificationWarnings = new PowerNotificationWarnings(mContext);
mSpyPowerNotificationWarnings = spy(mPowerNotificationWarnings);
@@ -166,10 +168,9 @@
public void testSetOverheatAlarmDialog_Overheat_ShouldShowing() {
final boolean overheat = true;
final boolean shouldBeepSound = false;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
+ mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat, shouldBeepSound);
+ waitForIdleSync(mContext.getMainThreadHandler());
+
verify(mSpyPowerNotificationWarnings, times(1)).setOverheatAlarmDialogShowing(overheat);
verify(mSpyPowerNotificationWarnings, times(1)).setAlarmShouldSound(shouldBeepSound);
}
@@ -178,10 +179,9 @@
public void testSetOverheatAlarmDialog_Overheat_ShouldShowingWithBeepSound() {
final boolean overheat = true;
final boolean shouldBeepSound = true;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
+ mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat, shouldBeepSound);
+ waitForIdleSync(mContext.getMainThreadHandler());
+
verify(mSpyPowerNotificationWarnings, times(1)).setOverheatAlarmDialogShowing(overheat);
verify(mSpyPowerNotificationWarnings, times(1)).setAlarmShouldSound(shouldBeepSound);
}
@@ -190,10 +190,9 @@
public void testSetOverheatAlarmDialog_NotOverheat_ShouldNotShowing() {
final boolean overheat = false;
final boolean shouldBeepSound = false;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
+ mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat, shouldBeepSound);
+ waitForIdleSync(mContext.getMainThreadHandler());
+
verify(mSpyPowerNotificationWarnings, never()).setOverheatAlarmDialogShowing(overheat);
verify(mSpyPowerNotificationWarnings, never()).setAlarmShouldSound(shouldBeepSound);
}
@@ -202,105 +201,33 @@
public void testSetOverheatAlarmDialog_NotOverheat_ShouldNotAlarmBeepSound() {
final boolean overheat = false;
final boolean configBeepSound = true;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- configBeepSound));
- waitForIdleSync();
+ mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat, configBeepSound);
+ waitForIdleSync(mContext.getMainThreadHandler());
+
verify(mSpyPowerNotificationWarnings, never()).setOverheatAlarmDialogShowing(overheat);
verify(mSpyPowerNotificationWarnings, never()).setAlarmShouldSound(configBeepSound);
}
@Test
- public void testSetAlarmShouldSound_OverheatDrop_ShouldNotSound() {
- final boolean overheat = true;
- final boolean shouldBeepSound = true;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
- // First time overheat, show overheat alarm dialog with alarm beep sound
- verify(mSpyPowerNotificationWarnings, times(1)).setOverheatAlarmDialogShowing(overheat);
- verify(mSpyPowerNotificationWarnings, times(1)).setAlarmShouldSound(shouldBeepSound);
-
- // After disconnected cable or temperature drop
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(!overheat,
- !shouldBeepSound));
- waitForIdleSync();
- verify(mSpyPowerNotificationWarnings, times(1)).setOverheatAlarmDialogShowing(!overheat);
- verify(mSpyPowerNotificationWarnings, times(1)).setAlarmShouldSound(!shouldBeepSound);
- }
-
- @Test
- public void testSetAlarmShouldSound_Overheat_Twice_ShouldShowOverheatDialogAgain() {
- final boolean overheat = true;
- final boolean shouldBeepSound = true;
- // First time overheat, show mAlarmDialog and alarm beep sound
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
- verify(mSpyPowerNotificationWarnings, times(1)).setOverheatAlarmDialogShowing(overheat);
- verify(mSpyPowerNotificationWarnings, times(1)).setAlarmShouldSound(shouldBeepSound);
-
- // After disconnected cable or temperature drop, stop beep sound
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(!overheat,
- !shouldBeepSound));
- waitForIdleSync();
- verify(mSpyPowerNotificationWarnings, times(1)).setOverheatAlarmDialogShowing(!overheat);
- verify(mSpyPowerNotificationWarnings, times(1)).setAlarmShouldSound(!shouldBeepSound);
-
- // Overheat again, ensure the previous dialog do not auto-dismiss
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
- verify(mSpyPowerNotificationWarnings, times(1)).setOverheatAlarmDialogShowing(overheat);
- verify(mSpyPowerNotificationWarnings, times(1)).setAlarmShouldSound(shouldBeepSound);
- }
-
- @Test
public void testOverheatAlarmDialogShowing() {
final boolean overheat = true;
final boolean shouldBeepSound = false;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
- assertThat(mSpyPowerNotificationWarnings.mOverheatAlarmDialog).isNotNull();
- }
+ mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat, shouldBeepSound);
+ waitForIdleSync(mContext.getMainThreadHandler());
- @Test
- public void testOverheatAlarmDialogShowingWithBeepSound() {
- final boolean overheat = true;
- final boolean shouldBeepSound = true;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
- assertThat(mSpyPowerNotificationWarnings.mOverheatAlarmDialog).isNotNull();
+ verify(mSpyPowerNotificationWarnings, atLeastOnce()).setOverheatAlarmDialogShowing(
+ overheat);
}
@Test
public void testOverheatAlarmDialogNotShowing() {
final boolean overheat = false;
final boolean shouldBeepSound = false;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
- assertThat(mSpyPowerNotificationWarnings.mOverheatAlarmDialog).isNull();
+ mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat, shouldBeepSound);
+
+ waitForIdleSync(mContext.getMainThreadHandler());
+ verify(mSpyPowerNotificationWarnings, never()).setOverheatAlarmDialogShowing(
+ overheat);
}
- @Test
- public void testOverheatAlarmDialogNotShowingWithBeepSound() {
- final boolean overheat = false;
- final boolean shouldBeepSound = true;
- mContext.getMainThreadHandler().post(
- () -> mSpyPowerNotificationWarnings.notifyHighTemperatureAlarm(overheat,
- shouldBeepSound));
- waitForIdleSync();
- assertThat(mSpyPowerNotificationWarnings.mOverheatAlarmDialog).isNull();
- }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java
index 054bdee..96a9737 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java
@@ -49,6 +49,8 @@
import java.time.Duration;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -92,6 +94,11 @@
createPowerUi();
}
+ @After
+ public void tearDown() throws Exception {
+ mPowerUI = null;
+ }
+
@Test
public void testNoConfig_NoWarnings() {
setOverThreshold();
@@ -203,20 +210,6 @@
}
@Test
- public void testConfig_alarmsWithBeepSound() {
- setOverThreshold();
- final Boolean overheat = true;
- final Boolean shouldBeepSound = true;
- TestableResources resources = mContext.getOrCreateTestableResources();
- resources.addOverride(R.integer.config_showTemperatureAlarm, 1);
- resources.addOverride(R.integer.config_alarmTemperature, 58);
- resources.addOverride(R.bool.config_alarmTemperatureBeepSound, shouldBeepSound);
-
- mPowerUI.start();
- verify(mMockWarnings).notifyHighTemperatureAlarm(overheat, shouldBeepSound);
- }
-
- @Test
public void testHardPropsThrottlingThreshold_alarms() {
setThrottlingThreshold(DEFAULT_OVERHEAT_ALARM_THRESHOLD);
setOverThreshold();