blob: 6d31a3cd6e500d46edf2bda3d7259cda47658395 [file] [log] [blame]
// 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 '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';
const String kLibraryPath = 'libraryPath';
const String kApplicationDocumentsPath = 'applicationDocumentsPath';
const String kApplicationCachePath = 'applicationCachePath';
const String kExternalCachePaths = 'externalCachePaths';
const String kExternalStoragePaths = 'externalStoragePaths';
const String kDownloadsPath = 'downloadsPath';
class _Api implements TestPathProviderApi {
_Api({this.returnsExternalStoragePaths = true});
final bool returnsExternalStoragePaths;
@override
String? getApplicationDocumentsPath() => kApplicationDocumentsPath;
@override
String? getApplicationSupportPath() => kApplicationSupportPath;
@override
String? getApplicationCachePath() => kApplicationCachePath;
@override
List<String?> getExternalCachePaths() => <String>[kExternalCachePaths];
@override
String? getExternalStoragePath() => kExternalStoragePaths;
@override
List<String?> getExternalStoragePaths(messages.StorageDirectory directory) {
return <String?>[if (returnsExternalStoragePaths) kExternalStoragePaths];
}
@override
String? getTemporaryPath() => kTemporaryPath;
}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
group('PathProviderAndroid', () {
late PathProviderAndroid pathProvider;
setUp(() async {
pathProvider = PathProviderAndroid();
TestPathProviderApi.setup(_Api());
});
test('getTemporaryPath', () async {
final String? path = await pathProvider.getTemporaryPath();
expect(path, kTemporaryPath);
});
test('getApplicationSupportPath', () async {
final String? path = await pathProvider.getApplicationSupportPath();
expect(path, kApplicationSupportPath);
});
test('getApplicationCachePath', () async {
final String? path = await pathProvider.getApplicationCachePath();
expect(path, kApplicationCachePath);
});
test('getLibraryPath fails', () async {
try {
await pathProvider.getLibraryPath();
fail('should throw UnsupportedError');
} catch (e) {
expect(e, isUnsupportedError);
}
});
test('getApplicationDocumentsPath', () async {
final String? path = await pathProvider.getApplicationDocumentsPath();
expect(path, kApplicationDocumentsPath);
});
test('getExternalCachePaths succeeds', () async {
final List<String>? result = await pathProvider.getExternalCachePaths();
expect(result!.length, 1);
expect(result.first, kExternalCachePaths);
});
for (final StorageDirectory? type in <StorageDirectory?>[
...StorageDirectory.values
]) {
test('getExternalStoragePaths (type: $type) android succeeds', () async {
final List<String>? result =
await pathProvider.getExternalStoragePaths(type: type);
expect(result!.length, 1);
expect(result.first, kExternalStoragePaths);
});
} // end of for-loop
test('getDownloadsPath succeeds', () async {
final String? path = await pathProvider.getDownloadsPath();
expect(path, kExternalStoragePaths);
});
test(
'getDownloadsPath returns null, when getExternalStoragePaths returns '
'an empty list', () async {
final PathProviderAndroid pathProvider = PathProviderAndroid();
TestPathProviderApi.setup(_Api(returnsExternalStoragePaths: false));
final String? path = await pathProvider.getDownloadsPath();
expect(path, null);
});
});
}