blob: ff4a7dafc6274e906ef44bf18451cfa366f50e37 [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;
Abodunrinwa Toki4a056a52017-08-05 01:56:40 +010047import android.support.test.filters.Suppress;
Siyamed Sinir21914182017-06-16 15:24:00 -070048import android.support.test.rule.ActivityTestRule;
49import android.support.test.runner.AndroidJUnit4;
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -080050import android.view.MotionEvent;
Siyamed Sinir6b61d812017-06-14 11:13:30 -070051import android.view.textclassifier.TextClassificationManager;
52import android.view.textclassifier.TextClassifier;
53
54import com.android.frameworks.coretests.R;
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090055
Siyamed Sinir21914182017-06-16 15:24:00 -070056import org.junit.Before;
57import org.junit.Rule;
58import org.junit.Test;
59import org.junit.runner.RunWith;
60
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090061/**
62 * Tests mouse interaction of the TextView widget from an Activity
63 */
Siyamed Sinir21914182017-06-16 15:24:00 -070064@RunWith(AndroidJUnit4.class)
65@MediumTest
Abodunrinwa Toki4a056a52017-08-05 01:56:40 +010066@Suppress // Consistently failing. b/29591177
Siyamed Sinir21914182017-06-16 15:24:00 -070067public class TextViewActivityMouseTest {
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090068
Siyamed Sinir21914182017-06-16 15:24:00 -070069 @Rule
70 public ActivityTestRule<TextViewActivity> mActivityRule = new ActivityTestRule<>(
71 TextViewActivity.class);
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090072
Siyamed Sinir21914182017-06-16 15:24:00 -070073 private Activity mActivity;
74
75 @Before
76 public void setUp() {
77 mActivity = mActivityRule.getActivity();
78 mActivity.getSystemService(TextClassificationManager.class)
Siyamed Sinir6b61d812017-06-14 11:13:30 -070079 .setTextClassifier(TextClassifier.NO_OP);
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -080080 }
81
Siyamed Sinir21914182017-06-16 15:24:00 -070082 @Test
83 public void testSelectTextByDrag() {
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090084 final String helloWorld = "Hello world!";
Siyamed Sinir6b61d812017-06-14 11:13:30 -070085 onView(withId(R.id.textview)).perform(mouseClick());
86 onView(withId(R.id.textview)).perform(replaceText(helloWorld));
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -080087
88 assertNoSelectionHandles();
89
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +090090 onView(withId(R.id.textview)).perform(
91 mouseDragOnText(helloWorld.indexOf("llo"), helloWorld.indexOf("ld!")));
92
93 onView(withId(R.id.textview)).check(hasSelection("llo wor"));
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -080094
95 onHandleView(com.android.internal.R.id.selection_start_handle)
96 .check(matches(isDisplayed()));
97 onHandleView(com.android.internal.R.id.selection_end_handle)
98 .check(matches(isDisplayed()));
99
100 onView(withId(R.id.textview)).perform(mouseClickOnTextAtIndex(helloWorld.indexOf("w")));
101 onView(withId(R.id.textview)).check(hasSelection(""));
102
103 assertNoSelectionHandles();
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +0900104 }
Keisuke Kuroyanagiead6ba32015-10-27 17:26:07 +0900105
Siyamed Sinir21914182017-06-16 15:24:00 -0700106 @Test
107 public void testSelectTextByDrag_reverse() {
Keisuke Kuroyanagiead6ba32015-10-27 17:26:07 +0900108 final String helloWorld = "Hello world!";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700109 onView(withId(R.id.textview)).perform(mouseClick());
110 onView(withId(R.id.textview)).perform(replaceText(helloWorld));
Keisuke Kuroyanagiead6ba32015-10-27 17:26:07 +0900111 onView(withId(R.id.textview)).perform(
112 mouseDragOnText( helloWorld.indexOf("ld!"), helloWorld.indexOf("llo")));
113
114 onView(withId(R.id.textview)).check(hasSelection("llo wor"));
115 }
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800116
Siyamed Sinir21914182017-06-16 15:24:00 -0700117 @Test
118 public void testContextMenu() {
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800119 final String text = "abc def ghi.";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700120 onView(withId(R.id.textview)).perform(mouseClick());
121 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800122
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900123 assertContextMenuIsNotDisplayed();
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800124
125 onView(withId(R.id.textview)).perform(
126 mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
127
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900128 assertContextMenuContainsItemDisabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700129 mActivity.getString(com.android.internal.R.string.copy));
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700130 assertContextMenuContainsItemDisabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700131 mActivity.getString(com.android.internal.R.string.undo));
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700132
133 // Hide context menu.
134 pressBack();
135 assertContextMenuIsNotDisplayed();
136
137 // type something to enable Undo
138 onView(withId(R.id.textview)).perform(
139 mouseClickOnTextAtIndex(text.indexOf(".")));
140 onView(withId(R.id.textview)).perform(typeText(" "));
141
142 onView(withId(R.id.textview)).perform(
143 mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
144
145 assertContextMenuContainsItemDisabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700146 mActivity.getString(com.android.internal.R.string.copy));
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900147 assertContextMenuContainsItemEnabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700148 mActivity.getString(com.android.internal.R.string.undo));
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800149
150 // Hide context menu.
151 pressBack();
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900152 assertContextMenuIsNotDisplayed();
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800153
154 onView(withId(R.id.textview)).perform(
155 mouseDragOnText(text.indexOf("c"), text.indexOf("h")));
156 onView(withId(R.id.textview)).perform(
157 mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
158
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900159 assertContextMenuContainsItemEnabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700160 mActivity.getString(com.android.internal.R.string.copy));
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900161 assertContextMenuContainsItemEnabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700162 mActivity.getString(com.android.internal.R.string.undo));
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800163
164 // Hide context menu.
165 pressBack();
166
167 onView(withId(R.id.textview)).check(hasSelection("c def g"));
168
169 onView(withId(R.id.textview)).perform(
170 mouseClickOnTextAtIndex(text.indexOf("i"), MotionEvent.BUTTON_SECONDARY));
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900171 assertContextMenuContainsItemDisabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700172 mActivity.getString(com.android.internal.R.string.copy));
Keisuke Kuroyanagi31eb74f2016-04-06 19:37:46 +0900173 assertContextMenuContainsItemEnabled(
Siyamed Sinir21914182017-06-16 15:24:00 -0700174 mActivity.getString(com.android.internal.R.string.undo));
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800175
176 // Hide context menu.
177 pressBack();
178
179 onView(withId(R.id.textview)).check(hasSelection(""));
180 onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("i")));
Keisuke Kuroyanagi182f5fe2016-03-11 16:31:29 +0900181
182 // TODO: Add tests for suggestions
Keisuke Kuroyanagia0b3c062015-12-07 11:09:40 -0800183 }
184
Siyamed Sinir21914182017-06-16 15:24:00 -0700185 @Test
186 public void testDragAndDrop() {
Keisuke Kuroyanagi4307aeb2015-12-07 11:16:39 -0800187 final String text = "abc def ghi.";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700188 onView(withId(R.id.textview)).perform(mouseClick());
189 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi4307aeb2015-12-07 11:16:39 -0800190 onView(withId(R.id.textview)).perform(
191 mouseDragOnText(text.indexOf("d"), text.indexOf("f") + 1));
192
193 onView(withId(R.id.textview)).perform(
194 mouseDragOnText(text.indexOf("e"), text.length()));
195
196 onView(withId(R.id.textview)).check(matches(withText("abc ghi.def")));
197 onView(withId(R.id.textview)).check(hasSelection(""));
198 assertNoSelectionHandles();
199 onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex("abc ghi.def".length()));
200 }
201
Siyamed Sinir21914182017-06-16 15:24:00 -0700202 @Test
203 public void testDragAndDrop_longClick() {
Keisuke Kuroyanagi4307aeb2015-12-07 11:16:39 -0800204 final String text = "abc def ghi.";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700205 onView(withId(R.id.textview)).perform(mouseClick());
206 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi4307aeb2015-12-07 11:16:39 -0800207 onView(withId(R.id.textview)).perform(
208 mouseDragOnText(text.indexOf("d"), text.indexOf("f") + 1));
209
210 onView(withId(R.id.textview)).perform(
211 mouseLongClickAndDragOnText(text.indexOf("e"), text.length()));
212
213 onView(withId(R.id.textview)).check(matches(withText("abc ghi.def")));
214 onView(withId(R.id.textview)).check(hasSelection(""));
215 assertNoSelectionHandles();
216 onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex("abc ghi.def".length()));
217 }
218
Siyamed Sinir21914182017-06-16 15:24:00 -0700219 @Test
220 public void testSelectTextByLongClick() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800221 final String helloWorld = "Hello world!";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700222 onView(withId(R.id.textview)).perform(mouseClick());
223 onView(withId(R.id.textview)).perform(replaceText(helloWorld));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800224
225 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(0));
226 onView(withId(R.id.textview)).check(hasSelection("Hello"));
227
228 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(
229 helloWorld.indexOf("world")));
230 onView(withId(R.id.textview)).check(hasSelection("world"));
231
232 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(
233 helloWorld.indexOf("llo")));
234 onView(withId(R.id.textview)).check(hasSelection("Hello"));
235
236 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(
237 helloWorld.indexOf("rld")));
238 onView(withId(R.id.textview)).check(hasSelection("world"));
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -0800239
240 onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(helloWorld.length()));
241 onView(withId(R.id.textview)).check(hasSelection("!"));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800242 }
243
Siyamed Sinir21914182017-06-16 15:24:00 -0700244 @Test
245 public void testSelectTextByDoubleClick() {
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700246 final String helloWorld = "hello world!";
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800247
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700248 onView(withId(R.id.textview)).perform(mouseClick());
249 onView(withId(R.id.textview)).perform(replaceText(helloWorld));
250
251 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(1));
252 onView(withId(R.id.textview)).check(hasSelection("hello"));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800253
254 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
255 helloWorld.indexOf("world")));
256 onView(withId(R.id.textview)).check(hasSelection("world"));
257
258 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
259 helloWorld.indexOf("llo")));
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700260 onView(withId(R.id.textview)).check(hasSelection("hello"));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800261
262 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
263 helloWorld.indexOf("rld")));
264 onView(withId(R.id.textview)).check(hasSelection("world"));
Keisuke Kuroyanagid42cb8f2015-12-06 10:02:09 -0800265
266 onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(helloWorld.length()));
267 onView(withId(R.id.textview)).check(hasSelection("!"));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800268 }
269
Siyamed Sinir21914182017-06-16 15:24:00 -0700270 @Test
271 public void testSelectTextByDoubleClickAndDrag() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800272 final String text = "abcd efg hijk lmn";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700273 onView(withId(R.id.textview)).perform(mouseClick());
274 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800275
276 onView(withId(R.id.textview)).perform(
277 mouseDoubleClickAndDragOnText(text.indexOf("f"), text.indexOf("j")));
278 onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
279 }
280
Siyamed Sinir21914182017-06-16 15:24:00 -0700281 @Test
282 public void testSelectTextByDoubleClickAndDrag_reverse() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800283 final String text = "abcd efg hijk lmn";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700284 onView(withId(R.id.textview)).perform(mouseClick());
285 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800286
287 onView(withId(R.id.textview)).perform(
288 mouseDoubleClickAndDragOnText(text.indexOf("j"), text.indexOf("f")));
289 onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
290 }
291
Siyamed Sinir21914182017-06-16 15:24:00 -0700292 @Test
293 public void testSelectTextByLongPressAndDrag() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800294 final String text = "abcd efg hijk lmn";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700295 onView(withId(R.id.textview)).perform(mouseClick());
296 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800297
298 onView(withId(R.id.textview)).perform(
299 mouseLongClickAndDragOnText(text.indexOf("f"), text.indexOf("j")));
300 onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
301 }
302
Siyamed Sinir21914182017-06-16 15:24:00 -0700303 @Test
304 public void testSelectTextByLongPressAndDrag_reverse() {
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800305 final String text = "abcd efg hijk lmn";
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700306 onView(withId(R.id.textview)).perform(mouseClick());
307 onView(withId(R.id.textview)).perform(replaceText(text));
Keisuke Kuroyanagi2ff41d42015-12-01 16:58:53 -0800308
309 onView(withId(R.id.textview)).perform(
310 mouseLongClickAndDragOnText(text.indexOf("j"), text.indexOf("f")));
311 onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
312 }
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800313
Siyamed Sinir21914182017-06-16 15:24:00 -0700314 @Test
315 public void testSelectTextByTripleClick() {
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800316 final StringBuilder builder = new StringBuilder();
317 builder.append("First paragraph.\n");
318 builder.append("Second paragraph.");
319 for (int i = 0; i < 10; i++) {
320 builder.append(" This paragraph is very long.");
321 }
322 builder.append('\n');
323 builder.append("Third paragraph.");
324 final String text = builder.toString();
325
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700326 onView(withId(R.id.textview)).perform(mouseClick());
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800327 onView(withId(R.id.textview)).perform(replaceText(text));
328
329 onView(withId(R.id.textview)).perform(
330 mouseTripleClickOnTextAtIndex(text.indexOf("rst")));
331 onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
332
333 onView(withId(R.id.textview)).perform(
334 mouseTripleClickOnTextAtIndex(text.indexOf("cond")));
335 onView(withId(R.id.textview)).check(hasSelection(
336 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
337
338 onView(withId(R.id.textview)).perform(
339 mouseTripleClickOnTextAtIndex(text.indexOf("ird")));
340 onView(withId(R.id.textview)).check(hasSelection("Third paragraph."));
341
342 onView(withId(R.id.textview)).perform(
343 mouseTripleClickOnTextAtIndex(text.indexOf("very long")));
344 onView(withId(R.id.textview)).check(hasSelection(
345 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
346 }
347
Siyamed Sinir21914182017-06-16 15:24:00 -0700348 @Test
349 public void testSelectTextByTripleClickAndDrag() {
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800350 final StringBuilder builder = new StringBuilder();
351 builder.append("First paragraph.\n");
352 builder.append("Second paragraph.");
353 for (int i = 0; i < 10; i++) {
354 builder.append(" This paragraph is very long.");
355 }
356 builder.append('\n');
357 builder.append("Third paragraph.");
358 final String text = builder.toString();
359
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700360 onView(withId(R.id.textview)).perform(mouseClick());
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800361 onView(withId(R.id.textview)).perform(replaceText(text));
362
363 onView(withId(R.id.textview)).perform(
364 mouseTripleClickAndDragOnText(text.indexOf("irst"), text.indexOf("st")));
365 onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
366
367 onView(withId(R.id.textview)).perform(
368 mouseTripleClickAndDragOnText(text.indexOf("cond"), text.indexOf("Third") - 2));
369 onView(withId(R.id.textview)).check(hasSelection(
370 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
371
372 onView(withId(R.id.textview)).perform(
373 mouseTripleClickAndDragOnText(text.indexOf("First"), text.indexOf("ird")));
374 onView(withId(R.id.textview)).check(hasSelection(text));
375 }
376
Siyamed Sinir21914182017-06-16 15:24:00 -0700377 @Test
378 public void testSelectTextByTripleClickAndDrag_reverse() {
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800379 final StringBuilder builder = new StringBuilder();
380 builder.append("First paragraph.\n");
381 builder.append("Second paragraph.");
382 for (int i = 0; i < 10; i++) {
383 builder.append(" This paragraph is very long.");
384 }
385 builder.append('\n');
386 builder.append("Third paragraph.");
387 final String text = builder.toString();
388
Siyamed Sinir6b61d812017-06-14 11:13:30 -0700389 onView(withId(R.id.textview)).perform(mouseClick());
Keisuke Kuroyanagi46faad62015-12-06 10:03:23 -0800390 onView(withId(R.id.textview)).perform(replaceText(text));
391
392 onView(withId(R.id.textview)).perform(
393 mouseTripleClickAndDragOnText(text.indexOf("st"), text.indexOf("irst")));
394 onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
395
396 onView(withId(R.id.textview)).perform(
397 mouseTripleClickAndDragOnText(text.indexOf("Third") - 2, text.indexOf("cond")));
398 onView(withId(R.id.textview)).check(hasSelection(
399 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
400
401 onView(withId(R.id.textview)).perform(
402 mouseTripleClickAndDragOnText(text.indexOf("ird"), text.indexOf("First")));
403 onView(withId(R.id.textview)).check(hasSelection(text));
404 }
Keisuke Kuroyanagi88cabed2015-10-08 19:12:56 +0900405}