Skip to content

Commit 5b67428

Browse files
authored
Merge pull request flutter#16 from bottlepay/android-rework-test-regionboundries-feature
Added test coverage to region boundaries feature
2 parents 944b2a7 + c7c543f commit 5b67428

File tree

3 files changed

+273
-22
lines changed

3 files changed

+273
-22
lines changed

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/features/regionboundaries/RegionBoundariesFeature.java

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
* CaptureRequestBuilder for which we can read the distortion correction settings from.
1818
*/
1919
public class RegionBoundariesFeature extends CameraFeature<Size> {
20+
private final CameraRegions cameraRegions;
2021
private Size currentSetting;
21-
private CameraRegions cameraRegions;
2222

2323
public RegionBoundariesFeature(
2424
CameraProperties cameraProperties, CaptureRequest.Builder requestBuilder) {
@@ -28,33 +28,31 @@ public RegionBoundariesFeature(
2828
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.P
2929
|| !supportsDistortionCorrection()) {
3030
setValue(cameraProperties.getSensorInfoPixelArraySize());
31-
}
32-
33-
// Get the current distortion correction mode
34-
Integer distortionCorrectionMode = null;
35-
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
36-
distortionCorrectionMode = requestBuilder.get(CaptureRequest.DISTORTION_CORRECTION_MODE);
37-
}
38-
39-
// Return the correct boundaries depending on the mode
40-
android.graphics.Rect rect;
41-
if (distortionCorrectionMode == null
42-
|| distortionCorrectionMode == CaptureRequest.DISTORTION_CORRECTION_MODE_OFF) {
43-
rect = cameraProperties.getSensorInfoPreCorrectionActiveArraySize();
4431
} else {
45-
rect = cameraProperties.getSensorInfoActiveArraySize();
32+
// Get the current distortion correction mode
33+
Integer distortionCorrectionMode =
34+
requestBuilder.get(CaptureRequest.DISTORTION_CORRECTION_MODE);
35+
36+
// Return the correct boundaries depending on the mode
37+
android.graphics.Rect rect;
38+
if (distortionCorrectionMode == null
39+
|| distortionCorrectionMode == CaptureRequest.DISTORTION_CORRECTION_MODE_OFF) {
40+
rect = cameraProperties.getSensorInfoPreCorrectionActiveArraySize();
41+
} else {
42+
rect = cameraProperties.getSensorInfoActiveArraySize();
43+
}
44+
45+
// Set new region size
46+
setValue(rect == null ? null : new Size(rect.width(), rect.height()));
4647
}
4748

48-
// Set new region size
49-
setValue(rect == null ? null : new Size(rect.width(), rect.height()));
50-
5149
// Create new camera regions using new size
5250
cameraRegions = new CameraRegions(currentSetting);
5351
}
5452

5553
@Override
5654
public String getDebugName() {
57-
return "RegionBoundaries";
55+
return "RegionBoundariesFeature";
5856
}
5957

6058
@Override

packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/features/noisereduction/NoiseReductionFeatureTest.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@
1818
import android.os.Build.VERSION;
1919
import io.flutter.plugins.camera.CameraProperties;
2020
import io.flutter.plugins.camera.utils.TestUtils;
21+
import org.junit.After;
2122
import org.junit.Assert;
22-
import org.junit.BeforeClass;
23+
import org.junit.Before;
2324
import org.junit.Test;
2425

2526
public class NoiseReductionFeatureTest {
26-
@BeforeClass
27-
public static void beforeClass() {
27+
@Before
28+
public void before() {
2829
// Make sure the VERSION.SDK_INT field returns 23, to allow using all available
2930
// noise reduction modes in tests.
3031
try {
@@ -34,6 +35,16 @@ public static void beforeClass() {
3435
}
3536
}
3637

38+
@After
39+
public void after() {
40+
// Make sure we reset the VERSION.SDK_INT field to it's original value.
41+
try {
42+
TestUtils.setFinalStatic(VERSION.class.getField("SDK_INT"), 0);
43+
} catch (Exception e) {
44+
Assert.fail("Unable to set SDK_INT");
45+
}
46+
}
47+
3748
@Test
3849
public void getDebugName_should_return_the_name_of_the_feature() {
3950
CameraProperties mockCameraProperties = mock(CameraProperties.class);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
package io.flutter.plugins.camera.features.regionboundaries;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNull;
5+
import static org.junit.Assert.assertTrue;
6+
import static org.mockito.Mockito.mock;
7+
import static org.mockito.Mockito.never;
8+
import static org.mockito.Mockito.verify;
9+
import static org.mockito.Mockito.when;
10+
11+
import android.hardware.camera2.CaptureRequest;
12+
import android.os.Build.VERSION;
13+
import android.os.Build.VERSION_CODES;
14+
import android.util.Size;
15+
import io.flutter.plugins.camera.CameraProperties;
16+
import io.flutter.plugins.camera.utils.TestUtils;
17+
import org.junit.Assert;
18+
import org.junit.Before;
19+
import org.junit.Test;
20+
21+
public class RegionBoundariesFeatureTest {
22+
private Size mockSize;
23+
24+
@Before
25+
public void before() {
26+
mockSize = mock(Size.class);
27+
28+
when(mockSize.getHeight()).thenReturn(640);
29+
when(mockSize.getWidth()).thenReturn(480);
30+
}
31+
32+
@Test
33+
public void
34+
ctor_should_initialize_with_sensor_info_pixel_array_size_when_running_pre_android_p() {
35+
updateSdkVersion(VERSION_CODES.O_MR1);
36+
37+
try {
38+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
39+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
40+
41+
when(mockCameraProperties.getSensorInfoPixelArraySize()).thenReturn(mockSize);
42+
43+
RegionBoundariesFeature regionBoundariesFeature =
44+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
45+
46+
assertEquals(mockSize, regionBoundariesFeature.getValue());
47+
verify(mockCameraProperties, never()).getSensorInfoPreCorrectionActiveArraySize();
48+
verify(mockCameraProperties, never()).getSensorInfoActiveArraySize();
49+
} finally {
50+
updateSdkVersion(0);
51+
}
52+
}
53+
54+
@Test
55+
public void
56+
ctor_should_initialize_with_sensor_info_pixel_array_size_when_distortion_correction_is_null() {
57+
updateSdkVersion(VERSION_CODES.P);
58+
59+
try {
60+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
61+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
62+
63+
when(mockCameraProperties.getDistortionCorrectionAvailableModes()).thenReturn(null);
64+
when(mockCameraProperties.getSensorInfoPixelArraySize()).thenReturn(mockSize);
65+
66+
RegionBoundariesFeature regionBoundariesFeature =
67+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
68+
69+
assertEquals(mockSize, regionBoundariesFeature.getValue());
70+
verify(mockCameraProperties, never()).getSensorInfoPreCorrectionActiveArraySize();
71+
verify(mockCameraProperties, never()).getSensorInfoActiveArraySize();
72+
} finally {
73+
updateSdkVersion(0);
74+
}
75+
}
76+
77+
@Test
78+
public void
79+
ctor_should_initialize_with_sensor_info_pixel_array_size_when_distortion_correction_is_off() {
80+
updateSdkVersion(VERSION_CODES.P);
81+
82+
try {
83+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
84+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
85+
86+
when(mockCameraProperties.getDistortionCorrectionAvailableModes())
87+
.thenReturn(new int[] {CaptureRequest.DISTORTION_CORRECTION_MODE_OFF});
88+
when(mockCameraProperties.getSensorInfoPixelArraySize()).thenReturn(mockSize);
89+
90+
RegionBoundariesFeature regionBoundariesFeature =
91+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
92+
93+
assertEquals(mockSize, regionBoundariesFeature.getValue());
94+
verify(mockCameraProperties, never()).getSensorInfoPreCorrectionActiveArraySize();
95+
verify(mockCameraProperties, never()).getSensorInfoActiveArraySize();
96+
} finally {
97+
updateSdkVersion(0);
98+
}
99+
}
100+
101+
@Test
102+
public void
103+
ctor_should_initialize_with_sensor_info_pre_correction_active_array_size_when_distortion_correction_mode_is_set_to_null() {
104+
updateSdkVersion(VERSION_CODES.P);
105+
106+
try {
107+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
108+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
109+
110+
when(mockCameraProperties.getDistortionCorrectionAvailableModes())
111+
.thenReturn(
112+
new int[] {
113+
CaptureRequest.DISTORTION_CORRECTION_MODE_OFF,
114+
CaptureRequest.DISTORTION_CORRECTION_MODE_FAST
115+
});
116+
117+
when(mockBuilder.get(CaptureRequest.DISTORTION_CORRECTION_MODE)).thenReturn(null);
118+
when(mockCameraProperties.getSensorInfoPreCorrectionActiveArraySize()).thenReturn(null);
119+
120+
RegionBoundariesFeature regionBoundariesFeature =
121+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
122+
123+
assertNull(regionBoundariesFeature.getValue());
124+
verify(mockCameraProperties, never()).getSensorInfoPixelArraySize();
125+
verify(mockCameraProperties, never()).getSensorInfoActiveArraySize();
126+
} finally {
127+
updateSdkVersion(0);
128+
}
129+
}
130+
131+
@Test
132+
public void
133+
ctor_should_initialize_with_sensor_info_pre_correction_active_array_size_when_distortion_correction_mode_is_set_off() {
134+
updateSdkVersion(VERSION_CODES.P);
135+
136+
try {
137+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
138+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
139+
140+
when(mockCameraProperties.getDistortionCorrectionAvailableModes())
141+
.thenReturn(
142+
new int[] {
143+
CaptureRequest.DISTORTION_CORRECTION_MODE_OFF,
144+
CaptureRequest.DISTORTION_CORRECTION_MODE_FAST
145+
});
146+
147+
when(mockBuilder.get(CaptureRequest.DISTORTION_CORRECTION_MODE))
148+
.thenReturn(CaptureRequest.DISTORTION_CORRECTION_MODE_OFF);
149+
when(mockCameraProperties.getSensorInfoPreCorrectionActiveArraySize()).thenReturn(null);
150+
151+
RegionBoundariesFeature regionBoundariesFeature =
152+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
153+
154+
assertNull(regionBoundariesFeature.getValue());
155+
verify(mockCameraProperties, never()).getSensorInfoPixelArraySize();
156+
verify(mockCameraProperties, never()).getSensorInfoActiveArraySize();
157+
} finally {
158+
updateSdkVersion(0);
159+
}
160+
}
161+
162+
@Test
163+
public void
164+
ctor_should_initialize_with_sensor_info_active_array_size_when_distortion_correction_mode_is_set() {
165+
updateSdkVersion(VERSION_CODES.P);
166+
167+
try {
168+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
169+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
170+
171+
when(mockCameraProperties.getDistortionCorrectionAvailableModes())
172+
.thenReturn(
173+
new int[] {
174+
CaptureRequest.DISTORTION_CORRECTION_MODE_OFF,
175+
CaptureRequest.DISTORTION_CORRECTION_MODE_FAST
176+
});
177+
178+
when(mockBuilder.get(CaptureRequest.DISTORTION_CORRECTION_MODE))
179+
.thenReturn(CaptureRequest.DISTORTION_CORRECTION_MODE_FAST);
180+
when(mockCameraProperties.getSensorInfoActiveArraySize()).thenReturn(null);
181+
182+
RegionBoundariesFeature regionBoundariesFeature =
183+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
184+
185+
assertNull(regionBoundariesFeature.getValue());
186+
verify(mockCameraProperties, never()).getSensorInfoPixelArraySize();
187+
verify(mockCameraProperties, never()).getSensorInfoPreCorrectionActiveArraySize();
188+
} finally {
189+
updateSdkVersion(0);
190+
}
191+
}
192+
193+
@Test
194+
public void getDebugName_should_return_the_name_of_the_feature() {
195+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
196+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
197+
RegionBoundariesFeature regionBoundariesFeature =
198+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
199+
200+
assertEquals("RegionBoundariesFeature", regionBoundariesFeature.getDebugName());
201+
}
202+
203+
@Test
204+
public void getValue_should_return_null_if_not_set() {
205+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
206+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
207+
RegionBoundariesFeature regionBoundariesFeature =
208+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
209+
210+
assertNull(regionBoundariesFeature.getValue());
211+
}
212+
213+
@Test
214+
public void getValue_should_echo_setValue() {
215+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
216+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
217+
RegionBoundariesFeature regionBoundariesFeature =
218+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
219+
220+
regionBoundariesFeature.setValue(mockSize);
221+
222+
assertEquals(mockSize, regionBoundariesFeature.getValue());
223+
}
224+
225+
@Test
226+
public void checkIsSupport_returns_true() {
227+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
228+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
229+
RegionBoundariesFeature regionBoundariesFeature =
230+
new RegionBoundariesFeature(mockCameraProperties, mockBuilder);
231+
232+
assertTrue(regionBoundariesFeature.checkIsSupported());
233+
}
234+
235+
private static void updateSdkVersion(int version) {
236+
try {
237+
TestUtils.setFinalStatic(VERSION.class.getField("SDK_INT"), version);
238+
} catch (Exception e) {
239+
Assert.fail("Unable to update SDK version");
240+
}
241+
}
242+
}

0 commit comments

Comments
 (0)