| Index: chrome/android/webapk/libs/client/junit/src/org/chromium/webapk/lib/client/WebApkValidatorTest.java
|
| diff --git a/chrome/android/webapk/libs/client/junit/src/org/chromium/webapk/lib/client/WebApkValidatorTest.java b/chrome/android/webapk/libs/client/junit/src/org/chromium/webapk/lib/client/WebApkValidatorTest.java
|
| index 27ba022405a8878d8811ae781e4911bf0c98dae7..4bd55826f29af2c025c213e193623972e3c552e6 100644
|
| --- a/chrome/android/webapk/libs/client/junit/src/org/chromium/webapk/lib/client/WebApkValidatorTest.java
|
| +++ b/chrome/android/webapk/libs/client/junit/src/org/chromium/webapk/lib/client/WebApkValidatorTest.java
|
| @@ -5,17 +5,11 @@
|
| package org.chromium.webapk.lib.client;
|
|
|
| import static org.junit.Assert.assertEquals;
|
| -import static org.junit.Assert.assertFalse;
|
| import static org.junit.Assert.assertNull;
|
| -import static org.junit.Assert.assertTrue;
|
| -import static org.mockito.Mockito.mock;
|
| -import static org.mockito.Mockito.when;
|
|
|
| -import android.content.Context;
|
| import android.content.Intent;
|
| import android.content.pm.ActivityInfo;
|
| import android.content.pm.PackageInfo;
|
| -import android.content.pm.PackageManager;
|
| import android.content.pm.PackageManager.NameNotFoundException;
|
| import android.content.pm.ResolveInfo;
|
| import android.content.pm.Signature;
|
| @@ -59,33 +53,27 @@ public class WebApkValidatorTest {
|
| 49, 17, 48, 15, 6, 3, 85, 4, 10, 19, 8, 67, 104, 114, 111, 109, 105, 117, 109, 49, 17,
|
| 48, 15, 6, 3, 85, 4, 11, 19, 8, 67, 104, 114, 111, 109, 105, 117, 109, 49, 26, 48, 24};
|
|
|
| - private Context mContext;
|
| - private PackageManager mPackageManager;
|
| - private PackageInfo mWebApkPackageInfo;
|
| - private PackageInfo mInvalidWebApkPackageInfo;
|
| + private RobolectricPackageManager mPackageManager;
|
|
|
| @Before
|
| public void setUp() {
|
| - mContext = mock(Context.class);
|
| - mPackageManager = mock(PackageManager.class);
|
| - when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
| + mPackageManager = (RobolectricPackageManager) Robolectric.application.getPackageManager();
|
| WebApkValidator.initWithBrowserHostSignature(EXPECTED_SIGNATURE);
|
| }
|
|
|
| /**
|
| * Tests {@link WebApkValidator.queryWebApkPackage()} returns a WebAPK's package name if the
|
| - * WebAPK can handle the given URL.
|
| + * WebAPK can handle the given URL and the WebAPK is valid.
|
| */
|
| @Test
|
| - public void testQueryWebApkPackageReturnsWebApkPackageNameIfTheURLCanBeHandled() {
|
| + public void testQueryWebApkPackageReturnsPackageIfTheURLCanBeHandled() {
|
| try {
|
| Intent intent = Intent.parseUri(URL_OF_WEBAPK, Intent.URI_INTENT_SCHEME);
|
| intent.addCategory(Intent.CATEGORY_BROWSABLE);
|
|
|
| - ResolveInfo info = newResolveInfo(WEBAPK_PACKAGE_NAME);
|
| - RobolectricPackageManager packageManager =
|
| - (RobolectricPackageManager) Robolectric.application.getPackageManager();
|
| - packageManager.addResolveInfoForIntent(intent, info);
|
| + mPackageManager.addResolveInfoForIntent(intent, newResolveInfo(WEBAPK_PACKAGE_NAME));
|
| + mPackageManager.addPackage(newPackageInfoWithOneSignature(
|
| + WEBAPK_PACKAGE_NAME, new Signature(EXPECTED_SIGNATURE)));
|
|
|
| assertEquals(WEBAPK_PACKAGE_NAME,
|
| WebApkValidator.queryWebApkPackage(Robolectric.application, URL_OF_WEBAPK));
|
| @@ -102,10 +90,9 @@ public class WebApkValidatorTest {
|
| try {
|
| Intent intent = Intent.parseUri(URL_OF_WEBAPK, Intent.URI_INTENT_SCHEME);
|
|
|
| - ResolveInfo info = newResolveInfo(WEBAPK_PACKAGE_NAME);
|
| - RobolectricPackageManager packageManager =
|
| - (RobolectricPackageManager) Robolectric.application.getPackageManager();
|
| - packageManager.addResolveInfoForIntent(intent, info);
|
| + mPackageManager.addResolveInfoForIntent(intent, newResolveInfo(WEBAPK_PACKAGE_NAME));
|
| + mPackageManager.addPackage(newPackageInfoWithOneSignature(
|
| + WEBAPK_PACKAGE_NAME, new Signature(EXPECTED_SIGNATURE)));
|
|
|
| assertNull(WebApkValidator.queryWebApkPackage(
|
| Robolectric.application, URL_OF_WEBAPK));
|
| @@ -124,10 +111,9 @@ public class WebApkValidatorTest {
|
| Intent intent = Intent.parseUri(URL_OF_WEBAPK, Intent.URI_INTENT_SCHEME);
|
| intent.addCategory(Intent.CATEGORY_BROWSABLE);
|
|
|
| - ResolveInfo info = newResolveInfo(WEBAPK_PACKAGE_NAME);
|
| - RobolectricPackageManager packageManager =
|
| - (RobolectricPackageManager) Robolectric.application.getPackageManager();
|
| - packageManager.addResolveInfoForIntent(intent, info);
|
| + mPackageManager.addResolveInfoForIntent(intent, newResolveInfo(WEBAPK_PACKAGE_NAME));
|
| + mPackageManager.addPackage(newPackageInfoWithOneSignature(
|
| + WEBAPK_PACKAGE_NAME, new Signature(EXPECTED_SIGNATURE)));
|
|
|
| assertNull(WebApkValidator.queryWebApkPackage(
|
| Robolectric.application, URL_WITHOUT_WEBAPK));
|
| @@ -137,80 +123,65 @@ public class WebApkValidatorTest {
|
| }
|
|
|
| /**
|
| - * Tests {@link WebApkValidator.findWebApkPackage()} returns a WebAPK's package name when there
|
| - * are ResolveInfos corresponds to a WebAPK.
|
| + * Tests {@link WebApkValidator.findWebApkPackage} returns the WebAPK package name if one of the
|
| + * ResolveInfos corresponds to a WebAPK and the WebAPK is valid.
|
| */
|
| @Test
|
| - public void testFindWebApkPackageReturnsWebApkPackageName() {
|
| + public void testFindWebApkPackageReturnsPackageForValidWebApk() throws NameNotFoundException {
|
| List<ResolveInfo> infos = new ArrayList<ResolveInfo>();
|
| infos.add(newResolveInfo(WEBAPK_PACKAGE_NAME));
|
| - assertEquals(WEBAPK_PACKAGE_NAME, WebApkValidator.findWebApkPackage(infos));
|
| - }
|
| + mPackageManager.addPackage(newPackageInfoWithOneSignature(
|
| + WEBAPK_PACKAGE_NAME, new Signature(EXPECTED_SIGNATURE)));
|
|
|
| - /**
|
| - * Tests {@link WebApkValidator.findWebApkPackage()} returns null when there isn't any
|
| - * ResolveInfos corresponds to a WebAPK.
|
| - */
|
| - @Test
|
| - public void testFindWebApkPackageReturnsNullWhenNoResolveInfosCorrespondingToWebApk() {
|
| - List<ResolveInfo> infos = new ArrayList<ResolveInfo>();
|
| - infos.add(newResolveInfo("com.google.android"));
|
| - assertNull(WebApkValidator.findWebApkPackage(infos));
|
| - }
|
| - /**
|
| - * Tests {@link WebApkValidator.IsValidWebApk} returns false for a package that doesn't start
|
| - * with {@link WebApkConstants.WEBAPK_PACKAGE_PREFIX}.
|
| - */
|
| - @Test
|
| - public void testIsValidWebApkReturnsFalseForInvalidPackageName() {
|
| - assertFalse(WebApkValidator.isValidWebApk(Robolectric.application.getApplicationContext(),
|
| - INVALID_WEBAPK_PACKAGE_NAME));
|
| + assertEquals(WEBAPK_PACKAGE_NAME,
|
| + WebApkValidator.findWebApkPackage(Robolectric.application, infos));
|
| }
|
|
|
| /**
|
| - * Tests {@link WebApkValidator.IsValidWebApk} returns true if the WebAPK has the expected
|
| - * signature.
|
| + * Tests {@link WebApkValidator.findWebApkPackage} returns null if none of the packages for the
|
| + * ResolveInfos start with {@link WebApkConstants.WEBAPK_PACKAGE_PREFIX}.
|
| */
|
| @Test
|
| - public void testIsValidWebApkReturnsTrueForValidWebApk() throws NameNotFoundException {
|
| - mWebApkPackageInfo = mock(PackageInfo.class);
|
| - when(mPackageManager.getPackageInfo(WEBAPK_PACKAGE_NAME, PackageManager.GET_SIGNATURES))
|
| - .thenReturn(mWebApkPackageInfo);
|
| - mWebApkPackageInfo.signatures = new Signature[] {new Signature(EXPECTED_SIGNATURE)};
|
| + public void testFindWebApkPackageReturnsNullForInvalidPackageName() {
|
| + List<ResolveInfo> infos = new ArrayList<ResolveInfo>();
|
| + infos.add(newResolveInfo(INVALID_WEBAPK_PACKAGE_NAME));
|
| + mPackageManager.addPackage(newPackageInfoWithOneSignature(
|
| + INVALID_WEBAPK_PACKAGE_NAME, new Signature(EXPECTED_SIGNATURE)));
|
|
|
| - assertTrue(WebApkValidator.isValidWebApk(mContext, WEBAPK_PACKAGE_NAME));
|
| + assertNull(WebApkValidator.findWebApkPackage(Robolectric.application, infos));
|
| }
|
|
|
| /**
|
| - * Tests {@link WebApkValidator.IsValidWebApk} returns true if a WebAPK has multiple
|
| - * signatures and one matches the expected signature.
|
| + * Tests {@link WebApkValidator.findWebApkPackage} returns the WebAPK package name if a WebAPK
|
| + * has multiple signatures and one matches the expected signature.
|
| */
|
| @Test
|
| - public void testIsValidWebApkReturnsTrueForWebApkWithMultipleSignaturesAndOneMatched()
|
| + public void testFindWebApkPackageReturnsPackageForWebApkWithMultipleSignaturesAndOneMatched()
|
| throws NameNotFoundException {
|
| - mWebApkPackageInfo = mock(PackageInfo.class);
|
| - when(mPackageManager.getPackageInfo(WEBAPK_PACKAGE_NAME, PackageManager.GET_SIGNATURES))
|
| - .thenReturn(mWebApkPackageInfo);
|
| - mWebApkPackageInfo.signatures = new Signature[] {new Signature(SIGNATURE_1),
|
| + List<ResolveInfo> infos = new ArrayList<ResolveInfo>();
|
| + infos.add(newResolveInfo(WEBAPK_PACKAGE_NAME));
|
| + Signature[] signatures = new Signature[] {new Signature(SIGNATURE_1),
|
| new Signature(SIGNATURE_2), new Signature(EXPECTED_SIGNATURE)};
|
| + mPackageManager.addPackage(newPackageInfo(WEBAPK_PACKAGE_NAME, signatures));
|
|
|
| - assertTrue(WebApkValidator.isValidWebApk(mContext, WEBAPK_PACKAGE_NAME));
|
| + assertEquals(WEBAPK_PACKAGE_NAME,
|
| + WebApkValidator.findWebApkPackage(Robolectric.application, infos));
|
| }
|
|
|
| /**
|
| - * Tests {@link WebApkValidator.IsValidWebApk} returns false if a WebAPK has multiple
|
| - * signatures but none of them matches the expected signature.
|
| + * Tests {@link WebApkValidator.findWebApkPackage} returns null if a WebAPK has multiple
|
| + * signatures but none of the signatures match the expected signature.
|
| */
|
| @Test
|
| - public void testIsValidWebApkReturnsFalseForWebApkWithMultipleSignaturesWithoutAnyMatched()
|
| + public void testFindWebApkPackageReturnsNullForWebApkWithMultipleSignaturesWithoutAnyMatched()
|
| throws NameNotFoundException {
|
| - mWebApkPackageInfo = mock(PackageInfo.class);
|
| - when(mPackageManager.getPackageInfo(WEBAPK_PACKAGE_NAME, PackageManager.GET_SIGNATURES))
|
| - .thenReturn(mWebApkPackageInfo);
|
| - mWebApkPackageInfo.signatures = new Signature[] {new Signature(SIGNATURE_1),
|
| - new Signature(SIGNATURE_2)};
|
| + List<ResolveInfo> infos = new ArrayList<ResolveInfo>();
|
| + infos.add(newResolveInfo(WEBAPK_PACKAGE_NAME));
|
| + Signature signatures[] =
|
| + new Signature[] {new Signature(SIGNATURE_1), new Signature(SIGNATURE_2)};
|
| + mPackageManager.addPackage(newPackageInfo(WEBAPK_PACKAGE_NAME, signatures));
|
|
|
| - assertFalse(WebApkValidator.isValidWebApk(mContext, WEBAPK_PACKAGE_NAME));
|
| + assertNull(WebApkValidator.findWebApkPackage(Robolectric.application, infos));
|
| }
|
|
|
| private static ResolveInfo newResolveInfo(String packageName) {
|
| @@ -220,4 +191,16 @@ public class WebApkValidatorTest {
|
| resolveInfo.activityInfo = activityInfo;
|
| return resolveInfo;
|
| }
|
| +
|
| + private static PackageInfo newPackageInfo(String packageName, Signature[] signatures) {
|
| + PackageInfo packageInfo = new PackageInfo();
|
| + packageInfo.packageName = packageName;
|
| + packageInfo.signatures = signatures;
|
| + return packageInfo;
|
| + }
|
| +
|
| + private static PackageInfo newPackageInfoWithOneSignature(
|
| + String packageName, Signature signature) {
|
| + return newPackageInfo(packageName, new Signature[] {signature});
|
| + }
|
| }
|
|
|