Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(355)

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/CopylessPasteTest.java

Issue 2819763002: Add end-to-end test for CopylessPaste (Closed)
Patch Set: split tests Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/android/java_sources.gni ('k') | chrome/test/data/android/appindexing/json-ld.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 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.chrome.browser;
6
7 import android.support.test.filters.LargeTest;
8
9 import org.chromium.base.Callback;
10 import org.chromium.base.ThreadUtils;
11 import org.chromium.base.test.util.CallbackHelper;
12 import org.chromium.base.test.util.CommandLineFlags;
13 import org.chromium.base.test.util.Feature;
14 import org.chromium.base.test.util.Restriction;
15 import org.chromium.blink.mojom.document_metadata.Entity;
16 import org.chromium.blink.mojom.document_metadata.Property;
17 import org.chromium.blink.mojom.document_metadata.Values;
18 import org.chromium.blink.mojom.document_metadata.WebPage;
19 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
20 import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
21 import org.chromium.chrome.test.util.ChromeTabUtils;
22 import org.chromium.net.test.EmbeddedTestServer;
23 import org.chromium.url.mojom.Url;
24
25 import java.util.concurrent.TimeoutException;
26
27 /**
28 * Tests Copyless Paste AppIndexing using instrumented tests.
29 */
30 @CommandLineFlags.Add("enable-features=CopylessPaste")
31 @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE)
32 public class CopylessPasteTest extends ChromeTabbedActivityTestBase {
33 // NODATA_PAGE doesn't contain desired metadata.
34 private static final String NODATA_PAGE = "/chrome/test/data/android/about.h tml";
35
36 // DATA_PAGE contains desired metadata.
37 private static final String DATA_PAGE = "/chrome/test/data/android/appindexi ng/json-ld.html";
38
39 private EmbeddedTestServer mTestServer;
40 private CopylessHelper mCallbackHelper;
41
42 @Override
43 protected void setUp() throws Exception {
44 // We have to set up the test server before starting the activity.
45 mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation ().getContext());
46
47 mCallbackHelper = new CopylessHelper();
48
49 AppIndexingUtil.setCallbackForTesting(new Callback<WebPage>() {
50 @Override
51 public void onResult(WebPage webpage) {
52 mCallbackHelper.notifyCalled(webpage);
53 }
54 });
55
56 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
57 @Override
58 public void run() {
59 FirstRunStatus.setFirstRunFlowComplete(true);
60 }
61 });
62 super.setUp();
63 }
64
65 @Override
66 protected void tearDown() throws Exception {
67 mTestServer.stopAndDestroyServer();
68 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
69 @Override
70 public void run() {
71 FirstRunStatus.setFirstRunFlowComplete(false);
72 }
73 });
74 AppIndexingUtil.setCallbackForTesting(null);
75 super.tearDown();
76 }
77
78 @Override
79 public void startMainActivity() throws InterruptedException {
80 startMainActivityOnBlankPage();
81 }
82
83 private static class CopylessHelper extends CallbackHelper {
84 private WebPage mWebPage;
85
86 public WebPage getWebPage() {
87 return mWebPage;
88 }
89
90 public void notifyCalled(WebPage page) {
91 mWebPage = page;
92 notifyCalled();
93 }
94 }
95
96 /**
97 * Tests that CopylessPaste is disabled in Incognito tabs.
98 */
99 @LargeTest
100 @Feature({"CopylessPaste"})
101 public void testIncognito() throws InterruptedException, TimeoutException {
102 // Incognito tabs are ignored.
103 newIncognitoTabsFromMenu(1);
104 loadUrl(mTestServer.getURL(NODATA_PAGE));
105 loadUrl(mTestServer.getURL(DATA_PAGE));
106 ChromeTabUtils.closeCurrentTab(getInstrumentation(), getActivity());
107 assertEquals(0, mCallbackHelper.getCallCount());
108 }
109
110 /**
111 * Tests that CopylessPaste skips invalid schemes.
112 */
113 @LargeTest
114 @Feature({"CopylessPaste"})
115 public void testInvalidScheme() throws InterruptedException, TimeoutExceptio n {
116 // CopylessPaste only parses http and https.
117 loadUrl("chrome://newtab");
118 loadUrl("chrome://about");
119 assertEquals(0, mCallbackHelper.getCallCount());
120 }
121
122 /**
123 * Tests that CopylessPaste works on pages without desired metadata.
124 */
125 @LargeTest
126 @Feature({"CopylessPaste"})
127 public void testNoMeta() throws InterruptedException, TimeoutException {
128 loadUrl(mTestServer.getURL(NODATA_PAGE));
129 mCallbackHelper.waitForCallback(0);
130 assertNull(mCallbackHelper.getWebPage());
131 }
132
133 /**
134 * Tests that CopylessPaste works end-to-end.
135 */
136 @LargeTest
137 @Feature({"CopylessPaste"})
138 public void testValid() throws InterruptedException, TimeoutException {
139 loadUrl(mTestServer.getURL(DATA_PAGE));
140 mCallbackHelper.waitForCallback(0);
141 WebPage extracted = mCallbackHelper.getWebPage();
142
143 WebPage expected = new WebPage();
144 expected.url = new Url();
145 expected.url.url = mTestServer.getURL(DATA_PAGE);
146 expected.title = "JSON-LD for AppIndexing Test";
147 Entity e = new Entity();
148 e.type = "Hotel";
149 e.properties = new Property[2];
150 e.properties[0] = new Property();
151 e.properties[0].name = "@context";
152 e.properties[0].values = new Values();
153 e.properties[0].values.setStringValues(new String[] {"http://schema.org" });
154 e.properties[1] = new Property();
155 e.properties[1].name = "name";
156 e.properties[1].values = new Values();
157 e.properties[1].values.setStringValues(new String[] {"Hotel Name"});
158 expected.entities = new Entity[1];
159 expected.entities[0] = e;
160 assertEquals(expected, extracted);
161 }
162
163 /**
164 * Tests that CopylessPaste skips parsing visited pages.
165 */
166 @LargeTest
167 @Feature({"CopylessPaste"})
168 public void testCache() throws InterruptedException, TimeoutException {
169 // The URLs used here should be unique in CopylessPasteTest.
170 String uniqueTag = "#123";
171 // NODATA_PAGE doesn't contain desired metadata.
172 loadUrl(mTestServer.getURL(NODATA_PAGE + uniqueTag));
173 mCallbackHelper.waitForCallback(0);
174 // DATA_PAGE contains desired metadata.
175 loadUrl(mTestServer.getURL(DATA_PAGE + uniqueTag));
176 mCallbackHelper.waitForCallback(1);
177
178 // Cache hit without entities. Shouldn't parse again.
179 loadUrl(mTestServer.getURL(NODATA_PAGE + uniqueTag));
180 // Cache hit with entities. Shouldn't parse again.
181 loadUrl(mTestServer.getURL(DATA_PAGE + uniqueTag));
182 assertEquals(2, mCallbackHelper.getCallCount());
183 }
184 }
OLDNEW
« no previous file with comments | « chrome/android/java_sources.gni ('k') | chrome/test/data/android/appindexing/json-ld.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698