@@ -33,7 +33,9 @@ void main() {
3333 plugin = ImagePickerPlugin ();
3434 });
3535
36- testWidgets ('Can select a file (Deprecated)' , (WidgetTester tester) async {
36+ testWidgets ('getImageFromSource can select a file' , (
37+ WidgetTester _,
38+ ) async {
3739 final html.FileUploadInputElement mockInput = html.FileUploadInputElement ();
3840
3941 final ImagePickerPluginTestOverrides overrides =
@@ -44,29 +46,9 @@ void main() {
4446 final ImagePickerPlugin plugin = ImagePickerPlugin (overrides: overrides);
4547
4648 // Init the pick file dialog...
47- final Future <PickedFile > file = plugin.pickFile ();
48-
49- // Mock the browser behavior of selecting a file...
50- mockInput.dispatchEvent (html.Event ('change' ));
51-
52- // Now the file should be available
53- expect (file, completes);
54- // And readable
55- expect ((await file).readAsBytes (), completion (isNotEmpty));
56- });
57-
58- testWidgets ('Can select a file' , (WidgetTester tester) async {
59- final html.FileUploadInputElement mockInput = html.FileUploadInputElement ();
60-
61- final ImagePickerPluginTestOverrides overrides =
62- ImagePickerPluginTestOverrides ()
63- ..createInputElement = ((_, __) => mockInput)
64- ..getMultipleFilesFromInput = ((_) => < html.File > [textFile]);
65-
66- final ImagePickerPlugin plugin = ImagePickerPlugin (overrides: overrides);
67-
68- // Init the pick file dialog...
69- final Future <XFile > image = plugin.getImage (source: ImageSource .camera);
49+ final Future <XFile ?> image = plugin.getImageFromSource (
50+ source: ImageSource .camera,
51+ );
7052
7153 // Mock the browser behavior of selecting a file...
7254 mockInput.dispatchEvent (html.Event ('change' ));
@@ -75,8 +57,9 @@ void main() {
7557 expect (image, completes);
7658
7759 // And readable
78- final XFile file = await image;
79- expect (file.readAsBytes (), completion (isNotEmpty));
60+ final XFile ? file = await image;
61+ expect (file, isNotNull);
62+ expect (file! .readAsBytes (), completion (isNotEmpty));
8063 expect (file.name, textFile.name);
8164 expect (file.length (), completion (textFile.size));
8265 expect (file.mimeType, textFile.type);
@@ -87,8 +70,9 @@ void main() {
8770 ));
8871 });
8972
90- testWidgets ('getMultiImage can select multiple files' ,
91- (WidgetTester tester) async {
73+ testWidgets ('getMultiImageWithOptions can select multiple files' , (
74+ WidgetTester _,
75+ ) async {
9276 final html.FileUploadInputElement mockInput = html.FileUploadInputElement ();
9377
9478 final ImagePickerPluginTestOverrides overrides =
@@ -100,7 +84,7 @@ void main() {
10084 final ImagePickerPlugin plugin = ImagePickerPlugin (overrides: overrides);
10185
10286 // Init the pick file dialog...
103- final Future <List <XFile >> files = plugin.getMultiImage ();
87+ final Future <List <XFile >> files = plugin.getMultiImageWithOptions ();
10488
10589 // Mock the browser behavior of selecting a file...
10690 mockInput.dispatchEvent (html.Event ('change' ));
@@ -118,8 +102,7 @@ void main() {
118102 expect (secondFile.length (), completion (secondTextFile.size));
119103 });
120104
121- testWidgets ('getMedia can select multiple files' ,
122- (WidgetTester tester) async {
105+ testWidgets ('getMedia can select multiple files' , (WidgetTester _) async {
123106 final html.FileUploadInputElement mockInput = html.FileUploadInputElement ();
124107
125108 final ImagePickerPluginTestOverrides overrides =
@@ -150,7 +133,72 @@ void main() {
150133 expect (secondFile.length (), completion (secondTextFile.size));
151134 });
152135
153- // There's no good way of detecting when the user has "aborted" the selection.
136+ group ('cancel event' , () {
137+ late html.FileUploadInputElement mockInput;
138+ late ImagePickerPluginTestOverrides overrides;
139+ late ImagePickerPlugin plugin;
140+
141+ setUp (() {
142+ mockInput = html.FileUploadInputElement ();
143+ overrides = ImagePickerPluginTestOverrides ()
144+ ..createInputElement = ((_, __) => mockInput)
145+ ..getMultipleFilesFromInput = ((_) => < html.File > [textFile]);
146+ plugin = ImagePickerPlugin (overrides: overrides);
147+ });
148+
149+ void mockCancel () {
150+ mockInput.dispatchEvent (html.Event ('cancel' ));
151+ }
152+
153+ testWidgets ('getFiles - returns empty list' , (WidgetTester _) async {
154+ final Future <List <XFile >> files = plugin.getFiles ();
155+ mockCancel ();
156+
157+ expect (files, completes);
158+ expect (await files, isEmpty);
159+ });
160+
161+ testWidgets ('getMedia - returns empty list' , (WidgetTester _) async {
162+ final Future <List <XFile >?> files = plugin.getMedia (
163+ options: const MediaOptions (
164+ allowMultiple: true ,
165+ ));
166+ mockCancel ();
167+
168+ expect (files, completes);
169+ expect (await files, isEmpty);
170+ });
171+
172+ testWidgets ('getMultiImageWithOptions - returns empty list' , (
173+ WidgetTester _,
174+ ) async {
175+ final Future <List <XFile >?> files = plugin.getMultiImageWithOptions ();
176+ mockCancel ();
177+
178+ expect (files, completes);
179+ expect (await files, isEmpty);
180+ });
181+
182+ testWidgets ('getImageFromSource - returns null' , (WidgetTester _) async {
183+ final Future <XFile ?> file = plugin.getImageFromSource (
184+ source: ImageSource .gallery,
185+ );
186+ mockCancel ();
187+
188+ expect (file, completes);
189+ expect (await file, isNull);
190+ });
191+
192+ testWidgets ('getVideo - returns null' , (WidgetTester _) async {
193+ final Future <XFile ?> file = plugin.getVideo (
194+ source: ImageSource .gallery,
195+ );
196+ mockCancel ();
197+
198+ expect (file, completes);
199+ expect (await file, isNull);
200+ });
201+ });
154202
155203 testWidgets ('computeCaptureAttribute' , (WidgetTester tester) async {
156204 expect (
@@ -208,4 +256,102 @@ void main() {
208256 expect (input.attributes, contains ('multiple' ));
209257 });
210258 });
259+
260+ group ('Deprecated methods' , () {
261+ late html.FileUploadInputElement mockInput;
262+ late ImagePickerPluginTestOverrides overrides;
263+ late ImagePickerPlugin plugin;
264+
265+ setUp (() {
266+ mockInput = html.FileUploadInputElement ();
267+ overrides = ImagePickerPluginTestOverrides ()
268+ ..createInputElement = ((_, __) => mockInput)
269+ ..getMultipleFilesFromInput = ((_) => < html.File > [textFile]);
270+ plugin = ImagePickerPlugin (overrides: overrides);
271+ });
272+
273+ void mockCancel () {
274+ mockInput.dispatchEvent (html.Event ('cancel' ));
275+ }
276+
277+ void mockChange () {
278+ mockInput.dispatchEvent (html.Event ('change' ));
279+ }
280+
281+ group ('getImage' , () {
282+ testWidgets ('can select a file' , (WidgetTester _) async {
283+ // ignore: deprecated_member_use
284+ final Future <XFile ?> image = plugin.getImage (
285+ source: ImageSource .camera,
286+ );
287+
288+ // Mock the browser behavior when selecting a file...
289+ mockChange ();
290+
291+ // Now the file should be available
292+ expect (image, completes);
293+
294+ // And readable
295+ final XFile ? file = await image;
296+ expect (file, isNotNull);
297+ expect (file! .readAsBytes (), completion (isNotEmpty));
298+ expect (file.name, textFile.name);
299+ expect (file.length (), completion (textFile.size));
300+ expect (file.mimeType, textFile.type);
301+ expect (
302+ file.lastModified (),
303+ completion (
304+ DateTime .fromMillisecondsSinceEpoch (textFile.lastModified! ),
305+ ));
306+ });
307+
308+ testWidgets ('returns null when canceled' , (WidgetTester _) async {
309+ // ignore: deprecated_member_use
310+ final Future <XFile ?> file = plugin.getImage (
311+ source: ImageSource .gallery,
312+ );
313+ mockCancel ();
314+
315+ expect (file, completes);
316+ expect (await file, isNull);
317+ });
318+ });
319+
320+ group ('getMultiImage' , () {
321+ testWidgets ('can select multiple files' , (WidgetTester _) async {
322+ // Override the returned files...
323+ overrides.getMultipleFilesFromInput =
324+ (_) => < html.File > [textFile, secondTextFile];
325+
326+ // ignore: deprecated_member_use
327+ final Future <List <XFile >> files = plugin.getMultiImage ();
328+
329+ // Mock the browser behavior of selecting a file...
330+ mockChange ();
331+
332+ // Now the file should be available
333+ expect (files, completes);
334+
335+ // And readable
336+ expect ((await files).first.readAsBytes (), completion (isNotEmpty));
337+
338+ // Peek into the second file...
339+ final XFile secondFile = (await files).elementAt (1 );
340+ expect (secondFile.readAsBytes (), completion (isNotEmpty));
341+ expect (secondFile.name, secondTextFile.name);
342+ expect (secondFile.length (), completion (secondTextFile.size));
343+ });
344+
345+ testWidgets ('returns an empty list when canceled' , (
346+ WidgetTester _,
347+ ) async {
348+ // ignore: deprecated_member_use
349+ final Future <List <XFile >?> files = plugin.getMultiImage ();
350+ mockCancel ();
351+
352+ expect (files, completes);
353+ expect (await files, isEmpty);
354+ });
355+ });
356+ });
211357}
0 commit comments