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

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

Issue 1989283002: Upstream: Launch WebApkActivity from WebAPK. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nits. Created 4 years, 6 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.test.InstrumentationTestCase; 7 import android.test.InstrumentationTestCase;
8 import android.test.UiThreadTest; 8 import android.test.UiThreadTest;
9 import android.test.suitebuilder.annotation.SmallTest; 9 import android.test.suitebuilder.annotation.SmallTest;
10 10
11 import org.chromium.base.ContextUtils;
11 import org.chromium.base.metrics.RecordHistogram; 12 import org.chromium.base.metrics.RecordHistogram;
12 import org.chromium.base.test.util.AdvancedMockContext; 13 import org.chromium.base.test.util.AdvancedMockContext;
13 import org.chromium.base.test.util.Feature; 14 import org.chromium.base.test.util.Feature;
15 import org.chromium.webapk.lib.common.WebApkConstants;
14 16
15 import java.util.HashMap; 17 import java.util.HashMap;
16 import java.util.HashSet; 18 import java.util.HashSet;
17 import java.util.List; 19 import java.util.List;
18 import java.util.Map; 20 import java.util.Map;
19 21
20 /** 22 /**
21 * Tests for the ActivityAssigner class. 23 * Tests for the ActivityAssigner class.
22 */ 24 */
23 public class ActivityAssignerTest extends InstrumentationTestCase { 25 public class ActivityAssignerTest extends InstrumentationTestCase {
24 private static final String BASE_WEBAPP_ID = "BASE_WEBAPP_ID_"; 26 private static final String BASE_WEBAPP_ID = "BASE_WEBAPP_ID_";
25 27
26 private AdvancedMockContext mContext; 28 private AdvancedMockContext mContext;
27 private HashMap<String, Object> mPreferences; 29 private HashMap<String, Object>[] mPreferences;
28 30
29 @Override 31 @Override
30 protected void setUp() throws Exception { 32 protected void setUp() throws Exception {
31 super.setUp(); 33 super.setUp();
32 RecordHistogram.disableForTests(); 34 RecordHistogram.disableForTests();
33 mContext = new AdvancedMockContext(); 35 mContext = new AdvancedMockContext(ContextUtils.getApplicationContext()) ;
34 mPreferences = new HashMap<String, Object>(); 36 mPreferences = new HashMap[ActivityAssigner.ACTIVITY_TYPE_COUNT];
35 mContext.addSharedPreferences(ActivityAssigner.PREF_PACKAGE, mPreference s); 37 for (int i = 0; i < ActivityAssigner.ACTIVITY_TYPE_COUNT; ++i) {
38 mPreferences[i] = new HashMap<String, Object>();
39 mContext.addSharedPreferences(ActivityAssigner.PREF_PACKAGE[i], mPre ferences[i]);
40 }
41 ContextUtils.initApplicationContextForTests(mContext);
36 } 42 }
37 43
38 @UiThreadTest 44 @UiThreadTest
39 @SmallTest 45 @SmallTest
40 @Feature({"Webapps"}) 46 @Feature({"Webapps"})
41 public void testEntriesCreated() { 47 public void testEntriesCreated() {
42 ActivityAssigner assigner = ActivityAssigner.instance(mContext); 48 String webappId = BASE_WEBAPP_ID;
49 ActivityAssigner assigner = ActivityAssigner.instance(webappId);
43 50
44 // Make sure that no webapps have been assigned to any Activities for a fresh install. 51 // Make sure that no webapps have been assigned to any Activities for a fresh install.
45 checkState(assigner); 52 checkState(assigner);
46 List<ActivityAssigner.ActivityEntry> entries = assigner.getEntries(); 53 List<ActivityAssigner.ActivityEntry> entries = assigner.getEntries();
47 assertEquals(ActivityAssigner.NUM_WEBAPP_ACTIVITIES, entries.size()); 54 assertEquals(ActivityAssigner.NUM_WEBAPP_ACTIVITIES, entries.size());
48 for (ActivityAssigner.ActivityEntry entry : entries) { 55 for (ActivityAssigner.ActivityEntry entry : entries) {
49 assertEquals(null, entry.mWebappId); 56 assertEquals(null, entry.mWebappId);
50 } 57 }
51 } 58 }
52 59
53 /** 60 /**
54 * Make sure invalid entries get culled & that we still have the correct num ber of unique 61 * Make sure invalid entries get culled & that we still have the correct num ber of unique
55 * Activity indices available. 62 * Activity indices available.
56 */ 63 */
57 @UiThreadTest 64 @UiThreadTest
58 @SmallTest 65 @SmallTest
59 @Feature({"Webapps"}) 66 @Feature({"Webapps"})
60 public void testEntriesDownsized() { 67 public void testEntriesDownsized() {
61 // Store preferences indicating that more Activities existed previously than there are now. 68 // Store preferences indicating that more Activities existed previously than there are now.
62 int numSavedEntries = ActivityAssigner.NUM_WEBAPP_ACTIVITIES + 1; 69 int numSavedEntries = ActivityAssigner.NUM_WEBAPP_ACTIVITIES + 1;
63 createPreferences(numSavedEntries); 70 String webappId = BASE_WEBAPP_ID;
71 int index = ActivityAssigner.getIndex(webappId);
72 createPreferences(numSavedEntries, index);
64 73
65 ActivityAssigner assigner = ActivityAssigner.instance(mContext); 74 ActivityAssigner assigner = ActivityAssigner.instance(webappId);
75 assertEquals(index, assigner.getActivityTypeIndex());
66 checkState(assigner); 76 checkState(assigner);
67 } 77 }
68 78
69 /** 79 /**
70 * Make sure we recover from corrupted stored preferences. 80 * Make sure we recover from corrupted stored preferences.
71 */ 81 */
72 @UiThreadTest 82 @UiThreadTest
73 @SmallTest 83 @SmallTest
74 @Feature({"Webapps"}) 84 @Feature({"Webapps"})
75 public void testCorruptedPreferences() { 85 public void testCorruptedPreferences() {
76 String wrongVariableType = "omgwtfbbq"; 86 String wrongVariableType = "omgwtfbbq";
77 mPreferences.clear(); 87 String webappId = BASE_WEBAPP_ID;
78 mPreferences.put(ActivityAssigner.PREF_NUM_SAVED_ENTRIES, wrongVariableT ype); 88 int index = ActivityAssigner.getIndex(BASE_WEBAPP_ID);
89 mPreferences[index].clear();
90 mPreferences[index].put(ActivityAssigner.PREF_NUM_SAVED_ENTRIES[index], wrongVariableType);
79 91
80 ActivityAssigner assigner = ActivityAssigner.instance(mContext); 92 ActivityAssigner assigner = ActivityAssigner.instance(webappId);
93 assertEquals(index, assigner.getActivityTypeIndex());
81 checkState(assigner); 94 checkState(assigner);
82 } 95 }
83 96
84 @UiThreadTest 97 @UiThreadTest
85 @SmallTest 98 @SmallTest
86 @Feature({"Webapps"}) 99 @Feature({"Webapps"})
87 public void testAssignment() { 100 public void testAssignment() {
88 ActivityAssigner assigner = ActivityAssigner.instance(mContext); 101 String webappId = BASE_WEBAPP_ID;
102 ActivityAssigner assigner = ActivityAssigner.instance(webappId);
103 int index = assigner.getActivityTypeIndex();
104
89 checkState(assigner); 105 checkState(assigner);
90 106
91 // Assign all of the Activities to webapps. 107 // Assign all of the Activities to webapps.
92 // Go backwards to make sure ordering doesn't matter. 108 // Go backwards to make sure ordering doesn't matter.
93 Map<String, Integer> testMap = new HashMap<String, Integer>(); 109 Map<String, Integer> testMap = new HashMap<String, Integer>();
94 for (int i = ActivityAssigner.NUM_WEBAPP_ACTIVITIES - 1; i >= 0; --i) { 110 for (int i = ActivityAssigner.NUM_WEBAPP_ACTIVITIES - 1; i >= 0; --i) {
95 String currentWebappId = BASE_WEBAPP_ID + i; 111 String currentWebappId = BASE_WEBAPP_ID + i;
96 int activityIndex = assigner.assign(currentWebappId); 112 int activityIndex = assigner.assign(currentWebappId);
97 testMap.put(currentWebappId, activityIndex); 113 testMap.put(currentWebappId, activityIndex);
98 } 114 }
99 assertEquals(ActivityAssigner.NUM_WEBAPP_ACTIVITIES, testMap.size()); 115 assertEquals(ActivityAssigner.NUM_WEBAPP_ACTIVITIES, testMap.size());
100 116
101 // Make sure that passing in the same webapp ID gives back the same Acti vity. 117 // Make sure that passing in the same webapp ID gives back the same Acti vity.
102 for (int i = 0; i < ActivityAssigner.NUM_WEBAPP_ACTIVITIES; ++i) { 118 for (int i = 0; i < ActivityAssigner.NUM_WEBAPP_ACTIVITIES; ++i) {
103 String currentWebappId = BASE_WEBAPP_ID + i; 119 String currentWebappId = BASE_WEBAPP_ID + i;
104 int actualIndex = assigner.assign(currentWebappId); 120 int actualIndex = assigner.assign(currentWebappId);
105 int expectedIndex = testMap.get(currentWebappId); 121 int expectedIndex = testMap.get(currentWebappId);
106 assertEquals(expectedIndex, actualIndex); 122 assertEquals(expectedIndex, actualIndex);
107 } 123 }
108 124
109 // Access all but the last one to ensure that the last Activity is recyc led. 125 // Access all but the last one to ensure that the last Activity is recyc led.
110 for (int i = 0; i < ActivityAssigner.NUM_WEBAPP_ACTIVITIES - 1; ++i) { 126 for (int i = 0; i < ActivityAssigner.NUM_WEBAPP_ACTIVITIES - 1; ++i) {
111 String currentWebappId = BASE_WEBAPP_ID + i; 127 String currentWebappId = BASE_WEBAPP_ID + i;
112 int activityIndex = testMap.get(currentWebappId); 128 int activityIndex = testMap.get(currentWebappId);
113 assigner.markActivityUsed(activityIndex, currentWebappId); 129 assigner.markActivityUsed(activityIndex, currentWebappId);
114 } 130 }
115 131
116 // Make sure that the least recently used Activity is repurposed when we run out. 132 // Make sure that the least recently used Activity is repurposed when we run out.
117 String overflowWebappId = "OVERFLOW_ID"; 133 String overflowWebappId = "OVERFLOW_ID";
134 assertEquals(index, ActivityAssigner.getIndex(overflowWebappId));
118 int overflowActivityIndex = assigner.assign(overflowWebappId); 135 int overflowActivityIndex = assigner.assign(overflowWebappId);
119 136
120 String lastAssignedWebappId = BASE_WEBAPP_ID + (ActivityAssigner.NUM_WEB APP_ACTIVITIES - 1); 137 String lastAssignedWebappId = BASE_WEBAPP_ID + (ActivityAssigner.NUM_WEB APP_ACTIVITIES - 1);
121 int lastAssignedCurrentActivityIndex = assigner.assign(lastAssignedWebap pId); 138 int lastAssignedCurrentActivityIndex = assigner.assign(lastAssignedWebap pId);
122 int lastAssignedPreviousActivityIndex = testMap.get(lastAssignedWebappId ); 139 int lastAssignedPreviousActivityIndex = testMap.get(lastAssignedWebappId );
123 140
124 assertEquals("Overflow webapp did not steal the Activity from the other webapp", 141 assertEquals("Overflow webapp did not steal the Activity from the other webapp",
125 lastAssignedPreviousActivityIndex, overflowActivityIndex); 142 lastAssignedPreviousActivityIndex, overflowActivityIndex);
126 assertNotSame("Webapp did not get reassigned to a new Activity.", 143 assertNotSame("Webapp did not get reassigned to a new Activity.",
127 lastAssignedPreviousActivityIndex, lastAssignedCurrentActivityIn dex); 144 lastAssignedPreviousActivityIndex, lastAssignedCurrentActivityIn dex);
128 145
129 checkState(assigner); 146 checkState(assigner);
130 } 147 }
131 148
149 @UiThreadTest
150 @SmallTest
151 @Feature({"WebApk"})
152 public void testGetIndex() {
153 String webappId = BASE_WEBAPP_ID;
154 assertEquals(ActivityAssigner.WEBAPP_ACTIVITY_INDEX, ActivityAssigner.ge tIndex(webappId));
155
156 String webApkId = WebApkConstants.WEBAPK_ID_PREFIX + "id";
157 assertEquals(ActivityAssigner.WEBAPK_ACTIVITY_INDEX, ActivityAssigner.ge tIndex(webApkId));
158 }
159
132 /** Saves state indicating that a number of WebappActivities have already be en saved out. */ 160 /** Saves state indicating that a number of WebappActivities have already be en saved out. */
133 private void createPreferences(int numSavedEntries) { 161 private void createPreferences(int numSavedEntries, int activityTypeIndex) {
134 mPreferences.clear(); 162 mPreferences[activityTypeIndex].clear();
135 mPreferences.put(ActivityAssigner.PREF_NUM_SAVED_ENTRIES, numSavedEntrie s); 163 mPreferences[activityTypeIndex].put(
164 ActivityAssigner.PREF_NUM_SAVED_ENTRIES[activityTypeIndex], numS avedEntries);
136 for (int i = 0; i < numSavedEntries; ++i) { 165 for (int i = 0; i < numSavedEntries; ++i) {
137 String activityIndexKey = ActivityAssigner.PREF_ACTIVITY_INDEX + i; 166 String activityIndexKey =
138 mPreferences.put(activityIndexKey, i); 167 ActivityAssigner.PREF_ACTIVITY_INDEX[activityTypeIndex] + i;
168 mPreferences[activityTypeIndex].put(activityIndexKey, i);
139 169
140 String webappIdKey = ActivityAssigner.PREF_WEBAPP_ID + i; 170 String webappIdKey = ActivityAssigner.PREF_WEBAPP_ID[activityTypeInd ex] + i;
141 String webappIdValue = BASE_WEBAPP_ID + i; 171 String webappIdValue = BASE_WEBAPP_ID + i;
142 mPreferences.put(webappIdKey, webappIdValue); 172 mPreferences[activityTypeIndex].put(webappIdKey, webappIdValue);
143 } 173 }
144 } 174 }
145 175
146 /** Checks the saved state to make sure it makes sense. */ 176 /** Checks the saved state to make sure it makes sense. */
147 private void checkState(ActivityAssigner assigner) { 177 private void checkState(ActivityAssigner assigner) {
148 List<ActivityAssigner.ActivityEntry> entries = assigner.getEntries(); 178 List<ActivityAssigner.ActivityEntry> entries = assigner.getEntries();
179 int activityTypeIndex = assigner.getActivityTypeIndex();
149 180
150 // Confirm that the right number of entries in memory and in the prefere nces. 181 // Confirm that the right number of entries in memory and in the prefere nces.
151 assertEquals(ActivityAssigner.NUM_WEBAPP_ACTIVITIES, entries.size()); 182 assertEquals(ActivityAssigner.NUM_WEBAPP_ACTIVITIES, entries.size());
152 assertEquals(ActivityAssigner.NUM_WEBAPP_ACTIVITIES, 183 assertEquals(ActivityAssigner.NUM_WEBAPP_ACTIVITIES,
153 (int) (Integer) mPreferences.get(ActivityAssigner.PREF_NUM_SAVED _ENTRIES)); 184 (int) (Integer) mPreferences[activityTypeIndex].get(
185 ActivityAssigner.PREF_NUM_SAVED_ENTRIES[activityTypeInde x]));
154 186
155 // Confirm that the Activity indices go from 0 to NUM_WEBAPP_ACTIVITIES - 1. 187 // Confirm that the Activity indices go from 0 to NUM_WEBAPP_ACTIVITIES - 1.
156 HashSet<Integer> assignedActivities = new HashSet<Integer>(); 188 HashSet<Integer> assignedActivities = new HashSet<Integer>();
157 for (ActivityAssigner.ActivityEntry entry : entries) { 189 for (ActivityAssigner.ActivityEntry entry : entries) {
158 assignedActivities.add(entry.mActivityIndex); 190 assignedActivities.add(entry.mActivityIndex);
159 } 191 }
160 for (int i = 0; i < ActivityAssigner.NUM_WEBAPP_ACTIVITIES; ++i) { 192 for (int i = 0; i < ActivityAssigner.NUM_WEBAPP_ACTIVITIES; ++i) {
161 assertTrue(assignedActivities.contains(i)); 193 assertTrue(assignedActivities.contains(i));
162 } 194 }
163 } 195 }
164 } 196 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698