blob: e59b05bf4fe3f0ce1672290c778d19e192548a3e [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package io.flutter.plugins.camera;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import android.app.Activity;
import android.content.Context;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraMetadata;
import io.flutter.embedding.engine.systemchannels.PlatformChannel;
import java.util.List;
import java.util.Map;
import org.junit.Test;
public class CameraUtilsTest {
@Test
public void serializeDeviceOrientation_serializesCorrectly() {
assertEquals(
"portraitUp",
CameraUtils.serializeDeviceOrientation(PlatformChannel.DeviceOrientation.PORTRAIT_UP));
assertEquals(
"portraitDown",
CameraUtils.serializeDeviceOrientation(PlatformChannel.DeviceOrientation.PORTRAIT_DOWN));
assertEquals(
"landscapeLeft",
CameraUtils.serializeDeviceOrientation(PlatformChannel.DeviceOrientation.LANDSCAPE_LEFT));
assertEquals(
"landscapeRight",
CameraUtils.serializeDeviceOrientation(PlatformChannel.DeviceOrientation.LANDSCAPE_RIGHT));
}
@Test(expected = UnsupportedOperationException.class)
public void serializeDeviceOrientation_throws_for_null() {
CameraUtils.serializeDeviceOrientation(null);
}
@Test
public void deserializeDeviceOrientation_deserializesCorrectly() {
assertEquals(
PlatformChannel.DeviceOrientation.PORTRAIT_UP,
CameraUtils.deserializeDeviceOrientation("portraitUp"));
assertEquals(
PlatformChannel.DeviceOrientation.PORTRAIT_DOWN,
CameraUtils.deserializeDeviceOrientation("portraitDown"));
assertEquals(
PlatformChannel.DeviceOrientation.LANDSCAPE_LEFT,
CameraUtils.deserializeDeviceOrientation("landscapeLeft"));
assertEquals(
PlatformChannel.DeviceOrientation.LANDSCAPE_RIGHT,
CameraUtils.deserializeDeviceOrientation("landscapeRight"));
}
@Test(expected = UnsupportedOperationException.class)
public void deserializeDeviceOrientation_throwsForNull() {
CameraUtils.deserializeDeviceOrientation(null);
}
@Test
public void getAvailableCameras_retrievesValidCameras()
throws CameraAccessException, NumberFormatException {
final Activity mockActivity = mock(Activity.class);
final CameraManager mockCameraManager = mock(CameraManager.class);
final CameraCharacteristics mockCameraCharacteristics = mock(CameraCharacteristics.class);
final String[] mockCameraIds = {"1394902", "-192930", "0283835", "foobar"};
final int mockSensorOrientation0 = 90;
final int mockSensorOrientation2 = 270;
final int mockLensFacing0 = CameraMetadata.LENS_FACING_FRONT;
final int mockLensFacing2 = CameraMetadata.LENS_FACING_EXTERNAL;
when(mockActivity.getSystemService(Context.CAMERA_SERVICE)).thenReturn(mockCameraManager);
when(mockCameraManager.getCameraIdList()).thenReturn(mockCameraIds);
when(mockCameraManager.getCameraCharacteristics(anyString()))
.thenReturn(mockCameraCharacteristics);
when(mockCameraCharacteristics.get(any()))
.thenReturn(mockSensorOrientation0)
.thenReturn(mockLensFacing0)
.thenReturn(mockSensorOrientation2)
.thenReturn(mockLensFacing2);
List<Map<String, Object>> availableCameras = CameraUtils.getAvailableCameras(mockActivity);
assertEquals(availableCameras.size(), 2);
assertEquals(availableCameras.get(0).get("name"), "1394902");
assertEquals(availableCameras.get(0).get("sensorOrientation"), mockSensorOrientation0);
assertEquals(availableCameras.get(0).get("lensFacing"), "front");
assertEquals(availableCameras.get(1).get("name"), "0283835");
assertEquals(availableCameras.get(1).get("sensorOrientation"), mockSensorOrientation2);
assertEquals(availableCameras.get(1).get("lensFacing"), "external");
}
}