Merge pull request #5698 from element-hq/feature/bma/handleEvent

Code consistency around view event handling
This commit is contained in:
Benoit Marty
2025-11-10 09:36:04 +01:00
committed by GitHub
105 changed files with 260 additions and 250 deletions

View File

@@ -12,6 +12,7 @@ import app.cash.molecule.moleculeFlow
import app.cash.turbine.TurbineTestContext
import app.cash.turbine.test
import io.element.android.libraries.architecture.Presenter
import org.junit.Assert.fail
import kotlin.time.Duration
suspend fun <State> Presenter<State>.test(
@@ -19,7 +20,20 @@ suspend fun <State> Presenter<State>.test(
name: String? = null,
validate: suspend TurbineTestContext<State>.() -> Unit,
) {
moleculeFlow(RecompositionMode.Immediate) {
present()
}.test(timeout, name, validate)
try {
moleculeFlow(RecompositionMode.Immediate) {
present()
}.test(timeout, name, validate)
} catch (t: Throwable) {
if (t::class.simpleName == "KotlinReflectionInternalError") {
// Give a more explicit error to the developer
fail("""
It looks like you have an unconsumed event in your test.
If you get this error, it means that your test is missing to consume one of several events.
You can fix by consuming and check the event with `awaitItem()`, or you can also invoke
`cancelAndIgnoreRemainingEvents()`.
""".trimIndent())
}
throw t
}
}