feat(banner): 배너 preview 회귀 테스트를 추가한다
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -17,6 +17,7 @@ import org.junit.Assert.assertSame
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.Robolectric
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.Shadows.shadowOf
|
||||
import org.robolectric.annotation.Config
|
||||
@@ -100,6 +101,41 @@ class BannerViewTest {
|
||||
assertEquals("02", view.findViewById<TextView>(R.id.tv_banner_total_count).text.toString())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `배너 view는 preview 속성의 count와 current index를 counter에 반영한다`() {
|
||||
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||
val attrs = Robolectric.buildAttributeSet()
|
||||
.addAttribute(R.attr.bannerPreviewItemCount, "5")
|
||||
.addAttribute(R.attr.bannerPreviewCurrentIndex, "2")
|
||||
.build()
|
||||
|
||||
val view = BannerView(context, attrs)
|
||||
|
||||
assertEquals(View.VISIBLE, view.visibility)
|
||||
assertEquals(View.VISIBLE, view.findViewById<View>(R.id.layout_banner_counter).visibility)
|
||||
assertEquals("03", view.findViewById<TextView>(R.id.tv_banner_current_index).text.toString())
|
||||
assertEquals("05", view.findViewById<TextView>(R.id.tv_banner_total_count).text.toString())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `배너 view는 preview image 속성을 image view에 적용한다`() {
|
||||
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||
val attrs = Robolectric.buildAttributeSet()
|
||||
.addAttribute(R.attr.bannerPreviewItemCount, "1")
|
||||
.addAttribute(R.attr.bannerPreviewImage, "@drawable/bg_banner_preview_placeholder")
|
||||
.build()
|
||||
|
||||
val view = BannerView(context, attrs)
|
||||
view.measure(exactly(402.dpToPx()), exactly(402.dpToPx()))
|
||||
view.layout(0, 0, 402.dpToPx(), 402.dpToPx())
|
||||
val recyclerView = view.findViewById<RecyclerView>(R.id.rv_banner)
|
||||
val holder = recyclerView.findViewHolderForAdapterPosition(0)
|
||||
?: recyclerView.adapter!!.onCreateViewHolder(recyclerView, 0).also { recyclerView.adapter!!.onBindViewHolder(it, 0) }
|
||||
val imageView = holder.itemView.findViewById<ImageView>(R.id.iv_banner)
|
||||
|
||||
assertNotNull(imageView.drawable)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `배너 view는 정사각형 item 크기와 좌우 padding 및 간격을 적용한다`() {
|
||||
val view = inflateBannerView()
|
||||
@@ -166,6 +202,34 @@ class BannerViewTest {
|
||||
assertEquals(0, itemOffset.right)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `배너 item은 click listener가 null이어도 클릭으로 crash가 발생하지 않는다`() {
|
||||
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||
val adapter = BannerAdapter()
|
||||
adapter.submitItems(listOf(sampleItem("1")))
|
||||
adapter.setOnClickItem(null)
|
||||
val holder = adapter.onCreateViewHolder(FrameLayout(context), 0)
|
||||
adapter.onBindViewHolder(holder, 0)
|
||||
|
||||
assertTrue(holder.itemView.performClick())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `배너 view는 첫 번째 배너 클릭 시 첫 번째 item을 callback으로 전달한다`() {
|
||||
val view = inflateBannerView()
|
||||
val firstItem = sampleItem("1")
|
||||
var clickedItem: BannerItem? = null
|
||||
|
||||
view.setOnBannerClickListener { clickedItem = it }
|
||||
view.setItems(listOf(firstItem))
|
||||
val recyclerView = view.findViewById<RecyclerView>(R.id.rv_banner)
|
||||
val holder = recyclerView.adapter!!.onCreateViewHolder(recyclerView, 0)
|
||||
recyclerView.adapter!!.onBindViewHolder(holder, 0)
|
||||
holder.itemView.performClick()
|
||||
|
||||
assertEquals(firstItem, clickedItem)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `배너 item image는 radius clipping 대상으로 설정된다`() {
|
||||
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||
|
||||
Reference in New Issue
Block a user