Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@
// found in the LICENSE file.

import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
import 'package:flutter/foundation.dart' show visibleForTesting;

import 'src/messages.g.dart';

/// An implementation of [FileSelectorPlatform] for iOS.
class FileSelectorIOS extends FileSelectorPlatform {
final FileSelectorApi _hostApi = FileSelectorApi();
/// Creates a new plugin implementation instance.
FileSelectorIOS({@visibleForTesting FileSelectorApi? api})
: _hostApi = api ?? FileSelectorApi();

final FileSelectorApi _hostApi;

/// Registers the iOS implementation.
static void registerWith() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import 'package:pigeon/pigeon.dart';
@ConfigurePigeon(
PigeonOptions(
dartOut: 'lib/src/messages.g.dart',
dartTestOut: 'test/test_api.g.dart',
swiftOut:
'ios/file_selector_ios/Sources/file_selector_ios/messages.g.swift',
copyrightHeader: 'pigeons/copyright.txt',
Expand All @@ -22,7 +21,7 @@ class FileSelectorConfig {
bool allowMultiSelection;
}

@HostApi(dartHostTestHandler: 'TestFileSelectorApi')
@HostApi()
abstract class FileSelectorApi {
@async
@ObjCSelector('openFileSelectorWithConfig:')
Expand Down
2 changes: 0 additions & 2 deletions packages/file_selector/file_selector_ios/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,8 @@ dependencies:
sdk: flutter

dev_dependencies:
build_runner: ^2.3.0
flutter_test:
sdk: flutter
mockito: ^5.4.4
pigeon: ^25.5.0

topics:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,18 @@ import 'package:file_selector_ios/file_selector_ios.dart';
import 'package:file_selector_ios/src/messages.g.dart';
import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';

import 'file_selector_ios_test.mocks.dart';
import 'test_api.g.dart';

@GenerateMocks(<Type>[TestFileSelectorApi])
void main() {
TestWidgetsFlutterBinding.ensureInitialized();

final FileSelectorIOS plugin = FileSelectorIOS();
late MockTestFileSelectorApi mockApi;
late FakeFileSelectorApi api;
late FileSelectorIOS plugin;

setUp(() {
mockApi = MockTestFileSelectorApi();
TestFileSelectorApi.setUp(mockApi);
api = FakeFileSelectorApi();
plugin = FileSelectorIOS(api: api);
});

test('registered instance', () {
Expand All @@ -32,7 +27,7 @@ void main() {

group('openFile', () {
setUp(() {
when(mockApi.openFile(any)).thenAnswer((_) async => <String>['foo']);
api.result = <String>['foo'];
});

test('passes the accepted type groups correctly', () async {
Expand All @@ -53,16 +48,15 @@ void main() {

await plugin.openFile(acceptedTypeGroups: <XTypeGroup>[group, groupTwo]);

final VerificationResult result = verify(mockApi.openFile(captureAny));
final FileSelectorConfig config =
result.captured[0] as FileSelectorConfig;

// iOS only accepts uniformTypeIdentifiers.
expect(
listEquals(config.utis, <String>['public.text', 'public.image']),
listEquals(api.passedConfig?.utis, <String>[
'public.text',
'public.image',
]),
isTrue,
);
expect(config.allowMultiSelection, isFalse);
expect(api.passedConfig?.allowMultiSelection, isFalse);
});
test('throws for a type group that does not support iOS', () async {
const XTypeGroup group = XTypeGroup(
Expand All @@ -78,10 +72,10 @@ void main() {

test('correctly handles no type groups', () async {
await expectLater(plugin.openFile(), completes);
final VerificationResult result = verify(mockApi.openFile(captureAny));
final FileSelectorConfig config =
result.captured[0] as FileSelectorConfig;
expect(listEquals(config.utis, <String>['public.data']), isTrue);
expect(
listEquals(api.passedConfig?.utis, <String>['public.data']),
isTrue,
);
});

test('correctly handles a wildcard group', () async {
Expand All @@ -91,16 +85,16 @@ void main() {
plugin.openFile(acceptedTypeGroups: <XTypeGroup>[group]),
completes,
);
final VerificationResult result = verify(mockApi.openFile(captureAny));
final FileSelectorConfig config =
result.captured[0] as FileSelectorConfig;
expect(listEquals(config.utis, <String>['public.data']), isTrue);
expect(
listEquals(api.passedConfig?.utis, <String>['public.data']),
isTrue,
);
});
});

group('openFiles', () {
setUp(() {
when(mockApi.openFile(any)).thenAnswer((_) async => <String>['foo']);
api.result = <String>['foo'];
});

test('passes the accepted type groups correctly', () async {
Expand All @@ -121,16 +115,14 @@ void main() {

await plugin.openFiles(acceptedTypeGroups: <XTypeGroup>[group, groupTwo]);

final VerificationResult result = verify(mockApi.openFile(captureAny));
final FileSelectorConfig config =
result.captured[0] as FileSelectorConfig;

// iOS only accepts uniformTypeIdentifiers.
expect(
listEquals(config.utis, <String>['public.text', 'public.image']),
listEquals(api.passedConfig?.utis, <String>[
'public.text',
'public.image',
]),
isTrue,
);
expect(config.allowMultiSelection, isTrue);
expect(api.passedConfig?.allowMultiSelection, isTrue);
});

test('throws for a type group that does not support iOS', () async {
Expand All @@ -147,10 +139,10 @@ void main() {

test('correctly handles no type groups', () async {
await expectLater(plugin.openFiles(), completes);
final VerificationResult result = verify(mockApi.openFile(captureAny));
final FileSelectorConfig config =
result.captured[0] as FileSelectorConfig;
expect(listEquals(config.utis, <String>['public.data']), isTrue);
expect(
listEquals(api.passedConfig?.utis, <String>['public.data']),
isTrue,
);
});

test('correctly handles a wildcard group', () async {
Expand All @@ -160,10 +152,30 @@ void main() {
plugin.openFiles(acceptedTypeGroups: <XTypeGroup>[group]),
completes,
);
final VerificationResult result = verify(mockApi.openFile(captureAny));
final FileSelectorConfig config =
result.captured[0] as FileSelectorConfig;
expect(listEquals(config.utis, <String>['public.data']), isTrue);
expect(
listEquals(api.passedConfig?.utis, <String>['public.data']),
isTrue,
);
});
});
}

/// Fake implementation that stores arguments and provides a canned response.
class FakeFileSelectorApi implements FileSelectorApi {
List<String> result = <String>[];
FileSelectorConfig? passedConfig;

@override
Future<List<String>> openFile(FileSelectorConfig config) async {
passedConfig = config;
return result;
}

@override
// ignore: non_constant_identifier_names
BinaryMessenger? get pigeonVar_binaryMessenger => null;

@override
// ignore: non_constant_identifier_names
String get pigeonVar_messageChannelSuffix => '';
}

This file was deleted.

100 changes: 0 additions & 100 deletions packages/file_selector/file_selector_ios/test/test_api.g.dart

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class PlatformFileChooserOptions {
final bool? selectMultiple;
}

@HostApi(dartHostTestHandler: 'TestFileSelectorApi')
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This wasn't being used, it was just copypasta from some other platform, which is why there are no other changes to file_selector_linux.

@HostApi()
abstract class FileSelectorApi {
/// Shows an file chooser with the given [type] and [options], returning the
/// list of selected paths.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@
// found in the LICENSE file.

import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
import 'package:flutter/foundation.dart' show visibleForTesting;

import 'src/messages.g.dart';

/// An implementation of [FileSelectorPlatform] for macOS.
class FileSelectorMacOS extends FileSelectorPlatform {
final FileSelectorApi _hostApi = FileSelectorApi();
/// Creates a new plugin implementation instance.
FileSelectorMacOS({@visibleForTesting FileSelectorApi? api})
: _hostApi = api ?? FileSelectorApi();

final FileSelectorApi _hostApi;

/// Registers the macOS implementation.
static void registerWith() {
Expand Down
Loading