From e9ae0bd820b6d747b300e0fcfc8085f1b15127b8 Mon Sep 17 00:00:00 2001 From: Juanjo Tugores Date: Sat, 6 Feb 2021 11:19:11 -0600 Subject: [PATCH] Remove leading dot and warn users about it --- .../file_selector/lib/file_selector.dart | 25 ++----------------- .../test/file_selector_test.dart | 18 ------------- .../src/types/x_type_group/x_type_group.dart | 25 +++++++++++++------ .../method_channel_file_selector_test.dart | 12 ++++----- .../test/x_type_group_test.dart | 9 ++++++- 5 files changed, 33 insertions(+), 56 deletions(-) diff --git a/packages/file_selector/file_selector/lib/file_selector.dart b/packages/file_selector/file_selector/lib/file_selector.dart index e5cb701cdb32..080eac4460ac 100644 --- a/packages/file_selector/file_selector/lib/file_selector.dart +++ b/packages/file_selector/file_selector/lib/file_selector.dart @@ -3,8 +3,9 @@ // found in the LICENSE file. import 'dart:async'; -import 'package:flutter/foundation.dart'; + import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; + export 'package:file_selector_platform_interface/file_selector_platform_interface.dart' show XFile, XTypeGroup; @@ -14,7 +15,6 @@ Future openFile({ String initialDirectory, String confirmButtonText, }) { - acceptedTypeGroups = _verifyTypeGroups(acceptedTypeGroups); return FileSelectorPlatform.instance.openFile( acceptedTypeGroups: acceptedTypeGroups, initialDirectory: initialDirectory, @@ -27,7 +27,6 @@ Future> openFiles({ String initialDirectory, String confirmButtonText, }) { - acceptedTypeGroups = _verifyTypeGroups(acceptedTypeGroups); return FileSelectorPlatform.instance.openFiles( acceptedTypeGroups: acceptedTypeGroups, initialDirectory: initialDirectory, @@ -41,7 +40,6 @@ Future getSavePath({ String suggestedName, String confirmButtonText, }) async { - acceptedTypeGroups = _verifyTypeGroups(acceptedTypeGroups); return FileSelectorPlatform.instance.getSavePath( acceptedTypeGroups: acceptedTypeGroups, initialDirectory: initialDirectory, @@ -57,22 +55,3 @@ Future getDirectoryPath({ return FileSelectorPlatform.instance.getDirectoryPath( initialDirectory: initialDirectory, confirmButtonText: confirmButtonText); } - -List _verifyTypeGroups(List groups) { - if (groups == null) return groups; - for (var i = 0; i < groups.length; i++) { - if (groups[i] == null || groups[i].extensions == null) continue; - for (var j = 0; j < groups[i].extensions.length; j++) { - if (groups[i].extensions[j] == null) continue; - if (groups[i].extensions[j].startsWith('.')) { - if (kDebugMode) { - print('acceptedTypeGroups[${i}].extensions[${j}]' - ' with value "${groups[i].extensions[j]} is invalid.' - ' Please remove the leading dot.'); - } - groups[i].extensions[j] = groups[i].extensions[j].substring(1); - } - } - } - return groups; -} diff --git a/packages/file_selector/file_selector/test/file_selector_test.dart b/packages/file_selector/file_selector/test/file_selector_test.dart index 516ead3606a1..15756cc2b622 100644 --- a/packages/file_selector/file_selector/test/file_selector_test.dart +++ b/packages/file_selector/file_selector/test/file_selector_test.dart @@ -79,24 +79,6 @@ void main() { final file = await openFile(acceptedTypeGroups: acceptedTypeGroups); expect(file, expectedFile); }); - - test('works with an extension with leading dot', () async { - final correctTypeGroups = [ - XTypeGroup(label: 'images', extensions: [ - 'jpg', - 'png', - ]), - ]; - final incorrectTypeGroups = [ - XTypeGroup(label: 'images', extensions: [ - '.jpg', - '.png', - ]), - ]; - - openFile(acceptedTypeGroups: incorrectTypeGroups); - verify(mock.openFile(acceptedTypeGroups: incorrectTypeGroups)); - }); }); group('openFiles', () { diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart b/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart index cc6732a6ff26..e6e8f0afe15b 100644 --- a/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart +++ b/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart @@ -1,6 +1,7 @@ // 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. +import 'package:flutter/foundation.dart'; /// A set of allowed XTypes class XTypeGroup { @@ -14,7 +15,22 @@ class XTypeGroup { this.mimeTypes, this.macUTIs, this.webWildCards, - }); + }) { + _verifyExtensions(); + } + + void _verifyExtensions() { + if (extensions == null) return; + for (var i = 0; i < extensions!.length; i++) { + if (!extensions![i].startsWith('.')) continue; + if (kDebugMode) { + print('extensions[${i}] with value "${extensions![i]}" is invalid.' + ' We are mutating the extensions list to remove the leading dot.' + ' Please fix it.'); + } + extensions![i] = extensions![i].substring(1); + } + } /// The 'name' or reference to this group of types final String? label; @@ -41,11 +57,4 @@ class XTypeGroup { 'webWildCards': webWildCards, }; } - - bool operator ==(o) => - label == o.label && - listEquals(extensions, o.extensions) && - listEquals(mimeTypes, o.mimeTypes) && - listEquals(macUTIs, o.macUTIs) && - listEquals(webWildCards, o.webWildCards); } diff --git a/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart b/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart index 99f9fe0f0e3b..c863ad361112 100644 --- a/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart +++ b/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart @@ -29,14 +29,14 @@ void main() { test('passes the accepted type groups correctly', () async { final group = XTypeGroup( label: 'text', - extensions: ['.txt'], + extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); final groupTwo = XTypeGroup( label: 'image', - extensions: ['.jpg'], + extensions: ['jpg'], mimeTypes: ['image/jpg'], macUTIs: ['public.image'], webWildCards: ['image/*']); @@ -90,14 +90,14 @@ void main() { test('passes the accepted type groups correctly', () async { final group = XTypeGroup( label: 'text', - extensions: ['.txt'], + extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); final groupTwo = XTypeGroup( label: 'image', - extensions: ['.jpg'], + extensions: ['jpg'], mimeTypes: ['image/jpg'], macUTIs: ['public.image'], webWildCards: ['image/*']); @@ -152,14 +152,14 @@ void main() { test('passes the accepted type groups correctly', () async { final group = XTypeGroup( label: 'text', - extensions: ['.txt'], + extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); final groupTwo = XTypeGroup( label: 'image', - extensions: ['.jpg'], + extensions: ['jpg'], mimeTypes: ['image/jpg'], macUTIs: ['public.image'], webWildCards: ['image/*']); diff --git a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart index bde89f46405d..142e62b06b07 100644 --- a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart +++ b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart @@ -9,7 +9,7 @@ void main() { group('XTypeGroup', () { test('toJSON() creates correct map', () { final label = 'test group'; - final extensions = ['.txt', '.jpg']; + final extensions = ['txt', 'jpg']; final mimeTypes = ['text/plain']; final macUTIs = ['public.plain-text']; final webWildCards = ['image/*']; @@ -41,5 +41,12 @@ void main() { expect(jsonMap['macUTIs'], null); expect(jsonMap['webWildCards'], null); }); + + test('Validates extensions have not leading dots', () { + final extensions = ['.txt', '.jpg']; + final group = XTypeGroup(extensions: extensions); + + expect(group.extensions, ['txt', 'jpg']); + }); }); }