| // Copyright 2020 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. |
| |
| // @dart = 2.9 |
| |
| import 'dart:typed_data'; |
| import 'package:flutter_test/flutter_test.dart'; |
| import 'package:mockito/mockito.dart'; |
| import 'package:integration_test/integration_test.dart'; |
| import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; |
| import 'package:file_selector_web/file_selector_web.dart'; |
| import 'package:file_selector_web/src/dom_helper.dart'; |
| |
| void main() { |
| group('FileSelectorWeb', () { |
| IntegrationTestWidgetsFlutterBinding.ensureInitialized(); |
| MockDomHelper mockDomHelper; |
| FileSelectorWeb plugin; |
| |
| setUp(() { |
| mockDomHelper = MockDomHelper(); |
| plugin = FileSelectorWeb(domHelper: mockDomHelper); |
| }); |
| |
| group('openFile', () { |
| final mockFile = createXFile('1001', 'identity.png'); |
| |
| testWidgets('works', (WidgetTester _) async { |
| final typeGroup = XTypeGroup( |
| label: 'images', |
| extensions: ['jpg', 'jpeg'], |
| mimeTypes: ['image/png'], |
| webWildCards: ['image/*'], |
| ); |
| |
| when(mockDomHelper.getFiles( |
| accept: '.jpg,.jpeg,image/png,image/*', |
| multiple: false, |
| )).thenAnswer((_) async => [mockFile]); |
| |
| final file = await plugin.openFile(acceptedTypeGroups: [typeGroup]); |
| |
| expect(file.name, mockFile.name); |
| expect(await file.length(), 4); |
| expect(await file.readAsString(), '1001'); |
| expect(await file.lastModified(), isNotNull); |
| }); |
| }); |
| |
| group('openFiles', () { |
| final mockFile1 = createXFile('123456', 'file1.txt'); |
| final mockFile2 = createXFile('', 'file2.txt'); |
| |
| testWidgets('works', (WidgetTester _) async { |
| final typeGroup = XTypeGroup( |
| label: 'files', |
| extensions: ['.txt'], |
| ); |
| |
| when(mockDomHelper.getFiles( |
| accept: '.txt', |
| multiple: true, |
| )).thenAnswer((_) async => [mockFile1, mockFile2]); |
| |
| final files = await plugin.openFiles(acceptedTypeGroups: [typeGroup]); |
| |
| expect(files.length, 2); |
| |
| expect(files[0].name, mockFile1.name); |
| expect(await files[0].length(), 6); |
| expect(await files[0].readAsString(), '123456'); |
| expect(await files[0].lastModified(), isNotNull); |
| |
| expect(files[1].name, mockFile2.name); |
| expect(await files[1].length(), 0); |
| expect(await files[1].readAsString(), ''); |
| expect(await files[1].lastModified(), isNotNull); |
| }); |
| }); |
| }); |
| } |
| |
| class MockDomHelper extends Mock implements DomHelper {} |
| |
| XFile createXFile(String content, String name) { |
| final data = Uint8List.fromList(content.codeUnits); |
| return XFile.fromData(data, name: name, lastModified: DateTime.now()); |
| } |