feat(banner): 배너 레이아웃 계산 계약을 추가한다
This commit is contained in:
@@ -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
|
||||
)
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user