diff options
author | 2025-02-05 17:58:34 +0100 | |
---|---|---|
committer | 2025-02-05 21:37:26 +0100 | |
commit | 38633894c85feca89437b00cd7ad9c01c75376da (patch) | |
tree | 1418486cfcc525946a0db56853db4b432387aebb | |
parent | 5aefade7285b6524106d67ff5d6538371a624d20 (diff) |
Wait for activity to be ready for input injection
In InputMethodServiceTest we verify the behaviour of short clicking and
long clicking on the IME back button and the IME Switcher button, and we
verify that the TestActivity is focused before starting the test.
However, in some cases the test still fails with the input_interaction
going to the NotificationShade window. This adds an extra assertion that
the Activity is ready for input injection, which should detect this case
early and provide a more explicit signal.
Flag: EXEMPT testfix
Bug: 394240124
Test: atest InputMethodServiceTest#testShowHideKeyboard_byUserAction
Change-Id: I90704eccde26115c9da746742f3d74ec3a00021e
-rw-r--r-- | services/tests/InputMethodSystemServerTests/Android.bp | 21 | ||||
-rw-r--r-- | services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java | 26 |
2 files changed, 37 insertions, 10 deletions
diff --git a/services/tests/InputMethodSystemServerTests/Android.bp b/services/tests/InputMethodSystemServerTests/Android.bp index da58aa1f6c66..de5f6ac0bf1e 100644 --- a/services/tests/InputMethodSystemServerTests/Android.bp +++ b/services/tests/InputMethodSystemServerTests/Android.bp @@ -34,24 +34,24 @@ android_test { static_libs: [ "androidx.test.core", - "androidx.test.runner", - "androidx.test.espresso.core", "androidx.test.espresso.contrib", + "androidx.test.espresso.core", "androidx.test.ext.truth", + "androidx.test.runner", "frameworks-base-testutils", "mockito-target-extended-minus-junit4", "platform-test-annotations", "ravenwood-junit", - "services.core", "service-permission.stubs.system_server", + "services.core", "servicestests-core-utils", "servicestests-utils-mockito-extended", "truth", ], libs: [ - "android.test.mock.stubs.system", "android.test.base.stubs.system", + "android.test.mock.stubs.system", "android.test.runner.stubs.system", ], @@ -103,27 +103,28 @@ android_test { test_config: "src/com/android/inputmethodservice/AndroidTest.xml", static_libs: [ + "SimpleImeImsLib", + "SimpleImeTestingLib", "androidx.test.core", - "androidx.test.runner", - "androidx.test.espresso.core", "androidx.test.espresso.contrib", + "androidx.test.espresso.core", "androidx.test.ext.truth", + "androidx.test.runner", + "cts-wm-util", "frameworks-base-testutils", "mockito-target-extended-minus-junit4", "platform-test-annotations", "ravenwood-junit", - "services.core", "service-permission.stubs.system_server", + "services.core", "servicestests-core-utils", "servicestests-utils-mockito-extended", "truth", - "SimpleImeTestingLib", - "SimpleImeImsLib", ], libs: [ - "android.test.mock.stubs.system", "android.test.base.stubs.system", + "android.test.mock.stubs.system", "android.test.runner.stubs.system", ], diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java index 0f4e39511796..8a52d46f9f0a 100644 --- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java +++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java @@ -38,6 +38,7 @@ import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.provider.Settings; +import android.server.wm.WindowManagerStateHelper; import android.util.Log; import android.view.WindowManagerGlobal; import android.view.WindowManagerPolicyConstants; @@ -63,6 +64,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestName; import org.junit.runner.RunWith; import java.util.Objects; @@ -86,11 +88,16 @@ public class InputMethodServiceTest { private static final String DISABLE_SHOW_IME_WITH_HARD_KEYBOARD_CMD = "settings put secure " + Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD + " 0"; + private final WindowManagerStateHelper mWmState = new WindowManagerStateHelper(); + private final DeviceFlagsValueProvider mFlagsValueProvider = new DeviceFlagsValueProvider(); @Rule public final CheckFlagsRule mCheckFlagsRule = new CheckFlagsRule(mFlagsValueProvider); + @Rule + public final TestName mName = new TestName(); + private Instrumentation mInstrumentation; private UiDevice mUiDevice; private Context mContext; @@ -154,6 +161,8 @@ public class InputMethodServiceTest { */ @Test public void testShowHideKeyboard_byUserAction() { + waitUntilActivityReadyForInputInjection(mActivity); + setShowImeWithHardKeyboard(true /* enabled */); // Performs click on EditText to bring up the IME. @@ -867,6 +876,8 @@ public class InputMethodServiceTest { assumeTrue("Must have a navigation bar", hasNavigationBar()); assumeTrue("Must be in gesture navigation mode", isGestureNavEnabled()); + waitUntilActivityReadyForInputInjection(mActivity); + setShowImeWithHardKeyboard(true /* enabled */); verifyInputViewStatusOnMainSync( @@ -901,6 +912,8 @@ public class InputMethodServiceTest { assumeTrue("Must have a navigation bar", hasNavigationBar()); assumeTrue("Must be in gesture navigation mode", isGestureNavEnabled()); + waitUntilActivityReadyForInputInjection(mActivity); + setShowImeWithHardKeyboard(true /* enabled */); verifyInputViewStatusOnMainSync( @@ -936,6 +949,8 @@ public class InputMethodServiceTest { assumeTrue("Must have a navigation bar", hasNavigationBar()); assumeTrue("Must be in gesture navigation mode", isGestureNavEnabled()); + waitUntilActivityReadyForInputInjection(mActivity); + setShowImeWithHardKeyboard(true /* enabled */); verifyInputViewStatusOnMainSync( @@ -974,6 +989,8 @@ public class InputMethodServiceTest { assumeTrue("Must have a navigation bar", hasNavigationBar()); assumeTrue("Must be in gesture navigation mode", isGestureNavEnabled()); + waitUntilActivityReadyForInputInjection(mActivity); + setShowImeWithHardKeyboard(true /* enabled */); verifyInputViewStatusOnMainSync( @@ -1143,6 +1160,15 @@ public class InputMethodServiceTest { Log.i(TAG, "Finish preparing activity with editor."); } + private void waitUntilActivityReadyForInputInjection(@NonNull TestActivity activity) { + try { + mWmState.waitUntilActivityReadyForInputInjection(activity, mInstrumentation, TAG, + "test: " + mName.getMethodName()); + } catch (InterruptedException e) { + fail("Interrupted while waiting for activity to be ready: " + e.getMessage()); + } + } + @NonNull private String getInputMethodId() { return mTargetPackageName + "/" + INPUT_METHOD_SERVICE_NAME; |