Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3920)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java

Issue 2894073002: Prevent real IME from interfering with UrlBarTest (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java
index 67fb5b24da8c5a87c38a0fe61644193fdfc08cc6..68eb1c3a5415dea9bb65d87e0add53c0a1e88357 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/UrlBarTest.java
@@ -17,6 +17,7 @@ import android.text.Editable;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.inputmethod.BaseInputConnection;
+import android.view.inputmethod.InputMethodManager;
import org.junit.Assert;
import org.junit.Before;
@@ -66,6 +67,43 @@ public class UrlBarTest {
+ new String(new char[9000]).replace('\0', 'u')
+ "ge!";
+ // Prevent real keyboard app from interfering with test result. After calling this function,
+ // real keyboard app will interact with null InputConnection while the test can still interact
+ // with BaseInputConnection's method and thus affects EditText's Editable through
+ // {@link UrlBar#getInputConnection()}. https://crbug.com/723901 for details.
+ private void startIgnoringImeUntilRestart(final UrlBar urlBar) {
+ urlBar.setIgnoreImeForTest(true);
+ InputMethodManager imm =
+ (InputMethodManager) mActivityTestRule.getActivity().getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ imm.restartInput(urlBar);
+ }
+
+ private void toggleFocusAndIgnoreImeOperations(final UrlBar urlBar, final boolean gainFocus) {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ OmniboxTestUtils.toggleUrlBarFocus(urlBar, gainFocus);
+ if (gainFocus) startIgnoringImeUntilRestart(urlBar);
+ }
+ });
+ }
+
+ private void runInputConnectionMethodOnUiThreadBlocking(final Runnable runnable) {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ UrlBar urlBar = getUrlBar();
+ // Note: in order for this to work correctly, the following conditions should be met
+ // 1) Unset and set ignoreImeForTest within one UI loop.
+ // 2) Do not restartInput() in between.
+ urlBar.setIgnoreImeForTest(false);
+ runnable.run();
+ urlBar.setIgnoreImeForTest(true);
+ }
+ });
+ }
+
private UrlBar getUrlBar() {
return (UrlBar) mActivityTestRule.getActivity().findViewById(R.id.url_bar);
}
@@ -186,7 +224,7 @@ public class UrlBarTest {
mActivityTestRule.startMainActivityOnBlankPage();
stubLocationBarAutocomplete();
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
// Verify that setting a new string will clear the autocomplete.
setTextAndVerifyNoAutocomplete(urlBar, "test");
@@ -269,9 +307,8 @@ public class UrlBarTest {
public void testAutocompleteUpdatedOnSelection() throws InterruptedException, TimeoutException {
mActivityTestRule.startMainActivityOnBlankPage();
stubLocationBarAutocomplete();
-
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
// Verify that setting a selection before the autocomplete clears it.
verifySelectionState("test", "ing is fun", 1, 1, false, "test", "test", true, "test");
@@ -354,7 +391,7 @@ public class UrlBarTest {
setAutocompleteController(controller);
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
@@ -384,7 +421,7 @@ public class UrlBarTest {
stubLocationBarAutocomplete();
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
setTextAndVerifyNoAutocomplete(urlBar, "test");
setAutocomplete(urlBar, "test", "ing");
@@ -404,8 +441,13 @@ public class UrlBarTest {
};
setAutocompleteController(controller);
- KeyUtils.singleKeyEventView(
- InstrumentationRegistry.getInstrumentation(), urlBar, KeyEvent.KEYCODE_DEL);
+ runInputConnectionMethodOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ KeyUtils.singleKeyEventView(
+ InstrumentationRegistry.getInstrumentation(), urlBar, KeyEvent.KEYCODE_DEL);
+ }
+ });
CriteriaHelper.pollUiThread(Criteria.equals("test", new Callable<String>() {
@Override
@@ -427,7 +469,7 @@ public class UrlBarTest {
mActivityTestRule.startMainActivityOnBlankPage();
stubLocationBarAutocomplete();
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
setTextAndVerifyNoAutocomplete(urlBar, "test");
setAutocomplete(urlBar, "test", "ing is fun");
@@ -477,7 +519,7 @@ public class UrlBarTest {
setAutocompleteController(controller);
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
setTextAndVerifyNoAutocomplete(urlBar, "test");
setAutocomplete(urlBar, "test", "ing is fun");
@@ -518,7 +560,7 @@ public class UrlBarTest {
stubLocationBarAutocomplete();
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
OmniboxTestUtils.waitForFocusAndKeyboardActive(urlBar, true);
// Valid case (cursor at the end of text, single character, matches previous autocomplete).
@@ -594,7 +636,7 @@ public class UrlBarTest {
stubLocationBarAutocomplete();
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
OmniboxTestUtils.waitForFocusAndKeyboardActive(urlBar, true);
setTextAndVerifyNoAutocomplete(urlBar, "a");
@@ -626,12 +668,12 @@ public class UrlBarTest {
mActivityTestRule.startMainActivityOnBlankPage();
stubLocationBarAutocomplete();
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
// Verify that defocusing the UrlBar clears the autocomplete.
setTextAndVerifyNoAutocomplete(urlBar, "test");
setAutocomplete(urlBar, "test", "ing is fun");
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, false);
+ toggleFocusAndIgnoreImeOperations(urlBar, false);
AutocompleteState state = getAutocompleteState(urlBar, null);
Assert.assertFalse(state.hasAutocomplete);
}
@@ -645,7 +687,7 @@ public class UrlBarTest {
mActivityTestRule.startMainActivityOnBlankPage();
stubLocationBarAutocomplete();
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
OmniboxTestUtils.waitForFocusAndKeyboardActive(urlBar, true);
setTextAndVerifyNoAutocomplete(urlBar, "test");
@@ -678,7 +720,7 @@ public class UrlBarTest {
stubLocationBarAutocomplete();
final UrlBar urlBar = getUrlBar();
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
OmniboxTestUtils.waitForFocusAndKeyboardActive(urlBar, true);
Assert.assertNotNull(urlBar.getInputConnection());
@@ -796,7 +838,7 @@ public class UrlBarTest {
UrlBar urlBar = getUrlBar();
Assert.assertNotNull(urlBar);
- OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
+ toggleFocusAndIgnoreImeOperations(urlBar, true);
OmniboxTestUtils.waitForFocusAndKeyboardActive(urlBar, true);
}
@@ -806,7 +848,7 @@ public class UrlBarTest {
@RetryOnFailure
public void testCopyHuge() throws InterruptedException {
mActivityTestRule.startMainActivityWithURL(HUGE_URL);
- OmniboxTestUtils.toggleUrlBarFocus(getUrlBar(), true);
+ toggleFocusAndIgnoreImeOperations(getUrlBar(), true);
Assert.assertEquals(HUGE_URL, copyUrlToClipboard(android.R.id.copy));
}
@@ -816,7 +858,7 @@ public class UrlBarTest {
@RetryOnFailure
public void testCutHuge() throws InterruptedException {
mActivityTestRule.startMainActivityWithURL(HUGE_URL);
- OmniboxTestUtils.toggleUrlBarFocus(getUrlBar(), true);
+ toggleFocusAndIgnoreImeOperations(getUrlBar(), true);
Assert.assertEquals(HUGE_URL, copyUrlToClipboard(android.R.id.cut));
}

Powered by Google App Engine
This is Rietveld 408576698