summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiddle Hsu <riddlehsu@google.com>2022-03-04 05:32:01 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-03-04 05:32:01 +0000
commita29bc7bbd88046a25ef1abf60a9091afd515b26a (patch)
tree74dd2f5bd0f0875ab60048b869edcc609d5a1dd2
parent7ee20f28301596f1825e7ff8fedef3ee700e6d08 (diff)
parentb5b32d479d44c55922e06395861c21b0ea6bd024 (diff)
downloadbase-a29bc7bbd88046a25ef1abf60a9091afd515b26a.tar.gz
Merge "Fix NPE in WakeLock#finalize for unit test"
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java3
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java19
2 files changed, 19 insertions, 3 deletions
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
index 741f33f8aca7..87c75bef85aa 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
@@ -267,7 +267,8 @@ public class ActivityTaskManagerServiceTests extends WindowTestsBase {
@Test
public void testUpdateSleep() {
doCallRealMethod().when(mWm.mRoot).hasAwakeDisplay();
- mSupervisor.mGoingToSleepWakeLock = mock(PowerManager.WakeLock.class);
+ mSupervisor.mGoingToSleepWakeLock =
+ mSystemServicesTestRule.createStubbedWakeLock(true /* needVerification */);
final Task rootHomeTask = mWm.mRoot.getDefaultTaskDisplayArea().getOrCreateRootHomeTask();
final ActivityRecord homeActivity = new ActivityBuilder(mAtm).setTask(rootHomeTask).build();
final ActivityRecord topActivity = new ActivityBuilder(mAtm).setCreateTask(true).build();
diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
index 8e7ba4bc3293..0b2399b18239 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
@@ -102,6 +102,10 @@ public class SystemServicesTestRule implements TestRule {
static int sNextTaskId = 100;
private static final int[] TEST_USER_PROFILE_IDS = {};
+ /** Use a real static object so there won't be NPE in finalize() after clearInlineMocks(). */
+ private static final PowerManager.WakeLock sWakeLock = getInstrumentation().getContext()
+ .getSystemService(PowerManager.class).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
+ private PowerManager.WakeLock mStubbedWakeLock;
private Description mDescription;
private Context mContext;
@@ -196,7 +200,8 @@ public class SystemServicesTestRule implements TestRule {
// Prevent "WakeLock finalized while still held: SCREEN_FROZEN".
final PowerManager pm = mock(PowerManager.class);
doReturn(pm).when(mContext).getSystemService(eq(Context.POWER_SERVICE));
- doReturn(mock(PowerManager.WakeLock.class)).when(pm).newWakeLock(anyInt(), anyString());
+ mStubbedWakeLock = createStubbedWakeLock(false /* needVerification */);
+ doReturn(mStubbedWakeLock).when(pm).newWakeLock(anyInt(), anyString());
// DisplayManagerInternal
final DisplayManagerInternal dmi = mock(DisplayManagerInternal.class);
@@ -403,6 +408,16 @@ public class SystemServicesTestRule implements TestRule {
return mPowerManagerWrapper;
}
+ /** Creates a no-op wakelock object. */
+ PowerManager.WakeLock createStubbedWakeLock(boolean needVerification) {
+ if (needVerification) {
+ return mock(PowerManager.WakeLock.class, Mockito.withSettings()
+ .spiedInstance(sWakeLock).defaultAnswer(Mockito.RETURNS_DEFAULTS));
+ }
+ return mock(PowerManager.WakeLock.class, Mockito.withSettings()
+ .spiedInstance(sWakeLock).stubOnly());
+ }
+
void setSurfaceFactory(Supplier<Surface> factory) {
mSurfaceFactory = factory;
}
@@ -558,7 +573,7 @@ public class SystemServicesTestRule implements TestRule {
// unit test version does not handle launch wake lock
doNothing().when(this).acquireLaunchWakelock();
- mLaunchingActivityWakeLock = mock(PowerManager.WakeLock.class);
+ mLaunchingActivityWakeLock = mStubbedWakeLock;
initialize();