summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/KotlinUtilsTest.kt104
1 files changed, 103 insertions, 1 deletions
diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/KotlinUtilsTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/KotlinUtilsTest.kt
index 435f89903..8f54da579 100644
--- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/KotlinUtilsTest.kt
+++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/KotlinUtilsTest.kt
@@ -16,6 +16,15 @@
package com.android.permissioncontroller.permission.util
+import android.Manifest.permission.READ_MEDIA_IMAGES
+import android.Manifest.permission.READ_MEDIA_VIDEO
+import android.content.Context
+import android.content.Intent
+import android.content.Intent.ACTION_SHOW_APP_INFO
+import android.content.Intent.EXTRA_PACKAGE_NAME
+import android.content.pm.ActivityInfo
+import android.content.pm.PackageManager
+import android.content.pm.ResolveInfo
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.ColorFilter
@@ -27,7 +36,12 @@ import com.android.permissioncontroller.permission.utils.KotlinUtils
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mockito.argThat
+import org.mockito.Mockito.mock
import kotlin.test.assertFailsWith
+import org.mockito.Mockito.`when` as whenever
/**
* Unit tests for [KotlinUtils].
@@ -60,4 +74,92 @@ class KotlinUtilsTest {
override fun setColorFilter(colorFilter: ColorFilter?) =
throw UnsupportedOperationException()
}
-} \ No newline at end of file
+
+ @Test
+ fun getAppStoreIntent_returnsResolvedIntent() {
+ val installerPackage = "installer"
+ val installerActivity = "activity"
+ val appPackage = "app"
+ val mockContext = mock(Context::class.java)
+ val mockPackageManager = mock(PackageManager::class.java)
+ whenever(mockContext.packageManager).thenReturn(mockPackageManager)
+ val installerIntent = Intent(ACTION_SHOW_APP_INFO).setPackage(installerPackage)
+ whenever(
+ mockPackageManager.resolveActivity(
+ argThat { intent -> intent.filterEquals(installerIntent) }, /* flags= */ anyInt()))
+ .thenReturn(ResolveInfo().apply {
+ activityInfo = ActivityInfo().apply {
+ packageName = installerPackage
+ name = installerActivity
+ }
+ })
+
+ val intent = KotlinUtils.getAppStoreIntent(mockContext, installerPackage, appPackage)
+
+ assertThat(intent).isNotNull()
+ with (intent!!) {
+ assertThat(action).isEqualTo(ACTION_SHOW_APP_INFO)
+ assertThat(component?.packageName).isEqualTo(installerPackage)
+ assertThat(component?.className).isEqualTo(installerActivity)
+ }
+ }
+
+ @Test
+ fun getAppStoreIntent_returnsAppPackageInExtras() {
+ val appPackage = "app"
+ val mockContext = mock(Context::class.java)
+ val mockPackageManager = mock(PackageManager::class.java)
+ whenever(mockContext.packageManager).thenReturn(mockPackageManager)
+ whenever(
+ mockPackageManager.resolveActivity(any(), /* flags= */ anyInt()))
+ .thenReturn(ResolveInfo().apply {
+ activityInfo = ActivityInfo().apply {
+ packageName = ""
+ name = ""
+ }
+ })
+
+ val intent = KotlinUtils.getAppStoreIntent(mockContext, "com.installer", appPackage)
+
+ assertThat(intent).isNotNull()
+ assertThat(intent?.extras?.getString(EXTRA_PACKAGE_NAME)).isEqualTo(appPackage)
+ }
+
+ @Test
+ fun getAppStoreIntent_returnsNullWhenInstallerNotResolved() {
+ val mockContext = mock(Context::class.java)
+ whenever(mockContext.packageManager).thenReturn(mock(PackageManager::class.java))
+ // Un-stubbed activity resolution will return null.
+
+ assertThat(KotlinUtils.getAppStoreIntent(mockContext, "com.installer", "com.app")).isNull()
+ }
+
+ @Test
+ fun getMimeTypeForPermissions_onlyReadMediaImages_returnsImage() {
+ assertThat(KotlinUtils.getMimeTypeForPermissions(listOf(READ_MEDIA_IMAGES, "read memes")))
+ .isEqualTo("image/*")
+ }
+
+ @Test
+ fun getMimeTypeForPermissions_onlyReadMediaVideo_returnsVideo() {
+ assertThat(KotlinUtils.getMimeTypeForPermissions(listOf("write memes", READ_MEDIA_VIDEO)))
+ .isEqualTo("video/*")
+ }
+
+ @Test
+ fun getMimeTypeForPermissions_bothReadMediaPermissions_returnsNull() {
+ assertThat(
+ KotlinUtils.getMimeTypeForPermissions(listOf(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO)))
+ .isNull()
+ }
+
+ @Test
+ fun getMimeTypeForPermissions_noReadMediaPermissions_returnsNull() {
+ assertThat(KotlinUtils.getMimeTypeForPermissions(listOf("amazing permission"))).isNull()
+ }
+
+ @Test
+ fun getMimeTypeForPermissions_emptyList_returnsNull() {
+ assertThat(KotlinUtils.getMimeTypeForPermissions(emptyList())).isNull()
+ }
+}