blob: 9124c94785d0cd3af450daa351e29dca147d3e12 [file] [log] [blame]
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +09001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package android.widget;
18
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +090019
Siyamed Sinir6b61d812017-06-14 11:13:30 -070020import static android.support.test.espresso.Espresso.onView;
21import static android.support.test.espresso.Espresso.pressBack;
22import static android.support.test.espresso.action.ViewActions.replaceText;
23import static android.support.test.espresso.action.ViewActions.typeText;
24import static android.support.test.espresso.assertion.ViewAssertions.matches;
25import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
26import static android.support.test.espresso.matcher.ViewMatchers.withId;
27import static android.support.test.espresso.matcher.ViewMatchers.withText;
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +090028import static android.widget.espresso.ContextMenuUtils.assertContextMenuContainsItemDisabled;
29import static android.widget.espresso.ContextMenuUtils.assertContextMenuContainsItemEnabled;
30import static android.widget.espresso.ContextMenuUtils.assertContextMenuIsNotDisplayed;
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -080031import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
32import static android.widget.espresso.DragHandleUtils.onHandleView;
Siyamed Sinir6b61d812017-06-14 11:13:30 -070033import static android.widget.espresso.TextViewActions.mouseClick;
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -080034import static android.widget.espresso.TextViewActions.mouseClickOnTextAtIndex;
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -080035import static android.widget.espresso.TextViewActions.mouseDoubleClickAndDragOnText;
Siyamed Sinir6b61d812017-06-14 11:13:30 -070036import static android.widget.espresso.TextViewActions.mouseDoubleClickOnTextAtIndex;
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090037import static android.widget.espresso.TextViewActions.mouseDragOnText;
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -080038import static android.widget.espresso.TextViewActions.mouseLongClickAndDragOnText;
Siyamed Sinir6b61d812017-06-14 11:13:30 -070039import static android.widget.espresso.TextViewActions.mouseLongClickOnTextAtIndex;
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -080040import static android.widget.espresso.TextViewActions.mouseTripleClickAndDragOnText;
41import static android.widget.espresso.TextViewActions.mouseTripleClickOnTextAtIndex;
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -080042import static android.widget.espresso.TextViewAssertions.hasInsertionPointerAtIndex;
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090043import static android.widget.espresso.TextViewAssertions.hasSelection;
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -080044
Siyamed Sinir21914182017-06-16 15:24:00 -070045import android.app.Activity;
46import android.support.test.filters.MediumTest;
47import android.support.test.rule.ActivityTestRule;
48import android.support.test.runner.AndroidJUnit4;
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -080049import android.view.MotionEvent;
Siyamed Sinir6b61d812017-06-14 11:13:30 -070050import android.view.textclassifier.TextClassificationManager;
51import android.view.textclassifier.TextClassifier;
52
53import com.android.frameworks.coretests.R;
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090054
Siyamed Sinir21914182017-06-16 15:24:00 -070055import org.junit.Before;
56import org.junit.Rule;
57import org.junit.Test;
58import org.junit.runner.RunWith;
59
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090060/**
61 * Tests mouse interaction of the TextView widget from an Activity
62 */
Siyamed Sinir21914182017-06-16 15:24:00 -070063@RunWith(AndroidJUnit4.class)
64@MediumTest
65public class TextViewActivityMouseTest {
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090066
Siyamed Sinir21914182017-06-16 15:24:00 -070067 @Rule
68 public ActivityTestRule<TextViewActivity> mActivityRule = new ActivityTestRule<>(
69 TextViewActivity.class);
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090070
Siyamed Sinir21914182017-06-16 15:24:00 -070071 private Activity mActivity;
72
73 @Before
74 public void setUp() {
75 mActivity = mActivityRule.getActivity();
76 mActivity.getSystemService(TextClassificationManager.class)
Siyamed Sinir6b61d812017-06-14 11:13:30 -070077 .setTextClassifier(TextClassifier.NO_OP);
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -080078 }
79
Siyamed Sinir21914182017-06-16 15:24:00 -070080 @Test
81 public void testSelectTextByDrag() {
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090082 final String helloWorld = "Hello world!";
Siyamed Sinir6b61d812017-06-14 11:13:30 -070083 onView(withId(R.id.textview)).perform(mouseClick());
84 onView(withId(R.id.textview)).perform(replaceText(helloWorld));
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -080085
86 assertNoSelectionHandles();
87
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090088 onView(withId(R.id.textview)).perform(
89 mouseDragOnText(helloWorld.indexOf("llo"), helloWorld.indexOf("ld!")));
90
91 onView(withId(R.id.textview)).check(hasSelection("llo wor"));
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -080092
93 onHandleView(com.android.internal.R.id.selection_start_handle)
94 .check(matches(isDisplayed()));
95 onHandleView(com.android.internal.R.id.selection_end_handle)
96 .check(matches(isDisplayed()));
97
98 onView(withId(R.id.textview)).perform(mouseClickOnTextAtIndex(helloWorld.indexOf("w")));
99 onView(withId(R.id.textview)).check(hasSelection(""));
100
101 assertNoSelectionHandles();
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +0900102 }
Keisuke Kuroyanagiead6ba32015-10-27 17:26:07 +0900103
Siyamed Sinir21914182017-06-16 15:24:00 -0700104 @Test
105 public void testSelectTextByDrag_reverse() {
Keisuke Kuroyanagiead6ba32015-10-27 17:26:07 +0900106 final String helloWorld = "Hello world!";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700107 onView(withId(R.id.textview)).perform(mouseClick());
108 onView(withId(R.id.textview)).perform(replaceText(helloWorld));
Keisuke Kuroyanagiead6ba32015-10-27 17:26:07 +0900109 onView(withId(R.id.textview)).perform(
110 mouseDragOnText( helloWorld.indexOf("ld!"), helloWorld.indexOf("llo")));
111
112 onView(withId(R.id.textview)).check(hasSelection("llo wor"));
113 }
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800114
Siyamed Sinir21914182017-06-16 15:24:00 -0700115 @Test
116 public void testContextMenu() {
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800117 final String text = "abc def ghi.";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700118 onView(withId(R.id.textview)).perform(mouseClick());
119 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800120
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900121 assertContextMenuIsNotDisplayed();
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800122
123 onView(withId(R.id.textview)).perform(
124 mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
125
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900126 assertContextMenuContainsItemDisabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700127 mActivity.getString(com.android.internal.R.string.copy));
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700128 assertContextMenuContainsItemDisabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700129 mActivity.getString(com.android.internal.R.string.undo));
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700130
131 // Hide context menu.
132 pressBack();
133 assertContextMenuIsNotDisplayed();
134
135 // type something to enable Undo
136 onView(withId(R.id.textview)).perform(
137 mouseClickOnTextAtIndex(text.indexOf(".")));
138 onView(withId(R.id.textview)).perform(typeText(" "));
139
140 onView(withId(R.id.textview)).perform(
141 mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
142
143 assertContextMenuContainsItemDisabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700144 mActivity.getString(com.android.internal.R.string.copy));
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900145 assertContextMenuContainsItemEnabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700146 mActivity.getString(com.android.internal.R.string.undo));
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800147
148 // Hide context menu.
149 pressBack();
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900150 assertContextMenuIsNotDisplayed();
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800151
152 onView(withId(R.id.textview)).perform(
153 mouseDragOnText(text.indexOf("c"), text.indexOf("h")));
154 onView(withId(R.id.textview)).perform(
155 mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
156
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900157 assertContextMenuContainsItemEnabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700158 mActivity.getString(com.android.internal.R.string.copy));
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900159 assertContextMenuContainsItemEnabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700160 mActivity.getString(com.android.internal.R.string.undo));
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800161
162 // Hide context menu.
163 pressBack();
164
165 onView(withId(R.id.textview)).check(hasSelection("c def g"));
166
167 onView(withId(R.id.textview)).perform(
168 mouseClickOnTextAtIndex(text.indexOf("i"), MotionEvent.BUTTON_SECONDARY));
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900169 assertContextMenuContainsItemDisabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700170 mActivity.getString(com.android.internal.R.string.copy));
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900171 assertContextMenuContainsItemEnabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700172 mActivity.getString(com.android.internal.R.string.undo));
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800173
174 // Hide context menu.
175 pressBack();
176
177 onView(withId(R.id.textview)).check(hasSelection(""));
178 onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("i")));
Keisuke Kuroyanagi182f5fe2016-03-11 16:31:29 +0900179
180 // TODO: Add tests for suggestions
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800181 }
182
Siyamed Sinir21914182017-06-16 15:24:00 -0700183 @Test
184 public void testDragAndDrop() {
Keisuke Kuroyanagi4307aeb2015-12-07 11:16:39 -0800185 final String text = "abc def ghi.";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700186 onView(withId(R.id.textview)).perform(mouseClick());
187 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi4307aeb2015-12-07 11:16:39 -0800188 onView(withId(R.id.textview)).perform(
189 mouseDragOnText(text.indexOf("d"), text.indexOf("f") + 1));
190
191 onView(withId(R.id.textview)).perform(
192 mouseDragOnText(text.indexOf("e"), text.length()));
193
194 onView(withId(R.id.textview)).check(matches(withText("abc ghi.def")));
195 onView(withId(R.id.textview)).check(hasSelection(""));
196 assertNoSelectionHandles();
197 onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex("abc ghi.def".length()));
198 }
199
Siyamed Sinir21914182017-06-16 15:24:00 -0700200 @Test
201 public void testDragAndDrop_longClick() {
Keisuke Kuroyanagi4307aeb2015-12-07 11:16:39 -0800202 final String text = "abc def ghi.";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700203 onView(withId(R.id.textview)).perform(mouseClick());
204 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi4307aeb2015-12-07 11:16:39 -0800205 onView(withId(R.id.textview)).perform(
206 mouseDragOnText(text.indexOf("d"), text.indexOf("f") + 1));
207
208 onView(withId(R.id.textview)).perform(
209 mouseLongClickAndDragOnText(text.indexOf("e"), text.length()));
210
211 onView(withId(R.id.textview)).check(matches(withText("abc ghi.def")));
212 onView(withId(R.id.textview)).check(hasSelection(""));
213 assertNoSelectionHandles();
214 onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex("abc ghi.def".length()));
215 }
216
Siyamed Sinir21914182017-06-16 15:24:00 -0700217 @Test
218 public void testSelectTextByLongClick() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800219 final String helloWorld = "Hello world!";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700220 onView(withId(R.id.textview)).perform(mouseClick());
221 onView(withId(R.id.textview)).perform(replaceText(helloWorld));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800222
223 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(0));
224 onView(withId(R.id.textview)).check(hasSelection("Hello"));
225
226 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(
227 helloWorld.indexOf("world")));
228 onView(withId(R.id.textview)).check(hasSelection("world"));
229
230 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(
231 helloWorld.indexOf("llo")));
232 onView(withId(R.id.textview)).check(hasSelection("Hello"));
233
234 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(
235 helloWorld.indexOf("rld")));
236 onView(withId(R.id.textview)).check(hasSelection("world"));
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -0800237
238 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(helloWorld.length()));
239 onView(withId(R.id.textview)).check(hasSelection("!"));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800240 }
241
Siyamed Sinir21914182017-06-16 15:24:00 -0700242 @Test
243 public void testSelectTextByDoubleClick() {
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700244 final String helloWorld = "hello world!";
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800245
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700246 onView(withId(R.id.textview)).perform(mouseClick());
247 onView(withId(R.id.textview)).perform(replaceText(helloWorld));
248
249 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(1));
250 onView(withId(R.id.textview)).check(hasSelection("hello"));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800251
252 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
253 helloWorld.indexOf("world")));
254 onView(withId(R.id.textview)).check(hasSelection("world"));
255
256 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
257 helloWorld.indexOf("llo")));
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700258 onView(withId(R.id.textview)).check(hasSelection("hello"));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800259
260 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
261 helloWorld.indexOf("rld")));
262 onView(withId(R.id.textview)).check(hasSelection("world"));
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -0800263
264 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(helloWorld.length()));
265 onView(withId(R.id.textview)).check(hasSelection("!"));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800266 }
267
Siyamed Sinir21914182017-06-16 15:24:00 -0700268 @Test
269 public void testSelectTextByDoubleClickAndDrag() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800270 final String text = "abcd efg hijk lmn";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700271 onView(withId(R.id.textview)).perform(mouseClick());
272 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800273
274 onView(withId(R.id.textview)).perform(
275 mouseDoubleClickAndDragOnText(text.indexOf("f"), text.indexOf("j")));
276 onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
277 }
278
Siyamed Sinir21914182017-06-16 15:24:00 -0700279 @Test
280 public void testSelectTextByDoubleClickAndDrag_reverse() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800281 final String text = "abcd efg hijk lmn";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700282 onView(withId(R.id.textview)).perform(mouseClick());
283 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800284
285 onView(withId(R.id.textview)).perform(
286 mouseDoubleClickAndDragOnText(text.indexOf("j"), text.indexOf("f")));
287 onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
288 }
289
Siyamed Sinir21914182017-06-16 15:24:00 -0700290 @Test
291 public void testSelectTextByLongPressAndDrag() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800292 final String text = "abcd efg hijk lmn";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700293 onView(withId(R.id.textview)).perform(mouseClick());
294 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800295
296 onView(withId(R.id.textview)).perform(
297 mouseLongClickAndDragOnText(text.indexOf("f"), text.indexOf("j")));
298 onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
299 }
300
Siyamed Sinir21914182017-06-16 15:24:00 -0700301 @Test
302 public void testSelectTextByLongPressAndDrag_reverse() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800303 final String text = "abcd efg hijk lmn";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700304 onView(withId(R.id.textview)).perform(mouseClick());
305 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800306
307 onView(withId(R.id.textview)).perform(
308 mouseLongClickAndDragOnText(text.indexOf("j"), text.indexOf("f")));
309 onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
310 }
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800311
Siyamed Sinir21914182017-06-16 15:24:00 -0700312 @Test
313 public void testSelectTextByTripleClick() {
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800314 final StringBuilder builder = new StringBuilder();
315 builder.append("First paragraph.\n");
316 builder.append("Second paragraph.");
317 for (int i = 0; i < 10; i++) {
318 builder.append(" This paragraph is very long.");
319 }
320 builder.append('\n');
321 builder.append("Third paragraph.");
322 final String text = builder.toString();
323
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700324 onView(withId(R.id.textview)).perform(mouseClick());
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800325 onView(withId(R.id.textview)).perform(replaceText(text));
326
327 onView(withId(R.id.textview)).perform(
328 mouseTripleClickOnTextAtIndex(text.indexOf("rst")));
329 onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
330
331 onView(withId(R.id.textview)).perform(
332 mouseTripleClickOnTextAtIndex(text.indexOf("cond")));
333 onView(withId(R.id.textview)).check(hasSelection(
334 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
335
336 onView(withId(R.id.textview)).perform(
337 mouseTripleClickOnTextAtIndex(text.indexOf("ird")));
338 onView(withId(R.id.textview)).check(hasSelection("Third paragraph."));
339
340 onView(withId(R.id.textview)).perform(
341 mouseTripleClickOnTextAtIndex(text.indexOf("very long")));
342 onView(withId(R.id.textview)).check(hasSelection(
343 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
344 }
345
Siyamed Sinir21914182017-06-16 15:24:00 -0700346 @Test
347 public void testSelectTextByTripleClickAndDrag() {
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800348 final StringBuilder builder = new StringBuilder();
349 builder.append("First paragraph.\n");
350 builder.append("Second paragraph.");
351 for (int i = 0; i < 10; i++) {
352 builder.append(" This paragraph is very long.");
353 }
354 builder.append('\n');
355 builder.append("Third paragraph.");
356 final String text = builder.toString();
357
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700358 onView(withId(R.id.textview)).perform(mouseClick());
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800359 onView(withId(R.id.textview)).perform(replaceText(text));
360
361 onView(withId(R.id.textview)).perform(
362 mouseTripleClickAndDragOnText(text.indexOf("irst"), text.indexOf("st")));
363 onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
364
365 onView(withId(R.id.textview)).perform(
366 mouseTripleClickAndDragOnText(text.indexOf("cond"), text.indexOf("Third") - 2));
367 onView(withId(R.id.textview)).check(hasSelection(
368 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
369
370 onView(withId(R.id.textview)).perform(
371 mouseTripleClickAndDragOnText(text.indexOf("First"), text.indexOf("ird")));
372 onView(withId(R.id.textview)).check(hasSelection(text));
373 }
374
Siyamed Sinir21914182017-06-16 15:24:00 -0700375 @Test
376 public void testSelectTextByTripleClickAndDrag_reverse() {
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800377 final StringBuilder builder = new StringBuilder();
378 builder.append("First paragraph.\n");
379 builder.append("Second paragraph.");
380 for (int i = 0; i < 10; i++) {
381 builder.append(" This paragraph is very long.");
382 }
383 builder.append('\n');
384 builder.append("Third paragraph.");
385 final String text = builder.toString();
386
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700387 onView(withId(R.id.textview)).perform(mouseClick());
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800388 onView(withId(R.id.textview)).perform(replaceText(text));
389
390 onView(withId(R.id.textview)).perform(
391 mouseTripleClickAndDragOnText(text.indexOf("st"), text.indexOf("irst")));
392 onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
393
394 onView(withId(R.id.textview)).perform(
395 mouseTripleClickAndDragOnText(text.indexOf("Third") - 2, text.indexOf("cond")));
396 onView(withId(R.id.textview)).check(hasSelection(
397 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
398
399 onView(withId(R.id.textview)).perform(
400 mouseTripleClickAndDragOnText(text.indexOf("ird"), text.indexOf("First")));
401 onView(withId(R.id.textview)).check(hasSelection(text));
402 }
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +0900403}