Files
lawnchair/tests/multivalentTests/src/com/android/launcher3/util/ApplicationInfoWrapperTest.kt
Sunny Goyal 28d6bbd6b4 Moving various application into related methods to a separate class
> This avoids duplicate RPCs when trying to get multiple properties
  from AppInfo
> This would be used in a followup cl when AppInfo is added to caching
  logic in IconCache

Bug: 366237794
Test: atest ApplicationInfoWrapperTest
Flag: EXEMPT refactor
Change-Id: I55b964d4f8cfa1ff1770e310ac278719495e285d
2024-09-23 22:09:24 -07:00

132 lines
4.3 KiB
Kotlin

/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.util
import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.ApplicationInfo.FLAG_EXTERNAL_STORAGE
import android.content.pm.ApplicationInfo.FLAG_INSTALLED
import android.content.pm.ApplicationInfo.FLAG_SUSPENDED
import android.content.pm.ApplicationInfo.FLAG_SYSTEM
import android.content.pm.LauncherApps
import android.os.UserHandle
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.SetFlagsRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.launcher3.Flags.FLAG_ENABLE_SUPPORT_FOR_ARCHIVING
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.whenever
/** Unit tests for {@link ApplicationInfoWrapper}. */
@SmallTest
@RunWith(AndroidJUnit4::class)
class ApplicationInfoWrapperTest {
@get:Rule val setFlagsRule = SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT)
private lateinit var context: Context
private lateinit var launcherApps: LauncherApps
@Before
fun setup() {
context = Mockito.mock(Context::class.java)
launcherApps = Mockito.mock(LauncherApps::class.java)
whenever(context.getSystemService(eq(LauncherApps::class.java))).thenReturn(launcherApps)
}
@Test
@EnableFlags(FLAG_ENABLE_SUPPORT_FOR_ARCHIVING)
fun archivedApp_appInfoIsNotNull() {
val applicationInfo = ApplicationInfo()
applicationInfo.isArchived = true
whenever(launcherApps.getApplicationInfo(eq(TEST_PACKAGE), any(), eq(TEST_USER)))
.thenReturn(applicationInfo)
val wrapper = ApplicationInfoWrapper(context, TEST_PACKAGE, TEST_USER)
assertNotNull(wrapper.getInfo())
assertTrue(wrapper.isArchived())
assertFalse(wrapper.isInstalled())
}
@Test
fun notInstalledApp_nullAppInfo() {
val applicationInfo = ApplicationInfo()
whenever(launcherApps.getApplicationInfo(eq(TEST_PACKAGE), any(), eq(TEST_USER)))
.thenReturn(applicationInfo)
val wrapper = ApplicationInfoWrapper(context, TEST_PACKAGE, TEST_USER)
assertNull(wrapper.getInfo())
assertFalse(wrapper.isInstalled())
}
@Test
fun appInfo_suspended() {
val wrapper =
ApplicationInfoWrapper(
ApplicationInfo().apply { flags = FLAG_INSTALLED.or(FLAG_SUSPENDED) }
)
assertTrue(wrapper.isSuspended())
}
@Test
fun appInfo_notSuspended() {
val wrapper = ApplicationInfoWrapper(ApplicationInfo())
assertFalse(wrapper.isSuspended())
}
@Test
fun appInfo_system() {
val wrapper = ApplicationInfoWrapper(ApplicationInfo().apply { flags = FLAG_SYSTEM })
assertTrue(wrapper.isSystem())
}
@Test
fun appInfo_notSystem() {
val wrapper = ApplicationInfoWrapper(ApplicationInfo())
assertFalse(wrapper.isSystem())
}
@Test
fun appInfo_onSDCard() {
val wrapper =
ApplicationInfoWrapper(ApplicationInfo().apply { flags = FLAG_EXTERNAL_STORAGE })
assertTrue(wrapper.isOnSdCard())
}
@Test
fun appInfo_notOnSDCard() {
val wrapper = ApplicationInfoWrapper(ApplicationInfo())
assertFalse(wrapper.isOnSdCard())
}
companion object {
const val TEST_PACKAGE = "com.android.test.package"
private val TEST_USER = UserHandle.of(3)
}
}