You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.7 KiB
107 lines
3.7 KiB
package org.jetbrains.compose.resources |
|
|
|
import androidx.compose.foundation.Image |
|
import androidx.compose.material3.Text |
|
import androidx.compose.runtime.CompositionLocalProvider |
|
import androidx.compose.runtime.collectAsState |
|
import androidx.compose.runtime.getValue |
|
import androidx.compose.ui.test.ExperimentalTestApi |
|
import androidx.compose.ui.test.runComposeUiTest |
|
import kotlinx.coroutines.flow.MutableStateFlow |
|
import org.junit.Assert.assertEquals |
|
import org.junit.Before |
|
import org.junit.Test |
|
import kotlin.test.assertEquals |
|
|
|
@OptIn(ExperimentalResourceApi::class, ExperimentalTestApi::class) |
|
class ComposeResourceTest { |
|
|
|
@Before |
|
fun dropCaches() { |
|
dropStringsCache() |
|
dropImageCache() |
|
} |
|
|
|
@Test |
|
fun testCountRecompositions() = runComposeUiTest { |
|
runBlockingTest { |
|
val imagePathFlow = MutableStateFlow(ImageResource("1.png")) |
|
val recompositionsCounter = RecompositionsCounter() |
|
setContent { |
|
val res by imagePathFlow.collectAsState() |
|
val imgRes = imageResource(res) |
|
recompositionsCounter.content { |
|
Image(bitmap = imgRes, contentDescription = null) |
|
} |
|
} |
|
awaitIdle() |
|
imagePathFlow.emit(ImageResource("2.png")) |
|
awaitIdle() |
|
assertEquals(2, recompositionsCounter.count) |
|
} |
|
} |
|
|
|
@Test |
|
fun testImageResourceCache() = runComposeUiTest { |
|
runBlockingTest { |
|
val testResourceReader = TestResourceReader() |
|
val imagePathFlow = MutableStateFlow(ImageResource("1.png")) |
|
setContent { |
|
CompositionLocalProvider(LocalResourceReader provides testResourceReader) { |
|
val res by imagePathFlow.collectAsState() |
|
Image(painterResource(res), null) |
|
} |
|
} |
|
awaitIdle() |
|
imagePathFlow.emit(ImageResource("2.png")) |
|
awaitIdle() |
|
imagePathFlow.emit(ImageResource("1.png")) |
|
awaitIdle() |
|
|
|
assertEquals( |
|
expected = listOf("1.png", "2.png"), //no second read of 1.png |
|
actual = testResourceReader.readPaths |
|
) |
|
} |
|
} |
|
|
|
@Test |
|
fun testStringResourceCache() = runComposeUiTest { |
|
runBlockingTest { |
|
val testResourceReader = TestResourceReader() |
|
val stringIdFlow = MutableStateFlow(TestStringResource("app_name")) |
|
setContent { |
|
CompositionLocalProvider(LocalResourceReader provides testResourceReader) { |
|
val res by stringIdFlow.collectAsState() |
|
Text(getString(res)) |
|
Text(getStringArray(TestStringResource("str_arr")).joinToString()) |
|
} |
|
} |
|
awaitIdle() |
|
stringIdFlow.emit(TestStringResource("hello")) |
|
awaitIdle() |
|
stringIdFlow.emit(TestStringResource("app_name")) |
|
awaitIdle() |
|
|
|
assertEquals( |
|
expected = listOf("strings.xml"), //just one string.xml read |
|
actual = testResourceReader.readPaths |
|
) |
|
} |
|
} |
|
|
|
@Test |
|
fun testReadStringResource() = runComposeUiTest { |
|
runBlockingTest { |
|
setContent { |
|
assertEquals("Compose Resources App", getString(TestStringResource("app_name"))) |
|
assertEquals( |
|
"Hello, test-name! You have 42 new messages.", |
|
getString(TestStringResource("str_template"), "test-name", 42) |
|
) |
|
assertEquals(listOf("item 1", "item 2", "item 3"), getStringArray(TestStringResource("str_arr"))) |
|
} |
|
awaitIdle() |
|
} |
|
} |
|
}
|
|
|