Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44409a0e authored by Charles Chen's avatar Charles Chen
Browse files

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]: f8d8aea4

fixes: 173491267
Test: atest InputMethodMenuControllerTest

Change-Id: Ie5ee0f1c781a20d0b97b1a948cb44dcb120b81ae
parent 857df8d6
Loading
Loading
Loading
Loading
+41 −3
Original line number Diff line number Diff line
@@ -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());
    }