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

Commit 9600d66d authored by Ming-Shin Lu's avatar Ming-Shin Lu
Browse files

Fix testGetSettingsContextOnDualDisplayContent flakiness

The test is to verify the window configuration of the IME menu context
(made by createWindowContext from SystemUiContext) is same as the IME
containter's bounds that placed on the given display area,

In case WindowTokenClient#onConfigurationChanged may come after the
server side's configuration change (Since it's the async call),
before calling assertImeSwitchContextMetricsValidity,
we have to verify both server and client side has received the
onConfigurationChanged callback to prevent the test flakiness.

Fix: 215874086
Test: atest InputMethodMenuControllerTest#\
    testGetSettingsContextOnDualDisplayContent --rerun-until-failure 20

Change-Id: Ia915362ff6d81cfb1eb39f426cbf41355c12fa05
parent da433c60
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -26,11 +26,14 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;

import android.app.ActivityThread;
import android.content.Context;
@@ -43,6 +46,7 @@ import android.view.Display;
import android.view.IWindowManager;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.window.WindowTokenClient;

import com.android.server.inputmethod.InputMethodManagerService;
import com.android.server.inputmethod.InputMethodMenuController;
@@ -130,15 +134,31 @@ public class InputMethodMenuControllerTest extends WindowTestsBase {
    @Test
    public void testGetSettingsContextOnDualDisplayContent() {
        final Context context = mController.getSettingsContext(mSecondaryDisplay.getDisplayId());
        final WindowTokenClient tokenClient = (WindowTokenClient) context.getWindowContextToken();
        assertNotNull(tokenClient);
        spyOn(tokenClient);

        final DisplayArea.Tokens imeContainer = mSecondaryDisplay.getImeContainer();
        spyOn(imeContainer);
        assertThat(imeContainer.getRootDisplayArea()).isEqualTo(mSecondaryDisplay);

        mSecondaryDisplay.mFirstRoot.placeImeContainer(imeContainer);

        verify(imeContainer, atLeastOnce()).onConfigurationChanged(
                eq(mSecondaryDisplay.mFirstRoot.getConfiguration()));
        verify(tokenClient, atLeastOnce()).onConfigurationChanged(
                eq(mSecondaryDisplay.mFirstRoot.getConfiguration()),
                eq(mSecondaryDisplay.mDisplayId));
        assertThat(imeContainer.getRootDisplayArea()).isEqualTo(mSecondaryDisplay.mFirstRoot);
        assertImeSwitchContextMetricsValidity(context, mSecondaryDisplay);

        mSecondaryDisplay.mSecondRoot.placeImeContainer(imeContainer);

        verify(imeContainer, atLeastOnce()).onConfigurationChanged(
                eq(mSecondaryDisplay.mSecondRoot.getConfiguration()));
        verify(tokenClient, atLeastOnce()).onConfigurationChanged(
                eq(mSecondaryDisplay.mSecondRoot.getConfiguration()),
                eq(mSecondaryDisplay.mDisplayId));
        assertThat(imeContainer.getRootDisplayArea()).isEqualTo(mSecondaryDisplay.mSecondRoot);
        assertImeSwitchContextMetricsValidity(context, mSecondaryDisplay);
    }