Index: chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtilsTest.java |
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtilsTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtilsTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ea771d2add2c7c8a288a0d7f865c79254d1a844a |
--- /dev/null |
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtilsTest.java |
@@ -0,0 +1,117 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.webapps; |
+ |
+import android.app.Application; |
+import android.content.pm.ApplicationInfo; |
+import android.content.pm.PackageInfo; |
+import android.os.Bundle; |
+ |
+import org.junit.Assert; |
+import org.junit.Before; |
+import org.junit.Test; |
+import org.junit.runner.RunWith; |
+import org.robolectric.RuntimeEnvironment; |
+import org.robolectric.Shadows; |
+import org.robolectric.annotation.Config; |
+import org.robolectric.res.builder.RobolectricPackageManager; |
+import org.robolectric.shadows.ShadowApplication; |
+ |
+import org.chromium.base.ContextUtils; |
+import org.chromium.blink_public.platform.WebDisplayMode; |
+import org.chromium.content_public.common.ScreenOrientationValues; |
+import org.chromium.testing.local.LocalRobolectricTestRunner; |
+import org.chromium.webapk.lib.common.WebApkConstants; |
+import org.chromium.webapk.lib.common.WebApkMetaDataKeys; |
+ |
+/** |
+ * Tests WebApkMetaDataUtils. |
+ */ |
+@RunWith(LocalRobolectricTestRunner.class) |
+@Config(manifest = Config.NONE) |
+public class WebApkMetaDataUtilsTest { |
+ |
+ private static final String PACKAGE_NAME = "package_name"; |
+ |
+ // Android Manifest meta data for {@link PACKAGE_NAME}. |
+ private static final String START_URL = "https://www.google.com/scope/a_is_for_apple"; |
+ private static final String SCOPE = "https://www.google.com/scope"; |
+ private static final String NAME = "name"; |
+ private static final String SHORT_NAME = "short_name"; |
+ private static final String DISPLAY_MODE = "minimal-ui"; |
+ private static final String ORIENTATION = "portrait"; |
+ private static final String THEME_COLOR = "1L"; |
+ private static final String BACKGROUND_COLOR = "2L"; |
+ |
+ private ShadowApplication mShadowApplication; |
+ private RobolectricPackageManager mPackageManager; |
+ |
+ @Before |
+ public void setUp() { |
+ Application application = RuntimeEnvironment.application; |
+ ContextUtils.initApplicationContextForTests(application); |
+ mShadowApplication = Shadows.shadowOf(application); |
+ mShadowApplication.setPackageName(PACKAGE_NAME); |
+ mPackageManager = (RobolectricPackageManager) application.getPackageManager(); |
+ } |
+ |
+ @Test |
+ public void testSanity() { |
+ Bundle bundle = new Bundle(); |
+ bundle.putString(WebApkMetaDataKeys.SCOPE, SCOPE); |
+ bundle.putString(WebApkMetaDataKeys.NAME, NAME); |
+ bundle.putString(WebApkMetaDataKeys.SHORT_NAME, SHORT_NAME); |
+ bundle.putString(WebApkMetaDataKeys.DISPLAY_MODE, DISPLAY_MODE); |
+ bundle.putString(WebApkMetaDataKeys.ORIENTATION, ORIENTATION); |
+ bundle.putString(WebApkMetaDataKeys.THEME_COLOR, THEME_COLOR); |
+ bundle.putString(WebApkMetaDataKeys.BACKGROUND_COLOR, BACKGROUND_COLOR); |
+ PackageInfo packageInfo = newPackageInfo(PACKAGE_NAME, bundle); |
+ mPackageManager.addPackage(packageInfo); |
+ |
+ WebappInfo webappInfo = |
+ WebApkMetaDataUtils.extractWebappInfoFromWebApk(PACKAGE_NAME, START_URL, 0); |
+ |
+ Assert.assertEquals(WebApkConstants.WEBAPK_ID_PREFIX + PACKAGE_NAME, webappInfo.id()); |
+ Assert.assertEquals(SCOPE, webappInfo.scopeUri().toString()); |
+ Assert.assertEquals(NAME, webappInfo.name()); |
+ Assert.assertEquals(SHORT_NAME, webappInfo.shortName()); |
+ Assert.assertEquals(WebDisplayMode.MinimalUi, webappInfo.displayMode()); |
+ Assert.assertEquals(ScreenOrientationValues.PORTRAIT, webappInfo.orientation()); |
+ Assert.assertTrue(webappInfo.hasValidThemeColor()); |
+ Assert.assertEquals(1L, webappInfo.themeColor()); |
+ Assert.assertTrue(webappInfo.hasValidBackgroundColor()); |
+ Assert.assertEquals(2L, webappInfo.backgroundColor()); |
+ Assert.assertEquals(PACKAGE_NAME, webappInfo.webApkPackageName()); |
+ } |
+ |
+ /** |
+ * Test that WebappInfo are populated with the start URL passed to |
+ * {@link extractWebappInfoFromWebApk()} not the start URL in the WebAPK's meta data. When a |
+ * WebAPK is launched via a deep link from a URL within the WebAPK's scope, the WebAPK should |
+ * open at the URL it was deep linked from not the WebAPK's start URL. |
+ */ |
+ @Test |
+ public void testUseStartUrlOverride() { |
+ String passedInStartUrl = "https://www.google.com/master_override"; |
+ |
+ Bundle bundle = new Bundle(); |
+ bundle.putString(WebApkMetaDataKeys.START_URL, START_URL); |
+ PackageInfo packageInfo = newPackageInfo(PACKAGE_NAME, bundle); |
+ mPackageManager.addPackage(packageInfo); |
+ |
+ WebappInfo webappInfo = |
+ WebApkMetaDataUtils.extractWebappInfoFromWebApk(PACKAGE_NAME, passedInStartUrl, 0); |
+ Assert.assertEquals(passedInStartUrl, webappInfo.uri().toString()); |
+ } |
+ |
+ private static PackageInfo newPackageInfo(String packageName, Bundle metaData) { |
+ ApplicationInfo applicationInfo = new ApplicationInfo(); |
+ applicationInfo.metaData = metaData; |
+ PackageInfo packageInfo = new PackageInfo(); |
+ packageInfo.packageName = packageName; |
+ packageInfo.applicationInfo = applicationInfo; |
+ return packageInfo; |
+ } |
+} |