Skip to content

Commit 5387727

Browse files
authored
Merge pull request flutter#8 from bottlepay/android-rework-test-autofocus-feature
Android rework test autofocus feature
2 parents 3523016 + 109ae75 commit 5387727

File tree

2 files changed

+164
-1
lines changed

2 files changed

+164
-1
lines changed

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/features/autofocus/AutoFocusFeature.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public AutoFocusFeature(CameraProperties cameraProperties, boolean recordingVide
2424

2525
@Override
2626
public String getDebugName() {
27-
return "AutoFocus";
27+
return "AutoFocusFeature";
2828
}
2929

3030
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
package io.flutter.plugins.camera.features.autofocus;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
5+
import static org.junit.Assert.assertTrue;
6+
import static org.mockito.ArgumentMatchers.any;
7+
import static org.mockito.Mockito.mock;
8+
import static org.mockito.Mockito.never;
9+
import static org.mockito.Mockito.times;
10+
import static org.mockito.Mockito.verify;
11+
import static org.mockito.Mockito.when;
12+
13+
import android.hardware.camera2.CameraCharacteristics;
14+
import android.hardware.camera2.CaptureRequest;
15+
import io.flutter.plugins.camera.CameraProperties;
16+
import org.junit.Test;
17+
18+
public class AutoFocusFeatureTest {
19+
private static final int[] FOCUS_MODES_ONLY_OFF = new int[] { CameraCharacteristics.CONTROL_AF_MODE_OFF };
20+
private static final int[] FOCUS_MODES = new int[] { CameraCharacteristics.CONTROL_AF_MODE_OFF, CameraCharacteristics.CONTROL_AF_MODE_AUTO };
21+
22+
@Test
23+
public void getDebugName_should_return_the_name_of_the_feature() {
24+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
25+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
26+
27+
assertEquals("AutoFocusFeature", autoFocusFeature.getDebugName());
28+
}
29+
30+
@Test
31+
public void getValue_should_return_auto_if_not_set() {
32+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
33+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
34+
35+
assertEquals(FocusMode.auto, autoFocusFeature.getValue());
36+
}
37+
38+
@Test
39+
public void getValue_should_echo_the_set_value() {
40+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
41+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
42+
FocusMode expectedValue = FocusMode.locked;
43+
44+
autoFocusFeature.setValue(expectedValue);
45+
FocusMode actualValue = autoFocusFeature.getValue();
46+
47+
assertEquals(expectedValue, actualValue);
48+
}
49+
50+
@Test
51+
public void checkIsSupported_should_return_false_when_minimum_focus_distance_is_zero() {
52+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
53+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
54+
55+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(FOCUS_MODES);
56+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(0.0F);
57+
58+
assertFalse(autoFocusFeature.checkIsSupported());
59+
}
60+
61+
@Test
62+
public void checkIsSupported_should_return_false_when_minimum_focus_distance_is_null() {
63+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
64+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
65+
66+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(FOCUS_MODES);
67+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(null);
68+
69+
assertFalse(autoFocusFeature.checkIsSupported());
70+
}
71+
72+
@Test
73+
public void checkIsSupport_should_return_false_when_no_focus_modes_are_available() {
74+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
75+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
76+
77+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(new int[] {});
78+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(1.0F);
79+
80+
assertFalse(autoFocusFeature.checkIsSupported());
81+
}
82+
83+
@Test
84+
public void checkIsSupport_should_return_false_when_only_focus_off_is_available() {
85+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
86+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
87+
88+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(FOCUS_MODES_ONLY_OFF);
89+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(1.0F);
90+
91+
assertFalse(autoFocusFeature.checkIsSupported());
92+
}
93+
94+
@Test
95+
public void checkIsSupport_should_return_true_when_only_multiple_focus_modes_are_available() {
96+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
97+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
98+
99+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(FOCUS_MODES);
100+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(1.0F);
101+
102+
assertTrue(autoFocusFeature.checkIsSupported());
103+
}
104+
105+
@Test
106+
public void updateBuilder_should_return_when_checkIsSupported_is_false() {
107+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
108+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
109+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
110+
111+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(FOCUS_MODES);
112+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(0.0F);
113+
114+
autoFocusFeature.updateBuilder(mockBuilder);
115+
116+
verify(mockBuilder, never()).set(any(), any());
117+
}
118+
119+
@Test
120+
public void updateBuilder_should_set_control_mode_to_auto_when_focus_is_locked() {
121+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
122+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
123+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
124+
125+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(FOCUS_MODES);
126+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(1.0F);
127+
128+
autoFocusFeature.setValue(FocusMode.locked);
129+
autoFocusFeature.updateBuilder(mockBuilder);
130+
131+
verify(mockBuilder, times(1)).set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
132+
}
133+
134+
@Test
135+
public void updateBuilder_should_set_control_mode_to_continuous_video_when_focus_is_auto_and_recording_video() {
136+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
137+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
138+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, true);
139+
140+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(FOCUS_MODES);
141+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(1.0F);
142+
143+
autoFocusFeature.setValue(FocusMode.auto);
144+
autoFocusFeature.updateBuilder(mockBuilder);
145+
146+
verify(mockBuilder, times(1)).set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_VIDEO);
147+
}
148+
149+
@Test
150+
public void updateBuilder_should_set_control_mode_to_continuous_video_when_focus_is_auto_and_not_recording_video() {
151+
CameraProperties mockCameraProperties = mock(CameraProperties.class);
152+
CaptureRequest.Builder mockBuilder = mock(CaptureRequest.Builder.class);
153+
AutoFocusFeature autoFocusFeature = new AutoFocusFeature(mockCameraProperties, false);
154+
155+
when(mockCameraProperties.getControlAutoFocusAvailableModes()).thenReturn(FOCUS_MODES);
156+
when(mockCameraProperties.getLensInfoMinimumFocusDistance()).thenReturn(1.0F);
157+
158+
autoFocusFeature.setValue(FocusMode.auto);
159+
autoFocusFeature.updateBuilder(mockBuilder);
160+
161+
verify(mockBuilder, times(1)).set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
162+
}
163+
}

0 commit comments

Comments
 (0)