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

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

Issue 2858933002: Reland: Convert ChromeActivityTestCaseBase direct children to JUnit4 (Closed)
Patch Set: Patch takes out flaky tests Created 3 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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.chrome.browser.webapps; 5 package org.chromium.chrome.browser.webapps;
6 6
7 import android.app.Activity; 7 import android.app.Activity;
8 import android.content.Intent; 8 import android.content.Intent;
9 import android.graphics.Bitmap; 9 import android.graphics.Bitmap;
10 import android.support.test.InstrumentationRegistry;
10 import android.support.test.filters.SmallTest; 11 import android.support.test.filters.SmallTest;
11 12
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Rule;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18
12 import org.chromium.base.ThreadUtils; 19 import org.chromium.base.ThreadUtils;
13 import org.chromium.base.test.util.CommandLineFlags; 20 import org.chromium.base.test.util.CommandLineFlags;
14 import org.chromium.base.test.util.Feature; 21 import org.chromium.base.test.util.Feature;
15 import org.chromium.base.test.util.Restriction; 22 import org.chromium.base.test.util.Restriction;
16 import org.chromium.base.test.util.RetryOnFailure; 23 import org.chromium.base.test.util.RetryOnFailure;
17 import org.chromium.base.test.util.UrlUtils; 24 import org.chromium.base.test.util.UrlUtils;
18 import org.chromium.chrome.R; 25 import org.chromium.chrome.R;
19 import org.chromium.chrome.browser.ChromeActivity; 26 import org.chromium.chrome.browser.ChromeActivity;
27 import org.chromium.chrome.browser.ChromeSwitches;
20 import org.chromium.chrome.browser.ShortcutHelper; 28 import org.chromium.chrome.browser.ShortcutHelper;
21 import org.chromium.chrome.browser.tab.Tab; 29 import org.chromium.chrome.browser.tab.Tab;
22 import org.chromium.chrome.browser.tabmodel.TabModel; 30 import org.chromium.chrome.browser.tabmodel.TabModel;
23 import org.chromium.chrome.test.ChromeActivityTestCaseBase; 31 import org.chromium.chrome.test.ChromeActivityTestRule;
32 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
24 import org.chromium.chrome.test.util.browser.TabLoadObserver; 33 import org.chromium.chrome.test.util.browser.TabLoadObserver;
25 import org.chromium.chrome.test.util.browser.TabTitleObserver; 34 import org.chromium.chrome.test.util.browser.TabTitleObserver;
26 import org.chromium.content.browser.test.util.Criteria; 35 import org.chromium.content.browser.test.util.Criteria;
27 import org.chromium.content.browser.test.util.CriteriaHelper; 36 import org.chromium.content.browser.test.util.CriteriaHelper;
28 import org.chromium.content.common.ContentSwitches; 37 import org.chromium.content.common.ContentSwitches;
29 import org.chromium.net.test.EmbeddedTestServer; 38 import org.chromium.net.test.EmbeddedTestServer;
30 39
31 import java.util.concurrent.Callable; 40 import java.util.concurrent.Callable;
32 41
33 /** 42 /**
34 * Tests org.chromium.chrome.browser.webapps.AddToHomescreenManager and its C++ counterpart. 43 * Tests org.chromium.chrome.browser.webapps.AddToHomescreenManager and its C++ counterpart.
35 */ 44 */
45 @RunWith(ChromeJUnit4ClassRunner.class)
36 @RetryOnFailure 46 @RetryOnFailure
37 public class AddToHomescreenManagerTest extends ChromeActivityTestCaseBase<Chrom eActivity> { 47 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
48 ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG})
49 public class AddToHomescreenManagerTest {
50 @Rule
51 public ChromeActivityTestRule<ChromeActivity> mActivityTestRule =
52 new ChromeActivityTestRule<>(ChromeActivity.class);
53
38 private static final String WEBAPP_ACTION_NAME = "WEBAPP_ACTION"; 54 private static final String WEBAPP_ACTION_NAME = "WEBAPP_ACTION";
39 55
40 private static final String WEBAPP_TITLE = "Webapp shortcut"; 56 private static final String WEBAPP_TITLE = "Webapp shortcut";
41 private static final String WEBAPP_HTML = UrlUtils.encodeHtmlDataUri( 57 private static final String WEBAPP_HTML = UrlUtils.encodeHtmlDataUri(
42 "<html><head>" 58 "<html><head>"
43 + "<meta name=\"mobile-web-app-capable\" content=\"yes\" />" 59 + "<meta name=\"mobile-web-app-capable\" content=\"yes\" />"
44 + "<title>" + WEBAPP_TITLE + "</title>" 60 + "<title>" + WEBAPP_TITLE + "</title>"
45 + "</head><body>Webapp capable</body></html>"); 61 + "</head><body>Webapp capable</body></html>");
46 private static final String EDITED_WEBAPP_TITLE = "Webapp shortcut edited"; 62 private static final String EDITED_WEBAPP_TITLE = "Webapp shortcut edited";
47 63
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 } 120 }
105 121
106 private class WebappDataStorageWrapper extends WebappDataStorage { 122 private class WebappDataStorageWrapper extends WebappDataStorage {
107 123
108 public WebappDataStorageWrapper(String webappId) { 124 public WebappDataStorageWrapper(String webappId) {
109 super(webappId); 125 super(webappId);
110 } 126 }
111 127
112 @Override 128 @Override
113 public void updateSplashScreenImage(String splashScreenImage) { 129 public void updateSplashScreenImage(String splashScreenImage) {
114 assertNull(mSplashImage); 130 Assert.assertNull(mSplashImage);
115 mSplashImage = splashScreenImage; 131 mSplashImage = splashScreenImage;
116 } 132 }
117 } 133 }
118 } 134 }
119 /** 135 /**
120 * Test AddToHomescreenManager subclass which mocks showing the add-to-homes creen dialog and 136 * Test AddToHomescreenManager subclass which mocks showing the add-to-homes creen dialog and
121 * adds the shortcut to the home screen once it is ready. 137 * adds the shortcut to the home screen once it is ready.
122 */ 138 */
123 private static class TestAddToHomescreenManager extends AddToHomescreenManag er { 139 private static class TestAddToHomescreenManager extends AddToHomescreenManag er {
124 private String mTitle; 140 private String mTitle;
(...skipping 21 matching lines...) Expand all
146 162
147 setObserver(observer); 163 setObserver(observer);
148 } 164 }
149 } 165 }
150 166
151 private EmbeddedTestServer mTestServer; 167 private EmbeddedTestServer mTestServer;
152 private ChromeActivity mActivity; 168 private ChromeActivity mActivity;
153 private Tab mTab; 169 private Tab mTab;
154 private TestShortcutHelperDelegate mShortcutHelperDelegate; 170 private TestShortcutHelperDelegate mShortcutHelperDelegate;
155 171
156 public AddToHomescreenManagerTest() { 172 @Before
157 super(ChromeActivity.class);
158 }
159
160 @Override
161 public void startMainActivity() throws InterruptedException {
162 startMainActivityOnBlankPage();
163 }
164
165 @Override
166 public void setUp() throws Exception { 173 public void setUp() throws Exception {
167 super.setUp(); 174 mActivityTestRule.startMainActivityOnBlankPage();
168 ChromeWebApkHost.initForTesting(false); 175 ChromeWebApkHost.initForTesting(false);
169 mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation ().getContext()); 176 mTestServer = EmbeddedTestServer.createAndStartServer(
177 InstrumentationRegistry.getInstrumentation().getContext());
170 mShortcutHelperDelegate = new TestShortcutHelperDelegate(); 178 mShortcutHelperDelegate = new TestShortcutHelperDelegate();
171 ShortcutHelper.setDelegateForTests(mShortcutHelperDelegate); 179 ShortcutHelper.setDelegateForTests(mShortcutHelperDelegate);
172 mActivity = getActivity(); 180 mActivity = mActivityTestRule.getActivity();
173 mTab = mActivity.getActivityTab(); 181 mTab = mActivity.getActivityTab();
174 } 182 }
175 183
184 @Test
176 @SmallTest 185 @SmallTest
177 @Feature("{Webapp}") 186 @Feature("{Webapp}")
178 public void testAddWebappShortcuts() throws Exception { 187 public void testAddWebappShortcuts() throws Exception {
179 // Add a webapp shortcut and make sure the intent's parameters make sens e. 188 // Add a webapp shortcut and make sure the intent's parameters make sens e.
180 loadUrl(WEBAPP_HTML, WEBAPP_TITLE); 189 loadUrl(WEBAPP_HTML, WEBAPP_TITLE);
181 addShortcutToTab(mTab, ""); 190 addShortcutToTab(mTab, "");
182 assertEquals(WEBAPP_TITLE, mShortcutHelperDelegate.mRequestedShortcutTit le); 191 Assert.assertEquals(WEBAPP_TITLE, mShortcutHelperDelegate.mRequestedShor tcutTitle);
183 192
184 Intent launchIntent = mShortcutHelperDelegate.mRequestedShortcutIntent; 193 Intent launchIntent = mShortcutHelperDelegate.mRequestedShortcutIntent;
185 assertEquals(WEBAPP_HTML, launchIntent.getStringExtra(ShortcutHelper.EXT RA_URL)); 194 Assert.assertEquals(WEBAPP_HTML, launchIntent.getStringExtra(ShortcutHel per.EXTRA_URL));
186 assertEquals(WEBAPP_ACTION_NAME, launchIntent.getAction()); 195 Assert.assertEquals(WEBAPP_ACTION_NAME, launchIntent.getAction());
187 assertEquals(mActivity.getPackageName(), launchIntent.getPackage()); 196 Assert.assertEquals(mActivity.getPackageName(), launchIntent.getPackage( ));
188 197
189 // Add a second shortcut and make sure it matches the second webapp's pa rameters. 198 // Add a second shortcut and make sure it matches the second webapp's pa rameters.
190 mShortcutHelperDelegate.clearRequestedShortcutData(); 199 mShortcutHelperDelegate.clearRequestedShortcutData();
191 loadUrl(SECOND_WEBAPP_HTML, SECOND_WEBAPP_TITLE); 200 loadUrl(SECOND_WEBAPP_HTML, SECOND_WEBAPP_TITLE);
192 addShortcutToTab(mTab, ""); 201 addShortcutToTab(mTab, "");
193 assertEquals(SECOND_WEBAPP_TITLE, mShortcutHelperDelegate.mRequestedShor tcutTitle); 202 Assert.assertEquals(SECOND_WEBAPP_TITLE, mShortcutHelperDelegate.mReques tedShortcutTitle);
194 203
195 Intent newLaunchIntent = mShortcutHelperDelegate.mRequestedShortcutInten t; 204 Intent newLaunchIntent = mShortcutHelperDelegate.mRequestedShortcutInten t;
196 assertEquals(SECOND_WEBAPP_HTML, newLaunchIntent.getStringExtra(Shortcut Helper.EXTRA_URL)); 205 Assert.assertEquals(
197 assertEquals(WEBAPP_ACTION_NAME, newLaunchIntent.getAction()); 206 SECOND_WEBAPP_HTML, newLaunchIntent.getStringExtra(ShortcutHelpe r.EXTRA_URL));
198 assertEquals(mActivity.getPackageName(), newLaunchIntent.getPackage()); 207 Assert.assertEquals(WEBAPP_ACTION_NAME, newLaunchIntent.getAction());
208 Assert.assertEquals(mActivity.getPackageName(), newLaunchIntent.getPacka ge());
199 } 209 }
200 210
211 @Test
201 @SmallTest 212 @SmallTest
202 @Feature("{Webapp}") 213 @Feature("{Webapp}")
203 public void testAddBookmarkShortcut() throws Exception { 214 public void testAddBookmarkShortcut() throws Exception {
204 loadUrl(NORMAL_HTML, NORMAL_TITLE); 215 loadUrl(NORMAL_HTML, NORMAL_TITLE);
205 addShortcutToTab(mTab, ""); 216 addShortcutToTab(mTab, "");
206 217
207 // Make sure the intent's parameters make sense. 218 // Make sure the intent's parameters make sense.
208 assertEquals(NORMAL_TITLE, mShortcutHelperDelegate.mRequestedShortcutTit le); 219 Assert.assertEquals(NORMAL_TITLE, mShortcutHelperDelegate.mRequestedShor tcutTitle);
209 220
210 Intent launchIntent = mShortcutHelperDelegate.mRequestedShortcutIntent; 221 Intent launchIntent = mShortcutHelperDelegate.mRequestedShortcutIntent;
211 assertEquals(mActivity.getPackageName(), launchIntent.getPackage()); 222 Assert.assertEquals(mActivity.getPackageName(), launchIntent.getPackage( ));
212 assertEquals(Intent.ACTION_VIEW, launchIntent.getAction()); 223 Assert.assertEquals(Intent.ACTION_VIEW, launchIntent.getAction());
213 assertEquals(NORMAL_HTML, launchIntent.getDataString()); 224 Assert.assertEquals(NORMAL_HTML, launchIntent.getDataString());
214 } 225 }
215 226
227 @Test
216 @SmallTest 228 @SmallTest
217 @Feature("{Webapp}") 229 @Feature("{Webapp}")
218 public void testAddWebappShortcutsWithoutTitleEdit() throws Exception { 230 public void testAddWebappShortcutsWithoutTitleEdit() throws Exception {
219 // Add a webapp shortcut using the page's title. 231 // Add a webapp shortcut using the page's title.
220 loadUrl(WEBAPP_HTML, WEBAPP_TITLE); 232 loadUrl(WEBAPP_HTML, WEBAPP_TITLE);
221 addShortcutToTab(mTab, ""); 233 addShortcutToTab(mTab, "");
222 assertEquals(WEBAPP_TITLE, mShortcutHelperDelegate.mRequestedShortcutTit le); 234 Assert.assertEquals(WEBAPP_TITLE, mShortcutHelperDelegate.mRequestedShor tcutTitle);
223 } 235 }
224 236
237 @Test
225 @SmallTest 238 @SmallTest
226 @Feature("{Webapp}") 239 @Feature("{Webapp}")
227 public void testAddWebappShortcutsWithTitleEdit() throws Exception { 240 public void testAddWebappShortcutsWithTitleEdit() throws Exception {
228 // Add a webapp shortcut with a custom title. 241 // Add a webapp shortcut with a custom title.
229 loadUrl(WEBAPP_HTML, WEBAPP_TITLE); 242 loadUrl(WEBAPP_HTML, WEBAPP_TITLE);
230 addShortcutToTab(mTab, EDITED_WEBAPP_TITLE); 243 addShortcutToTab(mTab, EDITED_WEBAPP_TITLE);
231 assertEquals(EDITED_WEBAPP_TITLE, mShortcutHelperDelegate.mRequestedShor tcutTitle); 244 Assert.assertEquals(EDITED_WEBAPP_TITLE, mShortcutHelperDelegate.mReques tedShortcutTitle);
232 } 245 }
233 246
247 @Test
234 @SmallTest 248 @SmallTest
235 @Feature("{Webapp}") 249 @Feature("{Webapp}")
236 public void testAddWebappShortcutsWithApplicationName() throws Exception { 250 public void testAddWebappShortcutsWithApplicationName() throws Exception {
237 loadUrl(META_APP_NAME_HTML, META_APP_NAME_PAGE_TITLE); 251 loadUrl(META_APP_NAME_HTML, META_APP_NAME_PAGE_TITLE);
238 addShortcutToTab(mTab, ""); 252 addShortcutToTab(mTab, "");
239 assertEquals(META_APP_NAME_TITLE, mShortcutHelperDelegate.mRequestedShor tcutTitle); 253 Assert.assertEquals(META_APP_NAME_TITLE, mShortcutHelperDelegate.mReques tedShortcutTitle);
240 } 254 }
241 255
256 @Test
242 @SmallTest 257 @SmallTest
243 @Feature("{Webapp}") 258 @Feature("{Webapp}")
244 @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE) 259 @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE)
245 @CommandLineFlags.Add(ContentSwitches.DISABLE_POPUP_BLOCKING) 260 @CommandLineFlags.Add(ContentSwitches.DISABLE_POPUP_BLOCKING)
246 public void testAddWebappShortcutWithEmptyPage() throws Exception { 261 public void testAddWebappShortcutWithEmptyPage() throws Exception {
247 Tab spawnedPopup = spawnPopupInBackground(""); 262 Tab spawnedPopup = spawnPopupInBackground("");
248 addShortcutToTab(spawnedPopup, ""); 263 addShortcutToTab(spawnedPopup, "");
249 } 264 }
250 265
266 @Test
251 @SmallTest 267 @SmallTest
252 @Feature("{Webapp}") 268 @Feature("{Webapp}")
253 public void testAddWebappShortcutSplashScreenIcon() throws Exception { 269 public void testAddWebappShortcutSplashScreenIcon() throws Exception {
254 try { 270 try {
255 // Sets the overriden factory to observer splash screen update. 271 // Sets the overriden factory to observer splash screen update.
256 final TestDataStorageFactory dataStorageFactory = new TestDataStorag eFactory(); 272 final TestDataStorageFactory dataStorageFactory = new TestDataStorag eFactory();
257 WebappDataStorage.setFactoryForTests(dataStorageFactory); 273 WebappDataStorage.setFactoryForTests(dataStorageFactory);
258 274
259 loadUrl(mTestServer.getURL(MANIFEST_PATH), MANIFEST_TITLE); 275 loadUrl(mTestServer.getURL(MANIFEST_PATH), MANIFEST_TITLE);
260 addShortcutToTab(mTab, ""); 276 addShortcutToTab(mTab, "");
261 277
262 // Make sure that the splash screen image was downloaded. 278 // Make sure that the splash screen image was downloaded.
263 CriteriaHelper.pollUiThread(new Criteria() { 279 CriteriaHelper.pollUiThread(new Criteria() {
264 @Override 280 @Override
265 public boolean isSatisfied() { 281 public boolean isSatisfied() {
266 return dataStorageFactory.mSplashImage != null; 282 return dataStorageFactory.mSplashImage != null;
267 } 283 }
268 }); 284 });
269 285
270 // Test that bitmap sizes match expectations. 286 // Test that bitmap sizes match expectations.
271 int idealSize = mActivity.getResources().getDimensionPixelSize( 287 int idealSize = mActivity.getResources().getDimensionPixelSize(
272 R.dimen.webapp_splash_image_size_ideal); 288 R.dimen.webapp_splash_image_size_ideal);
273 Bitmap splashImage = 289 Bitmap splashImage =
274 ShortcutHelper.decodeBitmapFromString(dataStorageFactory.mSp lashImage); 290 ShortcutHelper.decodeBitmapFromString(dataStorageFactory.mSp lashImage);
275 assertEquals(idealSize, splashImage.getWidth()); 291 Assert.assertEquals(idealSize, splashImage.getWidth());
276 assertEquals(idealSize, splashImage.getHeight()); 292 Assert.assertEquals(idealSize, splashImage.getHeight());
277 } finally { 293 } finally {
278 mTestServer.stopAndDestroyServer(); 294 mTestServer.stopAndDestroyServer();
279 } 295 }
280 } 296 }
281 297
282 /** Tests that the appinstalled event is fired when an app is installed. 298 /** Tests that the appinstalled event is fired when an app is installed.
283 */ 299 */
300 @Test
284 @SmallTest 301 @SmallTest
285 @Feature("{Webapp}") 302 @Feature("{Webapp}")
286 public void testAddWebappShortcutAppInstalledEvent() throws Exception { 303 public void testAddWebappShortcutAppInstalledEvent() throws Exception {
287 try { 304 try {
288 loadUrl(mTestServer.getURL(EVENT_WEBAPP_PATH), EVENT_WEBAPP_TITLE); 305 loadUrl(mTestServer.getURL(EVENT_WEBAPP_PATH), EVENT_WEBAPP_TITLE);
289 addShortcutToTab(mTab, ""); 306 addShortcutToTab(mTab, "");
290 307
291 // Wait for the tab title to change. This will happen (due to the Ja vaScript that runs 308 // Wait for the tab title to change. This will happen (due to the Ja vaScript that runs
292 // in the page) once the appinstalled event has been fired. 309 // in the page) once the appinstalled event has been fired.
293 new TabTitleObserver(mTab, "Got appinstalled").waitForTitleUpdate(3) ; 310 new TabTitleObserver(mTab, "Got appinstalled").waitForTitleUpdate(3) ;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 "(function() {" 362 "(function() {"
346 + "window.open('" + url + "');" 363 + "window.open('" + url + "');"
347 + "})()", 364 + "})()",
348 null); 365 null);
349 } 366 }
350 }); 367 });
351 368
352 CriteriaHelper.pollUiThread(Criteria.equals(2, new Callable<Integer>() { 369 CriteriaHelper.pollUiThread(Criteria.equals(2, new Callable<Integer>() {
353 @Override 370 @Override
354 public Integer call() { 371 public Integer call() {
355 return getActivity().getTabModelSelector().getModel(false).getCo unt(); 372 return mActivityTestRule.getActivity()
373 .getTabModelSelector()
374 .getModel(false)
375 .getCount();
356 } 376 }
357 })); 377 }));
358 378
359 TabModel tabModel = getActivity().getTabModelSelector().getModel(false); 379 TabModel tabModel = mActivityTestRule.getActivity().getTabModelSelector( ).getModel(false);
360 assertEquals(0, tabModel.indexOf(mTab)); 380 Assert.assertEquals(0, tabModel.indexOf(mTab));
361 return getActivity().getTabModelSelector().getModel(false).getTabAt(1); 381 return mActivityTestRule.getActivity().getTabModelSelector().getModel(fa lse).getTabAt(1);
362 } 382 }
363 } 383 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698