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

Commit 240c23b5 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by android-build-merger
Browse files

Merge "Rewrite SuggestionsPopupWindowTest using espresso." into nyc-dev

am: d119ab94

* commit 'd119ab94':
  Rewrite SuggestionsPopupWindowTest using espresso.

Change-Id: I5dca34e91ee05a1cc3cea3f5fa016df675266cb5
parents aa9a7578 d119ab94
Loading
Loading
Loading
Loading
+287 −127
Original line number Original line Diff line number Diff line
@@ -16,13 +16,35 @@


package android.widget;
package android.widget;


import android.app.Activity;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.Espresso.pressBack;
import static android.support.test.espresso.action.ViewActions.clearText;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.replaceText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.RootMatchers.withDecorView;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static android.widget.espresso.DragHandleUtils.onHandleView;
import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarContainsItem;
import static android.widget.espresso.FloatingToolbarEspressoUtils.clickFloatingToolbarItem;
import static android.widget.espresso.FloatingToolbarEspressoUtils.sleepForFloatingToolbarPopup;
import static android.widget.espresso.SuggestionsPopupwindowUtils.assertSuggestionsPopupContainsItem;
import static android.widget.espresso.SuggestionsPopupwindowUtils.assertSuggestionsPopupIsDisplayed;
import static android.widget.espresso.SuggestionsPopupwindowUtils.assertSuggestionsPopupIsNotDisplayed;
import static android.widget.espresso.SuggestionsPopupwindowUtils.clickSuggestionsPopupItem;
import static android.widget.espresso.SuggestionsPopupwindowUtils.onSuggestionsPopup;
import static android.widget.espresso.TextViewActions.clickOnTextAtIndex;
import static android.widget.espresso.TextViewActions.longPressOnTextAtIndex;
import static org.hamcrest.Matchers.is;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.support.test.espresso.NoMatchingViewException;
import android.support.test.espresso.ViewAssertion;
import android.test.ActivityInstrumentationTestCase2;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.Suppress;
import android.test.suitebuilder.annotation.Suppress;
import android.text.Selection;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.Spannable;
import android.text.Spanned;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.TextPaint;
import android.text.style.SuggestionSpan;
import android.text.style.SuggestionSpan;
@@ -42,55 +64,215 @@ public class SuggestionsPopupWindowTest extends ActivityInstrumentationTestCase2
        super(TextViewActivity.class);
        super(TextViewActivity.class);
    }
    }


    @Override
    protected void setUp() throws Exception {
        super.setUp();
        getActivity();
    }

    private void setSuggestionSpan(SuggestionSpan span, int start, int end) {
        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
        textView.post(
                () -> {
                    final Spannable text = (Spannable) textView.getText();
                    text.setSpan(span, start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
                    Selection.setSelection(text, (start + end) / 2);
                });
        getInstrumentation().waitForIdleSync();
    }

    @SmallTest
    public void testOnTextContextMenuItem() {
        final String text = "abc def ghi";

        onView(withId(R.id.textview)).perform(click());
        onView(withId(R.id.textview)).perform(replaceText(text));

        final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(),
                new String[]{"DEF", "Def"}, SuggestionSpan.FLAG_AUTO_CORRECTION);
        setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);

        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
        textView.post(() -> textView.onTextContextMenuItem(TextView.ID_REPLACE));
        getInstrumentation().waitForIdleSync();

        assertSuggestionsPopupIsDisplayed();
    }

    @SmallTest
    public void testSelectionActionMode() {
        final String text = "abc def ghi";

        onView(withId(R.id.textview)).perform(click());
        onView(withId(R.id.textview)).perform(replaceText(text));

        final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(),
                new String[]{"DEF", "Def"}, SuggestionSpan.FLAG_AUTO_CORRECTION);
        setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);

        onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('e')));
        sleepForFloatingToolbarPopup();
        assertFloatingToolbarContainsItem(
                getActivity().getString(com.android.internal.R.string.replace));
        sleepForFloatingToolbarPopup();
        clickFloatingToolbarItem(
                getActivity().getString(com.android.internal.R.string.replace));

        assertSuggestionsPopupIsDisplayed();
    }

    @SmallTest
    public void testInsertionActionMode() {
        final String text = "abc def ghi";

        onView(withId(R.id.textview)).perform(click());
        onView(withId(R.id.textview)).perform(replaceText(text));

        final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(),
                new String[]{"DEF", "Def"}, SuggestionSpan.FLAG_AUTO_CORRECTION);
        setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);

        onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.indexOf('e')));
        onHandleView(com.android.internal.R.id.insertion_handle).perform(click());
        sleepForFloatingToolbarPopup();
        assertFloatingToolbarContainsItem(
                getActivity().getString(com.android.internal.R.string.replace));
        clickFloatingToolbarItem(
                getActivity().getString(com.android.internal.R.string.replace));

        assertSuggestionsPopupIsDisplayed();
    }

    private void showSuggestionsPopup() {
        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
        textView.post(() -> textView.onTextContextMenuItem(TextView.ID_REPLACE));
        getInstrumentation().waitForIdleSync();
        assertSuggestionsPopupIsDisplayed();
    }

    @SmallTest
    public void testSuggestionItems() {
        final String text = "abc def ghi";

        onView(withId(R.id.textview)).perform(click());
        onView(withId(R.id.textview)).perform(replaceText(text));

        final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(),
                new String[]{"DEF", "Def"}, SuggestionSpan.FLAG_AUTO_CORRECTION);
        setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);

        showSuggestionsPopup();

        assertSuggestionsPopupIsDisplayed();
        assertSuggestionsPopupContainsItem("DEF");
        assertSuggestionsPopupContainsItem("Def");
        assertSuggestionsPopupContainsItem(
                getActivity().getString(com.android.internal.R.string.delete));

        // Select an item.
        clickSuggestionsPopupItem("DEF");
        assertSuggestionsPopupIsNotDisplayed();
        onView(withId(R.id.textview)).check(matches(withText("abc DEF ghi")));

        showSuggestionsPopup();
        assertSuggestionsPopupIsDisplayed();
        assertSuggestionsPopupContainsItem("def");
        assertSuggestionsPopupContainsItem("Def");
        assertSuggestionsPopupContainsItem(
                getActivity().getString(com.android.internal.R.string.delete));

        // Delete
        clickSuggestionsPopupItem(
                getActivity().getString(com.android.internal.R.string.delete));
        assertSuggestionsPopupIsNotDisplayed();
        onView(withId(R.id.textview)).check(matches(withText("abc ghi")));
    }

    @SmallTest
    public void testMisspelled() {
        final String text = "abc def ghi";

        onView(withId(R.id.textview)).perform(click());
        onView(withId(R.id.textview)).perform(replaceText(text));

        final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(),
                new String[]{"DEF", "Def"}, SuggestionSpan.FLAG_MISSPELLED);
        setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);

        showSuggestionsPopup();

        assertSuggestionsPopupIsDisplayed();
        assertSuggestionsPopupContainsItem("DEF");
        assertSuggestionsPopupContainsItem("Def");
        assertSuggestionsPopupContainsItem(
                getActivity().getString(com.android.internal.R.string.addToDictionary));
        assertSuggestionsPopupContainsItem(
                getActivity().getString(com.android.internal.R.string.delete));

        // Click "Add to dictionary".
        clickSuggestionsPopupItem(
                getActivity().getString(com.android.internal.R.string.addToDictionary));
        // TODO: Check if add to dictionary dialog is displayed.
    }

    @SmallTest
    public void testEasyCorrect() {
        final String text = "abc def ghi";

        onView(withId(R.id.textview)).perform(click());
        onView(withId(R.id.textview)).perform(replaceText(text));

        final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(),
                new String[]{"DEF", "Def"},
                SuggestionSpan.FLAG_EASY_CORRECT | SuggestionSpan.FLAG_MISSPELLED);
        setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);

        onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.indexOf('e')));

        assertSuggestionsPopupIsDisplayed();
        assertSuggestionsPopupContainsItem("DEF");
        assertSuggestionsPopupContainsItem("Def");
        assertSuggestionsPopupContainsItem(
                getActivity().getString(com.android.internal.R.string.delete));

        // Select an item.
        clickSuggestionsPopupItem("DEF");
        assertSuggestionsPopupIsNotDisplayed();
        onView(withId(R.id.textview)).check(matches(withText("abc DEF ghi")));

        onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.indexOf('e')));
        assertSuggestionsPopupIsNotDisplayed();

        showSuggestionsPopup();
        assertSuggestionsPopupIsDisplayed();
        assertSuggestionsPopupContainsItem("def");
        assertSuggestionsPopupContainsItem("Def");
        assertSuggestionsPopupContainsItem(
                getActivity().getString(com.android.internal.R.string.delete));
    }

    @SmallTest
    @SmallTest
    @Suppress
    public void testTextAppearanceInSuggestionsPopup() {
    public void testTextAppearanceInSuggestionsPopup() {
        final Activity activity = getActivity();
        final String text = "abc def ghi";


        final String sampleText = "abc def ghi";
        final String[] singleWordCandidates = {"DEF", "Def"};
        final String[] singleWordCandidates = {"DEF", "Def"};
        final SuggestionSpan singleWordSuggestionSpan = new SuggestionSpan(activity,
        final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(),
                singleWordCandidates, SuggestionSpan.FLAG_AUTO_CORRECTION);
                singleWordCandidates, SuggestionSpan.FLAG_MISSPELLED);
        final int singleWordSpanStart = 4;
        final int singleWordSpanEnd = 7;

        final String[] multiWordCandidates = {"ABC DEF GHI", "Abc Def Ghi"};
        final String[] multiWordCandidates = {"ABC DEF GHI", "Abc Def Ghi"};
        final SuggestionSpan multiWordSuggestionSpan = new SuggestionSpan(activity,
        final SuggestionSpan multiWordSuggestionSpan = new SuggestionSpan(getActivity(),
                multiWordCandidates, SuggestionSpan.FLAG_AUTO_CORRECTION);
                multiWordCandidates, SuggestionSpan.FLAG_MISSPELLED);
        final int multiWordSpanStart = 0;
        final int multiWordSpanEnd = 11;


        TypedArray array = activity.obtainStyledAttributes(com.android.internal.R.styleable.Theme);
        final TypedArray array =
        int id = array.getResourceId(
                getActivity().obtainStyledAttributes(com.android.internal.R.styleable.Theme);
        final int id = array.getResourceId(
                com.android.internal.R.styleable.Theme_textEditSuggestionHighlightStyle, 0);
                com.android.internal.R.styleable.Theme_textEditSuggestionHighlightStyle, 0);
        array.recycle();
        array.recycle();

        final TextAppearanceSpan expectedSpan = new TextAppearanceSpan(getActivity(), id);
        TextAppearanceSpan expectedSpan = new TextAppearanceSpan(activity, id);
        final TextPaint tmpTp = new TextPaint();
        TextPaint tmpTp = new TextPaint();
        expectedSpan.updateDrawState(tmpTp);
        expectedSpan.updateDrawState(tmpTp);
        final int expectedHighlightTextColor = tmpTp.getColor();
        final int expectedHighlightTextColor = tmpTp.getColor();
        final float expectedHighlightTextSize = tmpTp.getTextSize();
        final float expectedHighlightTextSize = tmpTp.getTextSize();

        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
        final EditText editText = (EditText) activity.findViewById(R.id.textview);
        final Editor editor = editText.getEditorForTesting();
        assertNotNull(editor);

        // Request to show SuggestionsPopupWindow.
        Runnable showSuggestionWindowRunner = new Runnable() {
            @Override
            public void run() {
                SpannableStringBuilder ssb = new SpannableStringBuilder();
                ssb.append(sampleText);
                ssb.setSpan(singleWordSuggestionSpan, singleWordSpanStart, singleWordSpanEnd,
                        Spanned.SPAN_INCLUSIVE_INCLUSIVE);
                ssb.setSpan(multiWordSuggestionSpan, multiWordSpanStart, multiWordSpanEnd,
                        Spanned.SPAN_INCLUSIVE_INCLUSIVE);
                editText.setText(ssb);

                Selection.setSelection(editText.getText(), singleWordSpanStart, singleWordSpanEnd);
                editText.onTextContextMenuItem(TextView.ID_REPLACE);
            }
        };


        // In this test, the SuggestionsPopupWindow looks like
        // In this test, the SuggestionsPopupWindow looks like
        //   abc def ghi
        //   abc def ghi
@@ -103,96 +285,74 @@ public class SuggestionsPopupWindowTest extends ActivityInstrumentationTestCase2
        // | DELETE        |
        // | DELETE        |
        // -----------------
        // -----------------
        // *XX* means that XX is highlighted.
        // *XX* means that XX is highlighted.
        Runnable popupVaridator = new Runnable() {
        for (int i = 0; i < 2; i++) {
            @Override
            onView(withId(R.id.textview)).perform(click());
            public void run() {
            onView(withId(R.id.textview)).perform(replaceText(text));
                Editor.SuggestionsPopupWindow popupWindow =
            setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);
                        editor.getSuggestionsPopupWindowForTesting();
            setSuggestionSpan(multiWordSuggestionSpan, 0, text.length());
                assertNotNull(popupWindow);


                LinearLayout linearLayout = (LinearLayout) popupWindow.getContentViewForTesting();
            showSuggestionsPopup();
                assertNotNull(linearLayout);
            assertSuggestionsPopupIsDisplayed();
            assertSuggestionsPopupContainsItem("abc DEF ghi");
            assertSuggestionsPopupContainsItem("abc Def ghi");
            assertSuggestionsPopupContainsItem("ABC DEF GHI");
            assertSuggestionsPopupContainsItem("Abc Def Ghi");
            assertSuggestionsPopupContainsItem(
                    getActivity().getString(com.android.internal.R.string.delete));


                ListView listView = (ListView)linearLayout.findViewById(
            onSuggestionsPopup().check(new ViewAssertion() {
                @Override
                public void check(View view, NoMatchingViewException e) {
                    final ListView listView = (ListView) view.findViewById(
                            com.android.internal.R.id.suggestionContainer);
                            com.android.internal.R.id.suggestionContainer);
                    assertNotNull(listView);
                    assertNotNull(listView);
                    final int childNum = listView.getChildCount();
                    assertEquals(singleWordCandidates.length + multiWordCandidates.length,
                            childNum);


                int childNum = listView.getChildCount();
                    for (int j = 0; j < childNum; j++) {
                assertEquals(singleWordCandidates.length + multiWordCandidates.length, childNum);
                        final TextView suggestion = (TextView) listView.getChildAt(j);

                        assertNotNull(suggestion);
                for (int i = 0; i < singleWordCandidates.length; ++i) {
                        final Spanned spanned = (Spanned) suggestion.getText();
                    TextView textView = (TextView) listView.getChildAt(i);
                    assertNotNull(textView);

                    Spanned spanned = (Spanned) textView.getText();
                        assertNotNull(spanned);
                        assertNotNull(spanned);


                        // Check that the suggestion item order is kept.
                        // Check that the suggestion item order is kept.
                    String expectedText = "abc " + singleWordCandidates[i] + " ghi";
                        final String expectedText;
                    assertEquals(expectedText, spanned.toString());
                        if (j < singleWordCandidates.length) {

                            expectedText = "abc " + singleWordCandidates[j] + " ghi";
                    // Check that the text is highlighted with correct color and text size.
                        } else {
                    TextAppearanceSpan[] taSpan = spanned.getSpans(singleWordSpanStart,
                            expectedText = multiWordCandidates[j - singleWordCandidates.length];
                            singleWordSpanEnd, TextAppearanceSpan.class);
                    assertEquals(1, taSpan.length);
                    TextPaint tp = new TextPaint();
                    taSpan[0].updateDrawState(tp);
                    assertEquals(expectedHighlightTextColor, tp.getColor());
                    assertEquals(expectedHighlightTextSize, tp.getTextSize());

                    // Check only center word is highlighted.
                    assertEquals(singleWordSpanStart, spanned.getSpanStart(taSpan[0]));
                    assertEquals(singleWordSpanEnd, spanned.getSpanEnd(taSpan[0]));
                        }
                        }

                        assertEquals(expectedText, spanned.toString());
                for (int i = 0; i < multiWordCandidates.length; ++i) {
                    int indexInListView = singleWordCandidates.length + i;
                    TextView textView = (TextView) listView.getChildAt(indexInListView);
                    assertNotNull(textView);

                    Spanned spanned = (Spanned) textView.getText();
                    assertNotNull(spanned);

                    // Check that the suggestion item order is kept.
                    assertEquals(multiWordCandidates[i], spanned.toString());


                        // Check that the text is highlighted with correct color and text size.
                        // Check that the text is highlighted with correct color and text size.
                    TextAppearanceSpan[] taSpan = spanned.getSpans(
                        final TextAppearanceSpan[] taSpan = spanned.getSpans(
                            0, multiWordCandidates[i].length(), TextAppearanceSpan.class);
                                text.indexOf('d'), text.indexOf('f') + 1, TextAppearanceSpan.class);
                        assertEquals(1, taSpan.length);
                        assertEquals(1, taSpan.length);
                        TextPaint tp = new TextPaint();
                        TextPaint tp = new TextPaint();
                        taSpan[0].updateDrawState(tp);
                        taSpan[0].updateDrawState(tp);
                        assertEquals(expectedHighlightTextColor, tp.getColor());
                        assertEquals(expectedHighlightTextColor, tp.getColor());
                        assertEquals(expectedHighlightTextSize, tp.getTextSize());
                        assertEquals(expectedHighlightTextSize, tp.getTextSize());


                    // Check the whole text is highlighted.
                        // Check the correct part of the text is highlighted.
                    assertEquals(multiWordSpanStart, spanned.getSpanStart(taSpan[0]));
                        final int expectedStart;
                    assertEquals(multiWordSpanEnd, spanned.getSpanEnd(taSpan[0]));
                        final int expectedEnd;
                        if (j < singleWordCandidates.length) {
                            expectedStart = text.indexOf('d');
                            expectedEnd = text.indexOf('f') + 1;
                        } else {
                            expectedStart = 0;
                            expectedEnd = text.length();
                        }
                        }

                        assertEquals(expectedStart, spanned.getSpanStart(taSpan[0]));
                TextView deleteButton = (TextView)linearLayout.findViewById(
                        assertEquals(expectedEnd, spanned.getSpanEnd(taSpan[0]));
                        com.android.internal.R.id.deleteButton);
                assertEquals(View.VISIBLE, deleteButton.getWindowVisibility());
                    }
                    }
        };

        // Show the SuggestionWindow and verify the contents.
        activity.runOnUiThread(showSuggestionWindowRunner);
        getInstrumentation().waitForIdleSync();
        activity.runOnUiThread(popupVaridator);

        // Request to hide the SuggestionPopupWindow and wait until it is hidden.
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                editText.setText("");
                }
                }
            });
            });
        getInstrumentation().waitForIdleSync();
            pressBack();

            onView(withId(R.id.textview))
        // Show and verify the contents again.
                    .inRoot(withDecorView(is(getActivity().getWindow().getDecorView())))
        activity.runOnUiThread(showSuggestionWindowRunner);
                    .perform(clearText());
        getInstrumentation().waitForIdleSync();
        }
        activity.runOnUiThread(popupVaridator);
    }
    }
}
}
+14 −11
Original line number Original line Diff line number Diff line
@@ -16,6 +16,10 @@


package android.widget;
package android.widget;



import static android.widget.espresso.ContextMenuUtils.assertContextMenuContainsItemDisabled;
import static android.widget.espresso.ContextMenuUtils.assertContextMenuContainsItemEnabled;
import static android.widget.espresso.ContextMenuUtils.assertContextMenuIsNotDisplayed;
import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
import static android.widget.espresso.DragHandleUtils.onHandleView;
import static android.widget.espresso.DragHandleUtils.onHandleView;
import static android.widget.espresso.TextViewActions.mouseClickOnTextAtIndex;
import static android.widget.espresso.TextViewActions.mouseClickOnTextAtIndex;
@@ -41,11 +45,9 @@ import static android.support.test.espresso.matcher.ViewMatchers.withText;


import com.android.frameworks.coretests.R;
import com.android.frameworks.coretests.R;


import android.support.test.espresso.Espresso;
import android.test.ActivityInstrumentationTestCase2;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.MotionEvent;
import android.view.MotionEvent;
import android.widget.espresso.ContextMenuUtils;


/**
/**
 * Tests mouse interaction of the TextView widget from an Activity
 * Tests mouse interaction of the TextView widget from an Activity
@@ -57,7 +59,8 @@ public class TextViewActivityMouseTest extends ActivityInstrumentationTestCase2<
    }
    }


    @Override
    @Override
    public void setUp() {
    public void setUp() throws Exception {
        super.setUp();
        getActivity();
        getActivity();
    }
    }


@@ -102,28 +105,28 @@ public class TextViewActivityMouseTest extends ActivityInstrumentationTestCase2<
        onView(withId(R.id.textview)).perform(click());
        onView(withId(R.id.textview)).perform(click());
        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));
        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));


        ContextMenuUtils.assertContextMenuIsNotDisplayed();
        assertContextMenuIsNotDisplayed();


        onView(withId(R.id.textview)).perform(
        onView(withId(R.id.textview)).perform(
                mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
                mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));


        ContextMenuUtils.assertContextMenuContainsItemDisabled(
        assertContextMenuContainsItemDisabled(
                getActivity().getString(com.android.internal.R.string.copy));
                getActivity().getString(com.android.internal.R.string.copy));
        ContextMenuUtils.assertContextMenuContainsItemEnabled(
        assertContextMenuContainsItemEnabled(
                getActivity().getString(com.android.internal.R.string.undo));
                getActivity().getString(com.android.internal.R.string.undo));


        // Hide context menu.
        // Hide context menu.
        pressBack();
        pressBack();
        ContextMenuUtils.assertContextMenuIsNotDisplayed();
        assertContextMenuIsNotDisplayed();


        onView(withId(R.id.textview)).perform(
        onView(withId(R.id.textview)).perform(
                mouseDragOnText(text.indexOf("c"), text.indexOf("h")));
                mouseDragOnText(text.indexOf("c"), text.indexOf("h")));
        onView(withId(R.id.textview)).perform(
        onView(withId(R.id.textview)).perform(
                mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
                mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));


        ContextMenuUtils.assertContextMenuContainsItemEnabled(
        assertContextMenuContainsItemEnabled(
                getActivity().getString(com.android.internal.R.string.copy));
                getActivity().getString(com.android.internal.R.string.copy));
        ContextMenuUtils.assertContextMenuContainsItemEnabled(
        assertContextMenuContainsItemEnabled(
                getActivity().getString(com.android.internal.R.string.undo));
                getActivity().getString(com.android.internal.R.string.undo));


        // Hide context menu.
        // Hide context menu.
@@ -133,9 +136,9 @@ public class TextViewActivityMouseTest extends ActivityInstrumentationTestCase2<


        onView(withId(R.id.textview)).perform(
        onView(withId(R.id.textview)).perform(
                mouseClickOnTextAtIndex(text.indexOf("i"), MotionEvent.BUTTON_SECONDARY));
                mouseClickOnTextAtIndex(text.indexOf("i"), MotionEvent.BUTTON_SECONDARY));
        ContextMenuUtils.assertContextMenuContainsItemDisabled(
        assertContextMenuContainsItemDisabled(
                getActivity().getString(com.android.internal.R.string.copy));
                getActivity().getString(com.android.internal.R.string.copy));
        ContextMenuUtils.assertContextMenuContainsItemEnabled(
        assertContextMenuContainsItemEnabled(
                getActivity().getString(com.android.internal.R.string.undo));
                getActivity().getString(com.android.internal.R.string.undo));


        // Hide context menu.
        // Hide context menu.
+6 −4

File changed.

Preview size limit exceeded, changes collapsed.

+20 −5

File changed.

Preview size limit exceeded, changes collapsed.

+121 −0

File added.

Preview size limit exceeded, changes collapsed.