book-reader/app/src/androidTest/java/com/aryan/reader/paginatedreader/StyleUtilsTest.kt
2026-02-24 17:37:40 +05:30

115 lines
No EOL
3.9 KiB
Kotlin

// StyleUtilsTest.kt
package com.aryan.reader.paginatedreader
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.isUnspecified
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class StyleUtilsTest {
private val baseFontSizeSp = 16f
private val density = 2.0f
private val containerWidthPx = 1000
@Test
fun parseCssSizeToDp_handlesPxValues() {
assertThat(parseCssSizeToDp("100px", baseFontSizeSp, density, containerWidthPx)).isEqualTo(50.dp)
}
@Test
fun parseCssSizeToDp_handlesEmValues() {
assertThat(parseCssSizeToDp("1.5em", baseFontSizeSp, density, containerWidthPx)).isEqualTo(24.dp)
}
@Test
fun parseCssSizeToDp_handlesRemValues() {
assertThat(parseCssSizeToDp("2rem", baseFontSizeSp, density, containerWidthPx)).isEqualTo(32.dp)
}
@Test
fun parseCssSizeToDp_handlesPtValues() {
assertThat(parseCssSizeToDp("12pt", baseFontSizeSp, density, containerWidthPx).value).isWithin(0.01f).of(8.0f)
}
@Test
fun parseCssSizeToDp_handlesPercentageValues() {
// 50% of 1000px = 500px. 500px / 2.0 density = 250dp
assertThat(parseCssSizeToDp("50%", baseFontSizeSp, density, containerWidthPx)).isEqualTo(250.dp)
}
@Test
fun parseCssSizeToDp_returns0ForInvalidInput() {
assertThat(parseCssSizeToDp("invalid", baseFontSizeSp, density, containerWidthPx)).isEqualTo(0.dp)
}
@Test
fun parseCssSizeToDp_handlesZeroDensity() {
assertThat(parseCssSizeToDp("100px", baseFontSizeSp, 0f, containerWidthPx)).isEqualTo(0.dp)
}
@Test
fun parseCssSizeToDp_handlesZeroContainerWidthForPercentage() {
assertThat(parseCssSizeToDp("50%", baseFontSizeSp, density, 0)).isEqualTo(0.dp)
}
@Test
fun parseCssSizeToDp_handlesValuesWithWhitespace() {
assertThat(parseCssSizeToDp(" 1.5em ", baseFontSizeSp, density, containerWidthPx)).isEqualTo(24.dp)
}
@Test
fun parseCssDimensionToTextUnit_handlesPxValues() {
val result = parseCssDimensionToTextUnit("100px", containerWidthPx, density)
assertThat(result.isSp).isTrue()
assertThat(result.value).isWithin(0.01f).of(50f)
}
@Test
fun parseCssDimensionToTextUnit_handlesEmValues() {
val result = parseCssDimensionToTextUnit("1.5em", containerWidthPx, density)
assertThat(result.isEm).isTrue()
assertThat(result.value).isEqualTo(1.5f)
}
@Test
fun parseCssDimensionToTextUnit_handlesRemValues() {
// rem is treated as em
val result = parseCssDimensionToTextUnit("2rem", containerWidthPx, density)
assertThat(result.isEm).isTrue()
assertThat(result.value).isEqualTo(2f)
}
@Test
fun parseCssDimensionToTextUnit_handlesPtValues() {
val result = parseCssDimensionToTextUnit("12pt", containerWidthPx, density)
assertThat(result.isSp).isTrue()
assertThat(result.value).isWithin(0.01f).of(8.0f)
}
@Test
fun parseCssDimensionToTextUnit_handlesPercentageValues() {
val result = parseCssDimensionToTextUnit("50%", containerWidthPx, density)
assertThat(result.isSp).isTrue()
assertThat(result.value).isWithin(0.01f).of(250f)
}
@Test
fun parseCssDimensionToTextUnit_returnsUnspecifiedForInvalidInput() {
assertThat(parseCssDimensionToTextUnit("invalid", containerWidthPx, density).isUnspecified).isTrue()
}
@Test
fun parseCssDimensionToTextUnit_handlesZeroDensity() {
assertThat(parseCssDimensionToTextUnit("100px", containerWidthPx, 0f).isUnspecified).isTrue()
}
@Test
fun parseCssDimensionToTextUnit_handlesZeroContainerWidthForPercentage() {
assertThat(parseCssDimensionToTextUnit("50%", 0, density).isUnspecified).isTrue()
}
}