From 441dea1a47c43f79760c6e3f0ec8635186e3509c Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Wed, 2 Feb 2022 14:56:05 +0100 Subject: [PATCH 1/5] Refactored tests to expose private interface in separate test header. Refactored the existing unit tests to expose private interfaces in a separate test header instead of an inline interface. This was first introduced in the google_sign_in plugin (#4157) and after that also applied in the camera plugin (#4426) and the webview_flutter plugin (#4480). --- packages/image_picker/image_picker/CHANGELOG.md | 4 ++++ .../ios/RunnerTests/ImagePickerPluginTests.m | 7 +------ .../ios/Classes/FLTImagePickerPlugin.m | 3 +-- .../ios/Classes/FLTImagePickerPlugin_Test.h | 16 ++++++++++++++++ .../ios/Classes/ImagePickerPlugin.modulemap | 10 ++++++++++ .../ios/Classes/image_picker-umbrella.h | 10 ++++++++++ .../image_picker/ios/image_picker.podspec | 3 ++- packages/image_picker/image_picker/pubspec.yaml | 2 +- 8 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h create mode 100644 packages/image_picker/image_picker/ios/Classes/ImagePickerPlugin.modulemap create mode 100644 packages/image_picker/image_picker/ios/Classes/image_picker-umbrella.h diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 1712aa0d3bab..0e33c343e1a2 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.4+7 + +* Refactores unit test to expose private interface via a separate test header instead of the inline declaration. + ## 0.8.4+6 * Fixes minor type issues in iOS implementation. diff --git a/packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerPluginTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerPluginTests.m index cc901f084071..bcaf2d1da37b 100644 --- a/packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerPluginTests.m +++ b/packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerPluginTests.m @@ -5,6 +5,7 @@ #import "ImagePickerTestImages.h" @import image_picker; +@import image_picker.Test; @import XCTest; #import @@ -21,12 +22,6 @@ - (UIViewController *)presentedViewController { @end -@interface FLTImagePickerPlugin (Test) -@property(copy, nonatomic) FlutterResult result; -- (void)handleSavedPathList:(NSMutableArray *)pathList; -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker; -@end - @interface ImagePickerPluginTests : XCTestCase @property(readonly, nonatomic) id mockUIImagePicker; @property(readonly, nonatomic) id mockAVCaptureDevice; diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m index 65a5fb8a71dd..1301398fb0c1 100644 --- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m +++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m @@ -3,6 +3,7 @@ // found in the LICENSE file. #import "FLTImagePickerPlugin.h" +#import "FLTImagePickerPlugin_Test.h" #import #import @@ -30,8 +31,6 @@ @interface FLTImagePickerPlugin () -@property(copy, nonatomic) FlutterResult result; - @property(assign, nonatomic) int maxImagesAllowed; @property(copy, nonatomic) NSDictionary *arguments; diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h new file mode 100644 index 000000000000..5dd3a7439148 --- /dev/null +++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h @@ -0,0 +1,16 @@ +// Copyright 2013 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. + +// This header is available in the Test module. Import via "@import image_picker.Test;" + +#import + +/// Methods exposed for unit testing. +@interface FLTImagePickerPlugin () + +@property(copy, nonatomic) FlutterResult result; +- (void)handleSavedPathList:(NSArray *)pathList; +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker; + +@end diff --git a/packages/image_picker/image_picker/ios/Classes/ImagePickerPlugin.modulemap b/packages/image_picker/image_picker/ios/Classes/ImagePickerPlugin.modulemap new file mode 100644 index 000000000000..532b6ad20a4a --- /dev/null +++ b/packages/image_picker/image_picker/ios/Classes/ImagePickerPlugin.modulemap @@ -0,0 +1,10 @@ +framework module image_picker { + umbrella header "image_picker-umbrella.h" + + export * + module * { export * } + + explicit module Test { + header "FLTImagePickerPlugin_Test.h" + } +} diff --git a/packages/image_picker/image_picker/ios/Classes/image_picker-umbrella.h b/packages/image_picker/image_picker/ios/Classes/image_picker-umbrella.h new file mode 100644 index 000000000000..b55c4ccd03d3 --- /dev/null +++ b/packages/image_picker/image_picker/ios/Classes/image_picker-umbrella.h @@ -0,0 +1,10 @@ +// Copyright 2013 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 +#import +#import +#import +#import +#import diff --git a/packages/image_picker/image_picker/ios/image_picker.podspec b/packages/image_picker/image_picker/ios/image_picker.podspec index a2bba5c5397b..2a10b1ce01a8 100644 --- a/packages/image_picker/image_picker/ios/image_picker.podspec +++ b/packages/image_picker/image_picker/ios/image_picker.podspec @@ -14,8 +14,9 @@ Downloaded by pub (not CocoaPods). s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } s.source = { :http => 'https://github.com/flutter/plugins/tree/main/packages/image_picker' } s.documentation_url = 'https://pub.dev/packages/image_picker' - s.source_files = 'Classes/**/*' + s.source_files = 'Classes/**/*.{h,m}' s.public_header_files = 'Classes/**/*.h' + s.module_map = 'Classes/ImagePickerPlugin.modulemap' s.dependency 'Flutter' s.platform = :ios, '9.0' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index c072244263d0..7142d8238b30 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.4+6 +version: 0.8.4+7 environment: sdk: ">=2.14.0 <3.0.0" From 6fc92d6def4d3d4835a2c31f8d008b73b0253703 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Wed, 2 Feb 2022 21:50:18 +0100 Subject: [PATCH 2/5] Adds declaration comments. --- .../ios/Classes/FLTImagePickerPlugin_Test.h | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h index 5dd3a7439148..ccdf5d8c1702 100644 --- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h +++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h @@ -6,11 +6,37 @@ #import -/// Methods exposed for unit testing. +/** Methods exposed for unit testing. */ @interface FLTImagePickerPlugin () +/** The Flutter result callback use to report results back to Flutter App. */ @property(copy, nonatomic) FlutterResult result; + +/** + * Applies NSMutableArray on the FLutterResult. + * + * NSString must be returned by FlutterResult if the single image + * mode is active. It is checked by maxImagesAllowed and + * returns the first object of the pathlist. + * + * NSMutableArray must be returned by FlutterResult if the multi-image + * mode is active. After the pathlist count is checked then it returns + * the pathlist. + * + * @param pathList that should be applied to FlutterResult. + */ - (void)handleSavedPathList:(NSArray *)pathList; -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker; + +/** + * Tells the delegate that the user cancelled the pick operation. + * + * Your delegate’s implementation of this method should dismiss the picker view + * by calling the dismissModalViewControllerAnimated: method of the parent + * view controller. + * + * Implementation of this method is optional, but expected. + * + * @param picker The controller object managing the image picker interface. + */- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker; @end From 3a6d1b5b694118a122514e01f918e839761b98de Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Wed, 2 Feb 2022 22:03:51 +0100 Subject: [PATCH 3/5] Fix spelling error in changelog --- packages/image_picker/image_picker/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 0e33c343e1a2..3dbf2c51690e 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.8.4+7 -* Refactores unit test to expose private interface via a separate test header instead of the inline declaration. +* Refactors unit test to expose private interface via a separate test header instead of the inline declaration. ## 0.8.4+6 From 69a41d8785797f8daee2845a7864b53513092d62 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Thu, 3 Feb 2022 08:55:01 +0100 Subject: [PATCH 4/5] Fix formatting --- .../image_picker/ios/Classes/FLTImagePickerPlugin_Test.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h index ccdf5d8c1702..de369d650e64 100644 --- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h +++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h @@ -37,6 +37,7 @@ * Implementation of this method is optional, but expected. * * @param picker The controller object managing the image picker interface. - */- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker; + */ +-(void)imagePickerControllerDidCancel : (UIImagePickerController *)picker; @end From 31442f3a9787635cde692e894db473722c0b35d2 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Mon, 7 Feb 2022 20:40:01 +0100 Subject: [PATCH 5/5] Remove private headers from umbrella --- .../image_picker/example/ios/RunnerTests/ImageUtilTests.m | 1 + .../image_picker/example/ios/RunnerTests/MetaDataUtilTests.m | 1 + .../example/ios/RunnerTests/PhotoAssetUtilTests.m | 1 + .../image_picker/ios/Classes/FLTImagePickerPlugin_Test.h | 2 +- .../image_picker/ios/Classes/ImagePickerPlugin.modulemap | 4 ++++ .../image_picker/ios/Classes/image_picker-umbrella.h | 4 ---- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/image_picker/image_picker/example/ios/RunnerTests/ImageUtilTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/ImageUtilTests.m index b793d6e1f3e0..9b9719f88116 100644 --- a/packages/image_picker/image_picker/example/ios/RunnerTests/ImageUtilTests.m +++ b/packages/image_picker/image_picker/example/ios/RunnerTests/ImageUtilTests.m @@ -5,6 +5,7 @@ #import "ImagePickerTestImages.h" @import image_picker; +@import image_picker.Test; @import XCTest; @interface ImageUtilTests : XCTestCase diff --git a/packages/image_picker/image_picker/example/ios/RunnerTests/MetaDataUtilTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/MetaDataUtilTests.m index 54f9469f2053..4160c51cc600 100644 --- a/packages/image_picker/image_picker/example/ios/RunnerTests/MetaDataUtilTests.m +++ b/packages/image_picker/image_picker/example/ios/RunnerTests/MetaDataUtilTests.m @@ -5,6 +5,7 @@ #import "ImagePickerTestImages.h" @import image_picker; +@import image_picker.Test; @import XCTest; @interface MetaDataUtilTests : XCTestCase diff --git a/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m index c38930f5cef5..97b4b6cd8eb3 100644 --- a/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m +++ b/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m @@ -5,6 +5,7 @@ #import "ImagePickerTestImages.h" @import image_picker; +@import image_picker.Test; @import XCTest; @interface PhotoAssetUtilTests : XCTestCase diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h index de369d650e64..94eca425eb5e 100644 --- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h +++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin_Test.h @@ -38,6 +38,6 @@ * * @param picker The controller object managing the image picker interface. */ --(void)imagePickerControllerDidCancel : (UIImagePickerController *)picker; +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker; @end diff --git a/packages/image_picker/image_picker/ios/Classes/ImagePickerPlugin.modulemap b/packages/image_picker/image_picker/ios/Classes/ImagePickerPlugin.modulemap index 532b6ad20a4a..dc702ea49fb1 100644 --- a/packages/image_picker/image_picker/ios/Classes/ImagePickerPlugin.modulemap +++ b/packages/image_picker/image_picker/ios/Classes/ImagePickerPlugin.modulemap @@ -6,5 +6,9 @@ framework module image_picker { explicit module Test { header "FLTImagePickerPlugin_Test.h" + header "FLTImagePickerImageUtil.h" + header "FLTImagePickerMetaDataUtil.h" + header "FLTImagePickerPhotoAssetUtil.h" + header "FLTPHPickerSaveImageToPathOperation.h" } } diff --git a/packages/image_picker/image_picker/ios/Classes/image_picker-umbrella.h b/packages/image_picker/image_picker/ios/Classes/image_picker-umbrella.h index b55c4ccd03d3..0d89b2e1f636 100644 --- a/packages/image_picker/image_picker/ios/Classes/image_picker-umbrella.h +++ b/packages/image_picker/image_picker/ios/Classes/image_picker-umbrella.h @@ -3,8 +3,4 @@ // found in the LICENSE file. #import -#import -#import -#import #import -#import