blob: d39ed0f50b21963aede4e5a8f8383db4fe46afd9 [file] [log] [blame]
package com.android.car.docklib.view
import android.content.Context
import android.content.Intent
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.car.docklib.TestUtils
import com.android.car.docklib.data.DockAppItem
import com.google.common.truth.Truth.assertThat
import java.util.function.Consumer
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.spy
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
@RunWith(AndroidJUnit4::class)
class DockAdapterTest {
private val contextMock = mock<Context> {}
private val intentConsumerMock = mock<Consumer<Intent>> {}
private val dockItemViewHolderMock = mock<DockItemViewHolder> {}
@Test
fun setItems_dockSizeEqualToListSize_adapterHasDockSize() {
val defaultApps =
listOf(TestUtils.createAppItem(app = "a"), TestUtils.createAppItem(app = "b"))
val adapter = spy(DockAdapter(defaultApps.size, intentConsumerMock, contextMock))
adapter.setItems(defaultApps)
assertThat(adapter.itemCount).isEqualTo(defaultApps.size)
verify(adapter).notifyItemChanged(0)
verify(adapter).notifyItemChanged(1)
}
@Test
fun setItems_dockSizeLessThanListSize_adapterHasDockSize() {
val defaultApps =
listOf(
TestUtils.createAppItem(app = "a"),
TestUtils.createAppItem(app = "b"),
TestUtils.createAppItem(app = "c")
)
val dockSize = 2
val adapter = spy(DockAdapter(dockSize, intentConsumerMock, contextMock))
adapter.setItems(defaultApps)
assertThat(adapter.itemCount).isEqualTo(dockSize)
verify(adapter).notifyItemChanged(0)
verify(adapter).notifyItemChanged(1)
}
@Test
fun setItems_dockSizeGreaterThanListSize_adapterHasDockSize() {
val defaultApps =
listOf(TestUtils.createAppItem(app = "a"), TestUtils.createAppItem(app = "b"))
val dockSize = 3
val adapter = spy(DockAdapter(dockSize, intentConsumerMock, contextMock))
adapter.setItems(defaultApps)
assertThat(adapter.itemCount).isEqualTo(dockSize)
verify(adapter).notifyItemChanged(0)
verify(adapter).notifyItemChanged(1)
verify(adapter, times(0)).notifyItemChanged(2)
}
@Test
fun onBindViewHolder_emptyPayload_onBindViewHolderWithoutPayloadCalled() {
val adapter = spy(DockAdapter(3, intentConsumerMock, contextMock))
adapter.onBindViewHolder(dockItemViewHolderMock, 1, MutableList(0) {})
verify(adapter).onBindViewHolder(eq(dockItemViewHolderMock), eq(1))
}
@Test
fun onBindViewHolder_nullPayload_onBindViewHolderWithoutPayloadCalled() {
val adapter = spy(DockAdapter(3, intentConsumerMock, contextMock))
adapter.onBindViewHolder(dockItemViewHolderMock, 1, MutableList(1) {})
verify(adapter).onBindViewHolder(eq(dockItemViewHolderMock), eq(1))
}
@Test
fun onBindViewHolder_payloadOfIncorrectType_onBindViewHolderWithoutPayloadCalled() {
class DummyPayload
val adapter = spy(DockAdapter(3, intentConsumerMock, contextMock))
adapter.onBindViewHolder(dockItemViewHolderMock, 1, MutableList(1) {
DummyPayload()
})
verify(adapter).onBindViewHolder(eq(dockItemViewHolderMock), eq(1))
}
@Test
fun onBindViewHolder_payload_CHANGE_SAME_ITEM_TYPE_itemTypeChangedCalled() {
val dockAppItem0 = mock<DockAppItem> {}
val dockAppItem1 = mock<DockAppItem> {}
val dockAppItem2 = mock<DockAppItem> {}
val adapter = spy(
DockAdapter(
numItems = 3,
intentConsumerMock,
contextMock,
items = arrayOf(dockAppItem0, dockAppItem1, dockAppItem2)
)
)
adapter.onBindViewHolder(dockItemViewHolderMock, 1, MutableList(1) {
DockAdapter.PayloadType.CHANGE_SAME_ITEM_TYPE
})
verify(adapter, never()).onBindViewHolder(eq(dockItemViewHolderMock), eq(1))
verify(dockItemViewHolderMock).itemTypeChanged(eq(dockAppItem1))
}
}