Index: content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java |
index 0ef39711656bd46e0c91905acacba8edafa3a3b8..f0044ff970828056ace1bfe3f34a66a2dfeaf0ca 100644 |
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java |
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreSelectionTest.java |
@@ -8,6 +8,7 @@ import android.content.ClipData; |
import android.content.ClipboardManager; |
import android.content.Context; |
import android.test.suitebuilder.annotation.SmallTest; |
+import android.text.TextUtils; |
import org.chromium.base.ThreadUtils; |
import org.chromium.base.test.util.Feature; |
@@ -17,6 +18,8 @@ import org.chromium.content.browser.test.util.CriteriaHelper; |
import org.chromium.content.browser.test.util.DOMUtils; |
import org.chromium.content_shell_apk.ContentShellTestBase; |
+import java.util.concurrent.Callable; |
+ |
/** |
* Integration tests for text selection-related behavior. |
*/ |
@@ -26,17 +29,16 @@ public class ContentViewCoreSelectionTest extends ContentShellTestBase { |
+ "content=\"width=device-width, initial-scale=1.1, maximum-scale=1.5\" /></head>" |
+ "<body><form action=\"about:blank\">" |
+ "<input id=\"empty_input_text\" type=\"text\" />" |
- + "<br/><p><span id=\"plain_text_1\">This is Plain Text One</span></p>" |
- + "<br/><p><span id=\"plain_text_2\">This is Plain Text Two</span></p>" |
+ + "<br/><p><span id=\"plain_text_1\">SamplePlainTextOne</span></p>" |
+ + "<br/><p><span id=\"plain_text_2\">SamplePlainTextTwo</span></p>" |
+ "<br/><input id=\"empty_input_text\" type=\"text\" />" |
- + "<br/><input id=\"input_text\" type=\"text\" value=\"Sample Text\" />" |
+ + "<br/><input id=\"input_text\" type=\"text\" value=\"SampleInputText\" />" |
+ "<br/><textarea id=\"empty_textarea\" rows=\"2\" cols=\"20\"></textarea>" |
+ "<br/><textarea id=\"textarea\" rows=\"2\" cols=\"20\">Sample Text</textarea>" |
+ "<br/><input id=\"readonly_text\" type=\"text\" readonly value=\"Sample Text\"/>" |
+ "<br/><input id=\"disabled_text\" type=\"text\" disabled value=\"Sample Text\" />" |
- + "<br/><input id=\"input_password\" type=\"password\" value=\"Sample Password\" />" |
+ + "<br/><input id=\"input_password\" type=\"password\" value=\"SamplePassword\" />" |
+ "</form></body></html>"); |
- |
private ContentViewCore mContentViewCore; |
@Override |
@@ -222,6 +224,87 @@ public class ContentViewCoreSelectionTest extends ContentShellTestBase { |
assertTrue(mContentViewCore.getSelectActionHandler().isSelectionPassword()); |
} |
+ @SmallTest |
+ @Feature({"TextInput"}) |
+ public void testActionBarConfiguredCorrectlyForPlainText() throws Throwable { |
+ DOMUtils.longPressNode(this, mContentViewCore, "plain_text_1"); |
+ assertWaitForSelectActionBarVisible(true); |
+ assertTrue(mContentViewCore.hasSelection()); |
+ assertNotNull(mContentViewCore.getSelectActionHandler()); |
+ assertFalse(mContentViewCore.getSelectActionHandler().isSelectionEditable()); |
+ assertFalse(mContentViewCore.getSelectActionHandler().isSelectionPassword()); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"TextInput"}) |
+ public void testSelectActionBarPlainTextCopy() throws Exception { |
+ DOMUtils.longPressNode(this, mContentViewCore, "plain_text_1"); |
+ assertWaitForSelectActionBarVisible(true); |
+ assertTrue(mContentViewCore.hasSelection()); |
+ assertNotNull(mContentViewCore.getSelectActionHandler()); |
+ selectActionBarCopy(); |
+ assertClipboardContents(mContentViewCore.getContext(), "SamplePlainTextOne"); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"TextInput"}) |
+ public void testSelectActionBarInputCopy() throws Exception { |
+ DOMUtils.longPressNode(this, mContentViewCore, "input_text"); |
+ assertWaitForSelectActionBarVisible(true); |
+ assertTrue(mContentViewCore.hasSelection()); |
+ assertNotNull(mContentViewCore.getSelectActionHandler()); |
+ selectActionBarCopy(); |
+ assertClipboardContents(mContentViewCore.getContext(), "SampleInputText"); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"TextInput"}) |
+ public void testSelectActionBarPasswordCopy() throws Exception { |
+ DOMUtils.longPressNode(this, mContentViewCore, "plain_text_1"); |
+ assertWaitForSelectActionBarVisible(true); |
+ assertTrue(mContentViewCore.hasSelection()); |
+ assertNotNull(mContentViewCore.getSelectActionHandler()); |
+ selectActionBarCopy(); |
+ assertClipboardContents(mContentViewCore.getContext(), "SamplePlainTextOne"); |
+ DOMUtils.longPressNode(this, mContentViewCore, "input_password"); |
+ assertWaitForSelectActionBarVisible(true); |
+ assertTrue(mContentViewCore.hasSelection()); |
+ assertNotNull(mContentViewCore.getSelectActionHandler()); |
+ selectActionBarCopy(); |
+ // Copy option won't be there for Password, hence no change in Clipboard |
+ // Validating with previous Clipboard content |
+ assertClipboardContents(mContentViewCore.getContext(), "SamplePlainTextOne"); |
+ } |
+ |
+ private void selectActionBarCopy() { |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ mContentViewCore.getSelectActionHandler().copy(); |
+ } |
+ }); |
+ } |
+ |
+ private void assertClipboardContents(final Context context, final String expectedContents) |
+ throws InterruptedException { |
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() { |
+ @Override |
+ public Boolean call() throws Exception { |
+ ClipboardManager clipboardManager = |
+ (ClipboardManager) context.getSystemService( |
+ Context.CLIPBOARD_SERVICE); |
+ ClipData clip = clipboardManager.getPrimaryClip(); |
+ return clip != null && clip.getItemCount() == 1 |
+ && TextUtils.equals(clip.getItemAt(0).getText(), expectedContents); |
+ } |
+ }); |
+ } |
+ })); |
+ } |
+ |
private void assertWaitForSelectActionBarVisible( |
final boolean visible) throws InterruptedException { |
assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { |