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

Side by Side Diff: chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java

Issue 1867543002: Enable deep-linking from notifications for recently used web apps on the Android home screen. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bulk-webappdatastorage
Patch Set: Address nits Created 4 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
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 static org.junit.Assert.assertEquals; 7 import static org.junit.Assert.assertEquals;
8 import static org.junit.Assert.assertTrue; 8 import static org.junit.Assert.assertTrue;
9 9
10 import android.content.Context; 10 import android.content.Context;
11 import android.content.Intent; 11 import android.content.Intent;
12 import android.content.SharedPreferences; 12 import android.content.SharedPreferences;
13 import android.graphics.Bitmap; 13 import android.graphics.Bitmap;
14 14
15 import org.chromium.base.test.util.Feature; 15 import org.chromium.base.test.util.Feature;
16 import org.chromium.chrome.browser.ShortcutHelper; 16 import org.chromium.chrome.browser.ShortcutHelper;
17 import org.chromium.testing.local.BackgroundShadowAsyncTask; 17 import org.chromium.testing.local.BackgroundShadowAsyncTask;
18 import org.chromium.testing.local.LocalRobolectricTestRunner; 18 import org.chromium.testing.local.LocalRobolectricTestRunner;
19 import org.junit.Before; 19 import org.junit.Before;
20 import org.junit.Test; 20 import org.junit.Test;
21 import org.junit.runner.RunWith; 21 import org.junit.runner.RunWith;
22 import org.robolectric.Robolectric; 22 import org.robolectric.Robolectric;
23 import org.robolectric.annotation.Config; 23 import org.robolectric.annotation.Config;
24 24
25 import java.util.concurrent.TimeUnit;
26
25 /** 27 /**
26 * Tests the WebappDataStorage class by ensuring that it persists data to 28 * Tests the WebappDataStorage class by ensuring that it persists data to
27 * SharedPreferences as expected. 29 * SharedPreferences as expected.
28 */ 30 */
29 @RunWith(LocalRobolectricTestRunner.class) 31 @RunWith(LocalRobolectricTestRunner.class)
30 @Config(manifest = Config.NONE, shadows = {BackgroundShadowAsyncTask.class}) 32 @Config(manifest = Config.NONE, shadows = {BackgroundShadowAsyncTask.class})
31 public class WebappDataStorageTest { 33 public class WebappDataStorageTest {
32 34
33 private SharedPreferences mSharedPreferences; 35 private SharedPreferences mSharedPreferences;
34 private boolean mCallbackCalled; 36 private boolean mCallbackCalled;
35 37
36 private class FetchCallback<T> implements WebappDataStorage.FetchCallback<T> { 38 private class FetchCallback<T> implements WebappDataStorage.FetchCallback<T> {
37 T mExpected; 39 T mExpected;
38 40
39 FetchCallback(T expected) { 41 FetchCallback(T expected) {
40 mExpected = expected; 42 mExpected = expected;
41 } 43 }
42 44
43 @Override 45 @Override
44 public void onDataRetrieved(T readObject) { 46 public void onDataRetrieved(T readObject) {
45 mCallbackCalled = true; 47 mCallbackCalled = true;
46 assertEquals(mExpected, readObject); 48 assertEquals(mExpected, readObject);
47 } 49 }
48 } 50 }
49 51
52 private static class TestClock extends WebappDataStorage.Clock {
53 private long mCurrentTime;
54
55 public TestClock(long currentTime) {
56 updateTime(currentTime);
57 }
58
59 public void updateTime(long currentTime) {
60 mCurrentTime = currentTime;
61 }
62
63 @Override
64 public long currentTimeMillis() {
65 return mCurrentTime;
66 }
67 }
68
50 @Before 69 @Before
51 public void setUp() throws Exception { 70 public void setUp() throws Exception {
52 mSharedPreferences = Robolectric.application 71 mSharedPreferences = Robolectric.application
53 .getSharedPreferences("webapp_test", Context.MODE_PRIVATE); 72 .getSharedPreferences("webapp_test", Context.MODE_PRIVATE);
54 73
55 // Set the last_used as if the web app had been registered by WebappRegi stry. 74 // Set the last_used as if the web app had been registered by WebappRegi stry.
56 mSharedPreferences.edit().putLong("last_used", 0).commit(); 75 mSharedPreferences.edit().putLong("last_used", 0).commit();
57 76
58 mCallbackCalled = false; 77 mCallbackCalled = false;
59 } 78 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 WebappDataStorage.getScope(Robolectric.application, "test", 161 WebappDataStorage.getScope(Robolectric.application, "test",
143 new FetchCallback<String>(scope)); 162 new FetchCallback<String>(scope));
144 BackgroundShadowAsyncTask.runBackgroundTasks(); 163 BackgroundShadowAsyncTask.runBackgroundTasks();
145 Robolectric.runUiThreadTasks(); 164 Robolectric.runUiThreadTasks();
146 165
147 assertTrue(mCallbackCalled); 166 assertTrue(mCallbackCalled);
148 } 167 }
149 168
150 @Test 169 @Test
151 @Feature({"Webapp"}) 170 @Feature({"Webapp"})
152 public void testURLRetrieval() throws Exception { 171 public void testUrlRetrieval() throws Exception {
153 final String url = "https://www.google.com"; 172 final String url = "https://www.google.com";
154 mSharedPreferences.edit() 173 mSharedPreferences.edit()
155 .putString(WebappDataStorage.KEY_URL, url) 174 .putString(WebappDataStorage.KEY_URL, url)
156 .commit(); 175 .commit();
157 176
158 WebappDataStorage.getURL(Robolectric.application, "test", 177 WebappDataStorage.getUrl(Robolectric.application, "test",
159 new FetchCallback<String>(url)); 178 new FetchCallback<String>(url));
160 BackgroundShadowAsyncTask.runBackgroundTasks(); 179 BackgroundShadowAsyncTask.runBackgroundTasks();
161 Robolectric.runUiThreadTasks(); 180 Robolectric.runUiThreadTasks();
162 181
163 assertTrue(mCallbackCalled); 182 assertTrue(mCallbackCalled);
164 } 183 }
165 184
166 @Test 185 @Test
167 @Feature({"Webapp"}) 186 @Feature({"Webapp"})
187 public void testWasLaunchedRecently() throws Exception {
188 final TestClock clock = new TestClock(System.currentTimeMillis());
189 WebappDataStorage.setClockForTests(clock);
190
191 WebappDataStorage storage = WebappDataStorage.open(Robolectric.applicati on, "test");
192 storage.updateLastUsedTime();
193 BackgroundShadowAsyncTask.runBackgroundTasks();
194 Robolectric.runUiThreadTasks();
195 assertTrue(!storage.wasLaunchedRecently());
196
197 long lastUsedTime = mSharedPreferences.getLong(WebappDataStorage.KEY_LAS T_USED,
198 WebappDataStorage.LAST_USED_INVALID);
199
200 assertTrue(lastUsedTime != WebappDataStorage.LAST_USED_UNSET);
201 assertTrue(lastUsedTime != WebappDataStorage.LAST_USED_INVALID);
202
203 // Mark as launched, check launched recently.
204 mSharedPreferences.edit()
205 .putBoolean(WebappDataStorage.KEY_LAUNCHED, true)
206 .commit();
207 assertTrue(storage.wasLaunchedRecently());
208
209 // Move the last used time one day in the past.
210 mSharedPreferences.edit()
211 .putLong(WebappDataStorage.KEY_LAST_USED, lastUsedTime - TimeUni t.DAYS.toMillis(1L))
212 .commit();
213 assertTrue(storage.wasLaunchedRecently());
214
215 // Move the last used time three days in the past.
216 mSharedPreferences.edit()
217 .putLong(WebappDataStorage.KEY_LAST_USED, lastUsedTime - TimeUni t.DAYS.toMillis(3L))
218 .commit();
219 assertTrue(storage.wasLaunchedRecently());
220
221 // Move the last used time one week in the past.
222 mSharedPreferences.edit()
223 .putLong(WebappDataStorage.KEY_LAST_USED, lastUsedTime - TimeUni t.DAYS.toMillis(7L))
224 .commit();
225 assertTrue(storage.wasLaunchedRecently());
226
227 // Move the last used time just under ten days in the past.
228 mSharedPreferences.edit().putLong(WebappDataStorage.KEY_LAST_USED,
229 lastUsedTime - TimeUnit.DAYS.toMillis(10L) + 1).commit();
230 assertTrue(storage.wasLaunchedRecently());
231
232 // Mark as not launched.
233 mSharedPreferences.edit()
234 .putBoolean(WebappDataStorage.KEY_LAUNCHED, false)
235 .commit();
236 assertTrue(!storage.wasLaunchedRecently());
237
238 // Mark as launched.
239 mSharedPreferences.edit()
240 .putBoolean(WebappDataStorage.KEY_LAUNCHED, true)
241 .commit();
242 assertTrue(storage.wasLaunchedRecently());
243
244 // Move the last used time to exactly ten days in the past.
245 mSharedPreferences.edit().putLong(WebappDataStorage.KEY_LAST_USED,
246 lastUsedTime - TimeUnit.DAYS.toMillis(10L)).commit();
247 assertTrue(!storage.wasLaunchedRecently());
248 }
249
250 @Test
251 @Feature({"Webapp"})
168 public void testIntentUpdate() throws Exception { 252 public void testIntentUpdate() throws Exception {
169 final String id = "id"; 253 final String id = "id";
170 final String action = "action"; 254 final String action = "action";
171 final String url = "url"; 255 final String url = "url";
172 final String scope = "scope"; 256 final String scope = "scope";
173 final String name = "name"; 257 final String name = "name";
174 final String shortName = "shortName"; 258 final String shortName = "shortName";
175 final Bitmap icon = createBitmap(); 259 final Bitmap icon = createBitmap();
176 final int orientation = 1; 260 final int orientation = 1;
177 final long themeColor = 2; 261 final long themeColor = 2;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 if (actual.getPixel(i, j) != 0) return false; 351 if (actual.getPixel(i, j) != 0) return false;
268 } 352 }
269 } 353 }
270 return true; 354 return true;
271 } 355 }
272 356
273 private static Bitmap createBitmap() { 357 private static Bitmap createBitmap() {
274 return Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_4444); 358 return Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_4444);
275 } 359 }
276 } 360 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698