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 dart tests
  • Loading branch information
camsim99 committed Jan 6, 2023
commit 154eed6b1afb302041930dd1118b0b20d37c6b07
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'camera.dart';
import 'camera_info.dart';
import 'camera_selector.dart';
import 'camerax_library.pigeon.dart';
Expand All @@ -13,6 +14,7 @@ class AndroidCameraXCameraFlutterApis {
/// Creates a [AndroidCameraXCameraFlutterApis].
AndroidCameraXCameraFlutterApis({
JavaObjectFlutterApiImpl? javaObjectFlutterApi,
CameraFlutterApiImpl? cameraFlutterApi,
CameraInfoFlutterApiImpl? cameraInfoFlutterApi,
CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi,
ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi,
Expand All @@ -25,6 +27,7 @@ class AndroidCameraXCameraFlutterApis {
cameraSelectorFlutterApi ?? CameraSelectorFlutterApiImpl();
this.processCameraProviderFlutterApi = processCameraProviderFlutterApi ??
ProcessCameraProviderFlutterApiImpl();
this.cameraFlutterApi = cameraFlutterApi ?? CameraFlutterApiImpl();
}

static bool _haveBeenSetUp = false;
Expand All @@ -48,13 +51,17 @@ class AndroidCameraXCameraFlutterApis {
late final ProcessCameraProviderFlutterApiImpl
processCameraProviderFlutterApi;

/// Flutter Api for [Camera].
late final CameraFlutterApiImpl cameraFlutterApi;

/// Ensures all the Flutter APIs have been setup to receive calls from native code.
void ensureSetUp() {
if (!_haveBeenSetUp) {
JavaObjectFlutterApi.setup(javaObjectFlutterApi);
CameraInfoFlutterApi.setup(cameraInfoFlutterApi);
CameraSelectorFlutterApi.setup(cameraSelectorFlutterApi);
ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi);
CameraFlutterApi.setup(cameraFlutterApi);
_haveBeenSetUp = true;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.3.0 from annotations
// Mocks generated by Mockito 5.3.2 from annotations
// in camera_android_camerax/test/camera_info_test.dart.
// Do not manually edit this file.

Expand Down Expand Up @@ -29,6 +29,10 @@ class MockTestCameraInfoHostApi extends _i1.Mock

@override
int getSensorRotationDegrees(int? identifier) => (super.noSuchMethod(
Invocation.method(#getSensorRotationDegrees, [identifier]),
returnValue: 0) as int);
Invocation.method(
#getSensorRotationDegrees,
[identifier],
),
returnValue: 0,
) as int);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.3.0 from annotations
// Mocks generated by Mockito 5.3.2 from annotations
// in camera_android_camerax/test/camera_selector_test.dart.
// Do not manually edit this file.

Expand Down Expand Up @@ -28,11 +28,33 @@ class MockTestCameraSelectorHostApi extends _i1.Mock
}

@override
void create(int? identifier, int? lensFacing) =>
super.noSuchMethod(Invocation.method(#create, [identifier, lensFacing]),
returnValueForMissingStub: null);
void create(
int? identifier,
int? lensFacing,
) =>
super.noSuchMethod(
Invocation.method(
#create,
[
identifier,
lensFacing,
],
),
returnValueForMissingStub: null,
);
@override
List<int?> filter(int? identifier, List<int?>? cameraInfoIds) => (super
.noSuchMethod(Invocation.method(#filter, [identifier, cameraInfoIds]),
returnValue: <int?>[]) as List<int?>);
List<int?> filter(
int? identifier,
List<int?>? cameraInfoIds,
) =>
(super.noSuchMethod(
Invocation.method(
#filter,
[
identifier,
cameraInfoIds,
],
),
returnValue: <int?>[],
) as List<int?>);
}
29 changes: 29 additions & 0 deletions packages/camera/camera_android_camerax/test/camera_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// 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.

import 'package:camera_android_camerax/src/camera.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
TestWidgetsFlutterBinding.ensureInitialized();

group('Camera', () {
tearDown(() => TestProcessCameraProviderHostApi.setup(null));

test('flutterApiCreateTest', () {
final InstanceManager instanceManager = InstanceManager(
onWeakReferenceRemoved: (_) {},
);
final CameraFlutterApiImpl flutterApi =
CameraFlutterApiImpl(
instanceManager: instanceManager,
);

flutterApi.create(0);

expect(instanceManager.getInstanceWithWeakReference(0),
isA<Camera>());
});
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
// found in the LICENSE file.

import 'package:camera_android_camerax/src/camera_info.dart';
import 'package:camera_android_camerax/src/camera.dart';
import 'package:camera_android_camerax/src/instance_manager.dart';
import 'package:camera_android_camerax/src/process_camera_provider.dart';
import 'package:camera_android_camerax/src/use_case.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
Expand Down Expand Up @@ -78,6 +80,108 @@ void main() {
verify(mockApi.getAvailableCameraInfos(0));
});

test('bindToLifecycleTest', () async {
final MockTestProcessCameraProviderHostApi mockApi =
MockTestProcessCameraProviderHostApi();
TestProcessCameraProviderHostApi.setup(mockApi);

final InstanceManager instanceManager = InstanceManager(
onWeakReferenceRemoved: (_) {},
);
final ProcessCameraProvider processCameraProvider =
ProcessCameraProvider.detached(
instanceManager: instanceManager,
);
final CameraSelector fakeCameraSelector =
CameraSelector.detached(instanceManager: instanceManager);
final UseCase fakeUseCase = UseCase.detached(instanceManager: instanceManager);
final Camera camera = Camera.detached(instanceManager: instanceManager);

instanceManager.addHostCreatedInstance(
processCameraProvider,
0,
onCopy: (_) => ProcessCameraProvider.detached(),
);
instanceManager.addHostCreatedInstance(
fakeCameraSelector,
1,
onCopy: (_) => CameraSelector.detached(),
);
instanceManager.addHostCreatedInstance(
fakeUseCase,
2,
onCopy: (_) => UseCase.detached(),
);
instanceManager.addHostCreatedInstance(
camera,
3,
onCopy: (_) => Camera.detached(),
);

when(mockApi.bindToLifecycle(1, <int>[2])).thenReturn(3);
expect(await processCameraProvider.bindToLifecycle(fakeCameraSelector, <UseCase>[fakeUseCase]),
equals(fakeCamera));
verify(mockApi.bindToLifecycle(1, <int>[2]));
});

test('unbindTest', () async {
final MockTestProcessCameraProviderHostApi mockApi =
MockTestProcessCameraProviderHostApi();
TestProcessCameraProviderHostApi.setup(mockApi);

final InstanceManager instanceManager = InstanceManager(
onWeakReferenceRemoved: (_) {},
);
final ProcessCameraProvider processCameraProvider =
ProcessCameraProvider.detached(
instanceManager: instanceManager,
);
final UseCase fakeUseCase = UseCase.detached(instanceManager: instanceManager);

instanceManager.addHostCreatedInstance(
processCameraProvider,
0,
onCopy: (_) => ProcessCameraProvider.detached(),
);
instanceManager.addHostCreatedInstance(
fakeUseCase,
1,
onCopy: (_) => UseCase.detached(),
);

await processCameraProvider.unbind(<UseCase>[fakeUseCase]);
verify(mockApi.unbind(<int>[1]));
});

test('unbindAllTest', () async {
final MockTestProcessCameraProviderHostApi mockApi =
MockTestProcessCameraProviderHostApi();
TestProcessCameraProviderHostApi.setup(mockApi);

final InstanceManager instanceManager = InstanceManager(
onWeakReferenceRemoved: (_) {},
);
final ProcessCameraProvider processCameraProvider =
ProcessCameraProvider.detached(
instanceManager: instanceManager,
);
final UseCase fakeUseCase = UseCase.detached(instanceManager: instanceManager);

instanceManager.addHostCreatedInstance(
processCameraProvider,
0,
onCopy: (_) => ProcessCameraProvider.detached(),
);
instanceManager.addHostCreatedInstance(
fakeUseCase,
1,
onCopy: (_) => UseCase.detached(),
);

await processCameraProvider.unbind(<UseCase>[fakeUseCase]);
verify(mockApi.unbind(<int>[1]));
});

test('flutterApiCreateTest', () {
final InstanceManager instanceManager = InstanceManager(
onWeakReferenceRemoved: (_) {},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.3.0 from annotations
// Mocks generated by Mockito 5.3.2 from annotations
// in camera_android_camerax/test/process_camera_provider_test.dart.
// Do not manually edit this file.

Expand Down Expand Up @@ -30,11 +30,59 @@ class MockTestProcessCameraProviderHostApi extends _i1.Mock
}

@override
_i3.Future<int> getInstance() =>
(super.noSuchMethod(Invocation.method(#getInstance, []),
returnValue: _i3.Future<int>.value(0)) as _i3.Future<int>);
_i3.Future<int> getInstance() => (super.noSuchMethod(
Invocation.method(
#getInstance,
[],
),
returnValue: _i3.Future<int>.value(0),
) as _i3.Future<int>);
@override
List<int?> getAvailableCameraInfos(int? identifier) => (super.noSuchMethod(
Invocation.method(#getAvailableCameraInfos, [identifier]),
returnValue: <int?>[]) as List<int?>);
Invocation.method(
#getAvailableCameraInfos,
[identifier],
),
returnValue: <int?>[],
) as List<int?>);
@override
int bindToLifecycle(
int? identifier,
int? cameraSelectorIdentifier,
List<int?>? useCaseIds,
) =>
(super.noSuchMethod(
Invocation.method(
#bindToLifecycle,
[
identifier,
cameraSelectorIdentifier,
useCaseIds,
],
),
returnValue: 0,
) as int);
@override
void unbind(
int? identifier,
List<int?>? useCaseIds,
) =>
super.noSuchMethod(
Invocation.method(
#unbind,
[
identifier,
useCaseIds,
],
),
returnValueForMissingStub: null,
);
@override
void unbindAll(int? identifier) => super.noSuchMethod(
Invocation.method(
#unbindAll,
[identifier],
),
returnValueForMissingStub: null,
);
}