+ @SmallTest
+ @Feature({"TextInput"})
+ public void testPastePopupNotShownOnLongPressingReadOnlyInput() throws Throwable {
+ copyStringToClipboard("SampleTextToCopy");
+ DOMUtils.longPressNode(this, mContentViewCore, "empty_input_text");
+ assertWaitForPastePopupStatus(true);
+ assertTrue(mContentViewCore.hasInsertion());
+ DOMUtils.longPressNode(this, mContentViewCore, "readonly_text");
+ assertWaitForPastePopupStatus(false);
+ assertFalse(mContentViewCore.hasInsertion());
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testPastePopupNotShownOnLongPressingDisabledInput() throws Throwable {
+ copyStringToClipboard("SampleTextToCopy");
+ DOMUtils.longPressNode(this, mContentViewCore, "empty_input_text");
+ assertWaitForPastePopupStatus(true);
+ assertTrue(mContentViewCore.hasInsertion());
+ DOMUtils.longPressNode(this, mContentViewCore, "disabled_text");
+ assertWaitForPastePopupStatus(false);
+ assertFalse(mContentViewCore.hasInsertion());
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testActionBarConfiguredCorrectlyForInput() throws Throwable {
+ DOMUtils.longPressNode(this, mContentViewCore, "input_text");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ assertTrue(mContentViewCore.getSelectActionHandler().isSelectionEditable());
+ assertFalse(mContentViewCore.getSelectActionHandler().isSelectionPassword());
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testActionBarConfiguredCorrectlyForPassword() throws Throwable {
+ DOMUtils.longPressNode(this, mContentViewCore, "input_password");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ assertTrue(mContentViewCore.getSelectActionHandler().isSelectionEditable());
+ 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 testActionBarConfiguredCorrectlyForTextArea() throws Throwable {
+ DOMUtils.longPressNode(this, mContentViewCore, "textarea");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ assertTrue(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");
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarTextAreaCopy() throws Exception {
+ DOMUtils.longPressNode(this, mContentViewCore, "textarea");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarCopy();
+ assertClipboardContents(mContentViewCore.getContext(), "SampleTextArea");
+ }
+
+ @SmallTest
+ @Feature({"TextSelection"})
+ public void testSelectActionBarPlainTextCut() throws Exception {
+ copyStringToClipboard("SampleTextToCopy");
+ DOMUtils.longPressNode(this, mContentViewCore, "plain_text_1");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertEquals(mContentViewCore.getSelectedText(), "SamplePlainTextOne");
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarCut();
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ // Cut option won't be available for plain text.
+ // Hence validating previous Clipboard content.
+ assertClipboardContents(mContentViewCore.getContext(), "SampleTextToCopy");
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarInputCut() throws Exception {
+ DOMUtils.longPressNode(this, mContentViewCore, "input_text");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertEquals(mContentViewCore.getSelectedText(), "SampleInputText");
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarCut();
+ assertWaitForSelectActionBarVisible(false);
+ assertFalse(mContentViewCore.hasSelection());
+ assertClipboardContents(mContentViewCore.getContext(), "SampleInputText");
+ assertEquals(mContentViewCore.getSelectedText(), "");
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarPasswordCut() throws Exception {
+ copyStringToClipboard("SampleTextToCopy");
+ DOMUtils.longPressNode(this, mContentViewCore, "input_password");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarCut();
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ // Cut option won't be there for Password, hence no change in Clipboard
+ // Validating with previous Clipboard content
+ assertClipboardContents(mContentViewCore.getContext(), "SampleTextToCopy");
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarTextAreaCut() throws Exception {
+ DOMUtils.longPressNode(this, mContentViewCore, "textarea");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertEquals(mContentViewCore.getSelectedText(), "SampleTextArea");
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarCut();
+ assertWaitForSelectActionBarVisible(false);
+ assertFalse(mContentViewCore.hasSelection());
+ assertClipboardContents(mContentViewCore.getContext(), "SampleTextArea");
+ assertEquals(mContentViewCore.getSelectedText(), "");
+ }
+
+ @SmallTest
+ @Feature({"TextSelection"})
+ public void testSelectActionBarPlainTextSelectAll() throws Exception {
+ DOMUtils.longPressNode(this, mContentViewCore, "plain_text_1");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarSelectAll();
+ assertTrue(mContentViewCore.hasSelection());
+ assertWaitForSelectActionBarVisible(true);
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarInputSelectAll() throws Exception {
+ DOMUtils.longPressNode(this, mContentViewCore, "input_text");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarSelectAll();
+ assertTrue(mContentViewCore.hasSelection());
+ assertWaitForSelectActionBarVisible(true);
+ assertEquals(mContentViewCore.getSelectedText(), "SampleInputText");
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarPasswordSelectAll() throws Exception {
+ DOMUtils.longPressNode(this, mContentViewCore, "input_password");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarSelectAll();
+ assertTrue(mContentViewCore.hasSelection());
+ assertWaitForSelectActionBarVisible(true);
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarTextAreaSelectAll() throws Exception {
+ DOMUtils.longPressNode(this, mContentViewCore, "textarea");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarSelectAll();
+ assertTrue(mContentViewCore.hasSelection());
+ assertWaitForSelectActionBarVisible(true);
+ assertEquals(mContentViewCore.getSelectedText(), "SampleTextArea");
+ }
+
+ @SmallTest
+ @Feature({"TextSelection"})
+ public void testSelectActionBarPlainTextPaste() throws Exception {
+ copyStringToClipboard("SampleTextToCopy");
+ DOMUtils.longPressNode(this, mContentViewCore, "plain_text_1");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarPaste();
+ DOMUtils.longPressNode(this, mContentViewCore, "plain_text_1");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ // Paste option won't be available for plain text.
+ // Hence content won't be changed.
+ assertNotSame(mContentViewCore.getSelectedText(), "SampleTextToCopy");
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarInputPaste() throws Exception {
+ copyStringToClipboard("SampleTextToCopy");
+ DOMUtils.longPressNode(this, mContentViewCore, "input_text");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarPaste();
+ DOMUtils.clickNode(this, mContentViewCore, "plain_text_1");
+ DOMUtils.longPressNode(this, mContentViewCore, "input_text");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertEquals(mContentViewCore.getSelectedText(), "SampleTextToCopy");
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarPasswordPaste() throws Exception {
+ copyStringToClipboard("SampleTextToCopy");
+ DOMUtils.longPressNode(this, mContentViewCore, "input_password");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarPaste();
+ DOMUtils.clickNode(this, mContentViewCore, "plain_text_1");
+ DOMUtils.longPressNode(this, mContentViewCore, "input_password");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotSame(mContentViewCore.getSelectedText(), "SampleTextToCopy");
+ }
+
+ @SmallTest
+ @Feature({"TextInput"})
+ public void testSelectActionBarTextAreaPaste() throws Exception {
+ copyStringToClipboard("SampleTextToCopy");
+ DOMUtils.longPressNode(this, mContentViewCore, "textarea");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertNotNull(mContentViewCore.getSelectActionHandler());
+ selectActionBarPaste();
+ DOMUtils.clickNode(this, mContentViewCore, "plain_text_1");
+ DOMUtils.longPressNode(this, mContentViewCore, "textarea");
+ assertWaitForSelectActionBarVisible(true);
+ assertTrue(mContentViewCore.hasSelection());
+ assertEquals(mContentViewCore.getSelectedText(), "SampleTextToCopy");
+ }
+
+ private void selectActionBarPaste() {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mContentViewCore.getSelectActionHandler().paste();
+ }
+ });
+ }
+
+ private void selectActionBarSelectAll() {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mContentViewCore.getSelectActionHandler().selectAll();
+ }
+ });
+ }
+
+ private void selectActionBarCut() {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mContentViewCore.getSelectActionHandler().cut();
+ }
+ });
+ }
+
+ 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);
+ }
+ });
+ }
+ }));
+ }
+