| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.content.browser; | 5 package org.chromium.content.browser; |
| 6 | 6 |
| 7 import android.content.ClipData; | 7 import android.content.ClipData; |
| 8 import android.content.ClipboardManager; | 8 import android.content.ClipboardManager; |
| 9 import android.content.Context; | 9 import android.content.Context; |
| 10 import android.content.Intent; | 10 import android.content.Intent; |
| 11 import android.support.test.filters.SmallTest; | 11 import android.support.test.filters.SmallTest; |
| 12 import android.text.TextUtils; | 12 import android.text.TextUtils; |
| 13 | 13 |
| 14 import org.junit.Assert; |
| 15 import org.junit.Before; |
| 16 import org.junit.Rule; |
| 17 import org.junit.Test; |
| 18 import org.junit.runner.RunWith; |
| 19 |
| 14 import org.chromium.base.ThreadUtils; | 20 import org.chromium.base.ThreadUtils; |
| 21 import org.chromium.base.test.BaseJUnit4ClassRunner; |
| 15 import org.chromium.base.test.util.DisabledTest; | 22 import org.chromium.base.test.util.DisabledTest; |
| 16 import org.chromium.base.test.util.Feature; | 23 import org.chromium.base.test.util.Feature; |
| 17 import org.chromium.base.test.util.UrlUtils; | 24 import org.chromium.base.test.util.UrlUtils; |
| 18 import org.chromium.content.browser.input.ChromiumBaseInputConnection; | 25 import org.chromium.content.browser.input.ChromiumBaseInputConnection; |
| 19 import org.chromium.content.browser.input.ImeTestUtils; | 26 import org.chromium.content.browser.input.ImeTestUtils; |
| 20 import org.chromium.content.browser.test.util.Criteria; | 27 import org.chromium.content.browser.test.util.Criteria; |
| 21 import org.chromium.content.browser.test.util.CriteriaHelper; | 28 import org.chromium.content.browser.test.util.CriteriaHelper; |
| 22 import org.chromium.content.browser.test.util.DOMUtils; | 29 import org.chromium.content.browser.test.util.DOMUtils; |
| 23 import org.chromium.content_shell_apk.ContentShellTestBase; | 30 import org.chromium.content_shell_apk.ContentShellActivityTestRule; |
| 24 | 31 |
| 25 import java.util.concurrent.Callable; | 32 import java.util.concurrent.Callable; |
| 26 | 33 |
| 27 /** | 34 /** |
| 28 * Integration tests for text selection-related behavior. | 35 * Integration tests for text selection-related behavior. |
| 29 */ | 36 */ |
| 30 public class ContentViewCoreSelectionTest extends ContentShellTestBase { | 37 @RunWith(BaseJUnit4ClassRunner.class) |
| 38 public class ContentViewCoreSelectionTest { |
| 39 @Rule |
| 40 public ContentShellActivityTestRule mActivityTestRule = new ContentShellActi
vityTestRule(); |
| 31 private static final String DATA_URL = UrlUtils.encodeHtmlDataUri( | 41 private static final String DATA_URL = UrlUtils.encodeHtmlDataUri( |
| 32 "<html><head><meta name=\"viewport\"" | 42 "<html><head><meta name=\"viewport\"" |
| 33 + "content=\"width=device-width, initial-scale=1.1, maximum-scale=1.
5\" /></head>" | 43 + "content=\"width=device-width, initial-scale=1.1, maximum-scale=1.
5\" /></head>" |
| 34 + "<body><form action=\"about:blank\">" | 44 + "<body><form action=\"about:blank\">" |
| 35 + "<input id=\"empty_input_text\" type=\"text\" />" | 45 + "<input id=\"empty_input_text\" type=\"text\" />" |
| 36 + "<br/><input id=\"input_text\" type=\"text\" value=\"SampleInputTe
xt\" />" | 46 + "<br/><input id=\"input_text\" type=\"text\" value=\"SampleInputTe
xt\" />" |
| 37 + "<br/><textarea id=\"textarea\" rows=\"2\" cols=\"20\">SampleTextA
rea</textarea>" | 47 + "<br/><textarea id=\"textarea\" rows=\"2\" cols=\"20\">SampleTextA
rea</textarea>" |
| 38 + "<br/><input id=\"password\" type=\"password\" value=\"SamplePassw
ord\" size=\"10\"/>" | 48 + "<br/><input id=\"password\" type=\"password\" value=\"SamplePassw
ord\" size=\"10\"/>" |
| 39 + "<br/><p><span id=\"plain_text_1\">SamplePlainTextOne</span></p>" | 49 + "<br/><p><span id=\"plain_text_1\">SamplePlainTextOne</span></p>" |
| 40 + "<br/><p><span id=\"plain_text_2\">SamplePlainTextTwo</span></p>" | 50 + "<br/><p><span id=\"plain_text_2\">SamplePlainTextTwo</span></p>" |
| 41 + "<br/><input id=\"disabled_text\" type=\"text\" disabled value=\"S
ample Text\" />" | 51 + "<br/><input id=\"disabled_text\" type=\"text\" disabled value=\"S
ample Text\" />" |
| 42 + "</form></body></html>"); | 52 + "</form></body></html>"); |
| 43 private ContentViewCore mContentViewCore; | 53 private ContentViewCore mContentViewCore; |
| 44 private SelectionPopupController mSelectionPopupController; | 54 private SelectionPopupController mSelectionPopupController; |
| 45 | 55 |
| 46 @Override | 56 @Before |
| 47 public void setUp() throws Exception { | 57 public void setUp() throws Exception { |
| 48 super.setUp(); | 58 mActivityTestRule.launchContentShellWithUrl(DATA_URL); |
| 59 mActivityTestRule.waitForActiveShellToBeDoneLoading(); |
| 49 | 60 |
| 50 launchContentShellWithUrl(DATA_URL); | 61 mContentViewCore = mActivityTestRule.getContentViewCore(); |
| 51 waitForActiveShellToBeDoneLoading(); | |
| 52 | |
| 53 mContentViewCore = getContentViewCore(); | |
| 54 mSelectionPopupController = mContentViewCore.getSelectionPopupController
ForTesting(); | 62 mSelectionPopupController = mContentViewCore.getSelectionPopupController
ForTesting(); |
| 55 waitForSelectActionBarVisible(false); | 63 waitForSelectActionBarVisible(false); |
| 56 waitForPastePopupStatus(false); | 64 waitForPastePopupStatus(false); |
| 57 } | 65 } |
| 58 | 66 |
| 67 @Test |
| 59 @SmallTest | 68 @SmallTest |
| 60 @Feature({"TextSelection"}) | 69 @Feature({"TextSelection"}) |
| 61 @DisabledTest(message = "crbug.com/592428") | 70 @DisabledTest(message = "crbug.com/592428") |
| 62 public void testSelectionClearedAfterLossOfFocus() throws Throwable { | 71 public void testSelectionClearedAfterLossOfFocus() throws Throwable { |
| 63 requestFocusOnUiThread(true); | 72 requestFocusOnUiThread(true); |
| 64 | 73 |
| 65 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 74 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 66 waitForSelectActionBarVisible(true); | 75 waitForSelectActionBarVisible(true); |
| 67 | 76 |
| 68 requestFocusOnUiThread(false); | 77 requestFocusOnUiThread(false); |
| 69 waitForSelectActionBarVisible(false); | 78 waitForSelectActionBarVisible(false); |
| 70 assertFalse(mSelectionPopupController.hasSelection()); | 79 Assert.assertFalse(mSelectionPopupController.hasSelection()); |
| 71 | 80 |
| 72 requestFocusOnUiThread(true); | 81 requestFocusOnUiThread(true); |
| 73 waitForSelectActionBarVisible(false); | 82 waitForSelectActionBarVisible(false); |
| 74 assertFalse(mSelectionPopupController.hasSelection()); | 83 Assert.assertFalse(mSelectionPopupController.hasSelection()); |
| 75 } | 84 } |
| 76 | 85 |
| 86 @Test |
| 77 @SmallTest | 87 @SmallTest |
| 78 @Feature({"TextSelection"}) | 88 @Feature({"TextSelection"}) |
| 79 @DisabledTest(message = "crbug.com/592428") | 89 @DisabledTest(message = "crbug.com/592428") |
| 80 public void testSelectionPreservedAfterLossOfFocusIfRequested() throws Throw
able { | 90 public void testSelectionPreservedAfterLossOfFocusIfRequested() throws Throw
able { |
| 81 requestFocusOnUiThread(true); | 91 requestFocusOnUiThread(true); |
| 82 | 92 |
| 83 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 93 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 84 waitForSelectActionBarVisible(true); | 94 waitForSelectActionBarVisible(true); |
| 85 assertTrue(mSelectionPopupController.hasSelection()); | 95 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 86 | 96 |
| 87 mContentViewCore.preserveSelectionOnNextLossOfFocus(); | 97 mContentViewCore.preserveSelectionOnNextLossOfFocus(); |
| 88 requestFocusOnUiThread(false); | 98 requestFocusOnUiThread(false); |
| 89 waitForSelectActionBarVisible(false); | 99 waitForSelectActionBarVisible(false); |
| 90 assertTrue(mSelectionPopupController.hasSelection()); | 100 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 91 | 101 |
| 92 requestFocusOnUiThread(true); | 102 requestFocusOnUiThread(true); |
| 93 waitForSelectActionBarVisible(true); | 103 waitForSelectActionBarVisible(true); |
| 94 assertTrue(mSelectionPopupController.hasSelection()); | 104 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 95 | 105 |
| 96 // Losing focus yet again should properly clear the selection. | 106 // Losing focus yet again should properly clear the selection. |
| 97 requestFocusOnUiThread(false); | 107 requestFocusOnUiThread(false); |
| 98 waitForSelectActionBarVisible(false); | 108 waitForSelectActionBarVisible(false); |
| 99 assertFalse(mSelectionPopupController.hasSelection()); | 109 Assert.assertFalse(mSelectionPopupController.hasSelection()); |
| 100 } | 110 } |
| 101 | 111 |
| 112 @Test |
| 102 @SmallTest | 113 @SmallTest |
| 103 @Feature({"TextSelection"}) | 114 @Feature({"TextSelection"}) |
| 104 @DisabledTest(message = "crbug.com/592428") | 115 @DisabledTest(message = "crbug.com/592428") |
| 105 public void testSelectionPreservedAfterReshown() throws Throwable { | 116 public void testSelectionPreservedAfterReshown() throws Throwable { |
| 106 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 117 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 107 waitForSelectActionBarVisible(true); | 118 waitForSelectActionBarVisible(true); |
| 108 assertTrue(mSelectionPopupController.hasSelection()); | 119 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 109 | 120 |
| 110 setVisibileOnUiThread(false); | 121 setVisibileOnUiThread(false); |
| 111 waitForSelectActionBarVisible(false); | 122 waitForSelectActionBarVisible(false); |
| 112 assertTrue(mSelectionPopupController.hasSelection()); | 123 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 113 | 124 |
| 114 setVisibileOnUiThread(true); | 125 setVisibileOnUiThread(true); |
| 115 waitForSelectActionBarVisible(true); | 126 waitForSelectActionBarVisible(true); |
| 116 assertTrue(mSelectionPopupController.hasSelection()); | 127 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 117 } | 128 } |
| 118 | 129 |
| 130 @Test |
| 119 @SmallTest | 131 @SmallTest |
| 120 @Feature({"TextSelection"}) | 132 @Feature({"TextSelection"}) |
| 121 @DisabledTest(message = "crbug.com/592428") | 133 @DisabledTest(message = "crbug.com/592428") |
| 122 public void testSelectionPreservedAfterReattached() throws Throwable { | 134 public void testSelectionPreservedAfterReattached() throws Throwable { |
| 123 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 135 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 124 waitForSelectActionBarVisible(true); | 136 waitForSelectActionBarVisible(true); |
| 125 assertTrue(mSelectionPopupController.hasSelection()); | 137 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 126 | 138 |
| 127 setAttachedOnUiThread(false); | 139 setAttachedOnUiThread(false); |
| 128 waitForSelectActionBarVisible(false); | 140 waitForSelectActionBarVisible(false); |
| 129 assertTrue(mSelectionPopupController.hasSelection()); | 141 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 130 | 142 |
| 131 setAttachedOnUiThread(true); | 143 setAttachedOnUiThread(true); |
| 132 waitForSelectActionBarVisible(true); | 144 waitForSelectActionBarVisible(true); |
| 133 assertTrue(mSelectionPopupController.hasSelection()); | 145 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 134 } | 146 } |
| 135 | 147 |
| 136 /* | 148 /* |
| 137 @SmallTest | 149 @SmallTest |
| 138 @Feature({"TextInput"}) | 150 @Feature({"TextInput"}) |
| 139 */ | 151 */ |
| 152 @Test |
| 140 @DisabledTest(message = "https://crbug.com/592428") | 153 @DisabledTest(message = "https://crbug.com/592428") |
| 141 public void testPastePopupNotShownOnLongPressingNonEmptyInput() throws Throw
able { | 154 public void testPastePopupNotShownOnLongPressingNonEmptyInput() throws Throw
able { |
| 142 copyStringToClipboard("SampleTextToCopy"); | 155 copyStringToClipboard("SampleTextToCopy"); |
| 143 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); | 156 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); |
| 144 waitForPastePopupStatus(true); | 157 waitForPastePopupStatus(true); |
| 145 DOMUtils.longPressNode(mContentViewCore, "input_text"); | 158 DOMUtils.longPressNode(mContentViewCore, "input_text"); |
| 146 waitForSelectActionBarVisible(true); | 159 waitForSelectActionBarVisible(true); |
| 147 waitForPastePopupStatus(false); | 160 waitForPastePopupStatus(false); |
| 148 } | 161 } |
| 149 | 162 |
| 163 @Test |
| 150 @SmallTest | 164 @SmallTest |
| 151 @Feature({"TextInput"}) | 165 @Feature({"TextInput"}) |
| 152 public void testPastePopupClearedOnTappingEmptyInput() throws Throwable { | 166 public void testPastePopupClearedOnTappingEmptyInput() throws Throwable { |
| 153 copyStringToClipboard("SampleTextToCopy"); | 167 copyStringToClipboard("SampleTextToCopy"); |
| 154 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); | 168 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); |
| 155 waitForPastePopupStatus(true); | 169 waitForPastePopupStatus(true); |
| 156 DOMUtils.clickNode(mContentViewCore, "empty_input_text"); | 170 DOMUtils.clickNode(mContentViewCore, "empty_input_text"); |
| 157 waitForPastePopupStatus(false); | 171 waitForPastePopupStatus(false); |
| 158 } | 172 } |
| 159 | 173 |
| 174 @Test |
| 160 @SmallTest | 175 @SmallTest |
| 161 @Feature({"TextInput"}) | 176 @Feature({"TextInput"}) |
| 162 public void testPastePopupClearedOnTappingNonEmptyInput() throws Throwable { | 177 public void testPastePopupClearedOnTappingNonEmptyInput() throws Throwable { |
| 163 copyStringToClipboard("SampleTextToCopy"); | 178 copyStringToClipboard("SampleTextToCopy"); |
| 164 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); | 179 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); |
| 165 waitForPastePopupStatus(true); | 180 waitForPastePopupStatus(true); |
| 166 DOMUtils.clickNode(mContentViewCore, "input_text"); | 181 DOMUtils.clickNode(mContentViewCore, "input_text"); |
| 167 waitForPastePopupStatus(false); | 182 waitForPastePopupStatus(false); |
| 168 } | 183 } |
| 169 | 184 |
| 185 @Test |
| 170 @SmallTest | 186 @SmallTest |
| 171 @Feature({"TextInput"}) | 187 @Feature({"TextInput"}) |
| 172 public void testPastePopupClearedOnTappingOutsideInput() throws Throwable { | 188 public void testPastePopupClearedOnTappingOutsideInput() throws Throwable { |
| 173 copyStringToClipboard("SampleTextToCopy"); | 189 copyStringToClipboard("SampleTextToCopy"); |
| 174 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); | 190 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); |
| 175 waitForPastePopupStatus(true); | 191 waitForPastePopupStatus(true); |
| 176 DOMUtils.clickNode(mContentViewCore, "plain_text_2"); | 192 DOMUtils.clickNode(mContentViewCore, "plain_text_2"); |
| 177 waitForPastePopupStatus(false); | 193 waitForPastePopupStatus(false); |
| 178 } | 194 } |
| 179 | 195 |
| 196 @Test |
| 180 @SmallTest | 197 @SmallTest |
| 181 @Feature({"TextInput"}) | 198 @Feature({"TextInput"}) |
| 182 public void testPastePopupClearedOnLongPressingOutsideInput() throws Throwab
le { | 199 public void testPastePopupClearedOnLongPressingOutsideInput() throws Throwab
le { |
| 183 copyStringToClipboard("SampleTextToCopy"); | 200 copyStringToClipboard("SampleTextToCopy"); |
| 184 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); | 201 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); |
| 185 waitForPastePopupStatus(true); | 202 waitForPastePopupStatus(true); |
| 186 DOMUtils.longPressNode(mContentViewCore, "plain_text_2"); | 203 DOMUtils.longPressNode(mContentViewCore, "plain_text_2"); |
| 187 waitForPastePopupStatus(false); | 204 waitForPastePopupStatus(false); |
| 188 } | 205 } |
| 189 | 206 |
| 207 @Test |
| 190 @SmallTest | 208 @SmallTest |
| 191 @Feature({"TextInput"}) | 209 @Feature({"TextInput"}) |
| 192 public void testPastePopupNotShownOnLongPressingDisabledInput() throws Throw
able { | 210 public void testPastePopupNotShownOnLongPressingDisabledInput() throws Throw
able { |
| 193 copyStringToClipboard("SampleTextToCopy"); | 211 copyStringToClipboard("SampleTextToCopy"); |
| 194 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); | 212 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); |
| 195 waitForPastePopupStatus(true); | 213 waitForPastePopupStatus(true); |
| 196 waitForInsertion(true); | 214 waitForInsertion(true); |
| 197 DOMUtils.longPressNode(mContentViewCore, "disabled_text"); | 215 DOMUtils.longPressNode(mContentViewCore, "disabled_text"); |
| 198 waitForPastePopupStatus(false); | 216 waitForPastePopupStatus(false); |
| 199 waitForInsertion(false); | 217 waitForInsertion(false); |
| 200 } | 218 } |
| 201 | 219 |
| 202 /* | 220 /* |
| 203 @SmallTest | 221 @SmallTest |
| 204 @Feature({"TextInput"}) | 222 @Feature({"TextInput"}) |
| 205 */ | 223 */ |
| 224 @Test |
| 206 @DisabledTest(message = "https://crbug.com/592428") | 225 @DisabledTest(message = "https://crbug.com/592428") |
| 207 public void testPastePopupDismissedOnDestroy() throws Throwable { | 226 public void testPastePopupDismissedOnDestroy() throws Throwable { |
| 208 copyStringToClipboard("SampleTextToCopy"); | 227 copyStringToClipboard("SampleTextToCopy"); |
| 209 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); | 228 DOMUtils.longPressNode(mContentViewCore, "empty_input_text"); |
| 210 waitForPastePopupStatus(true); | 229 waitForPastePopupStatus(true); |
| 211 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 230 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 212 @Override | 231 @Override |
| 213 public void run() { | 232 public void run() { |
| 214 mContentViewCore.destroy(); | 233 mContentViewCore.destroy(); |
| 215 } | 234 } |
| 216 }); | 235 }); |
| 217 waitForPastePopupStatus(false); | 236 waitForPastePopupStatus(false); |
| 218 } | 237 } |
| 219 | 238 |
| 239 @Test |
| 220 @SmallTest | 240 @SmallTest |
| 221 @Feature({"TextInput"}) | 241 @Feature({"TextInput"}) |
| 222 @DisabledTest(message = "crbug.com/592428") | 242 @DisabledTest(message = "crbug.com/592428") |
| 223 public void testActionBarConfiguredCorrectlyForInput() throws Throwable { | 243 public void testActionBarConfiguredCorrectlyForInput() throws Throwable { |
| 224 DOMUtils.longPressNode(mContentViewCore, "input_text"); | 244 DOMUtils.longPressNode(mContentViewCore, "input_text"); |
| 225 waitForSelectActionBarVisible(true); | 245 waitForSelectActionBarVisible(true); |
| 226 assertTrue(mSelectionPopupController.hasSelection()); | 246 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 227 assertTrue(mSelectionPopupController.isActionModeValid()); | 247 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 228 assertTrue(mSelectionPopupController.isSelectionEditable()); | 248 Assert.assertTrue(mSelectionPopupController.isSelectionEditable()); |
| 229 assertFalse(mSelectionPopupController.isSelectionPassword()); | 249 Assert.assertFalse(mSelectionPopupController.isSelectionPassword()); |
| 230 } | 250 } |
| 231 | 251 |
| 252 @Test |
| 232 @SmallTest | 253 @SmallTest |
| 233 @Feature({"TextInput"}) | 254 @Feature({"TextInput"}) |
| 234 @DisabledTest(message = "crbug.com/592428") | 255 @DisabledTest(message = "crbug.com/592428") |
| 235 public void testActionBarConfiguredCorrectlyForPassword() throws Throwable { | 256 public void testActionBarConfiguredCorrectlyForPassword() throws Throwable { |
| 236 DOMUtils.longPressNode(mContentViewCore, "password"); | 257 DOMUtils.longPressNode(mContentViewCore, "password"); |
| 237 waitForSelectActionBarVisible(true); | 258 waitForSelectActionBarVisible(true); |
| 238 assertTrue(mSelectionPopupController.hasSelection()); | 259 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 239 assertTrue(mSelectionPopupController.isActionModeValid()); | 260 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 240 assertTrue(mSelectionPopupController.isSelectionEditable()); | 261 Assert.assertTrue(mSelectionPopupController.isSelectionEditable()); |
| 241 assertTrue(mSelectionPopupController.isSelectionPassword()); | 262 Assert.assertTrue(mSelectionPopupController.isSelectionPassword()); |
| 242 } | 263 } |
| 243 | 264 |
| 265 @Test |
| 244 @SmallTest | 266 @SmallTest |
| 245 @Feature({"TextInput"}) | 267 @Feature({"TextInput"}) |
| 246 @DisabledTest(message = "crbug.com/592428") | 268 @DisabledTest(message = "crbug.com/592428") |
| 247 public void testActionBarConfiguredCorrectlyForPlainText() throws Throwable
{ | 269 public void testActionBarConfiguredCorrectlyForPlainText() throws Throwable
{ |
| 248 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); | 270 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); |
| 249 waitForSelectActionBarVisible(true); | 271 waitForSelectActionBarVisible(true); |
| 250 assertTrue(mSelectionPopupController.hasSelection()); | 272 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 251 assertTrue(mSelectionPopupController.isActionModeValid()); | 273 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 252 assertFalse(mSelectionPopupController.isSelectionEditable()); | 274 Assert.assertFalse(mSelectionPopupController.isSelectionEditable()); |
| 253 assertFalse(mSelectionPopupController.isSelectionPassword()); | 275 Assert.assertFalse(mSelectionPopupController.isSelectionPassword()); |
| 254 } | 276 } |
| 255 | 277 |
| 278 @Test |
| 256 @SmallTest | 279 @SmallTest |
| 257 @Feature({"TextInput"}) | 280 @Feature({"TextInput"}) |
| 258 @DisabledTest(message = "crbug.com/592428") | 281 @DisabledTest(message = "crbug.com/592428") |
| 259 public void testActionBarConfiguredCorrectlyForTextArea() throws Throwable { | 282 public void testActionBarConfiguredCorrectlyForTextArea() throws Throwable { |
| 260 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 283 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 261 waitForSelectActionBarVisible(true); | 284 waitForSelectActionBarVisible(true); |
| 262 assertTrue(mSelectionPopupController.hasSelection()); | 285 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 263 assertTrue(mSelectionPopupController.isActionModeValid()); | 286 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 264 assertTrue(mSelectionPopupController.isSelectionEditable()); | 287 Assert.assertTrue(mSelectionPopupController.isSelectionEditable()); |
| 265 assertFalse(mSelectionPopupController.isSelectionPassword()); | 288 Assert.assertFalse(mSelectionPopupController.isSelectionPassword()); |
| 266 } | 289 } |
| 267 | 290 |
| 291 @Test |
| 268 @SmallTest | 292 @SmallTest |
| 269 @Feature({"TextInput"}) | 293 @Feature({"TextInput"}) |
| 270 @DisabledTest(message = "crbug.com/592428") | 294 @DisabledTest(message = "crbug.com/592428") |
| 271 public void testSelectActionBarPlainTextCopy() throws Exception { | 295 public void testSelectActionBarPlainTextCopy() throws Exception { |
| 272 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); | 296 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); |
| 273 waitForSelectActionBarVisible(true); | 297 waitForSelectActionBarVisible(true); |
| 274 assertTrue(mSelectionPopupController.hasSelection()); | 298 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 275 assertTrue(mSelectionPopupController.isActionModeValid()); | 299 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 276 selectActionBarCopy(); | 300 selectActionBarCopy(); |
| 277 waitForClipboardContents(mContentViewCore.getContext(), "SamplePlainText
One"); | 301 waitForClipboardContents(mContentViewCore.getContext(), "SamplePlainText
One"); |
| 278 } | 302 } |
| 279 | 303 |
| 304 @Test |
| 280 @SmallTest | 305 @SmallTest |
| 281 @Feature({"TextInput"}) | 306 @Feature({"TextInput"}) |
| 282 @DisabledTest(message = "crbug.com/592428") | 307 @DisabledTest(message = "crbug.com/592428") |
| 283 public void testSelectActionBarInputCopy() throws Exception { | 308 public void testSelectActionBarInputCopy() throws Exception { |
| 284 DOMUtils.longPressNode(mContentViewCore, "input_text"); | 309 DOMUtils.longPressNode(mContentViewCore, "input_text"); |
| 285 waitForSelectActionBarVisible(true); | 310 waitForSelectActionBarVisible(true); |
| 286 assertTrue(mSelectionPopupController.hasSelection()); | 311 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 287 assertTrue(mSelectionPopupController.isActionModeValid()); | 312 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 288 selectActionBarCopy(); | 313 selectActionBarCopy(); |
| 289 waitForClipboardContents(mContentViewCore.getContext(), "SampleInputText
"); | 314 waitForClipboardContents(mContentViewCore.getContext(), "SampleInputText
"); |
| 290 } | 315 } |
| 291 | 316 |
| 317 @Test |
| 292 @SmallTest | 318 @SmallTest |
| 293 @Feature({"TextInput"}) | 319 @Feature({"TextInput"}) |
| 294 @DisabledTest(message = "crbug.com/592428") | 320 @DisabledTest(message = "crbug.com/592428") |
| 295 public void testSelectActionBarPasswordCopy() throws Exception { | 321 public void testSelectActionBarPasswordCopy() throws Exception { |
| 296 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); | 322 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); |
| 297 waitForSelectActionBarVisible(true); | 323 waitForSelectActionBarVisible(true); |
| 298 assertTrue(mSelectionPopupController.hasSelection()); | 324 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 299 assertTrue(mSelectionPopupController.isActionModeValid()); | 325 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 300 selectActionBarCopy(); | 326 selectActionBarCopy(); |
| 301 waitForClipboardContents(mContentViewCore.getContext(), "SamplePlainText
One"); | 327 waitForClipboardContents(mContentViewCore.getContext(), "SamplePlainText
One"); |
| 302 DOMUtils.longPressNode(mContentViewCore, "password"); | 328 DOMUtils.longPressNode(mContentViewCore, "password"); |
| 303 waitForSelectActionBarVisible(true); | 329 waitForSelectActionBarVisible(true); |
| 304 assertTrue(mSelectionPopupController.hasSelection()); | 330 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 305 assertTrue(mSelectionPopupController.isActionModeValid()); | 331 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 306 selectActionBarCopy(); | 332 selectActionBarCopy(); |
| 307 // Copy option won't be there for Password, hence no change in Clipboard | 333 // Copy option won't be there for Password, hence no change in Clipboard |
| 308 // Validating with previous Clipboard content | 334 // Validating with previous Clipboard content |
| 309 waitForClipboardContents(mContentViewCore.getContext(), "SamplePlainText
One"); | 335 waitForClipboardContents(mContentViewCore.getContext(), "SamplePlainText
One"); |
| 310 } | 336 } |
| 311 | 337 |
| 338 @Test |
| 312 @SmallTest | 339 @SmallTest |
| 313 @Feature({"TextInput"}) | 340 @Feature({"TextInput"}) |
| 314 @DisabledTest(message = "crbug.com/592428") | 341 @DisabledTest(message = "crbug.com/592428") |
| 315 public void testSelectActionBarTextAreaCopy() throws Exception { | 342 public void testSelectActionBarTextAreaCopy() throws Exception { |
| 316 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 343 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 317 waitForSelectActionBarVisible(true); | 344 waitForSelectActionBarVisible(true); |
| 318 assertTrue(mSelectionPopupController.hasSelection()); | 345 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 319 assertTrue(mSelectionPopupController.isActionModeValid()); | 346 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 320 selectActionBarCopy(); | 347 selectActionBarCopy(); |
| 321 waitForClipboardContents(mContentViewCore.getContext(), "SampleTextArea"
); | 348 waitForClipboardContents(mContentViewCore.getContext(), "SampleTextArea"
); |
| 322 } | 349 } |
| 323 | 350 |
| 351 @Test |
| 324 @SmallTest | 352 @SmallTest |
| 325 @Feature({"TextSelection"}) | 353 @Feature({"TextSelection"}) |
| 326 @DisabledTest(message = "crbug.com/592428") | 354 @DisabledTest(message = "crbug.com/592428") |
| 327 public void testSelectActionBarPlainTextCut() throws Exception { | 355 public void testSelectActionBarPlainTextCut() throws Throwable { |
| 328 copyStringToClipboard("SampleTextToCopy"); | 356 copyStringToClipboard("SampleTextToCopy"); |
| 329 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); | 357 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); |
| 330 waitForSelectActionBarVisible(true); | 358 waitForSelectActionBarVisible(true); |
| 331 assertTrue(mSelectionPopupController.hasSelection()); | 359 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 332 assertEquals(mSelectionPopupController.getSelectedText(), "SamplePlainTe
xtOne"); | 360 Assert.assertEquals(mSelectionPopupController.getSelectedText(), "Sample
PlainTextOne"); |
| 333 assertTrue(mSelectionPopupController.isActionModeValid()); | 361 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 334 selectActionBarCut(); | 362 selectActionBarCut(); |
| 335 waitForSelectActionBarVisible(true); | 363 waitForSelectActionBarVisible(true); |
| 336 assertTrue(mSelectionPopupController.hasSelection()); | 364 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 337 // Cut option won't be available for plain text. | 365 // Cut option won't be available for plain text. |
| 338 // Hence validating previous Clipboard content. | 366 // Hence validating previous Clipboard content. |
| 339 waitForClipboardContents(mContentViewCore.getContext(), "SampleTextToCop
y"); | 367 waitForClipboardContents(mContentViewCore.getContext(), "SampleTextToCop
y"); |
| 340 } | 368 } |
| 341 | 369 |
| 370 @Test |
| 342 @SmallTest | 371 @SmallTest |
| 343 @Feature({"TextInput"}) | 372 @Feature({"TextInput"}) |
| 344 @DisabledTest(message = "crbug.com/592428") | 373 @DisabledTest(message = "crbug.com/592428") |
| 345 public void testSelectActionBarInputCut() throws Exception { | 374 public void testSelectActionBarInputCut() throws Exception { |
| 346 DOMUtils.longPressNode(mContentViewCore, "input_text"); | 375 DOMUtils.longPressNode(mContentViewCore, "input_text"); |
| 347 waitForSelectActionBarVisible(true); | 376 waitForSelectActionBarVisible(true); |
| 348 assertTrue(mSelectionPopupController.hasSelection()); | 377 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 349 assertEquals(mSelectionPopupController.getSelectedText(), "SampleInputTe
xt"); | 378 Assert.assertEquals(mSelectionPopupController.getSelectedText(), "Sample
InputText"); |
| 350 assertTrue(mSelectionPopupController.isActionModeValid()); | 379 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 351 selectActionBarCut(); | 380 selectActionBarCut(); |
| 352 waitForSelectActionBarVisible(false); | 381 waitForSelectActionBarVisible(false); |
| 353 assertFalse(mSelectionPopupController.hasSelection()); | 382 Assert.assertFalse(mSelectionPopupController.hasSelection()); |
| 354 waitForClipboardContents(mContentViewCore.getContext(), "SampleInputText
"); | 383 waitForClipboardContents(mContentViewCore.getContext(), "SampleInputText
"); |
| 355 assertEquals(mSelectionPopupController.getSelectedText(), ""); | 384 Assert.assertEquals(mSelectionPopupController.getSelectedText(), ""); |
| 356 } | 385 } |
| 357 | 386 |
| 358 @SmallTest | 387 @Test |
| 359 @Feature({"TextInput"}) | 388 @SmallTest |
| 360 @DisabledTest(message = "crbug.com/592428") | 389 @Feature({"TextInput"}) |
| 361 public void testSelectActionBarPasswordCut() throws Exception { | 390 @DisabledTest(message = "crbug.com/592428") |
| 391 public void testSelectActionBarPasswordCut() throws Throwable { |
| 362 copyStringToClipboard("SampleTextToCopy"); | 392 copyStringToClipboard("SampleTextToCopy"); |
| 363 DOMUtils.longPressNode(mContentViewCore, "password"); | 393 DOMUtils.longPressNode(mContentViewCore, "password"); |
| 364 waitForSelectActionBarVisible(true); | 394 waitForSelectActionBarVisible(true); |
| 365 assertTrue(mSelectionPopupController.hasSelection()); | 395 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 366 assertTrue(mSelectionPopupController.isActionModeValid()); | 396 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 367 selectActionBarCut(); | 397 selectActionBarCut(); |
| 368 waitForSelectActionBarVisible(true); | 398 waitForSelectActionBarVisible(true); |
| 369 assertTrue(mSelectionPopupController.hasSelection()); | 399 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 370 // Cut option won't be there for Password, hence no change in Clipboard | 400 // Cut option won't be there for Password, hence no change in Clipboard |
| 371 // Validating with previous Clipboard content | 401 // Validating with previous Clipboard content |
| 372 waitForClipboardContents(mContentViewCore.getContext(), "SampleTextToCop
y"); | 402 waitForClipboardContents(mContentViewCore.getContext(), "SampleTextToCop
y"); |
| 373 } | 403 } |
| 374 | 404 |
| 405 @Test |
| 375 @SmallTest | 406 @SmallTest |
| 376 @Feature({"TextInput"}) | 407 @Feature({"TextInput"}) |
| 377 @DisabledTest(message = "crbug.com/592428") | 408 @DisabledTest(message = "crbug.com/592428") |
| 378 public void testSelectActionBarTextAreaCut() throws Exception { | 409 public void testSelectActionBarTextAreaCut() throws Exception { |
| 379 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 410 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 380 waitForSelectActionBarVisible(true); | 411 waitForSelectActionBarVisible(true); |
| 381 assertTrue(mSelectionPopupController.hasSelection()); | 412 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 382 assertEquals(mSelectionPopupController.getSelectedText(), "SampleTextAre
a"); | 413 Assert.assertEquals(mSelectionPopupController.getSelectedText(), "Sample
TextArea"); |
| 383 assertTrue(mSelectionPopupController.isActionModeValid()); | 414 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 384 selectActionBarCut(); | 415 selectActionBarCut(); |
| 385 waitForSelectActionBarVisible(false); | 416 waitForSelectActionBarVisible(false); |
| 386 assertFalse(mSelectionPopupController.hasSelection()); | 417 Assert.assertFalse(mSelectionPopupController.hasSelection()); |
| 387 waitForClipboardContents(mContentViewCore.getContext(), "SampleTextArea"
); | 418 waitForClipboardContents(mContentViewCore.getContext(), "SampleTextArea"
); |
| 388 assertEquals(mSelectionPopupController.getSelectedText(), ""); | 419 Assert.assertEquals(mSelectionPopupController.getSelectedText(), ""); |
| 389 } | 420 } |
| 390 | 421 |
| 422 @Test |
| 391 @SmallTest | 423 @SmallTest |
| 392 @Feature({"TextSelection"}) | 424 @Feature({"TextSelection"}) |
| 393 @DisabledTest(message = "crbug.com/592428") | 425 @DisabledTest(message = "crbug.com/592428") |
| 394 public void testSelectActionBarPlainTextSelectAll() throws Exception { | 426 public void testSelectActionBarPlainTextSelectAll() throws Exception { |
| 395 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); | 427 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); |
| 396 waitForSelectActionBarVisible(true); | 428 waitForSelectActionBarVisible(true); |
| 397 assertTrue(mSelectionPopupController.hasSelection()); | 429 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 398 assertTrue(mSelectionPopupController.isActionModeValid()); | 430 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 399 selectActionBarSelectAll(); | 431 selectActionBarSelectAll(); |
| 400 assertTrue(mSelectionPopupController.hasSelection()); | 432 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 401 waitForSelectActionBarVisible(true); | 433 waitForSelectActionBarVisible(true); |
| 402 } | 434 } |
| 403 | 435 |
| 436 @Test |
| 404 @SmallTest | 437 @SmallTest |
| 405 @Feature({"TextInput"}) | 438 @Feature({"TextInput"}) |
| 406 @DisabledTest(message = "crbug.com/592428") | 439 @DisabledTest(message = "crbug.com/592428") |
| 407 public void testSelectActionBarInputSelectAll() throws Exception { | 440 public void testSelectActionBarInputSelectAll() throws Exception { |
| 408 DOMUtils.longPressNode(mContentViewCore, "input_text"); | 441 DOMUtils.longPressNode(mContentViewCore, "input_text"); |
| 409 waitForSelectActionBarVisible(true); | 442 waitForSelectActionBarVisible(true); |
| 410 assertTrue(mSelectionPopupController.hasSelection()); | 443 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 411 assertTrue(mSelectionPopupController.isActionModeValid()); | 444 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 412 selectActionBarSelectAll(); | 445 selectActionBarSelectAll(); |
| 413 assertTrue(mSelectionPopupController.hasSelection()); | 446 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 414 waitForSelectActionBarVisible(true); | 447 waitForSelectActionBarVisible(true); |
| 415 assertEquals(mSelectionPopupController.getSelectedText(), "SampleInputTe
xt"); | 448 Assert.assertEquals(mSelectionPopupController.getSelectedText(), "Sample
InputText"); |
| 416 } | 449 } |
| 417 | 450 |
| 451 @Test |
| 418 @SmallTest | 452 @SmallTest |
| 419 @Feature({"TextInput"}) | 453 @Feature({"TextInput"}) |
| 420 @DisabledTest(message = "crbug.com/592428") | 454 @DisabledTest(message = "crbug.com/592428") |
| 421 public void testSelectActionBarPasswordSelectAll() throws Exception { | 455 public void testSelectActionBarPasswordSelectAll() throws Exception { |
| 422 DOMUtils.longPressNode(mContentViewCore, "password"); | 456 DOMUtils.longPressNode(mContentViewCore, "password"); |
| 423 waitForSelectActionBarVisible(true); | 457 waitForSelectActionBarVisible(true); |
| 424 assertTrue(mSelectionPopupController.hasSelection()); | 458 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 425 assertTrue(mSelectionPopupController.isActionModeValid()); | 459 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 426 selectActionBarSelectAll(); | 460 selectActionBarSelectAll(); |
| 427 assertTrue(mSelectionPopupController.hasSelection()); | 461 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 428 waitForSelectActionBarVisible(true); | 462 waitForSelectActionBarVisible(true); |
| 429 } | 463 } |
| 430 | 464 |
| 465 @Test |
| 431 @SmallTest | 466 @SmallTest |
| 432 @Feature({"TextInput"}) | 467 @Feature({"TextInput"}) |
| 433 @DisabledTest(message = "crbug.com/592428") | 468 @DisabledTest(message = "crbug.com/592428") |
| 434 public void testSelectActionBarTextAreaSelectAll() throws Exception { | 469 public void testSelectActionBarTextAreaSelectAll() throws Exception { |
| 435 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 470 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 436 waitForSelectActionBarVisible(true); | 471 waitForSelectActionBarVisible(true); |
| 437 assertTrue(mSelectionPopupController.hasSelection()); | 472 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 438 assertTrue(mSelectionPopupController.isActionModeValid()); | 473 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 439 selectActionBarSelectAll(); | 474 selectActionBarSelectAll(); |
| 440 assertTrue(mSelectionPopupController.hasSelection()); | 475 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 441 waitForSelectActionBarVisible(true); | 476 waitForSelectActionBarVisible(true); |
| 442 assertEquals(mSelectionPopupController.getSelectedText(), "SampleTextAre
a"); | 477 Assert.assertEquals(mSelectionPopupController.getSelectedText(), "Sample
TextArea"); |
| 443 } | 478 } |
| 444 | 479 |
| 445 private CharSequence getTextBeforeCursor(final int length, final int flags)
{ | 480 private CharSequence getTextBeforeCursor(final int length, final int flags)
{ |
| 446 final ChromiumBaseInputConnection connection = | 481 final ChromiumBaseInputConnection connection = |
| 447 mContentViewCore.getImeAdapterForTest().getInputConnectionForTes
t(); | 482 mContentViewCore.getImeAdapterForTest().getInputConnectionForTes
t(); |
| 448 return ImeTestUtils.runBlockingOnHandlerNoException( | 483 return ImeTestUtils.runBlockingOnHandlerNoException( |
| 449 connection.getHandler(), new Callable<CharSequence>() { | 484 connection.getHandler(), new Callable<CharSequence>() { |
| 450 @Override | 485 @Override |
| 451 public CharSequence call() throws Exception { | 486 public CharSequence call() throws Exception { |
| 452 return connection.getTextBeforeCursor(length, flags); | 487 return connection.getTextBeforeCursor(length, flags); |
| 453 } | 488 } |
| 454 }); | 489 }); |
| 455 } | 490 } |
| 456 | 491 |
| 457 /** | 492 /** |
| 458 * @SmallTest | 493 * @SmallTest |
| 459 * @Feature({"TextSelection", "TextInput"}) | 494 * @Feature({"TextSelection", "TextInput"}) |
| 460 */ | 495 */ |
| 496 @Test |
| 461 @DisabledTest(message = "http://crbug.com/606942") | 497 @DisabledTest(message = "http://crbug.com/606942") |
| 462 public void testCursorPositionAfterHidingActionMode() throws Exception { | 498 public void testCursorPositionAfterHidingActionMode() throws Exception { |
| 463 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 499 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 464 waitForSelectActionBarVisible(true); | 500 waitForSelectActionBarVisible(true); |
| 465 assertTrue(mSelectionPopupController.hasSelection()); | 501 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 466 assertTrue(mSelectionPopupController.isActionModeValid()); | 502 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 467 selectActionBarSelectAll(); | 503 selectActionBarSelectAll(); |
| 468 assertTrue(mSelectionPopupController.hasSelection()); | 504 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 469 waitForSelectActionBarVisible(true); | 505 waitForSelectActionBarVisible(true); |
| 470 assertEquals(mSelectionPopupController.getSelectedText(), "SampleTextAre
a"); | 506 Assert.assertEquals(mSelectionPopupController.getSelectedText(), "Sample
TextArea"); |
| 471 hideSelectActionMode(); | 507 hideSelectActionMode(); |
| 472 waitForSelectActionBarVisible(false); | 508 waitForSelectActionBarVisible(false); |
| 473 CriteriaHelper.pollInstrumentationThread( | 509 CriteriaHelper.pollInstrumentationThread( |
| 474 Criteria.equals("SampleTextArea", new Callable<CharSequence>() { | 510 Criteria.equals("SampleTextArea", new Callable<CharSequence>() { |
| 475 @Override | 511 @Override |
| 476 public CharSequence call() { | 512 public CharSequence call() { |
| 477 return getTextBeforeCursor(50, 0); | 513 return getTextBeforeCursor(50, 0); |
| 478 } | 514 } |
| 479 })); | 515 })); |
| 480 } | 516 } |
| 481 | 517 |
| 518 @Test |
| 482 @SmallTest | 519 @SmallTest |
| 483 @Feature({"TextSelection"}) | 520 @Feature({"TextSelection"}) |
| 484 @DisabledTest(message = "crbug.com/592428") | 521 @DisabledTest(message = "crbug.com/592428") |
| 485 public void testSelectActionBarPlainTextPaste() throws Exception { | 522 public void testSelectActionBarPlainTextPaste() throws Throwable { |
| 486 copyStringToClipboard("SampleTextToCopy"); | 523 copyStringToClipboard("SampleTextToCopy"); |
| 487 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); | 524 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); |
| 488 waitForSelectActionBarVisible(true); | 525 waitForSelectActionBarVisible(true); |
| 489 assertTrue(mSelectionPopupController.hasSelection()); | 526 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 490 assertTrue(mSelectionPopupController.isActionModeValid()); | 527 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 491 selectActionBarPaste(); | 528 selectActionBarPaste(); |
| 492 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); | 529 DOMUtils.longPressNode(mContentViewCore, "plain_text_1"); |
| 493 waitForSelectActionBarVisible(true); | 530 waitForSelectActionBarVisible(true); |
| 494 assertTrue(mSelectionPopupController.hasSelection()); | 531 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 495 // Paste option won't be available for plain text. | 532 // Paste option won't be available for plain text. |
| 496 // Hence content won't be changed. | 533 // Hence content won't be changed. |
| 497 assertNotSame(mSelectionPopupController.getSelectedText(), "SampleTextTo
Copy"); | 534 Assert.assertNotSame(mSelectionPopupController.getSelectedText(), "Sampl
eTextToCopy"); |
| 498 } | 535 } |
| 499 | 536 |
| 537 @Test |
| 500 @SmallTest | 538 @SmallTest |
| 501 @Feature({"TextInput"}) | 539 @Feature({"TextInput"}) |
| 502 @DisabledTest(message = "crbug.com/592428") | 540 @DisabledTest(message = "crbug.com/592428") |
| 503 public void testSelectActionBarInputPaste() throws Exception { | 541 public void testSelectActionBarInputPaste() throws Throwable { |
| 504 copyStringToClipboard("SampleTextToCopy"); | 542 copyStringToClipboard("SampleTextToCopy"); |
| 505 | 543 |
| 506 // Select the input field. | 544 // Select the input field. |
| 507 DOMUtils.longPressNode(mContentViewCore, "input_text"); | 545 DOMUtils.longPressNode(mContentViewCore, "input_text"); |
| 508 waitForSelectActionBarVisible(true); | 546 waitForSelectActionBarVisible(true); |
| 509 assertTrue(mSelectionPopupController.hasSelection()); | 547 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 510 | 548 |
| 511 // Paste into the input field. | 549 // Paste into the input field. |
| 512 assertTrue(mSelectionPopupController.isActionModeValid()); | 550 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 513 selectActionBarPaste(); | 551 selectActionBarPaste(); |
| 514 waitForSelectActionBarVisible(false); | 552 waitForSelectActionBarVisible(false); |
| 515 assertFalse(mSelectionPopupController.hasSelection()); | 553 Assert.assertFalse(mSelectionPopupController.hasSelection()); |
| 516 | 554 |
| 517 // Ensure the new text matches the pasted text. | 555 // Ensure the new text matches the pasted text. |
| 518 DOMUtils.longPressNode(mContentViewCore, "input_text"); | 556 DOMUtils.longPressNode(mContentViewCore, "input_text"); |
| 519 waitForSelectActionBarVisible(true); | 557 waitForSelectActionBarVisible(true); |
| 520 assertTrue(mSelectionPopupController.hasSelection()); | 558 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 521 assertEquals("SampleTextToCopy", mSelectionPopupController.getSelectedTe
xt()); | 559 Assert.assertEquals("SampleTextToCopy", mSelectionPopupController.getSel
ectedText()); |
| 522 } | 560 } |
| 523 | 561 |
| 524 /* | 562 /* |
| 525 @SmallTest | 563 @SmallTest |
| 526 @Feature({"TextInput"}) | 564 @Feature({"TextInput"}) |
| 527 */ | 565 */ |
| 566 @Test |
| 528 @DisabledTest(message = "https://crbug.com/592428") | 567 @DisabledTest(message = "https://crbug.com/592428") |
| 529 public void testSelectActionBarPasswordPaste() throws Exception { | 568 public void testSelectActionBarPasswordPaste() throws Throwable { |
| 530 copyStringToClipboard("SamplePassword2"); | 569 copyStringToClipboard("SamplePassword2"); |
| 531 | 570 |
| 532 // Select the password field. | 571 // Select the password field. |
| 533 DOMUtils.longPressNode(mContentViewCore, "password"); | 572 DOMUtils.longPressNode(mContentViewCore, "password"); |
| 534 waitForSelectActionBarVisible(true); | 573 waitForSelectActionBarVisible(true); |
| 535 assertTrue(mSelectionPopupController.hasSelection()); | 574 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 536 assertEquals(mSelectionPopupController.getSelectedText().length(), | 575 Assert.assertEquals( |
| 537 "SamplePassword".length()); | 576 mSelectionPopupController.getSelectedText().length(), "SamplePas
sword".length()); |
| 538 | 577 |
| 539 // Paste "SamplePassword2" into the password field, replacing | 578 // Paste "SamplePassword2" into the password field, replacing |
| 540 // "SamplePassword". | 579 // "SamplePassword". |
| 541 assertTrue(mSelectionPopupController.isActionModeValid()); | 580 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 542 selectActionBarPaste(); | 581 selectActionBarPaste(); |
| 543 waitForSelectActionBarVisible(false); | 582 waitForSelectActionBarVisible(false); |
| 544 assertFalse(mSelectionPopupController.hasSelection()); | 583 Assert.assertFalse(mSelectionPopupController.hasSelection()); |
| 545 | 584 |
| 546 // Ensure the new text matches the pasted text. Note that we can't | 585 // Ensure the new text matches the pasted text. Note that we can't |
| 547 // actually compare strings as password field selections only provide | 586 // actually compare strings as password field selections only provide |
| 548 // a placeholder with the correct length. | 587 // a placeholder with the correct length. |
| 549 DOMUtils.longPressNode(mContentViewCore, "password"); | 588 DOMUtils.longPressNode(mContentViewCore, "password"); |
| 550 waitForSelectActionBarVisible(true); | 589 waitForSelectActionBarVisible(true); |
| 551 assertTrue(mSelectionPopupController.hasSelection()); | 590 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 552 assertEquals(mSelectionPopupController.getSelectedText().length(), | 591 Assert.assertEquals( |
| 553 "SamplePassword2".length()); | 592 mSelectionPopupController.getSelectedText().length(), "SamplePas
sword2".length()); |
| 554 } | 593 } |
| 555 | 594 |
| 595 @Test |
| 556 @SmallTest | 596 @SmallTest |
| 557 @Feature({"TextInput"}) | 597 @Feature({"TextInput"}) |
| 558 @DisabledTest(message = "crbug.com/592428") | 598 @DisabledTest(message = "crbug.com/592428") |
| 559 public void testSelectActionBarTextAreaPaste() throws Exception { | 599 public void testSelectActionBarTextAreaPaste() throws Throwable { |
| 560 copyStringToClipboard("SampleTextToCopy"); | 600 copyStringToClipboard("SampleTextToCopy"); |
| 561 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 601 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 562 waitForSelectActionBarVisible(true); | 602 waitForSelectActionBarVisible(true); |
| 563 assertTrue(mSelectionPopupController.hasSelection()); | 603 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 564 assertTrue(mSelectionPopupController.isActionModeValid()); | 604 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 565 selectActionBarPaste(); | 605 selectActionBarPaste(); |
| 566 DOMUtils.clickNode(mContentViewCore, "plain_text_1"); | 606 DOMUtils.clickNode(mContentViewCore, "plain_text_1"); |
| 567 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 607 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 568 waitForSelectActionBarVisible(true); | 608 waitForSelectActionBarVisible(true); |
| 569 assertTrue(mSelectionPopupController.hasSelection()); | 609 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 570 assertEquals(mSelectionPopupController.getSelectedText(), "SampleTextToC
opy"); | 610 Assert.assertEquals(mSelectionPopupController.getSelectedText(), "Sample
TextToCopy"); |
| 571 } | 611 } |
| 572 | 612 |
| 613 @Test |
| 573 @SmallTest | 614 @SmallTest |
| 574 @Feature({"TextInput"}) | 615 @Feature({"TextInput"}) |
| 575 @DisabledTest(message = "crbug.com/592428") | 616 @DisabledTest(message = "crbug.com/592428") |
| 576 public void testSelectActionBarSearchAndShareLaunchesNewTask() throws Except
ion { | 617 public void testSelectActionBarSearchAndShareLaunchesNewTask() throws Except
ion { |
| 577 DOMUtils.longPressNode(mContentViewCore, "textarea"); | 618 DOMUtils.longPressNode(mContentViewCore, "textarea"); |
| 578 waitForSelectActionBarVisible(true); | 619 waitForSelectActionBarVisible(true); |
| 579 assertTrue(mSelectionPopupController.hasSelection()); | 620 Assert.assertTrue(mSelectionPopupController.hasSelection()); |
| 580 assertTrue(mSelectionPopupController.isActionModeValid()); | 621 Assert.assertTrue(mSelectionPopupController.isActionModeValid()); |
| 581 selectActionBarSearch(); | 622 selectActionBarSearch(); |
| 582 Intent i = getActivity().getLastSentIntent(); | 623 Intent i = mActivityTestRule.getActivity().getLastSentIntent(); |
| 583 int new_task_flag = Intent.FLAG_ACTIVITY_NEW_TASK; | 624 int new_task_flag = Intent.FLAG_ACTIVITY_NEW_TASK; |
| 584 assertEquals(i.getFlags() & new_task_flag, new_task_flag); | 625 Assert.assertEquals(i.getFlags() & new_task_flag, new_task_flag); |
| 585 | 626 |
| 586 selectActionBarShare(); | 627 selectActionBarShare(); |
| 587 i = getActivity().getLastSentIntent(); | 628 i = mActivityTestRule.getActivity().getLastSentIntent(); |
| 588 assertEquals(i.getFlags() & new_task_flag, new_task_flag); | 629 Assert.assertEquals(i.getFlags() & new_task_flag, new_task_flag); |
| 589 } | 630 } |
| 590 | 631 |
| 591 private void selectActionBarPaste() { | 632 private void selectActionBarPaste() { |
| 592 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 633 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 593 @Override | 634 @Override |
| 594 public void run() { | 635 public void run() { |
| 595 mSelectionPopupController.paste(); | 636 mSelectionPopupController.paste(); |
| 596 } | 637 } |
| 597 }); | 638 }); |
| 598 } | 639 } |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 private void requestFocusOnUiThread(final boolean gainFocus) { | 745 private void requestFocusOnUiThread(final boolean gainFocus) { |
| 705 final ContentViewCore contentViewCore = mContentViewCore; | 746 final ContentViewCore contentViewCore = mContentViewCore; |
| 706 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 747 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 707 @Override | 748 @Override |
| 708 public void run() { | 749 public void run() { |
| 709 contentViewCore.onFocusChanged(gainFocus, true); | 750 contentViewCore.onFocusChanged(gainFocus, true); |
| 710 } | 751 } |
| 711 }); | 752 }); |
| 712 } | 753 } |
| 713 | 754 |
| 714 private void copyStringToClipboard(String string) { | 755 private void copyStringToClipboard(final String string) throws Throwable { |
| 715 ClipboardManager clipboardManager = | 756 mActivityTestRule.runOnUiThread(new Runnable() { |
| 716 (ClipboardManager) getActivity().getSystemService( | 757 @Override |
| 717 Context.CLIPBOARD_SERVICE); | 758 public void run() { |
| 718 ClipData clip = ClipData.newPlainText("test", string); | 759 ClipboardManager clipboardManager = |
| 719 clipboardManager.setPrimaryClip(clip); | 760 (ClipboardManager) mActivityTestRule.getActivity().getSy
stemService( |
| 761 Context.CLIPBOARD_SERVICE); |
| 762 ClipData clip = ClipData.newPlainText("test", string); |
| 763 clipboardManager.setPrimaryClip(clip); |
| 764 } |
| 765 }); |
| 720 } | 766 } |
| 721 | 767 |
| 722 private void waitForPastePopupStatus(final boolean show) { | 768 private void waitForPastePopupStatus(final boolean show) { |
| 723 CriteriaHelper.pollUiThread(Criteria.equals(show, new Callable<Boolean>(
) { | 769 CriteriaHelper.pollUiThread(Criteria.equals(show, new Callable<Boolean>(
) { |
| 724 @Override | 770 @Override |
| 725 public Boolean call() { | 771 public Boolean call() { |
| 726 return mSelectionPopupController.isPastePopupShowing(); | 772 return mSelectionPopupController.isPastePopupShowing(); |
| 727 } | 773 } |
| 728 })); | 774 })); |
| 729 } | 775 } |
| 730 | 776 |
| 731 private void waitForInsertion(final boolean show) { | 777 private void waitForInsertion(final boolean show) { |
| 732 CriteriaHelper.pollUiThread(Criteria.equals(show, new Callable<Boolean>(
) { | 778 CriteriaHelper.pollUiThread(Criteria.equals(show, new Callable<Boolean>(
) { |
| 733 @Override | 779 @Override |
| 734 public Boolean call() { | 780 public Boolean call() { |
| 735 return mSelectionPopupController.isInsertion(); | 781 return mSelectionPopupController.isInsertion(); |
| 736 } | 782 } |
| 737 })); | 783 })); |
| 738 } | 784 } |
| 739 } | 785 } |
| OLD | NEW |