diff --git a/packages/path_provider/path_provider_android/lib/path_provider_android.dart b/packages/path_provider/path_provider_android/lib/path_provider_android.dart index cce4031cd34..8931ef4bd7e 100644 --- a/packages/path_provider/path_provider_android/lib/path_provider_android.dart +++ b/packages/path_provider/path_provider_android/lib/path_provider_android.dart @@ -2,6 +2,7 @@ // 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' show visibleForTesting; import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; import 'messages.g.dart' as messages; @@ -36,7 +37,11 @@ messages.StorageDirectory _convertStorageDirectory( /// The Android implementation of [PathProviderPlatform]. class PathProviderAndroid extends PathProviderPlatform { - final messages.PathProviderApi _api = messages.PathProviderApi(); + /// Creates an instance of [PathProviderAndroid]. + PathProviderAndroid({@visibleForTesting messages.PathProviderApi? api}) + : _api = api ?? messages.PathProviderApi(); + + final messages.PathProviderApi _api; /// Registers this class as the default instance of [PathProviderPlatform]. static void registerWith() { diff --git a/packages/path_provider/path_provider_android/pigeons/messages.dart b/packages/path_provider/path_provider_android/pigeons/messages.dart index f85ea67fa0c..848018cedd1 100644 --- a/packages/path_provider/path_provider_android/pigeons/messages.dart +++ b/packages/path_provider/path_provider_android/pigeons/messages.dart @@ -13,7 +13,6 @@ import 'package:pigeon/pigeon.dart'; package: 'io.flutter.plugins.pathprovider', ), dartOut: 'lib/messages.g.dart', - dartTestOut: 'test/messages_test.g.dart', copyrightHeader: 'pigeons/copyright.txt', ), ) @@ -31,7 +30,7 @@ enum StorageDirectory { documents, } -@HostApi(dartHostTestHandler: 'TestPathProviderApi') +@HostApi() abstract class PathProviderApi { @TaskQueue(type: TaskQueueType.serialBackgroundThread) String? getTemporaryPath(); diff --git a/packages/path_provider/path_provider_android/test/messages_test.g.dart b/packages/path_provider/path_provider_android/test/messages_test.g.dart deleted file mode 100644 index bb8404324e9..00000000000 --- a/packages/path_provider/path_provider_android/test/messages_test.g.dart +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright 2013 The Flutter Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// Autogenerated from Pigeon (v22.4.2), do not edit directly. -// See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers -// ignore_for_file: avoid_relative_lib_imports -import 'dart:async'; -import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:path_provider_android/messages.g.dart'; - -class _PigeonCodec extends StandardMessageCodec { - const _PigeonCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is int) { - buffer.putUint8(4); - buffer.putInt64(value); - } else if (value is StorageDirectory) { - buffer.putUint8(129); - writeValue(buffer, value.index); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 129: - final int? value = readValue(buffer) as int?; - return value == null ? null : StorageDirectory.values[value]; - default: - return super.readValueOfType(type, buffer); - } - } -} - -abstract class TestPathProviderApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec pigeonChannelCodec = _PigeonCodec(); - - String? getTemporaryPath(); - - String? getApplicationSupportPath(); - - String? getApplicationDocumentsPath(); - - String? getApplicationCachePath(); - - String? getExternalStoragePath(); - - List getExternalCachePaths(); - - List getExternalStoragePaths(StorageDirectory directory); - - static void setUp( - TestPathProviderApi? api, { - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) { - messageChannelSuffix = messageChannelSuffix.isNotEmpty - ? '.$messageChannelSuffix' - : ''; - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_android.PathProviderApi.getTemporaryPath$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - try { - final String? output = api.getTemporaryPath(); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_android.PathProviderApi.getApplicationSupportPath$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - try { - final String? output = api.getApplicationSupportPath(); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_android.PathProviderApi.getApplicationDocumentsPath$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - try { - final String? output = api.getApplicationDocumentsPath(); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_android.PathProviderApi.getApplicationCachePath$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - try { - final String? output = api.getApplicationCachePath(); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_android.PathProviderApi.getExternalStoragePath$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - try { - final String? output = api.getExternalStoragePath(); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_android.PathProviderApi.getExternalCachePaths$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - try { - final List output = api.getExternalCachePaths(); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_android.PathProviderApi.getExternalStoragePaths$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - assert( - message != null, - 'Argument for dev.flutter.pigeon.path_provider_android.PathProviderApi.getExternalStoragePaths was null.', - ); - final List args = (message as List?)!; - final StorageDirectory? arg_directory = - (args[0] as StorageDirectory?); - assert( - arg_directory != null, - 'Argument for dev.flutter.pigeon.path_provider_android.PathProviderApi.getExternalStoragePaths was null, expected non-null StorageDirectory.', - ); - try { - final List output = api.getExternalStoragePaths( - arg_directory!, - ); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - } -} diff --git a/packages/path_provider/path_provider_android/test/path_provider_android_test.dart b/packages/path_provider/path_provider_android/test/path_provider_android_test.dart index d362dfaabd3..7b1f2d5d94e 100644 --- a/packages/path_provider/path_provider_android/test/path_provider_android_test.dart +++ b/packages/path_provider/path_provider_android/test/path_provider_android_test.dart @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/src/services/binary_messenger.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:path_provider_android/messages.g.dart' as messages; import 'package:path_provider_android/path_provider_android.dart'; import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; -import 'messages_test.g.dart'; const String kTemporaryPath = 'temporaryPath'; const String kApplicationSupportPath = 'applicationSupportPath'; @@ -15,44 +15,55 @@ const String kApplicationCachePath = 'applicationCachePath'; const String kExternalCachePaths = 'externalCachePaths'; const String kExternalStoragePaths = 'externalStoragePaths'; -class _Api implements TestPathProviderApi { - _Api({this.returnsExternalStoragePaths = true}); - - final bool returnsExternalStoragePaths; +class _Api implements messages.PathProviderApi { + bool returnsExternalStoragePaths = true; @override - String? getApplicationDocumentsPath() => kApplicationDocumentsPath; + Future getApplicationDocumentsPath() async => + kApplicationDocumentsPath; @override - String? getApplicationSupportPath() => kApplicationSupportPath; + Future getApplicationSupportPath() async => kApplicationSupportPath; @override - String? getApplicationCachePath() => kApplicationCachePath; + Future getApplicationCachePath() async => kApplicationCachePath; @override - List getExternalCachePaths() => [kExternalCachePaths]; + Future> getExternalCachePaths() async => [ + kExternalCachePaths, + ]; @override - String? getExternalStoragePath() => kExternalStoragePaths; + Future getExternalStoragePath() async => kExternalStoragePaths; @override - List getExternalStoragePaths(messages.StorageDirectory directory) { + Future> getExternalStoragePaths( + messages.StorageDirectory directory, + ) async { return [if (returnsExternalStoragePaths) kExternalStoragePaths]; } @override - String? getTemporaryPath() => kTemporaryPath; + Future getTemporaryPath() async => kTemporaryPath; + + @override + // ignore: non_constant_identifier_names + BinaryMessenger? get pigeonVar_binaryMessenger => null; + + @override + // ignore: non_constant_identifier_names + String get pigeonVar_messageChannelSuffix => ''; } void main() { - TestWidgetsFlutterBinding.ensureInitialized(); + late _Api api; group('PathProviderAndroid', () { late PathProviderAndroid pathProvider; setUp(() async { - pathProvider = PathProviderAndroid(); - TestPathProviderApi.setUp(_Api()); + api = _Api(); + pathProvider = PathProviderAndroid(api: api); }); test('getTemporaryPath', () async { @@ -109,8 +120,7 @@ void main() { test('getDownloadsPath returns null, when getExternalStoragePaths returns ' 'an empty list', () async { - final PathProviderAndroid pathProvider = PathProviderAndroid(); - TestPathProviderApi.setUp(_Api(returnsExternalStoragePaths: false)); + api.returnsExternalStoragePaths = false; final String? path = await pathProvider.getDownloadsPath(); expect(path, null); }); diff --git a/packages/path_provider/path_provider_foundation/lib/path_provider_foundation.dart b/packages/path_provider/path_provider_foundation/lib/path_provider_foundation.dart index 8fbaea38e9a..64a92c5cf59 100644 --- a/packages/path_provider/path_provider_foundation/lib/path_provider_foundation.dart +++ b/packages/path_provider/path_provider_foundation/lib/path_provider_foundation.dart @@ -14,10 +14,12 @@ class PathProviderFoundation extends PathProviderPlatform { /// Constructor that accepts a testable PathProviderPlatformProvider. PathProviderFoundation({ @visibleForTesting PathProviderPlatformProvider? platform, - }) : _platformProvider = platform ?? PathProviderPlatformProvider(); + @visibleForTesting PathProviderApi? pathProviderApi, + }) : _platformProvider = platform ?? PathProviderPlatformProvider(), + _pathProvider = pathProviderApi ?? PathProviderApi(); final PathProviderPlatformProvider _platformProvider; - final PathProviderApi _pathProvider = PathProviderApi(); + final PathProviderApi _pathProvider; /// Registers this class as the default instance of [PathProviderPlatform] static void registerWith() { diff --git a/packages/path_provider/path_provider_foundation/pigeons/messages.dart b/packages/path_provider/path_provider_foundation/pigeons/messages.dart index 8441be21147..7ca732c475c 100644 --- a/packages/path_provider/path_provider_foundation/pigeons/messages.dart +++ b/packages/path_provider/path_provider_foundation/pigeons/messages.dart @@ -9,7 +9,6 @@ import 'package:pigeon/pigeon.dart'; swiftOut: 'darwin/path_provider_foundation/Sources/path_provider_foundation/messages.g.swift', dartOut: 'lib/messages.g.dart', - dartTestOut: 'test/messages_test.g.dart', copyrightHeader: 'pigeons/copyright.txt', ), ) @@ -22,7 +21,7 @@ enum DirectoryType { applicationCache, } -@HostApi(dartHostTestHandler: 'TestPathProviderApi') +@HostApi() abstract class PathProviderApi { String? getDirectoryPath(DirectoryType type); String? getContainerPath(String appGroupIdentifier); diff --git a/packages/path_provider/path_provider_foundation/pubspec.yaml b/packages/path_provider/path_provider_foundation/pubspec.yaml index fda2d936624..63238e589ed 100644 --- a/packages/path_provider/path_provider_foundation/pubspec.yaml +++ b/packages/path_provider/path_provider_foundation/pubspec.yaml @@ -27,10 +27,8 @@ dependencies: path_provider_platform_interface: ^2.1.0 dev_dependencies: - build_runner: ^2.3.2 flutter_test: sdk: flutter - mockito: ^5.4.4 path: ^1.8.0 pigeon: ^25.5.0 diff --git a/packages/path_provider/path_provider_foundation/test/messages_test.g.dart b/packages/path_provider/path_provider_foundation/test/messages_test.g.dart deleted file mode 100644 index bb5cc03b39e..00000000000 --- a/packages/path_provider/path_provider_foundation/test/messages_test.g.dart +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2013 The Flutter Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// Autogenerated from Pigeon (v25.5.0), do not edit directly. -// See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers -// ignore_for_file: avoid_relative_lib_imports -import 'dart:async'; -import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:path_provider_foundation/messages.g.dart'; - -class _PigeonCodec extends StandardMessageCodec { - const _PigeonCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is int) { - buffer.putUint8(4); - buffer.putInt64(value); - } else if (value is DirectoryType) { - buffer.putUint8(129); - writeValue(buffer, value.index); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 129: - final int? value = readValue(buffer) as int?; - return value == null ? null : DirectoryType.values[value]; - default: - return super.readValueOfType(type, buffer); - } - } -} - -abstract class TestPathProviderApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec pigeonChannelCodec = _PigeonCodec(); - - String? getDirectoryPath(DirectoryType type); - - String? getContainerPath(String appGroupIdentifier); - - static void setUp( - TestPathProviderApi? api, { - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) { - messageChannelSuffix = messageChannelSuffix.isNotEmpty - ? '.$messageChannelSuffix' - : ''; - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getDirectoryPath$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - assert( - message != null, - 'Argument for dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getDirectoryPath was null.', - ); - final List args = (message as List?)!; - final DirectoryType? arg_type = (args[0] as DirectoryType?); - assert( - arg_type != null, - 'Argument for dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getDirectoryPath was null, expected non-null DirectoryType.', - ); - try { - final String? output = api.getDirectoryPath(arg_type!); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - { - final BasicMessageChannel - pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getContainerPath$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, ( - Object? message, - ) async { - assert( - message != null, - 'Argument for dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getContainerPath was null.', - ); - final List args = (message as List?)!; - final String? arg_appGroupIdentifier = (args[0] as String?); - assert( - arg_appGroupIdentifier != null, - 'Argument for dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getContainerPath was null, expected non-null String.', - ); - try { - final String? output = api.getContainerPath( - arg_appGroupIdentifier!, - ); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); - } - }); - } - } - } -} diff --git a/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.dart b/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.dart index 2c6208de8bf..f30fd65fa12 100644 --- a/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.dart +++ b/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.dart @@ -4,22 +4,15 @@ import 'dart:io'; +import 'package:flutter/src/services/binary_messenger.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; import 'package:path/path.dart' as p; import 'package:path_provider_foundation/messages.g.dart'; import 'package:path_provider_foundation/path_provider_foundation.dart'; -import 'messages_test.g.dart'; -import 'path_provider_foundation_test.mocks.dart'; - -@GenerateMocks([TestPathProviderApi]) void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - group('PathProviderFoundation', () { - late MockTestPathProviderApi mockApi; + late FakePathProviderApi api; // These unit tests use the actual filesystem, since an injectable // filesystem would add a runtime dependency to the package, so everything // is contained to a temporary directory. @@ -27,8 +20,7 @@ void main() { setUp(() async { testRoot = Directory.systemTemp.createTempSync(); - mockApi = MockTestPathProviderApi(); - TestPathProviderApi.setUp(mockApi); + api = FakePathProviderApi(); }); tearDown(() { @@ -36,49 +28,49 @@ void main() { }); test('getTemporaryPath', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); final String temporaryPath = p.join(testRoot.path, 'temporary', 'path'); - when( - mockApi.getDirectoryPath(DirectoryType.temp), - ).thenReturn(temporaryPath); + api.directoryResult = temporaryPath; final String? path = await pathProvider.getTemporaryPath(); - verify(mockApi.getDirectoryPath(DirectoryType.temp)); + expect(api.passedDirectoryType, DirectoryType.temp); expect(path, temporaryPath); }); test('getApplicationSupportPath', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); final String applicationSupportPath = p.join( testRoot.path, 'application', 'support', 'path', ); - when( - mockApi.getDirectoryPath(DirectoryType.applicationSupport), - ).thenReturn(applicationSupportPath); + api.directoryResult = applicationSupportPath; final String? path = await pathProvider.getApplicationSupportPath(); - verify(mockApi.getDirectoryPath(DirectoryType.applicationSupport)); + expect(api.passedDirectoryType, DirectoryType.applicationSupport); expect(path, applicationSupportPath); }); test( 'getApplicationSupportPath creates the directory if necessary', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); final String applicationSupportPath = p.join( testRoot.path, 'application', 'support', 'path', ); - when( - mockApi.getDirectoryPath(DirectoryType.applicationSupport), - ).thenReturn(applicationSupportPath); + api.directoryResult = applicationSupportPath; final String? path = await pathProvider.getApplicationSupportPath(); @@ -87,67 +79,67 @@ void main() { ); test('getLibraryPath', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); final String libraryPath = p.join(testRoot.path, 'library', 'path'); - when( - mockApi.getDirectoryPath(DirectoryType.library), - ).thenReturn(libraryPath); + api.directoryResult = libraryPath; final String? path = await pathProvider.getLibraryPath(); - verify(mockApi.getDirectoryPath(DirectoryType.library)); + expect(api.passedDirectoryType, DirectoryType.library); expect(path, libraryPath); }); test('getApplicationDocumentsPath', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); final String applicationDocumentsPath = p.join( testRoot.path, 'application', 'documents', 'path', ); - when( - mockApi.getDirectoryPath(DirectoryType.applicationDocuments), - ).thenReturn(applicationDocumentsPath); + api.directoryResult = applicationDocumentsPath; final String? path = await pathProvider.getApplicationDocumentsPath(); - verify(mockApi.getDirectoryPath(DirectoryType.applicationDocuments)); + expect(api.passedDirectoryType, DirectoryType.applicationDocuments); expect(path, applicationDocumentsPath); }); test('getApplicationCachePath', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); final String applicationCachePath = p.join( testRoot.path, 'application', 'cache', 'path', ); - when( - mockApi.getDirectoryPath(DirectoryType.applicationCache), - ).thenReturn(applicationCachePath); + api.directoryResult = applicationCachePath; final String? path = await pathProvider.getApplicationCachePath(); - verify(mockApi.getDirectoryPath(DirectoryType.applicationCache)); + expect(api.passedDirectoryType, DirectoryType.applicationCache); expect(path, applicationCachePath); }); test( 'getApplicationCachePath creates the directory if necessary', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); final String applicationCachePath = p.join( testRoot.path, 'application', 'cache', 'path', ); - when( - mockApi.getDirectoryPath(DirectoryType.applicationCache), - ).thenReturn(applicationCachePath); + api.directoryResult = applicationCachePath; final String? path = await pathProvider.getApplicationCachePath(); @@ -156,25 +148,29 @@ void main() { ); test('getDownloadsPath', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); final String downloadsPath = p.join(testRoot.path, 'downloads', 'path'); - when( - mockApi.getDirectoryPath(DirectoryType.downloads), - ).thenReturn(downloadsPath); + api.directoryResult = downloadsPath; final String? result = await pathProvider.getDownloadsPath(); - verify(mockApi.getDirectoryPath(DirectoryType.downloads)); + expect(api.passedDirectoryType, DirectoryType.downloads); expect(result, downloadsPath); }); test('getExternalCachePaths throws', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); expect(pathProvider.getExternalCachePaths(), throwsA(isUnsupportedError)); }); test('getExternalStoragePath throws', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); expect( pathProvider.getExternalStoragePath(), throwsA(isUnsupportedError), @@ -182,7 +178,9 @@ void main() { }); test('getExternalStoragePaths throws', () async { - final PathProviderFoundation pathProvider = PathProviderFoundation(); + final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, + ); expect( pathProvider.getExternalStoragePaths(), throwsA(isUnsupportedError), @@ -191,25 +189,25 @@ void main() { test('getContainerPath', () async { final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, platform: FakePlatformProvider(isIOS: true), ); const String appGroupIdentifier = 'group.example.test'; final String containerPath = p.join(testRoot.path, 'container', 'path'); - when( - mockApi.getContainerPath(appGroupIdentifier), - ).thenReturn(containerPath); + api.containerResult = containerPath; final String? result = await pathProvider.getContainerPath( appGroupIdentifier: appGroupIdentifier, ); - verify(mockApi.getContainerPath(appGroupIdentifier)); + expect(api.passedAppGroupIdentifier, appGroupIdentifier); expect(result, containerPath); }); test('getContainerPath throws on macOS', () async { final PathProviderFoundation pathProvider = PathProviderFoundation( + pathProviderApi: api, platform: FakePlatformProvider(isIOS: false), ); expect( @@ -226,3 +224,31 @@ class FakePlatformProvider implements PathProviderPlatformProvider { @override bool isIOS; } + +class FakePathProviderApi implements PathProviderApi { + String? directoryResult; + String? containerResult; + + DirectoryType? passedDirectoryType; + String? passedAppGroupIdentifier; + + @override + Future getDirectoryPath(DirectoryType type) async { + passedDirectoryType = type; + return directoryResult; + } + + @override + Future getContainerPath(String appGroupIdentifier) async { + passedAppGroupIdentifier = appGroupIdentifier; + return containerResult; + } + + @override + // ignore: non_constant_identifier_names + BinaryMessenger? get pigeonVar_binaryMessenger => null; + + @override + // ignore: non_constant_identifier_names + String get pigeonVar_messageChannelSuffix => ''; +} diff --git a/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.mocks.dart b/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.mocks.dart deleted file mode 100644 index 93cb1ad2a48..00000000000 --- a/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.mocks.dart +++ /dev/null @@ -1,44 +0,0 @@ -// Mocks generated by Mockito 5.4.4 from annotations -// in path_provider_foundation/test/path_provider_foundation_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:mockito/mockito.dart' as _i1; -import 'package:path_provider_foundation/messages.g.dart' as _i3; - -import 'messages_test.g.dart' as _i2; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: deprecated_member_use -// ignore_for_file: deprecated_member_use_from_same_package -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -/// A class which mocks [TestPathProviderApi]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockTestPathProviderApi extends _i1.Mock - implements _i2.TestPathProviderApi { - MockTestPathProviderApi() { - _i1.throwOnMissingStub(this); - } - - @override - String? getDirectoryPath(_i3.DirectoryType? type) => - (super.noSuchMethod(Invocation.method(#getDirectoryPath, [type])) - as String?); - - @override - String? getContainerPath(String? appGroupIdentifier) => - (super.noSuchMethod( - Invocation.method(#getContainerPath, [appGroupIdentifier]), - ) - as String?); -}