| Index: android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/ActionModeTest.java
|
| diff --git a/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/ActionModeTest.java b/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/ActionModeTest.java
|
| index efba68533f5c1d3d5c8ac1051fb52b3296217ec9..f7269eb8f496743e8acef9132a2e849e0daf9f91 100644
|
| --- a/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/ActionModeTest.java
|
| +++ b/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/ActionModeTest.java
|
| @@ -41,17 +41,16 @@
|
|
|
| import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
|
|
|
| +import android.animation.ValueAnimator;
|
| import android.app.Activity;
|
| import android.app.Instrumentation;
|
| import android.content.Intent;
|
| import android.os.Build;
|
| import android.support.test.InstrumentationRegistry;
|
| -import android.support.test.espresso.Espresso;
|
| -import android.support.test.espresso.IdlingResource;
|
| -import android.support.test.espresso.IdlingResource.ResourceCallback;
|
| import android.support.test.espresso.NoMatchingViewException;
|
| import android.support.test.espresso.PerformException;
|
| import android.support.test.espresso.Root;
|
| +import android.support.test.espresso.ViewAction;
|
| import android.support.test.espresso.action.GeneralClickAction;
|
| import android.support.test.espresso.action.GeneralLocation;
|
| import android.support.test.espresso.action.Press;
|
| @@ -69,17 +68,19 @@
|
| import org.hamcrest.Description;
|
| import org.hamcrest.Matcher;
|
| import org.hamcrest.TypeSafeMatcher;
|
| -import org.junit.After;
|
| import org.junit.Before;
|
| import org.junit.Rule;
|
| import org.junit.Test;
|
| import org.junit.runner.RunWith;
|
|
|
| +import org.chromium.base.Log;
|
| import org.chromium.base.test.BaseJUnit4ClassRunner;
|
| import org.chromium.webview_ui_test.R;
|
| import org.chromium.webview_ui_test.WebViewUiTestActivity;
|
| import org.chromium.webview_ui_test.test.util.UseLayout;
|
| import org.chromium.webview_ui_test.test.util.WebViewUiTestRule;
|
| +
|
| +import java.lang.reflect.Method;
|
|
|
| /**
|
| * Tests for WebView ActionMode.
|
| @@ -103,8 +104,6 @@
|
| @Rule
|
| public WebViewUiTestRule mWebViewActivityRule =
|
| new WebViewUiTestRule(WebViewUiTestActivity.class);
|
| -
|
| - private ActionBarIdlingResource mActionBarIdlingResource;
|
|
|
| @Before
|
| public void setUp() {
|
| @@ -115,13 +114,21 @@
|
| onWebView(withId(R.id.webview))
|
| .withElement(findElement(Locator.TAG_NAME, "p"))
|
| .check(webMatches(getText(), containsString("Hello world")));
|
| - mActionBarIdlingResource = new ActionBarIdlingResource();
|
| - Espresso.registerIdlingResources(mActionBarIdlingResource);
|
| - }
|
| -
|
| - @After
|
| - public void tearDown() {
|
| - Espresso.unregisterIdlingResources(mActionBarIdlingResource);
|
| + disableAnimation();
|
| + }
|
| +
|
| + /**
|
| + * Only way to disable popup animations.
|
| + */
|
| + private void disableAnimation() {
|
| + try {
|
| + // This is a hidden method to disable animations. It is also being used by CTS tests.
|
| + Method setDurationScale = ValueAnimator.class.getMethod(
|
| + "setDurationScale", float.class);
|
| + setDurationScale.invoke(null, 0.0f);
|
| + } catch (Exception e) {
|
| + Log.e(TAG, "Couldn't disable animation", e);
|
| + }
|
| }
|
|
|
| /**
|
| @@ -131,9 +138,9 @@
|
| @SmallTest
|
| @UseLayout("edittext_webview")
|
| public void testCopyPaste() {
|
| - longClickOnLastWord(R.id.webview);
|
| + onView(withId(R.id.webview)).perform(longClickOnLastWord());
|
| clickPopupAction(COPY_ACTION);
|
| - longClickOnLastWord(R.id.edittext);
|
| + onView(withId(R.id.edittext)).perform(longClickOnLastWord());
|
| clickPopupAction(PASTE_ACTION);
|
| onView(withId(R.id.edittext))
|
| .check(matches(withText("world")));
|
| @@ -146,10 +153,10 @@
|
| @SmallTest
|
| @UseLayout("edittext_webview")
|
| public void testSelectAll() {
|
| - longClickOnLastWord(R.id.webview);
|
| + onView(withId(R.id.webview)).perform(longClickOnLastWord());
|
| clickPopupAction("Select all");
|
| clickPopupAction(COPY_ACTION);
|
| - longClickOnLastWord(R.id.edittext);
|
| + onView(withId(R.id.edittext)).perform(longClickOnLastWord());
|
| clickPopupAction(PASTE_ACTION);
|
| onView(withId(R.id.edittext))
|
| .check(matches(withText("Hello world")));
|
| @@ -166,7 +173,7 @@
|
| intending(anyIntent())
|
| .respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, new Intent()));
|
|
|
| - longClickOnLastWord(R.id.webview);
|
| + onView(withId(R.id.webview)).perform(longClickOnLastWord());
|
| clickPopupAction(SHARE_ACTION);
|
|
|
| intended(allOf(hasAction(Intent.ACTION_CHOOSER),
|
| @@ -187,7 +194,7 @@
|
| Intents.init();
|
| intending(anyIntent())
|
| .respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, new Intent()));
|
| - longClickOnLastWord(R.id.webview);
|
| + onView(withId(R.id.webview)).perform(longClickOnLastWord());
|
| clickPopupAction(WEB_SEARCH_ACTION);
|
| intended(allOf(hasAction(Intent.ACTION_WEB_SEARCH),
|
| hasExtras(allOf(hasEntry("com.android.browser.application_id",
|
| @@ -206,7 +213,7 @@
|
| public void testAssist() {
|
| // TODO(aluo): Get SdkSuppress to work with the test runner
|
| if (Build.VERSION.SDK_INT < 24) return;
|
| - longClickOnLastWord(R.id.webview);
|
| + onView(withId(R.id.webview)).perform(longClickOnLastWord());
|
| clickPopupAction(ASSIST_ACTION);
|
| UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
|
| UiObject assistUi = device.findObject(new UiSelector().packageName(QUICK_SEARCH_BOX_PKG));
|
| @@ -223,7 +230,7 @@
|
| if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
| try {
|
| // On L and lower, use the espresso DEFAULT root matcher if ActionBar is detected
|
| - onView(withClassName(endsWith("ActionBarContextView")))
|
| + onView(withClassName(endsWith("widget.ActionBarContextView")))
|
| .check(matches(isDisplayed()));
|
| rootMatcher = DEFAULT;
|
| } catch (NoMatchingViewException | AssertionFailedError e) {
|
| @@ -234,30 +241,27 @@
|
| // On M and above, can use the decoreView matcher
|
| rootMatcher = withDecorView(isEnabled());
|
| }
|
| -
|
| try {
|
| onView(anyOf(withText(name), withContentDescription(name)))
|
| .inRoot(rootMatcher)
|
| .perform(click());
|
| - } catch (PerformException | NoMatchingViewException e) {
|
| + } catch (PerformException e) {
|
| // Take care of case when the item is in the overflow menu
|
| onView(withContentDescription(MORE_OPTIONS_ACTION))
|
| - .inRoot(rootMatcher)
|
| + .inRoot(withDecorView(isEnabled()))
|
| .perform(click());
|
| onData(new MenuItemMatcher(equalTo(name))).inRoot(rootMatcher).perform(click());
|
| }
|
| }
|
|
|
| /**
|
| - * Perform a view action that clicks on the last word and start the idling resource
|
| - * to wait for completion of the popup menu
|
| - */
|
| - private final void longClickOnLastWord(int viewId) {
|
| + * This view action clicks on center right of a view to select the last word
|
| + */
|
| + private static final ViewAction longClickOnLastWord() {
|
| // TODO(aluo): This function is not guaranteed to click on element. Change to
|
| // implementation that gets bounding box for elements using Javascript.
|
| - onView(withId(viewId)).perform(actionWithAssertions(
|
| - new GeneralClickAction(Tap.LONG, GeneralLocation.CENTER_RIGHT, Press.FINGER)));
|
| - mActionBarIdlingResource.start();
|
| + return actionWithAssertions(
|
| + new GeneralClickAction(Tap.LONG, GeneralLocation.CENTER_RIGHT, Press.FINGER));
|
| }
|
|
|
| /**
|
| @@ -281,38 +285,4 @@
|
| description.appendDescriptionOf(mTitleMatcher);
|
| }
|
| }
|
| -
|
| - private class ActionBarIdlingResource implements IdlingResource {
|
| - private boolean mActionStarting;
|
| - private ResourceCallback mResourceCallback;
|
| -
|
| - ActionBarIdlingResource() {
|
| - mActionStarting = false;
|
| - mResourceCallback = null;
|
| - }
|
| -
|
| - @Override
|
| - public String getName() {
|
| - return "ActionBarIdlingResource";
|
| - }
|
| -
|
| - @Override
|
| - public boolean isIdleNow() {
|
| - if (!mActionStarting) return true;
|
| - if (mWebViewActivityRule.isActionBarDisplayed()) {
|
| - mActionStarting = false;
|
| - if (mResourceCallback != null) mResourceCallback.onTransitionToIdle();
|
| - }
|
| - return !mActionStarting;
|
| - }
|
| -
|
| - @Override
|
| - public void registerIdleTransitionCallback(ResourceCallback callback) {
|
| - mResourceCallback = callback;
|
| - }
|
| -
|
| - public void start() {
|
| - mActionStarting = true;
|
| - }
|
| - }
|
| }
|
|
|