Merge "Fix NPE in WakeLock#finalize for unit test" am: a29bc7bbd8 am: a0ab4f6bb2 am: d070cd48bd
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2005611 Change-Id: Iddeeb0525aa4e86294bcc91fac9e5bd188525062
This commit is contained in:
@@ -355,7 +355,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();
|
||||
|
||||
@@ -101,6 +101,10 @@ public class SystemServicesTestRule implements TestRule {
|
||||
static int sNextDisplayId = DEFAULT_DISPLAY + 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;
|
||||
@@ -194,7 +198,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);
|
||||
@@ -401,6 +406,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;
|
||||
}
|
||||
@@ -556,7 +571,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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user