Skip to content
Merged
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
Updates tests to use new methods.
* Moves tests of old methods to a "Deprecated" group so they can be
  cleaned up easily later.
  • Loading branch information
ditman committed Aug 4, 2023
commit c4792e8dcbe311d968bf92496368bcc0d75ed29e
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ void main() {
plugin = ImagePickerPlugin();
});

testWidgets('Can select a file', (WidgetTester tester) async {
testWidgets('getImageFromSource can select a file', (
WidgetTester _,
) async {
final html.FileUploadInputElement mockInput = html.FileUploadInputElement();

final ImagePickerPluginTestOverrides overrides =
Expand All @@ -44,7 +46,9 @@ void main() {
final ImagePickerPlugin plugin = ImagePickerPlugin(overrides: overrides);

// Init the pick file dialog...
final Future<XFile?> image = plugin.getImage(source: ImageSource.camera);
final Future<XFile?> image = plugin.getImageFromSource(
source: ImageSource.camera,
);

// Mock the browser behavior of selecting a file...
mockInput.dispatchEvent(html.Event('change'));
Expand All @@ -66,8 +70,9 @@ void main() {
));
});

testWidgets('getMultiImage can select multiple files',
(WidgetTester tester) async {
testWidgets('getMultiImageWithOptions can select multiple files', (
WidgetTester _,
) async {
final html.FileUploadInputElement mockInput = html.FileUploadInputElement();

final ImagePickerPluginTestOverrides overrides =
Expand All @@ -79,7 +84,7 @@ void main() {
final ImagePickerPlugin plugin = ImagePickerPlugin(overrides: overrides);

// Init the pick file dialog...
final Future<List<XFile>> files = plugin.getMultiImage();
final Future<List<XFile>> files = plugin.getMultiImageWithOptions();

// Mock the browser behavior of selecting a file...
mockInput.dispatchEvent(html.Event('change'));
Expand All @@ -97,8 +102,7 @@ void main() {
expect(secondFile.length(), completion(secondTextFile.size));
});

testWidgets('getMedia can select multiple files',
(WidgetTester tester) async {
testWidgets('getMedia can select multiple files', (WidgetTester _) async {
final html.FileUploadInputElement mockInput = html.FileUploadInputElement();

final ImagePickerPluginTestOverrides overrides =
Expand Down Expand Up @@ -165,16 +169,18 @@ void main() {
expect(await files, isEmpty);
});

testWidgets('getMultiImage - returns empty list', (WidgetTester _) async {
final Future<List<XFile>?> files = plugin.getMultiImage();
testWidgets('getMultiImageWithOptions - returns empty list', (
WidgetTester _,
) async {
final Future<List<XFile>?> files = plugin.getMultiImageWithOptions();
mockCancel();

expect(files, completes);
expect(await files, isEmpty);
});

testWidgets('getImage - returns null', (WidgetTester _) async {
final Future<XFile?> file = plugin.getImage(
testWidgets('getImageFromSource - returns null', (WidgetTester _) async {
final Future<XFile?> file = plugin.getImageFromSource(
source: ImageSource.gallery,
);
mockCancel();
Expand Down Expand Up @@ -250,4 +256,102 @@ void main() {
expect(input.attributes, contains('multiple'));
});
});

group('Deprecated methods', () {
late html.FileUploadInputElement mockInput;
late ImagePickerPluginTestOverrides overrides;
late ImagePickerPlugin plugin;

setUp(() {
mockInput = html.FileUploadInputElement();
overrides = ImagePickerPluginTestOverrides()
..createInputElement = ((_, __) => mockInput)
..getMultipleFilesFromInput = ((_) => <html.File>[textFile]);
plugin = ImagePickerPlugin(overrides: overrides);
});

void mockCancel() {
mockInput.dispatchEvent(html.Event('cancel'));
}

void mockChange() {
mockInput.dispatchEvent(html.Event('change'));
}

group('getImage', () {
testWidgets('can select a file', (WidgetTester _) async {
// ignore: deprecated_member_use
final Future<XFile?> image = plugin.getImage(
source: ImageSource.camera,
);

// Mock the browser behavior when selecting a file...
mockChange();

// Now the file should be available
expect(image, completes);

// And readable
final XFile? file = await image;
expect(file, isNotNull);
expect(file!.readAsBytes(), completion(isNotEmpty));
expect(file.name, textFile.name);
expect(file.length(), completion(textFile.size));
expect(file.mimeType, textFile.type);
expect(
file.lastModified(),
completion(
DateTime.fromMillisecondsSinceEpoch(textFile.lastModified!),
));
});

testWidgets('returns null when canceled', (WidgetTester _) async {
// ignore: deprecated_member_use
final Future<XFile?> file = plugin.getImage(
source: ImageSource.gallery,
);
mockCancel();

expect(file, completes);
expect(await file, isNull);
});
});

group('getMultiImage', () {
testWidgets('can select multiple files', (WidgetTester _) async {
// Override the returned files...
overrides.getMultipleFilesFromInput =
(_) => <html.File>[textFile, secondTextFile];

// ignore: deprecated_member_use
final Future<List<XFile>> files = plugin.getMultiImage();

// Mock the browser behavior of selecting a file...
mockChange();

// Now the file should be available
expect(files, completes);

// And readable
expect((await files).first.readAsBytes(), completion(isNotEmpty));

// Peek into the second file...
final XFile secondFile = (await files).elementAt(1);
expect(secondFile.readAsBytes(), completion(isNotEmpty));
expect(secondFile.name, secondTextFile.name);
expect(secondFile.length(), completion(secondTextFile.size));
});

testWidgets('returns an empty list when canceled', (
WidgetTester _,
) async {
// ignore: deprecated_member_use
final Future<List<XFile>?> files = plugin.getMultiImage();
mockCancel();

expect(files, completes);
expect(await files, isEmpty);
});
});
});
}