Deflaking ShortcutsChangedTaskTest by not using an active model
When using an active model, the data can change on the model thread while the test is running on a different thread. Instead using the model data directly without an active model running Bug: 399155567 Flag: EXEMPT testfix Test: Presubmit Change-Id: I332cd7ec0f5a2fb4760ce080f016c725b2233c45
This commit is contained in:
+24
-33
@@ -39,11 +39,9 @@ import com.android.launcher3.model.data.WorkspaceItemInfo
|
||||
import com.android.launcher3.shortcuts.ShortcutKey
|
||||
import com.android.launcher3.util.ComponentKey
|
||||
import com.android.launcher3.util.IntSparseArrayMap
|
||||
import com.android.launcher3.util.LauncherModelHelper
|
||||
import com.android.launcher3.util.LauncherModelHelper.SandboxModelContext
|
||||
import com.android.launcher3.util.SandboxApplication
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import java.util.function.Predicate
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
@@ -60,19 +58,20 @@ import org.mockito.kotlin.whenever
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ShortcutsChangedTaskTest {
|
||||
@get:Rule val setFlagsRule: SetFlagsRule = SetFlagsRule()
|
||||
@get:Rule val context = SandboxApplication()
|
||||
|
||||
private lateinit var shortcutsChangedTask: ShortcutsChangedTask
|
||||
private lateinit var modelHelper: LauncherModelHelper
|
||||
private lateinit var context: SandboxModelContext
|
||||
private lateinit var launcherApps: LauncherApps
|
||||
private var shortcuts: List<ShortcutInfo> = emptyList()
|
||||
|
||||
private val expectedPackage: String = "expected"
|
||||
private val expectedShortcutId: String = "shortcut_id"
|
||||
private val user: UserHandle = myUserHandle()
|
||||
|
||||
private val mockTaskController: ModelTaskController = mock()
|
||||
private val mockAllApps: AllAppsList = mock()
|
||||
private val mockIconCache: IconCache = mock()
|
||||
private val bgDataModel = BgDataModel(mock())
|
||||
|
||||
private val expectedWai =
|
||||
WorkspaceItemInfo().apply {
|
||||
@@ -87,9 +86,6 @@ class ShortcutsChangedTaskTest {
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
modelHelper = LauncherModelHelper()
|
||||
modelHelper.loadModelSync()
|
||||
context = modelHelper.sandboxContext
|
||||
launcherApps = context.spyService(LauncherApps::class.java)
|
||||
whenever(mockTaskController.context).thenReturn(context)
|
||||
whenever(mockTaskController.iconCache).thenReturn(mockIconCache)
|
||||
@@ -99,11 +95,6 @@ class ShortcutsChangedTaskTest {
|
||||
shortcutsChangedTask = ShortcutsChangedTask(expectedPackage, shortcuts, user, false)
|
||||
}
|
||||
|
||||
@After
|
||||
fun teardown() {
|
||||
modelHelper.destroy()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `When installed pinned shortcut is found then keep in workspace`() {
|
||||
// Given
|
||||
@@ -114,7 +105,7 @@ class ShortcutsChangedTaskTest {
|
||||
whenever(id).thenReturn(expectedShortcutId)
|
||||
}
|
||||
)
|
||||
val items: IntSparseArrayMap<ItemInfo> = modelHelper.bgDataModel.itemsIdMap
|
||||
val items: IntSparseArrayMap<ItemInfo> = bgDataModel.itemsIdMap
|
||||
items.put(expectedWai.id, expectedWai)
|
||||
doReturn(
|
||||
ApplicationInfo().apply {
|
||||
@@ -127,7 +118,7 @@ class ShortcutsChangedTaskTest {
|
||||
.getApplicationInfo(eq(expectedPackage), any(), eq(user))
|
||||
doReturn(shortcuts).whenever(launcherApps).getShortcuts(any(), eq(user))
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
verify(mockIconCache).getShortcutIcon(eq(expectedWai), any<CacheableShortcutInfo>())
|
||||
verify(mockTaskController).bindUpdatedWorkspaceItems(listOf(expectedWai))
|
||||
@@ -144,7 +135,7 @@ class ShortcutsChangedTaskTest {
|
||||
whenever(id).thenReturn(expectedShortcutId)
|
||||
}
|
||||
)
|
||||
val items: IntSparseArrayMap<ItemInfo> = modelHelper.bgDataModel.itemsIdMap
|
||||
val items: IntSparseArrayMap<ItemInfo> = bgDataModel.itemsIdMap
|
||||
items.put(expectedWai.id, expectedWai)
|
||||
doReturn(
|
||||
ApplicationInfo().apply {
|
||||
@@ -157,7 +148,7 @@ class ShortcutsChangedTaskTest {
|
||||
.getApplicationInfo(eq(expectedPackage), any(), eq(user))
|
||||
doReturn(shortcuts).whenever(launcherApps).getShortcuts(any(), eq(user))
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
verify(mockTaskController)
|
||||
.deleteAndBindComponentsRemoved(
|
||||
@@ -177,7 +168,7 @@ class ShortcutsChangedTaskTest {
|
||||
whenever(id).thenReturn(expectedShortcutId)
|
||||
}
|
||||
)
|
||||
val items: IntSparseArrayMap<ItemInfo> = modelHelper.bgDataModel.itemsIdMap
|
||||
val items: IntSparseArrayMap<ItemInfo> = bgDataModel.itemsIdMap
|
||||
items.put(expectedWai.id, expectedWai)
|
||||
doReturn(
|
||||
ApplicationInfo().apply {
|
||||
@@ -190,7 +181,7 @@ class ShortcutsChangedTaskTest {
|
||||
.getApplicationInfo(eq(expectedPackage), any(), eq(user))
|
||||
doReturn(shortcuts).whenever(launcherApps).getShortcuts(any(), eq(user))
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
verify(mockIconCache).getShortcutIcon(eq(expectedWai), any<CacheableShortcutInfo>())
|
||||
verify(mockTaskController).bindUpdatedWorkspaceItems(listOf(expectedWai))
|
||||
@@ -206,7 +197,7 @@ class ShortcutsChangedTaskTest {
|
||||
whenever(id).thenReturn(expectedShortcutId)
|
||||
}
|
||||
)
|
||||
val items: IntSparseArrayMap<ItemInfo> = modelHelper.bgDataModel.itemsIdMap
|
||||
val items: IntSparseArrayMap<ItemInfo> = bgDataModel.itemsIdMap
|
||||
items.put(expectedWai.id, expectedWai)
|
||||
doReturn(
|
||||
ApplicationInfo().apply {
|
||||
@@ -219,7 +210,7 @@ class ShortcutsChangedTaskTest {
|
||||
.getApplicationInfo(eq(expectedPackage), any(), eq(user))
|
||||
doReturn(shortcuts).whenever(launcherApps).getShortcuts(any(), eq(user))
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
verify(mockTaskController, times(0)).deleteAndBindComponentsRemoved(any(), any())
|
||||
verify(mockTaskController, times(0)).bindUpdatedWorkspaceItems(any())
|
||||
@@ -236,7 +227,7 @@ class ShortcutsChangedTaskTest {
|
||||
whenever(id).thenReturn(expectedShortcutId)
|
||||
}
|
||||
)
|
||||
val items: IntSparseArrayMap<ItemInfo> = modelHelper.bgDataModel.itemsIdMap
|
||||
val items: IntSparseArrayMap<ItemInfo> = bgDataModel.itemsIdMap
|
||||
items.put(expectedWai.id, expectedWai)
|
||||
doReturn(
|
||||
ApplicationInfo().apply {
|
||||
@@ -249,7 +240,7 @@ class ShortcutsChangedTaskTest {
|
||||
.getApplicationInfo(eq(expectedPackage), any(), eq(user))
|
||||
doReturn(shortcuts).whenever(launcherApps).getShortcuts(any(), eq(user))
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
verify(mockIconCache).getShortcutIcon(eq(expectedWai), any<CacheableShortcutInfo>())
|
||||
verify(mockTaskController).bindUpdatedWorkspaceItems(listOf(expectedWai))
|
||||
@@ -266,7 +257,7 @@ class ShortcutsChangedTaskTest {
|
||||
whenever(id).thenReturn(expectedShortcutId)
|
||||
}
|
||||
)
|
||||
val items: IntSparseArrayMap<ItemInfo> = modelHelper.bgDataModel.itemsIdMap
|
||||
val items: IntSparseArrayMap<ItemInfo> = bgDataModel.itemsIdMap
|
||||
items.put(expectedWai.id, expectedWai)
|
||||
doReturn(
|
||||
ApplicationInfo().apply {
|
||||
@@ -279,7 +270,7 @@ class ShortcutsChangedTaskTest {
|
||||
.getApplicationInfo(eq(expectedPackage), any(), eq(user))
|
||||
doReturn(shortcuts).whenever(launcherApps).getShortcuts(any(), eq(user))
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
verify(mockIconCache).getShortcutIcon(eq(expectedWai), any<CacheableShortcutInfo>())
|
||||
verify(mockTaskController).bindUpdatedWorkspaceItems(listOf(expectedWai))
|
||||
@@ -309,10 +300,10 @@ class ShortcutsChangedTaskTest {
|
||||
shouldUpdateIdMap = true,
|
||||
)
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
assertThat(modelHelper.bgDataModel.deepShortcutMap).containsEntry(expectedKey, 1)
|
||||
verify(mockTaskController).bindDeepShortcuts(eq(modelHelper.bgDataModel))
|
||||
assertThat(bgDataModel.deepShortcutMap).containsEntry(expectedKey, 1)
|
||||
verify(mockTaskController).bindDeepShortcuts(eq(bgDataModel))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -339,10 +330,10 @@ class ShortcutsChangedTaskTest {
|
||||
shouldUpdateIdMap = false,
|
||||
)
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
assertThat(modelHelper.bgDataModel.deepShortcutMap).doesNotContainKey(expectedKey)
|
||||
verify(mockTaskController, times(0)).bindDeepShortcuts(eq(modelHelper.bgDataModel))
|
||||
assertThat(bgDataModel.deepShortcutMap).doesNotContainKey(expectedKey)
|
||||
verify(mockTaskController, times(0)).bindDeepShortcuts(eq(bgDataModel))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -356,7 +347,7 @@ class ShortcutsChangedTaskTest {
|
||||
whenever(id).thenReturn(expectedShortcutId)
|
||||
}
|
||||
)
|
||||
val items: IntSparseArrayMap<ItemInfo> = modelHelper.bgDataModel.itemsIdMap
|
||||
val items: IntSparseArrayMap<ItemInfo> = bgDataModel.itemsIdMap
|
||||
items.put(expectedWai.id, expectedWai)
|
||||
doReturn(
|
||||
ApplicationInfo().apply {
|
||||
@@ -369,7 +360,7 @@ class ShortcutsChangedTaskTest {
|
||||
.getApplicationInfo(eq(expectedPackage), any(), eq(user))
|
||||
doReturn(shortcuts).whenever(launcherApps).getShortcuts(any(), eq(user))
|
||||
// When
|
||||
shortcutsChangedTask.execute(mockTaskController, modelHelper.bgDataModel, mockAllApps)
|
||||
shortcutsChangedTask.execute(mockTaskController, bgDataModel, mockAllApps)
|
||||
// Then
|
||||
verify(mockTaskController, times(0)).deleteAndBindComponentsRemoved(any(), any())
|
||||
verify(mockTaskController, times(0)).bindUpdatedWorkspaceItems(any())
|
||||
|
||||
Reference in New Issue
Block a user