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 
22 import com.android.messaging.ui.mediapicker.CameraManager.CameraWrapper;
23 import org.mockito.Mockito;
24 import org.mockito.invocation.InvocationOnMock;
25 import org.mockito.stubbing.Answer;
26 
27 import java.util.HashMap;
28 import java.util.Map;
29 
30 class MockCameraFactory {
31     private static Map<Camera, CameraInfo> sCameraInfos = new HashMap<Camera, CameraInfo>();
32 
createCamera(int facing)33     public static Camera createCamera(int facing) {
34         Camera camera = Mockito.mock(Camera.class);
35         CameraInfo cameraInfo = new CameraInfo();
36         cameraInfo.facing = facing;
37         sCameraInfos.put(camera, cameraInfo);
38         return camera;
39     }
40 
getCameraInfo(Camera camera, CameraInfo outCameraInfo)41     public static void getCameraInfo(Camera camera, CameraInfo outCameraInfo) {
42         CameraInfo cameraInfo = sCameraInfos.get(camera);
43         outCameraInfo.facing = cameraInfo.facing;
44         outCameraInfo.orientation = cameraInfo.orientation;
45         outCameraInfo.canDisableShutterSound = cameraInfo.canDisableShutterSound;
46     }
47 
createCameraWrapper(final Camera... cameras)48     public static CameraWrapper createCameraWrapper(final Camera... cameras) {
49         CameraWrapper wrapper = Mockito.mock(CameraWrapper.class);
50         Mockito.when(wrapper.getNumberOfCameras()).thenReturn(cameras.length);
51         Mockito.when(wrapper.open(Mockito.anyInt())).then(new Answer<Camera>() {
52             @Override
53             public Camera answer(InvocationOnMock invocation) {
54                 return cameras[(Integer) invocation.getArguments()[0]];
55             }
56         });
57         Mockito.doAnswer(new Answer<Void>() {
58             @Override
59             public Void answer(InvocationOnMock invocation) throws Throwable {
60                 getCameraInfo(
61                         cameras[(Integer) invocation.getArguments()[0]],
62                         (CameraInfo) invocation.getArguments()[1]
63                 );
64                 return null;
65             }
66         }).when(wrapper).getCameraInfo(Mockito.anyInt(), Mockito.any(CameraInfo.class));
67         return wrapper;
68     }
69 
cleanup()70     public static void cleanup() {
71         sCameraInfos.clear();
72     }
73 }
74