Use the secondary display for InputMethodMenuControllerTest
After [1] merged, mDisplayContent is assigned to mDefaultDisplay
if the test is not marked as @UseTestDisplay.
However, the CL to introduce testGetSettingsContext wasn't aware of
the change and didn't test the behavior of switching displays.
This CL creates a test display and also mock some methods to
verify the behavior.
[1]: f8d8aea425
fixes: 173491267
Test: atest InputMethodMenuControllerTest
Change-Id: Ie5ee0f1c781a20d0b97b1a948cb44dcb120b81ae
This commit is contained in:
@@ -18,14 +18,28 @@ package com.android.server.wm;
|
||||
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Rect;
|
||||
import android.hardware.display.DisplayManagerGlobal;
|
||||
import android.os.IBinder;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
import android.view.Display;
|
||||
import android.view.IWindowManager;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowManagerGlobal;
|
||||
|
||||
import com.android.server.inputmethod.InputMethodManagerService;
|
||||
import com.android.server.inputmethod.InputMethodMenuController;
|
||||
@@ -45,10 +59,34 @@ import org.junit.runner.RunWith;
|
||||
public class InputMethodMenuControllerTest extends WindowTestsBase {
|
||||
|
||||
private InputMethodMenuController mController;
|
||||
private TestDisplayContent mSecondaryDisplay;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
public void setUp() throws Exception {
|
||||
mController = new InputMethodMenuController(mock(InputMethodManagerService.class));
|
||||
|
||||
// Mock addWindowTokenWithOptions to create a test window token.
|
||||
IWindowManager wms = WindowManagerGlobal.getWindowManagerService();
|
||||
spyOn(wms);
|
||||
doAnswer(invocation -> {
|
||||
Object[] args = invocation.getArguments();
|
||||
final IBinder token = (IBinder) args[0];
|
||||
final int windowType = (int) args[1];
|
||||
new WindowToken(mWm, token, windowType, true /* persistOnEmpty */,
|
||||
mDefaultDisplay, true /* ownerCanManageAppTokens */, 1000 /* ownerUid */,
|
||||
false /* roundedCornerOverlay */, true /* fromClientToken */);
|
||||
return WindowManagerGlobal.ADD_OKAY;
|
||||
}).when(wms).addWindowTokenWithOptions(any(), anyInt(), anyInt(), any(), anyString());
|
||||
|
||||
mSecondaryDisplay = new TestDisplayContent.Builder(mAtm, 1000, 1000).build();
|
||||
|
||||
// Mock DisplayManagerGlobal to return test display when obtaining Display instance.
|
||||
final int displayId = mSecondaryDisplay.getDisplayId();
|
||||
final Display display = mSecondaryDisplay.getDisplay();
|
||||
DisplayManagerGlobal displayManagerGlobal = DisplayManagerGlobal.getInstance();
|
||||
spyOn(displayManagerGlobal);
|
||||
doReturn(display).when(displayManagerGlobal).getCompatibleDisplay(eq(displayId),
|
||||
(Resources) any());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -60,9 +98,9 @@ public class InputMethodMenuControllerTest extends WindowTestsBase {
|
||||
// Obtain the context again and check they are the same instance and match the display
|
||||
// metrics of the secondary display.
|
||||
final Context contextOnSecondaryDisplay = mController.getSettingsContext(
|
||||
mDisplayContent.getDisplayId());
|
||||
mSecondaryDisplay.getDisplayId());
|
||||
|
||||
assertImeSwitchContextMetricsValidity(contextOnSecondaryDisplay, mDisplayContent);
|
||||
assertImeSwitchContextMetricsValidity(contextOnSecondaryDisplay, mSecondaryDisplay);
|
||||
assertThat(contextOnDefaultDisplay.getWindowContextToken())
|
||||
.isEqualTo(contextOnSecondaryDisplay.getWindowContextToken());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user