Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add java tests
  • Loading branch information
camsim99 committed Jan 9, 2023
commit 8855f0096367cafc89bc27c33678c332ef6cf757
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import androidx.camera.core.Camera;
import androidx.camera.core.CameraInfo;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.Preview;
import androidx.camera.core.UseCase;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.core.content.ContextCompat;
Expand Down Expand Up @@ -95,7 +94,8 @@ public List<Long> getAvailableCameraInfos(@NonNull Long identifier) {

/**
* Binds specified {@code UseCase}s to the lifecycle of the {@code LifecycleOwner} that
* corresponds to this instance.
* corresponds to this instance and returns the instance of the {@code Camera} whose lifecycle
* that {@code LifecycleOwner} reflects.
*/
@Override
public Long bindToLifecycle(
Expand All @@ -111,20 +111,15 @@ public Long bindToLifecycle(
useCases[i] = (UseCase) instanceManager.getInstance(((Number) useCaseIds.get(i)).longValue());
}

if (lifecycleOwner != null) {
Camera camera =
processCameraProvider.bindToLifecycle(
(LifecycleOwner) lifecycleOwner, cameraSelector, useCases);
Camera camera =
processCameraProvider.bindToLifecycle(
(LifecycleOwner) lifecycleOwner, cameraSelector, useCases);

final CameraFlutterApiImpl camraFlutterApi =
new CameraFlutterApiImpl(binaryMessenger, instanceManager);
camraFlutterApi.create(camera, result -> {});
final CameraFlutterApiImpl camraFlutterApi =
new CameraFlutterApiImpl(binaryMessenger, instanceManager);
camraFlutterApi.create(camera, result -> {});

return instanceManager.getIdentifierForStrongReference(camera);
} else {
// TODO(camsim99): Throw error here?
return null;
}
return instanceManager.getIdentifierForStrongReference(camera);
}

@Override
Expand All @@ -133,7 +128,7 @@ public void unbind(@NonNull Long identifier, @NonNull List<Long> useCaseIds) {
(ProcessCameraProvider) instanceManager.getInstance(identifier);
UseCase[] useCases = new UseCase[useCaseIds.size()];
for (int i = 0; i < useCaseIds.size(); i++) {
useCases[i] = (Preview) instanceManager.getInstance(((Number) useCaseIds.get(i)).longValue());
useCases[i] = (UseCase) instanceManager.getInstance(((Number) useCaseIds.get(i)).longValue());
}
processCameraProvider.unbind(useCases);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// 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.camerax;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;

import androidx.camera.core.Camera;
import io.flutter.plugin.common.BinaryMessenger;
import java.util.Objects;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class CameraTest {
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();

@Mock public BinaryMessenger mockBinaryMessenger;
@Mock public Camera camera;

InstanceManager testInstanceManager;

@Before
public void setUp() {
testInstanceManager = InstanceManager.open(identifier -> {});
}

@Test
public void flutterApiCreateTest() {
final CameraFlutterApiImpl spyFlutterApi =
spy(new CameraFlutterApiImpl(mockBinaryMessenger, testInstanceManager));

spyFlutterApi.create(camera, reply -> {});

final long identifier =
Objects.requireNonNull(testInstanceManager.getIdentifierForStrongReference(camera));
verify(spyFlutterApi).create(eq(identifier), any());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,12 @@
import static org.mockito.Mockito.when;

import android.content.Context;
import androidx.camera.core.Camera;
import androidx.camera.core.CameraInfo;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.UseCase;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.lifecycle.LifecycleOwner;
import androidx.test.core.app.ApplicationProvider;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
Expand Down Expand Up @@ -99,6 +103,58 @@ public void getAvailableCameraInfosTest() {
verify(processCameraProvider).getAvailableCameraInfos();
}

@Test
public void bindToLifecycleTest() {
final ProcessCameraProviderHostApiImpl processCameraProviderHostApi =
new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context);
final Camera mockCamera = mock(Camera.class);
final CameraSelector mockCameraSelector = mock(CameraSelector.class);
final UseCase mockUseCase = mock(UseCase.class);
UseCase[] mockUseCases = new UseCase[] {mockUseCase};

LifecycleOwner mockLifecycleOwner = mock(LifecycleOwner.class);
processCameraProviderHostApi.setLifecycleOwner(mockLifecycleOwner);

testInstanceManager.addDartCreatedInstance(processCameraProvider, 0);
testInstanceManager.addDartCreatedInstance(mockCameraSelector, 1);
testInstanceManager.addDartCreatedInstance(mockUseCase, 2);
testInstanceManager.addDartCreatedInstance(mockCamera, 3);

when(processCameraProvider.bindToLifecycle(
mockLifecycleOwner, mockCameraSelector, mockUseCases))
.thenReturn(mockCamera);

assertEquals(
processCameraProviderHostApi.bindToLifecycle(0L, 1L, Arrays.asList(2L)), Long.valueOf(3));
verify(processCameraProvider)
.bindToLifecycle(mockLifecycleOwner, mockCameraSelector, mockUseCases);
}

@Test
public void unbindTest() {
final ProcessCameraProviderHostApiImpl processCameraProviderHostApi =
new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context);
final UseCase mockUseCase = mock(UseCase.class);
UseCase[] mockUseCases = new UseCase[] {mockUseCase};

testInstanceManager.addDartCreatedInstance(processCameraProvider, 0);
testInstanceManager.addDartCreatedInstance(mockUseCase, 1);

processCameraProviderHostApi.unbind(0L, Arrays.asList(1L));
verify(processCameraProvider).unbind(mockUseCases);
}

@Test
public void unbindAllTest() {
final ProcessCameraProviderHostApiImpl processCameraProviderHostApi =
new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context);

testInstanceManager.addDartCreatedInstance(processCameraProvider, 0);

processCameraProviderHostApi.unbindAll(0L);
verify(processCameraProvider).unbindAll();
}

@Test
public void flutterApiCreateTest() {
final ProcessCameraProviderFlutterApiImpl spyFlutterApi =
Expand Down