blob: 28eae8eaa46d9c4dd22da00667fe9d09a66c03c1 [file] [log] [blame]
// Copyright 2019 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:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:image_picker/image_picker.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
group('$ImagePicker', () {
const MethodChannel channel =
MethodChannel('plugins.flutter.io/image_picker');
final List<MethodCall> log = <MethodCall>[];
setUp(() {
channel.setMockMethodCallHandler((MethodCall methodCall) async {
log.add(methodCall);
return '';
});
log.clear();
});
group('#pickImage', () {
test('passes the image source argument correctly', () async {
await ImagePicker.pickImage(source: ImageSource.camera);
await ImagePicker.pickImage(source: ImageSource.gallery);
expect(
log,
<Matcher>[
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 0,
'maxWidth': null,
'maxHeight': null,
'imageQuality': null
}),
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 1,
'maxWidth': null,
'maxHeight': null,
'imageQuality': null
}),
],
);
});
test('passes the width and height arguments correctly', () async {
await ImagePicker.pickImage(source: ImageSource.camera);
await ImagePicker.pickImage(
source: ImageSource.camera,
maxWidth: 10.0,
);
await ImagePicker.pickImage(
source: ImageSource.camera,
maxHeight: 10.0,
);
await ImagePicker.pickImage(
source: ImageSource.camera,
maxWidth: 10.0,
maxHeight: 20.0,
);
await ImagePicker.pickImage(
source: ImageSource.camera, maxWidth: 10.0, imageQuality: 70);
await ImagePicker.pickImage(
source: ImageSource.camera, maxHeight: 10.0, imageQuality: 70);
await ImagePicker.pickImage(
source: ImageSource.camera,
maxWidth: 10.0,
maxHeight: 20.0,
imageQuality: 70);
expect(
log,
<Matcher>[
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 0,
'maxWidth': null,
'maxHeight': null,
'imageQuality': null
}),
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 0,
'maxWidth': 10.0,
'maxHeight': null,
'imageQuality': null
}),
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 0,
'maxWidth': null,
'maxHeight': 10.0,
'imageQuality': null
}),
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 0,
'maxWidth': 10.0,
'maxHeight': 20.0,
'imageQuality': null
}),
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 0,
'maxWidth': 10.0,
'maxHeight': null,
'imageQuality': 70
}),
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 0,
'maxWidth': null,
'maxHeight': 10.0,
'imageQuality': 70
}),
isMethodCall('pickImage', arguments: <String, dynamic>{
'source': 0,
'maxWidth': 10.0,
'maxHeight': 20.0,
'imageQuality': 70
}),
],
);
});
test('does not accept a negative width or height argument', () {
expect(
ImagePicker.pickImage(source: ImageSource.camera, maxWidth: -1.0),
throwsArgumentError,
);
expect(
ImagePicker.pickImage(source: ImageSource.camera, maxHeight: -1.0),
throwsArgumentError,
);
});
test('handles a null image path response gracefully', () async {
channel.setMockMethodCallHandler((MethodCall methodCall) => null);
expect(
await ImagePicker.pickImage(source: ImageSource.gallery), isNull);
expect(await ImagePicker.pickImage(source: ImageSource.camera), isNull);
});
});
group('#pickVideo', () {
test('passes the image source argument correctly', () async {
await ImagePicker.pickVideo(source: ImageSource.camera);
await ImagePicker.pickVideo(source: ImageSource.gallery);
expect(
log,
<Matcher>[
isMethodCall('pickVideo', arguments: <String, dynamic>{
'source': 0,
}),
isMethodCall('pickVideo', arguments: <String, dynamic>{
'source': 1,
}),
],
);
});
test('handles a null image path response gracefully', () async {
channel.setMockMethodCallHandler((MethodCall methodCall) => null);
expect(
await ImagePicker.pickVideo(source: ImageSource.gallery), isNull);
expect(await ImagePicker.pickVideo(source: ImageSource.camera), isNull);
});
});
group('#retrieveLostData', () {
test('retrieveLostData get success response', () async {
channel.setMockMethodCallHandler((MethodCall methodCall) async {
return <String, String>{
'type': 'image',
'path': '/example/path',
};
});
final LostDataResponse response = await ImagePicker.retrieveLostData();
expect(response.type, RetrieveType.image);
expect(response.file.path, '/example/path');
});
test('retrieveLostData get error response', () async {
channel.setMockMethodCallHandler((MethodCall methodCall) async {
return <String, String>{
'type': 'video',
'errorCode': 'test_error_code',
'errorMessage': 'test_error_message',
};
});
final LostDataResponse response = await ImagePicker.retrieveLostData();
expect(response.type, RetrieveType.video);
expect(response.exception.code, 'test_error_code');
expect(response.exception.message, 'test_error_message');
});
test('retrieveLostData get null response', () async {
channel.setMockMethodCallHandler((MethodCall methodCall) async {
return null;
});
expect((await ImagePicker.retrieveLostData()).isEmpty, true);
});
test('retrieveLostData get both path and error should throw', () async {
channel.setMockMethodCallHandler((MethodCall methodCall) async {
return <String, String>{
'type': 'video',
'errorCode': 'test_error_code',
'errorMessage': 'test_error_message',
'path': '/example/path',
};
});
expect(ImagePicker.retrieveLostData(), throwsAssertionError);
});
});
});
}