feat(banner): 배너 레이아웃 계산 계약을 추가한다

This commit is contained in:
2026-05-27 22:26:50 +09:00
parent 0c8c9f9b5f
commit 91a7eb3f4c
2 changed files with 63 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
package kr.co.vividnext.sodalive.v2.widget.banner
object BannerLayoutCalculator {
private const val SIDE_INSET_DP = 20
private const val ITEM_SPACING_DP = 8
fun calculate(screenWidthDp: Int, density: Float): BannerLayoutSize {
val itemSizeDp = screenWidthDp - (SIDE_INSET_DP * 2)
return BannerLayoutSize(
itemWidthDp = itemSizeDp,
itemHeightDp = itemSizeDp,
sideInsetDp = SIDE_INSET_DP,
itemSpacingDp = ITEM_SPACING_DP
)
}
}
data class BannerLayoutSize(
val itemWidthDp: Int,
val itemHeightDp: Int,
val sideInsetDp: Int,
val itemSpacingDp: Int
)

View File

@@ -0,0 +1,40 @@
package kr.co.vividnext.sodalive.v2.widget.banner
import org.junit.Assert.assertEquals
import org.junit.Test
class BannerLayoutCalculatorTest {
@Test
fun `화면 폭 402dp이면 배너 아이템 크기는 362dp다`() {
val size = BannerLayoutCalculator.calculate(
screenWidthDp = 402,
density = 1f
)
assertEquals(362, size.itemWidthDp)
assertEquals(362, size.itemHeightDp)
}
@Test
fun `화면 폭 360dp이면 배너 아이템 크기는 320dp다`() {
val size = BannerLayoutCalculator.calculate(
screenWidthDp = 360,
density = 1f
)
assertEquals(320, size.itemWidthDp)
assertEquals(320, size.itemHeightDp)
}
@Test
fun `배너 레이아웃은 고정 좌우 여백과 아이템 간격을 사용한다`() {
val size = BannerLayoutCalculator.calculate(
screenWidthDp = 402,
density = 1f
)
assertEquals(20, size.sideInsetDp)
assertEquals(8, size.itemSpacingDp)
}
}