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

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

Fix testGetSettingsContextOnDualDisplayContent flakiness (2)

This is the follow-up CL of [1].

The rare flakiness might happen if we verifying onConfigurationChanged
after placeImeContainer but not comes in time after invocation.

Also, using atLeastOnce might not precide since we don't clear the
previous invocation with Mockito.clearInvications() before the next
verification. Typically, there is only one onConfigurationChanged
happens on both IME container and WindowTokenClient side after
the IME container changed.

To make the test more robost, we can use
verify(..., timeOut(WAIT_TIMEOUT_MS)) with clearng the previous
invocation to improve the above cases.

[1]: Ia915362ff6d81cfb1eb39f426cbf41355c12fa05

Bug: 215874086
Test: Test: atest InputMethodMenuControllerTest#\
   testGetSettingsContextOnDualDisplayContent --rerun-until-failure 100

Change-Id: I50429e09f190bdbea873fc3c0d6128bb44bff321
parent ed0e1218
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -30,8 +30,9 @@ 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.clearInvocations;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;

import android.app.ActivityThread;
@@ -71,6 +72,8 @@ public class InputMethodDialogWindowContextTest extends WindowTestsBase {
    private IWindowManager mIWindowManager;
    private DisplayManagerGlobal mDisplayManagerGlobal;

    private static final int WAIT_TIMEOUT_MS = 1000;

    @Before
    public void setUp() throws Exception {
        // Let the Display be created with the DualDisplay policy.
@@ -142,19 +145,22 @@ public class InputMethodDialogWindowContextTest extends WindowTestsBase {

        mSecondaryDisplay.mFirstRoot.placeImeContainer(imeContainer);

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

        // Clear the previous invocation histories in case we may count the previous
        // onConfigurationChanged invocation into the next verification.
        clearInvocations(tokenClient, imeContainer);
        mSecondaryDisplay.mSecondRoot.placeImeContainer(imeContainer);

        verify(imeContainer, atLeastOnce()).onConfigurationChanged(
        verify(imeContainer, timeout(WAIT_TIMEOUT_MS)).onConfigurationChanged(
                eq(mSecondaryDisplay.mSecondRoot.getConfiguration()));
        verify(tokenClient, atLeastOnce()).onConfigurationChanged(
        verify(tokenClient, timeout(WAIT_TIMEOUT_MS)).onConfigurationChanged(
                eq(mSecondaryDisplay.mSecondRoot.getConfiguration()),
                eq(mSecondaryDisplay.mDisplayId));
        assertThat(imeContainer.getRootDisplayArea()).isEqualTo(mSecondaryDisplay.mSecondRoot);