Skip to content

Commit 3404a0b

Browse files
committed
assert Camera2Interop.Extender is constructed
1 parent a48a9e5 commit 3404a0b

File tree

3 files changed

+64
-12
lines changed

3 files changed

+64
-12
lines changed

packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ImageAnalysisTest.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,26 @@
1111
import static org.mockito.Mockito.verify;
1212
import static org.mockito.Mockito.when;
1313

14+
import android.hardware.camera2.CaptureRequest;
15+
import android.util.Range;
1416
import android.view.Surface;
17+
import androidx.camera.camera2.interop.Camera2Interop;
1518
import androidx.camera.core.ImageAnalysis;
1619
import androidx.camera.core.ImageAnalysis.Analyzer;
1720
import androidx.camera.core.resolutionselector.ResolutionSelector;
1821
import androidx.core.content.ContextCompat;
1922
import java.util.concurrent.Executor;
2023
import org.junit.Test;
2124
import org.junit.runner.RunWith;
25+
import org.mockito.MockedConstruction;
2226
import org.mockito.MockedStatic;
2327
import org.mockito.Mockito;
2428
import org.mockito.stubbing.Answer;
2529
import org.robolectric.RobolectricTestRunner;
2630

2731
@RunWith(RobolectricTestRunner.class)
2832
public class ImageAnalysisTest {
33+
@SuppressWarnings({"unchecked", "rawtypes"})
2934
@Test
3035
public void pigeon_defaultConstructor_createsExpectedImageAnalysisInstance() {
3136
final PigeonApiImageAnalysis api = new TestProxyApiRegistrar().getPigeonApiImageAnalysis();
@@ -34,13 +39,25 @@ public void pigeon_defaultConstructor_createsExpectedImageAnalysisInstance() {
3439
final long targetResolution = Surface.ROTATION_0;
3540
final long targetFps = 30;
3641
final long outputImageFormat = ImageAnalysis.OUTPUT_IMAGE_FORMAT_NV21;
37-
final ImageAnalysis imageAnalysis =
38-
api.pigeon_defaultConstructor(
39-
mockResolutionSelector, targetResolution, targetFps, outputImageFormat);
4042

41-
assertEquals(imageAnalysis.getResolutionSelector(), mockResolutionSelector);
42-
assertEquals(imageAnalysis.getTargetRotation(), Surface.ROTATION_0);
43-
assertEquals(imageAnalysis.getOutputImageFormat(), ImageAnalysis.OUTPUT_IMAGE_FORMAT_NV21);
43+
try (MockedConstruction<Camera2Interop.Extender> mockCamera2InteropExtender =
44+
Mockito.mockConstruction(
45+
Camera2Interop.Extender.class,
46+
(mock, context) -> {
47+
when(mock.setCaptureRequestOption(
48+
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
49+
new Range<>(targetFps, targetFps)))
50+
.thenReturn(mock);
51+
})) {
52+
final ImageAnalysis imageAnalysis =
53+
api.pigeon_defaultConstructor(
54+
mockResolutionSelector, targetResolution, targetFps, outputImageFormat);
55+
56+
assertEquals(mockResolutionSelector, imageAnalysis.getResolutionSelector());
57+
assertEquals(Surface.ROTATION_0, imageAnalysis.getTargetRotation());
58+
assertEquals(1, mockCamera2InteropExtender.constructed().size());
59+
assertEquals(ImageAnalysis.OUTPUT_IMAGE_FORMAT_NV21, imageAnalysis.getOutputImageFormat());
60+
}
4461
}
4562

4663
@Test

packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PreviewTest.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313
import static org.mockito.Mockito.verifyNoMoreInteractions;
1414
import static org.mockito.Mockito.when;
1515

16+
import android.hardware.camera2.CaptureRequest;
17+
import android.util.Range;
1618
import android.util.Size;
1719
import android.view.Surface;
1820
import androidx.annotation.NonNull;
21+
import androidx.camera.camera2.interop.Camera2Interop;
1922
import androidx.camera.core.Preview;
2023
import androidx.camera.core.ResolutionInfo;
2124
import androidx.camera.core.SurfaceRequest;
@@ -26,22 +29,37 @@
2629
import org.junit.Test;
2730
import org.junit.runner.RunWith;
2831
import org.mockito.ArgumentCaptor;
32+
import org.mockito.MockedConstruction;
33+
import org.mockito.Mockito;
2934
import org.robolectric.RobolectricTestRunner;
3035

3136
@RunWith(RobolectricTestRunner.class)
3237
public class PreviewTest {
38+
@SuppressWarnings({"unchecked", "rawtypes"})
3339
@Test
3440
public void pigeon_defaultConstructor_createsPreviewWithCorrectConfiguration() {
3541
final PigeonApiPreview api = new TestProxyApiRegistrar().getPigeonApiPreview();
3642

3743
final ResolutionSelector mockResolutionSelector = new ResolutionSelector.Builder().build();
3844
final long targetResolution = Surface.ROTATION_0;
3945
final long targetFps = 30;
40-
final Preview instance =
41-
api.pigeon_defaultConstructor(mockResolutionSelector, targetResolution, targetFps);
4246

43-
assertEquals(instance.getResolutionSelector(), mockResolutionSelector);
44-
assertEquals(instance.getTargetRotation(), Surface.ROTATION_0);
47+
try (MockedConstruction<Camera2Interop.Extender> mockCamera2InteropExtender =
48+
Mockito.mockConstruction(
49+
Camera2Interop.Extender.class,
50+
(mock, context) -> {
51+
when(mock.setCaptureRequestOption(
52+
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
53+
new Range<>(targetFps, targetFps)))
54+
.thenReturn(mock);
55+
})) {
56+
final Preview instance =
57+
api.pigeon_defaultConstructor(mockResolutionSelector, targetResolution, targetFps);
58+
59+
assertEquals(mockResolutionSelector, instance.getResolutionSelector());
60+
assertEquals(Surface.ROTATION_0, instance.getTargetRotation());
61+
assertEquals(1, mockCamera2InteropExtender.constructed().size());
62+
}
4563
}
4664

4765
@Test

packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/VideoCaptureTest.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@
99
import static org.mockito.Mockito.verify;
1010
import static org.mockito.Mockito.when;
1111

12+
import android.hardware.camera2.CaptureRequest;
13+
import android.util.Range;
14+
import androidx.camera.camera2.interop.Camera2Interop;
1215
import androidx.camera.video.VideoCapture;
1316
import androidx.camera.video.VideoOutput;
1417
import org.junit.Test;
1518
import org.junit.runner.RunWith;
19+
import org.mockito.MockedConstruction;
20+
import org.mockito.Mockito;
1621
import org.robolectric.RobolectricTestRunner;
1722

1823
@RunWith(RobolectricTestRunner.class)
@@ -25,8 +30,20 @@ public void withOutput_createsVideoCaptureWithVideoOutput() {
2530
final VideoOutput videoOutput = mock(VideoOutput.class);
2631
final long targetFps = 30;
2732

28-
final VideoCapture videoCapture = api.withOutput(videoOutput, targetFps);
29-
assertEquals(videoCapture.getOutput(), videoOutput);
33+
try (MockedConstruction<Camera2Interop.Extender> mockCamera2InteropExtender =
34+
Mockito.mockConstruction(
35+
Camera2Interop.Extender.class,
36+
(mock, context) -> {
37+
when(mock.setCaptureRequestOption(
38+
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
39+
new Range<>(targetFps, targetFps)))
40+
.thenReturn(mock);
41+
})) {
42+
final VideoCapture videoCapture = api.withOutput(videoOutput, targetFps);
43+
44+
assertEquals(1, mockCamera2InteropExtender.constructed().size());
45+
assertEquals(videoOutput, videoCapture.getOutput());
46+
}
3047
}
3148

3249
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)