summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java')
-rw-r--r--tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java b/tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java
new file mode 100644
index 0000000..951c694
--- /dev/null
+++ b/tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.ui.mediapicker;
+
+import android.hardware.Camera;
+import android.hardware.Camera.CameraInfo;
+import android.os.AsyncTask;
+import android.test.suitebuilder.annotation.SmallTest;
+import com.android.messaging.BugleTestCase;
+import com.android.messaging.ui.mediapicker.CameraManager.CameraWrapper;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+
+@SmallTest
+public class CameraManagerTest extends BugleTestCase {
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ // Force each test to set up a camera wrapper to match their needs
+ CameraManager.setCameraWrapper(null);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ MockCameraFactory.cleanup();
+ }
+
+ public void testNoCameraDeviceGetInfo() {
+ CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper());
+ assertEquals(false, CameraManager.get().hasAnyCamera());
+ assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
+ try {
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
+ fail("selectCamera should have thrown");
+ } catch (AssertionError e) {
+ }
+ }
+
+ public void testFrontFacingOnlyGetInfo() {
+ CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
+ MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT)
+ ));
+ assertEquals(true, CameraManager.get().hasAnyCamera());
+ assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
+ assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
+ assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
+ }
+
+ public void testBackFacingOnlyGetInfo() {
+ CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
+ MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
+ ));
+ assertEquals(true, CameraManager.get().hasAnyCamera());
+ assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
+ assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
+ assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
+ }
+
+ public void testFrontAndBackGetInfo() {
+ CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
+ MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT),
+ MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
+ ));
+ assertEquals(true, CameraManager.get().hasAnyCamera());
+ assertEquals(true, CameraManager.get().hasFrontAndBackCamera());
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
+ assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
+ assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
+ }
+
+ public void testSwapCamera() {
+ CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
+ MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT),
+ MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
+ ));
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
+ assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
+ CameraManager.get().swapCamera();
+ assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
+ }
+
+ public void testOpenCamera() {
+ Camera backCamera = MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK);
+ Camera frontCamera = MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT);
+ CameraWrapper wrapper = MockCameraFactory.createCameraWrapper(frontCamera, backCamera);
+ CameraManager.setCameraWrapper(wrapper);
+ CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
+ CameraManager.get().openCamera();
+ CameraManager.get().openCamera();
+ CameraManager.get().openCamera();
+ waitForPendingAsyncTasks();
+ Mockito.verify(wrapper, Mockito.never()).open(0);
+ Mockito.verify(wrapper).open(1);
+ Mockito.verify(wrapper, Mockito.never()).release(frontCamera);
+ Mockito.verify(wrapper, Mockito.never()).release(backCamera);
+ CameraManager.get().swapCamera();
+ waitForPendingAsyncTasks();
+ Mockito.verify(wrapper).open(0);
+ Mockito.verify(wrapper).open(1);
+ Mockito.verify(wrapper, Mockito.never()).release(frontCamera);
+ Mockito.verify(wrapper).release(backCamera);
+ InOrder inOrder = Mockito.inOrder(wrapper);
+ inOrder.verify(wrapper).open(1);
+ inOrder.verify(wrapper).release(backCamera);
+ inOrder.verify(wrapper).open(0);
+ }
+
+ private void waitForPendingAsyncTasks() {
+ try {
+ final Object lockObject = new Object();
+
+ new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected Void doInBackground(Void... voids) {
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ super.onPostExecute(aVoid);
+ synchronized (lockObject) {
+ lockObject.notifyAll();
+ }
+ }
+ }.execute();
+
+ synchronized (lockObject) {
+ lockObject.wait(500);
+ }
+ } catch (InterruptedException e) {
+ fail();
+ }
+ }
+}