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