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

Side by Side Diff: content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java

Issue 1756793004: Chrome-side patch for IsAppInstalled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@splitpatch2
Patch Set: Created 4 years, 9 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 2016 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.content.browser.installedapp;
6
7 import android.content.pm.PackageInfo;
8 import android.content.pm.PackageManager.NameNotFoundException;
9 import android.content.res.AssetManager;
10 import android.content.res.Resources;
11
12 import org.chromium.base.test.util.Feature;
13 import org.chromium.mojom.content.RelatedApplication;
14 import org.chromium.testing.local.LocalRobolectricTestRunner;
15
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20
21 import org.robolectric.Robolectric;
22 import org.robolectric.annotation.Config;
23 import org.robolectric.res.builder.RobolectricPackageManager;
24
25 import java.util.ArrayList;
26 import java.util.HashMap;
27
28
29 /**
30 * Ensure that the InstalledAppProvider returns the correct apps.
31 */
32 @RunWith(LocalRobolectricTestRunner.class)
33 @Config(manifest = Config.NONE)
34 public class InstalledAppProviderTest {
35 private FakePackageManager mPackageManager;
36 private InstalledAppProviderImpl mInstalledAppProvider;
37
38 /**
39 * FakePackageManager allows for the "installation" of Android package names
40 * and setting up Resources for installed packages.
41 */
42 public class FakePackageManager extends RobolectricPackageManager {
43 HashMap<String, Resources> mResourceMap;
44
45 public FakePackageManager() {
46 mResourceMap = new HashMap<String, Resources>();
47 }
48
49 @Override
50 public Resources getResourcesForApplication(String appPackageName)
51 throws NameNotFoundException {
52 return mResourceMap.get(appPackageName);
53 }
54
55 public void setResourcesForTest(String packageName, Resources resources) {
56 mResourceMap.put(packageName, resources);
57 }
58
59 public void installPackage(String packageName) {
60 PackageInfo info = new PackageInfo();
61 info.packageName = packageName;
62 addPackage(info);
63 }
64 }
65
66 /**
67 * MockResources allow us to define a pre-defined String array which is
68 * returned when a resource from a package is requested. In this case,
69 * this allows us to define site relationships.
70 */
71 public class MockResources extends Resources {
72 String[] mFakeStrings;
73 public MockResources(String[] array) {
74 super(new AssetManager(), null, null);
75 mFakeStrings = array;
76 }
77
78 @Override
79 public int getIdentifier(String name, String defType, String defPackage) {
80 if (mFakeStrings == null) {
81 return 0;
82 }
83 return 1;
84 }
85
86 @Override
87 public String[] getStringArray(int identifier) {
88 return mFakeStrings;
89 }
90 }
91
92 private void addSiteAssociation(String url, String packageName) {
93 String association = "{\"relation\": [\"delegate_permission/common.handl e_all_urls\"],"
94 + "\"target\": {\"namespace\": \"web\", \"site\": \"" + url + "\ "}}";
95 MockResources fr = new MockResources(new String[] {association});
96 mPackageManager.setResourcesForTest(packageName, fr);
97 }
98
99 private RelatedApplication createRelatedApplication(String platform, String id, String url) {
100 RelatedApplication realApplication = new RelatedApplication();
101 realApplication.platform = platform;
102 realApplication.id = id;
103 realApplication.url = url;
104 return realApplication;
105 }
106
107 @Before
108 public void setUp() {
109 mPackageManager = new FakePackageManager();
110 Robolectric.packageManager = mPackageManager;
111 mInstalledAppProvider = new InstalledAppProviderImpl(Robolectric.applica tion);
112 }
113
114 @Test
115 @Feature({"InstalledApp"})
116 public void testOneInstalledRelatedApplication() throws Exception {
117 mPackageManager.installPackage("com.real.package");
118 addSiteAssociation("http://localhost:8000/", "com.real.package");
119
120 RelatedApplication realApplication =
121 createRelatedApplication("play", "com.real.package", "");
122 RelatedApplication installedAppsArray[] = new RelatedApplication[1];
123 installedAppsArray[0] = realApplication;
124
125 RelatedApplication[] installedApplications =
126 mInstalledAppProvider.filterAndroidInstalledApps(
127 installedAppsArray, "http://localhost:8000/");
128
129 Assert.assertEquals(installedApplications.length, 1);
130 Assert.assertEquals(installedApplications[0], realApplication);
131 }
132
133 @Test
134 @Feature({"InstalledApp"})
135 public void testExtraInstalledApplication() throws Exception {
136 RelatedApplication realApplication =
137 createRelatedApplication("play", "com.real.package", "");
138 RelatedApplication installedAppsArray[] = new RelatedApplication[1];
139 installedAppsArray[0] = realApplication;
140
141 mPackageManager.installPackage("com.real.package");
142 mPackageManager.installPackage("com.different.package");
143 addSiteAssociation("http://localhost:8000/", "com.real.package");
144 addSiteAssociation("http://localhost:8000/", "com.different.package");
145
146 RelatedApplication[] installedApplications =
147 mInstalledAppProvider.filterAndroidInstalledApps(
148 installedAppsArray, "http://localhost:8000/");
149 Assert.assertEquals(installedApplications.length, 1);
150 Assert.assertEquals(installedApplications[0], realApplication);
151 }
152
153 @Test
154 @Feature({"InstalledApp"})
155 public void testMultipleInstalledRelatedApplications() throws Exception {
156 ArrayList<RelatedApplication> manifestRelatedApplications =
157 new ArrayList<RelatedApplication>();
158 manifestRelatedApplications.add(createRelatedApplication("play", "com.re al.package", ""));
159 manifestRelatedApplications.add(createRelatedApplication("play", "com.ot her.package", ""));
160 manifestRelatedApplications.add(
161 createRelatedApplication("itunes", "com.other.package", ""));
162
163 mPackageManager.installPackage("com.real.package");
164 mPackageManager.installPackage("com.different.package");
165 addSiteAssociation("http://localhost:8000/", "com.real.package");
166 addSiteAssociation("http://localhost:8000/", "com.other.package");
167
168 RelatedApplication[] relatedApplications =
169 new RelatedApplication[manifestRelatedApplications.size()];
170 manifestRelatedApplications.toArray(relatedApplications);
171 RelatedApplication[] installedApplications =
172 mInstalledAppProvider.filterAndroidInstalledApps(
173 relatedApplications, "http://localhost:8000/");
174 Assert.assertTrue(installedApplications.length == 2);
175 Assert.assertEquals(installedApplications[0], manifestRelatedApplication s.get(0));
176 Assert.assertEquals(installedApplications[1], manifestRelatedApplication s.get(1));
177 }
178 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698