diff options
author | Riddle Hsu <riddlehsu@google.com> | 2022-03-04 05:32:01 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-03-04 05:32:01 +0000 |
commit | a29bc7bbd88046a25ef1abf60a9091afd515b26a (patch) | |
tree | 74dd2f5bd0f0875ab60048b869edcc609d5a1dd2 | |
parent | 7ee20f28301596f1825e7ff8fedef3ee700e6d08 (diff) | |
parent | b5b32d479d44c55922e06395861c21b0ea6bd024 (diff) | |
download | base-a29bc7bbd88046a25ef1abf60a9091afd515b26a.tar.gz |
Merge "Fix NPE in WakeLock#finalize for unit test"
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java | 3 | ||||
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java | 19 |
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(); |