Close DeferrableSurface at the end of test
It may throw a CallbackToFutureAdapter$FutureGarbageCollectedException
if we don't close the DeferrableSurface.
It probably does not cause test failure, but we can make it clean.
Test: ./gradlew camera:camera-camera2-pipe:testDebugUnitTest
Change-Id: I50e9a5b94744ec4bd39a7852fca5254d7bdb823f
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CaptureConfigAdapterTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CaptureConfigAdapterTest.kt
index 34c2fa3..b6ff946 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CaptureConfigAdapterTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/CaptureConfigAdapterTest.kt
@@ -96,8 +96,9 @@
@Test
fun shouldFail_whenCaptureConfigSurfaceNotRecognized() {
// Arrange
+ val fakeSurface = FakeSurface()
val captureConfig = CaptureConfig.Builder()
- .apply { addSurface(FakeSurface()) }
+ .apply { addSurface(fakeSurface) }
.build()
val sessionConfigOptions = Camera2ImplConfig.Builder().build()
@@ -109,6 +110,9 @@
sessionConfigOptions
)
}
+
+ // Clean up
+ fakeSurface.close()
}
@Test
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
index d4c2e51..8896087 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
@@ -178,6 +178,10 @@
fun tearDown() {
// CoroutineScope#cancel can throw exception if the scope has no job left
try {
+ fakeUseCaseCamera.runningUseCases.forEach {
+ it.onStateDetached()
+ it.onUnbind()
+ }
// fakeUseCaseThreads may still be using Main dispatcher which sometimes
// causes Dispatchers.resetMain() to throw an exception:
// "IllegalStateException: Dispatchers.Main is used concurrently with setting it"
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/PreviewPixelHDRnetQuirkTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/PreviewPixelHDRnetQuirkTest.kt
index 08f756f..5542e0b 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/PreviewPixelHDRnetQuirkTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/PreviewPixelHDRnetQuirkTest.kt
@@ -103,7 +103,7 @@
@Test
fun previewShouldApplyToneModeForHDRNet() {
// Arrange
- val cameraUseCaseAdapter = configureCameraUseCaseAdapter(
+ cameraUseCaseAdapter = configureCameraUseCaseAdapter(
resolutionVGA,
configType = PreviewConfig::class.java
)
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/StillCaptureRequestTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/StillCaptureRequestTest.kt
index baa17cc..945507d 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/StillCaptureRequestTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/StillCaptureRequestTest.kt
@@ -49,6 +49,7 @@
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
+import org.junit.After
import org.junit.Assert.assertThrows
import org.junit.Assume.assumeTrue
import org.junit.Before
@@ -109,6 +110,11 @@
stillCaptureRequestControl.setNewUseCaseCamera()
}
+ @After
+ fun tearDown() {
+ fakeSurface.close()
+ }
+
@Test
fun captureRequestsSubmitted_whenCameraIsSet() = runTest(testDispatcher) {
stillCaptureRequestControl.issueCaptureRequests()
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraRequestControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraRequestControlTest.kt
index c129403..00f0f4c 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraRequestControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraRequestControlTest.kt
@@ -49,6 +49,7 @@
import kotlinx.coroutines.Job
import kotlinx.coroutines.asExecutor
import kotlinx.coroutines.runBlocking
+import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
@@ -93,6 +94,11 @@
useCaseGraphConfig = fakeUseCaseGraphConfig,
)
+ @After
+ fun tearDown() {
+ surface.close()
+ }
+
@Test
fun testMergeRequestOptions(): Unit = runBlocking {
// Arrange
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraStateTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraStateTest.kt
index a724e46..abd71a4 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraStateTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraStateTest.kt
@@ -42,6 +42,7 @@
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
+import org.junit.After
import org.junit.Assert.assertThrows
import org.junit.Before
import org.junit.Rule
@@ -89,6 +90,11 @@
fakeCameraGraphSession.startRepeatingSignal = CompletableDeferred() // not complete yet
}
+ @After
+ fun tearDown() {
+ surface.close()
+ }
+
@Test
fun updateAsyncCompletes_whenStopRepeating(): Unit = runBlocking {
// stopRepeating is called when there is no stream after updateAsync call
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraTest.kt
index 20d762e..c1d3ac6 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraTest.kt
@@ -41,6 +41,7 @@
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.asExecutor
+import org.junit.After
import org.junit.Assume.assumeTrue
import org.junit.Test
import org.junit.runner.RunWith
@@ -89,6 +90,11 @@
useCaseGraphConfig = fakeUseCaseGraphConfig,
)
+ @After
+ fun tearDown() {
+ surface.close()
+ }
+
@Test
fun setInvalidSessionConfig_repeatingShouldStop() {
// Arrange