OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 package org.chromium.content.browser; | |
6 | |
7 import android.content.ClipData; | |
8 import android.content.ClipboardManager; | |
9 import android.content.Context; | |
10 import android.os.Build; | |
11 import android.test.suitebuilder.annotation.LargeTest; | |
12 import android.text.TextUtils; | |
13 | |
14 import org.chromium.base.ThreadUtils; | |
15 import org.chromium.base.test.util.Feature; | |
16 import org.chromium.base.test.util.UrlUtils; | |
17 import org.chromium.content.browser.input.ImeAdapter; | |
18 import org.chromium.content.browser.test.util.Criteria; | |
19 import org.chromium.content.browser.test.util.CriteriaHelper; | |
20 import org.chromium.content_shell_apk.ContentShellTestBase; | |
21 | |
22 import java.util.concurrent.Callable; | |
23 | |
24 public class ClipboardTest extends ContentShellTestBase { | |
25 private static final String TEST_PAGE_DATA_URL = UrlUtils.encodeHtmlDataUri( | |
26 "<html><body>Hello, <a href=\"http://www.example.com/\">world</a>, h
ow <b> " + | |
27 "Chromium</b> doing today?</body></html>"); | |
28 | |
29 private static final String EXPECTED_TEXT_RESULT = "Hello, world, how Chromi
um doing today?"; | |
30 | |
31 // String to search for in the HTML representation on the clipboard. | |
32 private static final String EXPECTED_HTML_NEEDLE = "http://www.example.com/"
; | |
33 | |
34 /** | |
35 * Tests that copying document fragments will put at least a plain-text repr
esentation | |
36 * of the contents on the clipboard. For Android JellyBean and higher, we al
so expect | |
37 * the HTML representation of the fragment to be available. | |
38 */ | |
39 @LargeTest | |
40 @Feature({"Clipboard","TextInput"}) | |
41 public void testCopyDocumentFragment() throws Throwable { | |
42 launchContentShellWithUrl(TEST_PAGE_DATA_URL); | |
43 assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading()); | |
44 | |
45 final ClipboardManager clipboardManager = (ClipboardManager) | |
46 getActivity().getSystemService(Context.CLIPBOARD_SERVICE); | |
47 assertNotNull(clipboardManager); | |
48 | |
49 // Clear the clipboard to make sure we start with a clean state. | |
50 clipboardManager.setPrimaryClip(ClipData.newPlainText(null, "")); | |
51 assertFalse(hasPrimaryClip(clipboardManager)); | |
52 | |
53 getImeAdapter().selectAll(); | |
54 getImeAdapter().copy(); | |
55 | |
56 // Waits until data has been made available on the Android clipboard. | |
57 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() { | |
58 @Override | |
59 public boolean isSatisfied() { | |
60 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable
<Boolean>() { | |
61 @Override | |
62 public Boolean call() throws Exception { | |
63 return hasPrimaryClip(clipboardManager); | |
64 } | |
65 }); | |
66 } | |
67 })); | |
68 | |
69 // Verify that the data on the clipboard is what we expect it to be. For
Android JB MR2 | |
70 // and higher we expect HTML content, for other versions the plain-text
representation. | |
71 final ClipData clip = clipboardManager.getPrimaryClip(); | |
72 assertEquals(EXPECTED_TEXT_RESULT, clip.getItemAt(0).coerceToText(getAct
ivity())); | |
73 | |
74 // Android JellyBean and higher should have a HTML representation on the
clipboard as well. | |
75 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | |
76 String htmlText = clip.getItemAt(0).getHtmlText(); | |
77 | |
78 assertNotNull(htmlText); | |
79 assertTrue(htmlText.contains(EXPECTED_HTML_NEEDLE)); | |
80 } | |
81 } | |
82 | |
83 private ImeAdapter getImeAdapter() { | |
84 return getContentViewCore().getImeAdapterForTest(); | |
85 } | |
86 | |
87 // Returns whether there is a primary clip with content on the current clipb
oard. | |
88 private Boolean hasPrimaryClip(ClipboardManager clipboardManager) { | |
89 final ClipData clip = clipboardManager.getPrimaryClip(); | |
90 if (clip != null && clip.getItemCount() > 0) { | |
91 return !TextUtils.isEmpty(clip.getItemAt(0).getText()); | |
92 } | |
93 | |
94 return false; | |
95 } | |
96 } | |
OLD | NEW |