blob: 1f21289afc2f9fc89c3211319186b402d5bc35d6 [file] [log] [blame]
TY Changeb840692019-10-17 19:20:11 +08001/*
2 * Copyright 2019 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 */
16package androidx.camera.core;
17
18import static com.google.common.truth.Truth.assertThat;
19
20import static org.mockito.Mockito.mock;
21
22import android.content.Context;
23import android.os.Build;
24
25import androidx.camera.testing.fakes.FakeCamera;
26import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager;
27import androidx.camera.testing.fakes.FakeCameraFactory;
28import androidx.camera.testing.fakes.FakeCameraInfoInternal;
29import androidx.camera.testing.fakes.FakeUseCaseConfig;
30import androidx.test.core.app.ApplicationProvider;
31import androidx.test.filters.SmallTest;
32
33import org.junit.After;
34import org.junit.Before;
35import org.junit.Test;
36import org.junit.runner.RunWith;
37import org.robolectric.RobolectricTestRunner;
38import org.robolectric.annotation.Config;
39import org.robolectric.annotation.internal.DoNotInstrument;
40
41import java.util.HashSet;
42import java.util.Set;
43import java.util.concurrent.ExecutionException;
44
45@SmallTest
46@RunWith(RobolectricTestRunner.class)
47@DoNotInstrument
48@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
49public class CameraSelectorTest {
50 private CameraInternal mRearCamera;
51 private CameraInternal mFrontCamera;
52 private static final String REAR_ID = "0";
53 private static final String FRONT_ID = "1";
54 private Set<String> mCameraIds = new HashSet<>();
55
56 @Before
57 public void setUp() throws ExecutionException, InterruptedException {
58 Context context = ApplicationProvider.getApplicationContext();
59 CameraDeviceSurfaceManager surfaceManager = new FakeCameraDeviceSurfaceManager();
60 ExtendableUseCaseConfigFactory defaultConfigFactory = new ExtendableUseCaseConfigFactory();
61 defaultConfigFactory.installDefaultProvider(FakeUseCaseConfig.class,
62 new ConfigProvider<FakeUseCaseConfig>() {
63 @Override
64 public FakeUseCaseConfig getConfig(LensFacing lensFacing) {
65 return new FakeUseCaseConfig.Builder().build();
66 }
67 });
68 FakeCameraFactory cameraFactory = new FakeCameraFactory();
69 mRearCamera = new FakeCamera(mock(CameraControlInternal.class),
70 new FakeCameraInfoInternal(0,
71 LensFacing.BACK));
72 cameraFactory.insertCamera(LensFacing.BACK, REAR_ID, () -> mRearCamera);
73 cameraFactory.setDefaultCameraIdForLensFacing(LensFacing.BACK, REAR_ID);
74 mFrontCamera = new FakeCamera(mock(CameraControlInternal.class),
75 new FakeCameraInfoInternal(0,
76 LensFacing.FRONT));
77 cameraFactory.insertCamera(LensFacing.FRONT, FRONT_ID, () -> mFrontCamera);
78 cameraFactory.setDefaultCameraIdForLensFacing(LensFacing.FRONT, FRONT_ID);
79 AppConfig.Builder appConfigBuilder =
80 new AppConfig.Builder()
81 .setCameraFactory(cameraFactory)
82 .setDeviceSurfaceManager(surfaceManager)
83 .setUseCaseConfigFactory(defaultConfigFactory);
84 CameraX.initialize(context, appConfigBuilder.build()).get();
85 mCameraIds.add(REAR_ID);
86 mCameraIds.add(FRONT_ID);
87 }
88
89 @After
90 public void tearDown() throws ExecutionException, InterruptedException {
91 CameraX.shutdown().get();
92 }
93
94 @Test
95 public void canSelectWithLensFacing() {
96 CameraSelector.Builder cameraSelectorBuilder = new CameraSelector.Builder();
97 cameraSelectorBuilder.requireLensFacing(LensFacing.BACK);
98 String result = cameraSelectorBuilder.build().select(mCameraIds);
99 assertThat(result).isEqualTo(REAR_ID);
100 }
101
102 @Test(expected = IllegalArgumentException.class)
103 public void exception_ifNoAvailableCamera() {
104 CameraSelector.Builder cameraSelectorBuilder = new CameraSelector.Builder();
105 cameraSelectorBuilder.requireLensFacing(LensFacing.BACK).requireLensFacing(
106 LensFacing.FRONT);
107 cameraSelectorBuilder.build().select(mCameraIds);
108 }
109
110 @Test
111 public void canGetLensFacing() {
112 CameraSelector.Builder cameraSelectorBuilder = new CameraSelector.Builder();
113 cameraSelectorBuilder.requireLensFacing(LensFacing.BACK);
114 assertThat(cameraSelectorBuilder.build().getLensFacing()).isEqualTo(LensFacing.BACK);
115 }
116
117 @Test(expected = IllegalStateException.class)
118 public void exception_ifGetLensFacingConflicted() {
119 CameraSelector.Builder cameraSelectorBuilder = new CameraSelector.Builder();
120 cameraSelectorBuilder.requireLensFacing(LensFacing.BACK).requireLensFacing(
121 LensFacing.FRONT);
122 cameraSelectorBuilder.build().getLensFacing();
123 }
Trevor McGuirefa740a02019-10-30 15:02:31 -0700124
125 @Test
126 public void canAppendFilters() {
127 CameraIdFilter filter0 = mock(CameraIdFilter.class);
128 CameraIdFilter filter1 = mock(CameraIdFilter.class);
129 CameraIdFilter filter2 = mock(CameraIdFilter.class);
130
131 CameraSelector cameraSelector = new CameraSelector.Builder()
132 .appendFilter(filter0)
133 .appendFilter(filter1)
134 .appendFilter(filter2)
135 .build();
136
137 assertThat(cameraSelector.getCameraFilterSet()).containsAtLeast(filter0, filter1, filter2);
138 }
TY Changeb840692019-10-17 19:20:11 +0800139}