OLD | NEW |
(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 } |
OLD | NEW |