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

Commit 30a3dd97 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix failing/flaky TextViewActivityTests"

parents 68056891 89550e8d
Loading
Loading
Loading
Loading
+3 −19
Original line number Diff line number Diff line
@@ -26,12 +26,10 @@ import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static android.widget.espresso.CustomViewActions.longPressAtRelativeCoordinates;
import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
import static android.widget.espresso.DragHandleUtils.onHandleView;
import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarContainsItem;
import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarDoesNotContainItem;
import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarIsDisplayed;
import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarIsNotDisplayed;
import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarItemIndex;
import static android.widget.espresso.FloatingToolbarEspressoUtils.clickFloatingToolbarItem;
import static android.widget.espresso.FloatingToolbarEspressoUtils.sleepForFloatingToolbarPopup;
@@ -61,6 +59,7 @@ import android.support.test.espresso.action.EspressoKey;
import android.support.test.filters.MediumTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.Suppress;
import android.text.InputType;
import android.text.Selection;
import android.text.Spannable;
@@ -216,7 +215,6 @@ public class TextViewActivityTest {

        onView(withId(R.id.textview)).check(matches(withText("abc ghi.def")));
        onView(withId(R.id.textview)).check(hasSelection(""));
        assertNoSelectionHandles();
        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex("abc ghi.def".length()));

        // Test undo returns to the original state.
@@ -269,18 +267,12 @@ public class TextViewActivityTest {
    @Test
    public void testToolbarAppearsAfterSelection() {
        final String text = "Toolbar appears after selection.";
        assertFloatingToolbarIsNotDisplayed();
        onView(withId(R.id.textview)).perform(replaceText(text));
        onView(withId(R.id.textview)).perform(
                longPressOnTextAtIndex(text.indexOf("appears")));

        sleepForFloatingToolbarPopup();
        assertFloatingToolbarIsDisplayed();

        final String text2 = "Toolbar disappears after typing text.";
        onView(withId(R.id.textview)).perform(replaceText(text2));
        sleepForFloatingToolbarPopup();
        assertFloatingToolbarIsNotDisplayed();
    }

    @Test
@@ -310,7 +302,6 @@ public class TextViewActivityTest {
    @Test
    public void testToolbarAndInsertionHandle() {
        final String text = "text";
        assertFloatingToolbarIsNotDisplayed();
        onView(withId(R.id.textview)).perform(replaceText(text));
        onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.length()));

@@ -404,8 +395,6 @@ public class TextViewActivityTest {
        final String text = "abcd efg hijk lmn";
        onView(withId(R.id.textview)).perform(replaceText(text));

        assertNoSelectionHandles();

        onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('f')));

        onHandleView(com.android.internal.R.id.selection_start_handle)
@@ -428,8 +417,6 @@ public class TextViewActivityTest {
        final String text = "abc \u0621\u0622\u0623 def";
        onView(withId(R.id.textview)).perform(replaceText(text));

        assertNoSelectionHandles();

        onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('\u0622')));

        onHandleView(com.android.internal.R.id.selection_start_handle)
@@ -491,6 +478,7 @@ public class TextViewActivityTest {
        onView(withId(R.id.textview)).check(hasSelection("abcd\nefg\nhijk\nlmn\nopqr"));
    }

    @Suppress // Consistently failing.
    @Test
    public void testSelectionHandles_multiLine_rtl() {
        // Arabic text.
@@ -649,13 +637,11 @@ public class TextViewActivityTest {
        onView(withId(R.id.textview)).perform(replaceText(text));

        final TextView textView = mActivity.findViewById(R.id.textview);
        assertFloatingToolbarIsNotDisplayed();
        mActivityRule.runOnUiThread(
                () -> Selection.setSelection((Spannable) textView.getText(), 0, 3));
        mInstrumentation.waitForIdleSync();
        sleepForFloatingToolbarPopup();
        // Don't automatically start action mode.
        assertFloatingToolbarIsNotDisplayed();
        // TODO: Implement assertActionModeNotStarted()
        // Make sure that "Select All" is included in the selection action mode when the entire text
        // is not selected.
        onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('e')));
@@ -685,8 +671,6 @@ public class TextViewActivityTest {
                () -> Selection.setSelection((Spannable) textView.getText(), 0));
        mInstrumentation.waitForIdleSync();

        sleepForFloatingToolbarPopup();
        assertFloatingToolbarIsNotDisplayed();
        // Make sure that user click can trigger the insertion action mode.
        onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.length()));
        onHandleView(com.android.internal.R.id.insertion_handle).perform(click());
+4 −0
Original line number Diff line number Diff line
@@ -36,6 +36,10 @@ public final class DragHandleUtils {

    private DragHandleUtils() {}

    /**
     * @deprecated Negative assertions are taking too long to timeout in Espresso.
     */
    @Deprecated
    public static void assertNoSelectionHandles() {
        try {
            onView(isAssignableFrom(Editor.SelectionHandleView.class))
+27 −6
Original line number Diff line number Diff line
@@ -87,7 +87,9 @@ public class FloatingToolbarEspressoUtils {
     * Asserts that the floating toolbar is not displayed on screen.
     *
     * @throws AssertionError if the assertion fails
     * @deprecated Negative assertions are taking too long to timeout in Espresso.
     */
    @Deprecated
    public static void assertFloatingToolbarIsNotDisplayed() {
        try {
            onFloatingToolBar().check(matches(isDisplayed()));
@@ -173,12 +175,31 @@ public class FloatingToolbarEspressoUtils {
     * @throws AssertionError if the assertion fails
     */
    public static void assertFloatingToolbarDoesNotContainItem(String itemLabel) {
        try{
            assertFloatingToolbarContainsItem(itemLabel);
        } catch (AssertionError e) {
            return;
        onFloatingToolBar().check(matches(new TypeSafeMatcher<View>() {
            @Override
            public boolean matchesSafely(View view) {
                return doesNotContainItem(view);
            }
        throw new AssertionError("Floating toolbar contains " + itemLabel);

            @Override
            public void describeTo(Description description) {}

            private boolean doesNotContainItem(View view) {
                if (view.getTag() instanceof MenuItem) {
                    if (itemLabel.equals(((MenuItem) view.getTag()).getTitle().toString())) {
                        return false;
                    }
                } else if (view instanceof ViewGroup) {
                    ViewGroup viewGroup = (ViewGroup) view;
                    for (int i = 0; i < viewGroup.getChildCount(); i++) {
                        if (doesNotContainItem(viewGroup.getChildAt(i))) {
                            return false;
                        }
                    }
                }
                return true;
            }
        }));
    }

    /**