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.
61 lines
1.9 KiB
61 lines
1.9 KiB
package org.jetbrains.compose.resources |
|
|
|
import androidx.compose.foundation.Image |
|
import androidx.compose.runtime.Composable |
|
import androidx.compose.runtime.collectAsState |
|
import androidx.compose.runtime.getValue |
|
import androidx.compose.ui.graphics.ImageBitmap |
|
import androidx.compose.ui.test.junit4.createComposeRule |
|
import kotlinx.coroutines.ExperimentalCoroutinesApi |
|
import kotlinx.coroutines.delay |
|
import kotlinx.coroutines.flow.MutableStateFlow |
|
import kotlinx.coroutines.test.UnconfinedTestDispatcher |
|
import kotlinx.coroutines.test.runTest |
|
import org.junit.Assert.assertEquals |
|
import org.junit.Rule |
|
import org.junit.Test |
|
|
|
@OptIn(ExperimentalResourceApi::class, ExperimentalCoroutinesApi::class) |
|
class ComposeResourceTest { |
|
|
|
@get:Rule |
|
val rule = createComposeRule() |
|
|
|
@Test |
|
fun testMissingResource() = runTest (UnconfinedTestDispatcher()) { |
|
var recompositionCount = 0 |
|
rule.setContent { |
|
CountRecompositions(resource("missing.png").rememberImageBitmap().orEmpty()) { |
|
recompositionCount++ |
|
} |
|
} |
|
rule.awaitIdle() |
|
assertEquals(2, recompositionCount) |
|
} |
|
|
|
@Test |
|
fun testCountRecompositions() = runTest (UnconfinedTestDispatcher()) { |
|
val mutableStateFlow = MutableStateFlow(true) |
|
var recompositionCount = 0 |
|
rule.setContent { |
|
val state: Boolean by mutableStateFlow.collectAsState(true) |
|
val resource = resource(if (state) "1.png" else "2.png") |
|
CountRecompositions(resource.rememberImageBitmap().orEmpty()) { |
|
recompositionCount++ |
|
} |
|
} |
|
rule.awaitIdle() |
|
mutableStateFlow.value = false |
|
rule.awaitIdle() |
|
assertEquals(4, recompositionCount) |
|
} |
|
|
|
} |
|
|
|
@Composable |
|
private fun CountRecompositions(imageBitmap: ImageBitmap?, onRecomposition: () -> Unit) { |
|
onRecomposition() |
|
if (imageBitmap != null) { |
|
Image(bitmap = imageBitmap, contentDescription = null) |
|
} |
|
}
|
|
|