1 package org.robolectric.shadows;
2 
3 import static com.google.common.truth.Truth.assertThat;
4 
5 import android.graphics.ImageFormat;
6 import android.graphics.Rect;
7 import android.hardware.Camera;
8 import androidx.test.ext.junit.runners.AndroidJUnit4;
9 import com.google.common.collect.Lists;
10 import java.util.Arrays;
11 import java.util.Collections;
12 import java.util.List;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.robolectric.Shadows;
17 
18 @RunWith(AndroidJUnit4.class)
19 public class ShadowCameraParametersTest {
20 
21   private Camera.Parameters parameters;
22 
23   @Before
setUp()24   public void setUp() throws Exception {
25     parameters = Camera.open().getParameters();
26   }
27 
28   @Test
testPictureSize()29   public void testPictureSize() {
30     assertThat(Shadows.shadowOf(parameters).getPictureHeight()).isNotEqualTo(600);
31     assertThat(Shadows.shadowOf(parameters).getPictureWidth()).isNotEqualTo(800);
32     parameters.setPictureSize(800, 600);
33     Camera.Size pictureSize = parameters.getPictureSize();
34     assertThat(pictureSize.width).isEqualTo(800);
35     assertThat(pictureSize.height).isEqualTo(600);
36     assertThat(Shadows.shadowOf(parameters).getPictureHeight()).isEqualTo(600);
37     assertThat(Shadows.shadowOf(parameters).getPictureWidth()).isEqualTo(800);
38   }
39 
40   @Test
testPreviewFpsRange()41   public void testPreviewFpsRange() {
42     int[] fpsRange = new int[2];
43     parameters.getPreviewFpsRange(fpsRange);
44     assertThat(fpsRange[1]).isNotEqualTo(15);
45     assertThat(fpsRange[0]).isNotEqualTo(25);
46     parameters.setPreviewFpsRange(15, 25);
47     parameters.getPreviewFpsRange(fpsRange);
48     assertThat(fpsRange[1]).isEqualTo(25);
49     assertThat(fpsRange[0]).isEqualTo(15);
50   }
51 
52   @Test
testPreviewFrameRate()53   public void testPreviewFrameRate() {
54     assertThat(parameters.getPreviewFrameRate()).isNotEqualTo(15);
55     parameters.setPreviewFrameRate(15);
56     assertThat(parameters.getPreviewFrameRate()).isEqualTo(15);
57   }
58 
59   @Test
testPreviewSize()60   public void testPreviewSize() {
61     assertThat(Shadows.shadowOf(parameters).getPreviewWidth()).isNotEqualTo(320);
62     assertThat(Shadows.shadowOf(parameters).getPreviewHeight()).isNotEqualTo(240);
63     parameters.setPreviewSize(320, 240);
64     Camera.Size size = parameters.getPreviewSize();
65     assertThat(size.width).isEqualTo(320);
66     assertThat(size.height).isEqualTo(240);
67     assertThat(Shadows.shadowOf(parameters).getPreviewWidth()).isEqualTo(320);
68     assertThat(Shadows.shadowOf(parameters).getPreviewHeight()).isEqualTo(240);
69   }
70 
71   @Test
testPreviewFormat()72   public void testPreviewFormat() {
73     assertThat(parameters.getPreviewFormat()).isEqualTo(ImageFormat.NV21);
74     parameters.setPreviewFormat(ImageFormat.JPEG);
75     assertThat(parameters.getPreviewFormat()).isEqualTo(ImageFormat.JPEG);
76   }
77 
78   @Test
testGetSupportedPreviewFormats()79   public void testGetSupportedPreviewFormats() {
80     List<Integer> supportedFormats = parameters.getSupportedPreviewFormats();
81     assertThat(supportedFormats).isNotNull();
82     assertThat(supportedFormats.size()).isNotEqualTo(0);
83     assertThat(supportedFormats).contains(ImageFormat.NV21);
84   }
85 
86   @Test
testGetSupportedPictureFormats()87   public void testGetSupportedPictureFormats() {
88     List<Integer> supportedFormats = parameters.getSupportedPictureFormats();
89     assertThat(supportedFormats).isNotNull();
90     assertThat(supportedFormats.size()).isEqualTo(2);
91     assertThat(supportedFormats).contains(ImageFormat.NV21);
92   }
93 
94   @Test
testGetSupportedPictureSizes()95   public void testGetSupportedPictureSizes() {
96     List<Camera.Size> supportedSizes = parameters.getSupportedPictureSizes();
97     assertThat(supportedSizes).isNotNull();
98     assertThat(supportedSizes.size()).isEqualTo(3);
99     assertThat(supportedSizes.get(0).width).isEqualTo(320);
100     assertThat(supportedSizes.get(0).height).isEqualTo(240);
101   }
102 
103   @Test
testGetSupportedPreviewSizes()104   public void testGetSupportedPreviewSizes() {
105     List<Camera.Size> supportedSizes = parameters.getSupportedPreviewSizes();
106     assertThat(supportedSizes).isNotNull();
107     assertThat(supportedSizes.size()).isEqualTo(2);
108     assertThat(supportedSizes.get(0).width).isEqualTo(320);
109     assertThat(supportedSizes.get(0).height).isEqualTo(240);
110   }
111 
112   @Test
testInitSupportedPreviewSizes()113   public void testInitSupportedPreviewSizes() {
114     Shadows.shadowOf(parameters).initSupportedPreviewSizes();
115     assertThat(parameters.getSupportedPreviewSizes()).isNull();
116   }
117 
118   @Test
testAddSupportedPreviewSizes()119   public void testAddSupportedPreviewSizes() {
120     Shadows.shadowOf(parameters).initSupportedPreviewSizes();
121     Shadows.shadowOf(parameters).addSupportedPreviewSize(320, 240);
122     List<Camera.Size> supportedSizes = parameters.getSupportedPreviewSizes();
123     assertThat(supportedSizes).isNotNull();
124     assertThat(supportedSizes).hasSize(1);
125     assertThat(supportedSizes.get(0).width).isEqualTo(320);
126     assertThat(supportedSizes.get(0).height).isEqualTo(240);
127   }
128 
129   @Test
testGetSupportedPreviewFpsRange()130   public void testGetSupportedPreviewFpsRange() {
131     List<int[]> supportedRanges = parameters.getSupportedPreviewFpsRange();
132     assertThat(supportedRanges).isNotNull();
133     assertThat(supportedRanges.size()).isEqualTo(2);
134     assertThat(supportedRanges.get(0)[0]).isEqualTo(15000);
135     assertThat(supportedRanges.get(0)[1]).isEqualTo(15000);
136     assertThat(supportedRanges.get(1)[0]).isEqualTo(10000);
137     assertThat(supportedRanges.get(1)[1]).isEqualTo(30000);
138   }
139 
140   @Test
testGetSupportedPreviewFrameRates()141   public void testGetSupportedPreviewFrameRates() {
142     List<Integer> supportedRates = parameters.getSupportedPreviewFrameRates();
143     assertThat(supportedRates).isNotNull();
144     assertThat(supportedRates.size()).isEqualTo(3);
145     assertThat(supportedRates.get(0)).isEqualTo(10);
146   }
147 
148   @Test
testExposureCompensationLimits()149   public void testExposureCompensationLimits() {
150     assertThat(parameters.getMinExposureCompensation()).isEqualTo(-6);
151     assertThat(parameters.getMaxExposureCompensation()).isEqualTo(6);
152     assertThat(parameters.getExposureCompensationStep()).isEqualTo(0.5f);
153   }
154 
155   @Test
testExposureCompensationSetting()156   public void testExposureCompensationSetting() {
157     assertThat(parameters.getExposureCompensation()).isEqualTo(0);
158     parameters.setExposureCompensation(5);
159     assertThat(parameters.getExposureCompensation()).isEqualTo(5);
160   }
161 
162   @Test
testGetSupportedFocusModesDefaultValue()163   public void testGetSupportedFocusModesDefaultValue() {
164     List<String> supportedFocusModes = parameters.getSupportedFocusModes();
165     assertThat(supportedFocusModes).containsExactly("auto");
166   }
167 
168   @Test
testSetSupportedFocusModes()169   public void testSetSupportedFocusModes() {
170     Shadows.shadowOf(parameters).setSupportedFocusModes("foo", "bar");
171     assertThat(parameters.getSupportedFocusModes()).isEqualTo(Lists.newArrayList("foo", "bar"));
172     Shadows.shadowOf(parameters).setSupportedFocusModes("baz");
173     assertThat(parameters.getSupportedFocusModes()).isEqualTo(Lists.newArrayList("baz"));
174   }
175 
176   @Test
testSetAndGetFocusMode()177   public void testSetAndGetFocusMode() {
178     parameters.setFocusMode("foo");
179     assertThat(parameters.getFocusMode()).isEqualTo("foo");
180   }
181 
182   @Test
testGetSupportedFlashModesDefaultValue()183   public void testGetSupportedFlashModesDefaultValue() {
184     List<String> supportedFlashModes = parameters.getSupportedFlashModes();
185     assertThat(supportedFlashModes).containsExactly("auto", "on", "off");
186   }
187 
188   @Test
testSetSupportedFlashModes()189   public void testSetSupportedFlashModes() {
190     Shadows.shadowOf(parameters).setSupportedFlashModes("foo", "bar");
191     assertThat(parameters.getSupportedFlashModes()).containsExactly("foo", "bar").inOrder();
192     Shadows.shadowOf(parameters).setSupportedFlashModes("baz");
193     assertThat(parameters.getSupportedFlashModes()).containsExactly("baz");
194   }
195 
196   @Test
testSetAndGetFlashMode()197   public void testSetAndGetFlashMode() {
198     parameters.setFlashMode("foo");
199     assertThat(parameters.getFlashMode()).isEqualTo("foo");
200   }
201 
202   @Test
testGetMaxNumFocusAreasDefaultValue()203   public void testGetMaxNumFocusAreasDefaultValue() {
204     assertThat(parameters.getMaxNumFocusAreas()).isEqualTo(1);
205   }
206 
207   @Test
testSetAndGetMaxNumFocusAreas()208   public void testSetAndGetMaxNumFocusAreas() {
209     Shadows.shadowOf(parameters).setMaxNumFocusAreas(22);
210     assertThat(parameters.getMaxNumFocusAreas()).isEqualTo(22);
211   }
212 
213   @Test
testSetAndGetFocusAreas()214   public void testSetAndGetFocusAreas() {
215     List<Camera.Area> focusAreas1 = Collections.singletonList(new Camera.Area(new Rect(), 1));
216     parameters.setFocusAreas(focusAreas1);
217     assertThat(parameters.getFocusAreas()).isEqualTo(focusAreas1);
218 
219     List<Camera.Area> focusAreas2 =
220         Arrays.asList(new Camera.Area(new Rect(), 2), new Camera.Area(new Rect(), 3));
221     parameters.setFocusAreas(focusAreas2);
222     assertThat(parameters.getFocusAreas()).isEqualTo(focusAreas2);
223   }
224 
225   @Test
testGetMaxNumMeteringAreasDefaultValue()226   public void testGetMaxNumMeteringAreasDefaultValue() {
227     assertThat(parameters.getMaxNumFocusAreas()).isEqualTo(1);
228   }
229 
230   @Test
testSetAndGetMaxNumMeteringAreas()231   public void testSetAndGetMaxNumMeteringAreas() {
232     Shadows.shadowOf(parameters).setMaxNumMeteringAreas(222);
233     assertThat(parameters.getMaxNumMeteringAreas()).isEqualTo(222);
234   }
235 
236   @Test
testSetAndGetMaxMeteringAreas()237   public void testSetAndGetMaxMeteringAreas() {
238     List<Camera.Area> meteringAreas1 = Collections.singletonList(new Camera.Area(new Rect(), 1));
239     parameters.setMeteringAreas(meteringAreas1);
240     assertThat(parameters.getMeteringAreas()).isEqualTo(meteringAreas1);
241 
242     List<Camera.Area> meteringAreas2 =
243         Arrays.asList(new Camera.Area(new Rect(), 2), new Camera.Area(new Rect(), 3));
244     parameters.setMeteringAreas(meteringAreas2);
245     assertThat(parameters.getMeteringAreas()).isEqualTo(meteringAreas2);
246   }
247 
248   @Test
testSetAndGetCustomParams()249   public void testSetAndGetCustomParams() {
250     String key = "key";
251     String value1 = "value1";
252     parameters.set(key, value1);
253     assertThat(parameters.get(key)).isEqualTo(value1);
254 
255     String value2 = "value2";
256     parameters.set(key, value2);
257     assertThat(parameters.get(key)).isEqualTo(value2);
258   }
259 
260   @Test
testSetAndGetRotation()261   public void testSetAndGetRotation() {
262     parameters.setRotation(90);
263     assertThat(Shadows.shadowOf(parameters).getRotation()).isEqualTo(90);
264   }
265 }
266