• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.messaging.ui.mediapicker;
18 
19 import android.hardware.Camera;
20 import android.hardware.Camera.CameraInfo;
21 import android.os.AsyncTask;
22 
23 import androidx.test.filters.SmallTest;
24 
25 import com.android.messaging.BugleTestCase;
26 import com.android.messaging.ui.mediapicker.CameraManager.CameraWrapper;
27 
28 import org.mockito.InOrder;
29 import org.mockito.Mockito;
30 
31 @SmallTest
32 public class CameraManagerTest extends BugleTestCase {
33     @Override
setUp()34     protected void setUp() throws Exception {
35         super.setUp();
36         // Force each test to set up a camera wrapper to match their needs
37         CameraManager.setCameraWrapper(null);
38     }
39 
40     @Override
tearDown()41     protected void tearDown() throws Exception {
42         super.tearDown();
43         MockCameraFactory.cleanup();
44     }
45 
testNoCameraDeviceGetInfo()46     public void testNoCameraDeviceGetInfo() {
47         CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper());
48         assertEquals(false, CameraManager.get().hasAnyCamera());
49         assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
50         boolean threw = false;
51         try {
52             CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
53         } catch (AssertionError e) {
54             threw = true;
55         }
56         if (!threw) {
57             fail("selectCamera should have thrown");
58         }
59     }
60 
testFrontFacingOnlyGetInfo()61     public void testFrontFacingOnlyGetInfo() {
62         CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
63                 MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT)
64         ));
65         assertEquals(true, CameraManager.get().hasAnyCamera());
66         assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
67         CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
68         assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
69         CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
70         assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
71     }
72 
testBackFacingOnlyGetInfo()73     public void testBackFacingOnlyGetInfo() {
74         CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
75                 MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
76         ));
77         assertEquals(true, CameraManager.get().hasAnyCamera());
78         assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
79         CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
80         assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
81         CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
82         assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
83     }
84 
testFrontAndBackGetInfo()85     public void testFrontAndBackGetInfo() {
86         CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
87                 MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT),
88                 MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
89         ));
90         assertEquals(true, CameraManager.get().hasAnyCamera());
91         assertEquals(true, CameraManager.get().hasFrontAndBackCamera());
92         CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
93         assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
94         CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
95         assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
96     }
97 
testSwapCamera()98     public void testSwapCamera() {
99         CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
100                 MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT),
101                 MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
102         ));
103         CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
104         assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
105         CameraManager.get().swapCamera();
106         assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
107     }
108 
testOpenCamera()109     public void testOpenCamera() {
110         Camera backCamera = MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK);
111         Camera frontCamera = MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT);
112         CameraWrapper wrapper = MockCameraFactory.createCameraWrapper(frontCamera, backCamera);
113         CameraManager.setCameraWrapper(wrapper);
114         CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
115         CameraManager.get().openCamera();
116         CameraManager.get().openCamera();
117         CameraManager.get().openCamera();
118         waitForPendingAsyncTasks();
119         Mockito.verify(wrapper, Mockito.never()).open(0);
120         Mockito.verify(wrapper).open(1);
121         Mockito.verify(wrapper, Mockito.never()).release(frontCamera);
122         Mockito.verify(wrapper, Mockito.never()).release(backCamera);
123         CameraManager.get().swapCamera();
124         waitForPendingAsyncTasks();
125         Mockito.verify(wrapper).open(0);
126         Mockito.verify(wrapper).open(1);
127         Mockito.verify(wrapper, Mockito.never()).release(frontCamera);
128         Mockito.verify(wrapper).release(backCamera);
129         InOrder inOrder = Mockito.inOrder(wrapper);
130         inOrder.verify(wrapper).open(1);
131         inOrder.verify(wrapper).release(backCamera);
132         inOrder.verify(wrapper).open(0);
133     }
134 
waitForPendingAsyncTasks()135     private void waitForPendingAsyncTasks() {
136         try {
137             final Object lockObject = new Object();
138 
139             new AsyncTask<Void, Void, Void>() {
140                 @Override
141                 protected Void doInBackground(Void... voids) {
142                     return null;
143                 }
144 
145                 @Override
146                 protected void onPostExecute(Void aVoid) {
147                     super.onPostExecute(aVoid);
148                     synchronized (lockObject) {
149                         lockObject.notifyAll();
150                     }
151                 }
152             }.execute();
153 
154             synchronized (lockObject) {
155                 lockObject.wait(500);
156             }
157         } catch (InterruptedException e) {
158             fail();
159         }
160     }
161 }
162