fix(widget): 배너 가상 목록 갱신을 안정화한다
This commit is contained in:
@@ -67,6 +67,74 @@ class BannerViewTest {
|
||||
assertEquals(items[1], clickedItem)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `adapter는 carousel 설정 시 max range notify를 호출하지 않는다`() {
|
||||
val adapter = BannerAdapter()
|
||||
var insertedItemCount = 0
|
||||
var changedItemCount = 0
|
||||
var dataSetChangedCount = 0
|
||||
adapter.registerAdapterDataObserver(
|
||||
object : RecyclerView.AdapterDataObserver() {
|
||||
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
|
||||
insertedItemCount = itemCount
|
||||
}
|
||||
|
||||
override fun onItemRangeChanged(positionStart: Int, itemCount: Int) {
|
||||
changedItemCount = itemCount
|
||||
}
|
||||
|
||||
override fun onChanged() {
|
||||
dataSetChangedCount += 1
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
adapter.submitItems(listOf(sampleItem("1"), sampleItem("2")))
|
||||
adapter.setItemSizePx(100)
|
||||
|
||||
assertEquals(0, insertedItemCount)
|
||||
assertEquals(0, changedItemCount)
|
||||
assertEquals(2, dataSetChangedCount)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `adapter는 단일 배너 설정 시 specific notify를 호출한다`() {
|
||||
val adapter = BannerAdapter()
|
||||
var insertedItemCount = 0
|
||||
var changedItemCount = 0
|
||||
var removedItemCount = 0
|
||||
var dataSetChangedCount = 0
|
||||
adapter.registerAdapterDataObserver(
|
||||
object : RecyclerView.AdapterDataObserver() {
|
||||
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
|
||||
insertedItemCount += itemCount
|
||||
}
|
||||
|
||||
override fun onItemRangeChanged(positionStart: Int, itemCount: Int) {
|
||||
changedItemCount += itemCount
|
||||
}
|
||||
|
||||
override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) {
|
||||
removedItemCount += itemCount
|
||||
}
|
||||
|
||||
override fun onChanged() {
|
||||
dataSetChangedCount += 1
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
adapter.submitItems(listOf(sampleItem("1")))
|
||||
adapter.setItemSizePx(100)
|
||||
adapter.submitItems(listOf(sampleItem("2")))
|
||||
adapter.submitItems(emptyList())
|
||||
|
||||
assertEquals(1, insertedItemCount)
|
||||
assertEquals(2, changedItemCount)
|
||||
assertEquals(1, removedItemCount)
|
||||
assertEquals(0, dataSetChangedCount)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `배너 view는 빈 목록이면 숨기고 단일 목록이면 counter를 숨긴다`() {
|
||||
val view = inflateBannerView()
|
||||
@@ -533,8 +601,11 @@ class BannerViewTest {
|
||||
}
|
||||
|
||||
private fun sampleItem(id: String) = BannerItem(
|
||||
bannerId = id,
|
||||
imageUrl = "https://example.com/banner-$id.png"
|
||||
imageUrl = "https://example.com/banner-$id.png",
|
||||
eventItem = null,
|
||||
creatorId = id.toLongOrNull(),
|
||||
seriesId = null,
|
||||
link = "https://example.com/banner-$id"
|
||||
)
|
||||
|
||||
private fun exactly(size: Int): Int = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY)
|
||||
|
||||
Reference in New Issue
Block a user