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
commit 8769b98862
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
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
}
}