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

Side by Side Diff: chrome/android/webapk/shell_apk/junit/src/org/chromium/webapk/shell_apk/WebApkUtilsTest.java

Issue 2858563004: Add support for webapk without runtimeHost (Closed)
Patch Set: Fix test failure. 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
(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.webapk.shell_apk;
6
7 import static org.mockito.ArgumentMatchers.any;
8 import static org.mockito.ArgumentMatchers.anyInt;
9 import static org.mockito.ArgumentMatchers.anyString;
10
11 import android.content.Context;
12 import android.content.Intent;
13 import android.content.SharedPreferences;
14 import android.content.pm.ActivityInfo;
15 import android.content.pm.ApplicationInfo;
16 import android.content.pm.PackageManager;
17 import android.content.pm.ResolveInfo;
18 import android.os.Bundle;
19
20 import org.junit.Assert;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.mockito.Mock;
25 import org.mockito.Mockito;
26 import org.robolectric.annotation.Config;
27
28 import org.chromium.testing.local.LocalRobolectricTestRunner;
29 import org.chromium.webapk.lib.common.WebApkConstants;
30 import org.chromium.webapk.lib.common.WebApkMetaDataKeys;
31
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.List;
35
36 /**
37 * Tests for WebApkUtils.
38 */
39
40 @RunWith(LocalRobolectricTestRunner.class)
41 @Config(manifest = Config.NONE)
42 public class WebApkUtilsTest {
43 private static final String HOST_BROWSER_PACKAGE_NAME = "browser.supporting. webapks";
44 private static final String WEBAPK_PACKAGE_NAME = "org.chromium.webapk.test_ package";
45
46 private static final List<String> sInstalledBrowsers =
47 new ArrayList<String>(Arrays.asList("browser.installed", HOST_BROWSE R_PACKAGE_NAME));
48
49 @Mock
50 private Context mContext;
51 @Mock
52 private PackageManager mPackageManager;
53
54 @Before
55 public void setUp() {
56 mContext = Mockito.mock(Context.class);
57 Mockito.when(mContext.getPackageName()).thenReturn(WEBAPK_PACKAGE_NAME);
58 mPackageManager = Mockito.mock(PackageManager.class);
59 Mockito.when(mContext.getPackageManager()).thenReturn(mPackageManager);
60
61 WebApkUtils.resetCachedHostPackageForTesting();
62 WebApkUtils.setBrowsersSupportingWebApkForTesting(sInstalledBrowsers);
63 }
64
65 /**
66 * Tests that null will be returned if there isn't any browser installed on the device.
67 */
68 @Test
69 public void testReturnsEmptyStringWhenNoBrowserInstalled() {
Yaron 2017/05/15 18:41:37 testReturnsNull
Xi Han 2017/05/16 13:50:39 Done.
70 String hostBrowser = WebApkUtils.getHostBrowserPackageName(mContext);
71 Assert.assertNull(hostBrowser);
72 }
73
74 /**
75 * Tests that the package name of the host browser specified in the AndroidM anifest.xml will be
76 * returned as the WebAPK's host browser if it is installed.
77 */
78 @Test
79 public void testReturnsHostBrowserInManifestIfInstalled() {
80 String expectedHostBrowser = HOST_BROWSER_PACKAGE_NAME;
81 mockInstallBrowsers();
82 mockWebApkPackageMetadata(HOST_BROWSER_PACKAGE_NAME);
83 mockSharedPreferences(null);
84
85 String hostBrowser = WebApkUtils.getHostBrowserPackageName(mContext);
86 Assert.assertTrue(hostBrowser.equals(expectedHostBrowser));
Yaron 2017/05/15 18:41:37 use assertEquals (throughout) for better error mes
Xi Han 2017/05/16 13:50:39 It is deprecated, that is why I try to void using
Yaron 2017/05/16 15:20:47 Pretty sure it's just a bug in studio (or at least
Xi Han 2017/05/23 16:51:09 Only the one with (object, object) is deprecated,
87 }
88
89 /**
90 * Tests that the package name of the host browser in the SharedPreference w ill be returned if:
91 * 1. there isn't a host browser specified in the AndroidManifest.xml, or th e specified one has
92 * been uninstalled;
93 * And
94 * 2. there is a host browser stored in the SharedPreference and it is still installed.
95 */
96 @Test
97 public void testReturnsHostBrowserInSharedPreferenceIfInstalled() {
98 String expectedHostBrowser = HOST_BROWSER_PACKAGE_NAME;
99 mockInstallBrowsers();
100 mockWebApkPackageMetadata(null);
101 mockSharedPreferences(expectedHostBrowser);
102
103 String hostBrowser = WebApkUtils.getHostBrowserPackageName(mContext);
104 Assert.assertTrue(hostBrowser.equals(expectedHostBrowser));
105
106 WebApkUtils.resetCachedHostPackageForTesting();
107 mockWebApkPackageMetadata("browser.uninstalled");
Yaron 2017/05/15 18:41:37 so the idea is that this is referring to a webapk
Xi Han 2017/05/16 13:50:39 Added, thanks!
108 hostBrowser = WebApkUtils.getHostBrowserPackageName(mContext);
109 Assert.assertTrue(hostBrowser.equals(expectedHostBrowser));
110 }
111
112 /**
113 * Tests that the default browser package name will be returned if:
114 * 1. there isn't any host browser specified in the AndroidManifest.xml or t he SharedPreference,
115 * or the specified one has uninstalled;
116 * And
117 * 2. the default browser supports WebAPKs.
118 */
119 @Test
120 public void testReturnsDefaultBrowser() {
121 String defaultBrowser = HOST_BROWSER_PACKAGE_NAME;
122 mockInstallBrowsers();
123 mockWebApkPackageMetadata(null);
124 mockSharedPreferences(null);
125 mockDefaultBrowser(defaultBrowser);
126
127 String hostBrowser = WebApkUtils.getHostBrowserPackageName(mContext);
128 Assert.assertTrue(hostBrowser.equals(defaultBrowser));
129
130 WebApkUtils.resetCachedHostPackageForTesting();
131 mockSharedPreferences("browser.uninstalled");
132 hostBrowser = WebApkUtils.getHostBrowserPackageName(mContext);
133 Assert.assertTrue(hostBrowser.equals(defaultBrowser));
134 }
135
136 /**
137 * Tests that the package name of one of installed browsers that support Web APKs will be
138 * returned if:
139 * 1. there is neither a host browser specified in the AndroidManifest.xml n or in the
140 * SharedPreference, or the specified one has uninstalled;
141 * And
142 * 2. the default browser doesn't support WebAPKs.
143 * And
144 * 3. there is another installed browser that supports WebAPKs.
145 */
146 @Test
147 public void testReturnsInstalledBrowserSupportingWebApks() {
148 mockInstallBrowsers();
149 mockWebApkPackageMetadata(null);
150 mockSharedPreferences(null);
151 mockDefaultBrowser("browser.not.supporting.webapks");
152
153 String hostBrowser = WebApkUtils.getHostBrowserPackageName(mContext);
154 Assert.assertNotNull(hostBrowser);
155 Assert.assertTrue(sInstalledBrowsers.contains(hostBrowser));
156 }
157
158 private static ResolveInfo newResolveInfo(String packageName) {
159 ActivityInfo activityInfo = new ActivityInfo();
160 activityInfo.packageName = packageName;
161 ResolveInfo resolveInfo = new ResolveInfo();
162 resolveInfo.activityInfo = activityInfo;
163 return resolveInfo;
164 }
165
166 private void mockInstallBrowsers() {
167 List<ResolveInfo> browsers = new ArrayList<ResolveInfo>();
168 for (String name : sInstalledBrowsers) {
169 browsers.add(newResolveInfo(name));
170 }
171 Mockito.when(mPackageManager.queryIntentActivities(any(Intent.class), an yInt()))
172 .thenReturn(browsers);
173 }
174
175 private void mockSharedPreferences(String hostBrowserPackage) {
176 SharedPreferences sharedPreferences = Mockito.mock(SharedPreferences.cla ss);
177 Mockito.when(mContext.getSharedPreferences(
178 WebApkConstants.PREF_PACKAGE, Context.MODE_PRIVATE) )
179 .thenReturn(sharedPreferences);
180
181 Mockito.when(sharedPreferences.getString(WebApkUtils.SHARED_PREF_RUNTIME _HOST, null))
182 .thenReturn(hostBrowserPackage);
183 SharedPreferences.Editor editor = Mockito.mock(SharedPreferences.Editor. class);
184 Mockito.when(sharedPreferences.edit()).thenReturn(editor);
185 }
186
187 private void mockWebApkPackageMetadata(String hostBrowserPackage) {
188 ApplicationInfo ai = Mockito.mock(ApplicationInfo.class);
189 ai.metaData = new Bundle();
190 if (hostBrowserPackage != null) {
191 ai.metaData.putString(WebApkMetaDataKeys.RUNTIME_HOST, hostBrowserPa ckage);
192 }
193 try {
194 Mockito.when(mPackageManager.getApplicationInfo(anyString(), anyInt( ))).thenReturn(ai);
Yaron 2017/05/15 18:41:37 instead of anyString() you should be able to use h
Xi Han 2017/05/16 13:50:39 Done.
195 } catch (PackageManager.NameNotFoundException e) {
196 e.printStackTrace();
197 }
198 }
199
200 private void mockDefaultBrowser(String defaultBrowser) {
201 ResolveInfo defaultBrowserInfo = newResolveInfo(defaultBrowser);
202 Mockito.when(mPackageManager.resolveActivity(any(Intent.class), anyInt() ))
203 .thenReturn(defaultBrowserInfo);
204 }
205 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698