@@ -33,7 +33,9 @@ void main() {
33
33
plugin = ImagePickerPlugin ();
34
34
});
35
35
36
- testWidgets ('Can select a file (Deprecated)' , (WidgetTester tester) async {
36
+ testWidgets ('getImageFromSource can select a file' , (
37
+ WidgetTester _,
38
+ ) async {
37
39
final html.FileUploadInputElement mockInput = html.FileUploadInputElement ();
38
40
39
41
final ImagePickerPluginTestOverrides overrides =
@@ -44,29 +46,9 @@ void main() {
44
46
final ImagePickerPlugin plugin = ImagePickerPlugin (overrides: overrides);
45
47
46
48
// 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
+ );
70
52
71
53
// Mock the browser behavior of selecting a file...
72
54
mockInput.dispatchEvent (html.Event ('change' ));
@@ -75,8 +57,9 @@ void main() {
75
57
expect (image, completes);
76
58
77
59
// 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));
80
63
expect (file.name, textFile.name);
81
64
expect (file.length (), completion (textFile.size));
82
65
expect (file.mimeType, textFile.type);
@@ -87,8 +70,9 @@ void main() {
87
70
));
88
71
});
89
72
90
- testWidgets ('getMultiImage can select multiple files' ,
91
- (WidgetTester tester) async {
73
+ testWidgets ('getMultiImageWithOptions can select multiple files' , (
74
+ WidgetTester _,
75
+ ) async {
92
76
final html.FileUploadInputElement mockInput = html.FileUploadInputElement ();
93
77
94
78
final ImagePickerPluginTestOverrides overrides =
@@ -100,7 +84,7 @@ void main() {
100
84
final ImagePickerPlugin plugin = ImagePickerPlugin (overrides: overrides);
101
85
102
86
// Init the pick file dialog...
103
- final Future <List <XFile >> files = plugin.getMultiImage ();
87
+ final Future <List <XFile >> files = plugin.getMultiImageWithOptions ();
104
88
105
89
// Mock the browser behavior of selecting a file...
106
90
mockInput.dispatchEvent (html.Event ('change' ));
@@ -118,8 +102,7 @@ void main() {
118
102
expect (secondFile.length (), completion (secondTextFile.size));
119
103
});
120
104
121
- testWidgets ('getMedia can select multiple files' ,
122
- (WidgetTester tester) async {
105
+ testWidgets ('getMedia can select multiple files' , (WidgetTester _) async {
123
106
final html.FileUploadInputElement mockInput = html.FileUploadInputElement ();
124
107
125
108
final ImagePickerPluginTestOverrides overrides =
@@ -150,7 +133,72 @@ void main() {
150
133
expect (secondFile.length (), completion (secondTextFile.size));
151
134
});
152
135
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
+ });
154
202
155
203
testWidgets ('computeCaptureAttribute' , (WidgetTester tester) async {
156
204
expect (
@@ -208,4 +256,102 @@ void main() {
208
256
expect (input.attributes, contains ('multiple' ));
209
257
});
210
258
});
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
+ });
211
357
}
0 commit comments