From 14c1c4b282e6ff538ea9ab01ff60e6fda2787257 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 15 Jan 2026 15:09:47 +0100 Subject: [PATCH] Attempt to fix flaky test. The test `on QR code data ready - calls the expected callback` sometimes fails on the CI with the following error: androidx.concurrent.futures.CallbackToFutureAdapter$FutureGarbageCollectedException: The completer object was garbage collected - this future would otherwise never complete. The tag was: CameraX initInternal --- features/login/impl/build.gradle.kts | 2 ++ .../screens/qrcode/scan/QrCodeScanViewTest.kt | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/features/login/impl/build.gradle.kts b/features/login/impl/build.gradle.kts index 071408b2f5..e6381c9162 100644 --- a/features/login/impl/build.gradle.kts +++ b/features/login/impl/build.gradle.kts @@ -60,4 +60,6 @@ dependencies { testImplementation(projects.libraries.permissions.test) testImplementation(projects.libraries.sessionStorage.test) testImplementation(projects.libraries.wellknown.test) + testImplementation(libs.androidx.camera.camera2) + testImplementation(libs.androidx.camera.lifecycle) } diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanViewTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanViewTest.kt index 454dc79067..b8becd545f 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanViewTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanViewTest.kt @@ -9,9 +9,11 @@ package io.element.android.features.login.impl.screens.qrcode.scan import androidx.activity.ComponentActivity +import androidx.camera.lifecycle.ProcessCameraProvider import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.test.auth.qrlogin.FakeMatrixQrCodeLoginData @@ -20,6 +22,8 @@ import io.element.android.tests.testutils.EnsureNeverCalledWithParam import io.element.android.tests.testutils.ensureCalledOnce import io.element.android.tests.testutils.ensureCalledOnceWithParam import io.element.android.tests.testutils.pressBackKey +import org.junit.After +import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TestRule @@ -30,6 +34,19 @@ class QrCodeScanViewTest { @get:Rule val rule = createAndroidComposeRule() + private var provider: ProcessCameraProvider? = null + + @Before + fun setup() { + val context = InstrumentationRegistry.getInstrumentation().context + provider = ProcessCameraProvider.getInstance(context).get() + } + + @After + fun teardown() { + provider?.unbindAll() + } + @Test fun `on back pressed - calls the expected callback`() { ensureCalledOnce { callback ->