Skip to content

Commit 048c8da

Browse files
authored
Merge branch 'main' into bot3
2 parents 07e17c9 + 9c67aab commit 048c8da

File tree

43 files changed

+502
-1054
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+502
-1054
lines changed

.ci.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ platform_properties:
9595
[
9696
{"dependency": "ruby", "version": "ruby_3.1-pod_1.13"}
9797
]
98-
os: Mac-14|Mac-15.5
98+
os: Mac-15.5|Mac-15.7
9999
device_type: none
100100
cpu: arm64
101101
$flutter/osx_sdk : >-
@@ -108,7 +108,7 @@ platform_properties:
108108
[
109109
{"dependency": "ruby", "version": "ruby_3.1-pod_1.13"}
110110
]
111-
os: Mac-14|Mac-15.5
111+
os: Mac-15.5|Mac-15.7
112112
device_type: none
113113
cpu: x86
114114
$flutter/osx_sdk : >-

.ci/flutter_master.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
c5e809a998fe86bb4a4502d51996504279c67ec5
1+
31a8481cd14caa1686487bfacf9d8b1abb6e4cf7

packages/file_selector/file_selector_ios/lib/file_selector_ios.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@
33
// found in the LICENSE file.
44

55
import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
6+
import 'package:flutter/foundation.dart' show visibleForTesting;
67

78
import 'src/messages.g.dart';
89

910
/// An implementation of [FileSelectorPlatform] for iOS.
1011
class FileSelectorIOS extends FileSelectorPlatform {
11-
final FileSelectorApi _hostApi = FileSelectorApi();
12+
/// Creates a new plugin implementation instance.
13+
FileSelectorIOS({@visibleForTesting FileSelectorApi? api})
14+
: _hostApi = api ?? FileSelectorApi();
15+
16+
final FileSelectorApi _hostApi;
1217

1318
/// Registers the iOS implementation.
1419
static void registerWith() {

packages/file_selector/file_selector_ios/pigeons/messages.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'package:pigeon/pigeon.dart';
77
@ConfigurePigeon(
88
PigeonOptions(
99
dartOut: 'lib/src/messages.g.dart',
10-
dartTestOut: 'test/test_api.g.dart',
1110
swiftOut:
1211
'ios/file_selector_ios/Sources/file_selector_ios/messages.g.swift',
1312
copyrightHeader: 'pigeons/copyright.txt',
@@ -22,7 +21,7 @@ class FileSelectorConfig {
2221
bool allowMultiSelection;
2322
}
2423

25-
@HostApi(dartHostTestHandler: 'TestFileSelectorApi')
24+
@HostApi()
2625
abstract class FileSelectorApi {
2726
@async
2827
@ObjCSelector('openFileSelectorWithConfig:')

packages/file_selector/file_selector_ios/pubspec.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ dependencies:
2222
sdk: flutter
2323

2424
dev_dependencies:
25-
build_runner: ^2.3.0
2625
flutter_test:
2726
sdk: flutter
28-
mockito: ^5.4.4
2927
pigeon: ^25.5.0
3028

3129
topics:

packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,18 @@ import 'package:file_selector_ios/file_selector_ios.dart';
66
import 'package:file_selector_ios/src/messages.g.dart';
77
import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
88
import 'package:flutter/foundation.dart';
9+
import 'package:flutter/services.dart';
910
import 'package:flutter_test/flutter_test.dart';
10-
import 'package:mockito/annotations.dart';
11-
import 'package:mockito/mockito.dart';
1211

13-
import 'file_selector_ios_test.mocks.dart';
14-
import 'test_api.g.dart';
15-
16-
@GenerateMocks(<Type>[TestFileSelectorApi])
1712
void main() {
1813
TestWidgetsFlutterBinding.ensureInitialized();
1914

20-
final FileSelectorIOS plugin = FileSelectorIOS();
21-
late MockTestFileSelectorApi mockApi;
15+
late FakeFileSelectorApi api;
16+
late FileSelectorIOS plugin;
2217

2318
setUp(() {
24-
mockApi = MockTestFileSelectorApi();
25-
TestFileSelectorApi.setUp(mockApi);
19+
api = FakeFileSelectorApi();
20+
plugin = FileSelectorIOS(api: api);
2621
});
2722

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

3328
group('openFile', () {
3429
setUp(() {
35-
when(mockApi.openFile(any)).thenAnswer((_) async => <String>['foo']);
30+
api.result = <String>['foo'];
3631
});
3732

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

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

56-
final VerificationResult result = verify(mockApi.openFile(captureAny));
57-
final FileSelectorConfig config =
58-
result.captured[0] as FileSelectorConfig;
59-
6051
// iOS only accepts uniformTypeIdentifiers.
6152
expect(
62-
listEquals(config.utis, <String>['public.text', 'public.image']),
53+
listEquals(api.passedConfig?.utis, <String>[
54+
'public.text',
55+
'public.image',
56+
]),
6357
isTrue,
6458
);
65-
expect(config.allowMultiSelection, isFalse);
59+
expect(api.passedConfig?.allowMultiSelection, isFalse);
6660
});
6761
test('throws for a type group that does not support iOS', () async {
6862
const XTypeGroup group = XTypeGroup(
@@ -78,10 +72,10 @@ void main() {
7872

7973
test('correctly handles no type groups', () async {
8074
await expectLater(plugin.openFile(), completes);
81-
final VerificationResult result = verify(mockApi.openFile(captureAny));
82-
final FileSelectorConfig config =
83-
result.captured[0] as FileSelectorConfig;
84-
expect(listEquals(config.utis, <String>['public.data']), isTrue);
75+
expect(
76+
listEquals(api.passedConfig?.utis, <String>['public.data']),
77+
isTrue,
78+
);
8579
});
8680

8781
test('correctly handles a wildcard group', () async {
@@ -91,16 +85,16 @@ void main() {
9185
plugin.openFile(acceptedTypeGroups: <XTypeGroup>[group]),
9286
completes,
9387
);
94-
final VerificationResult result = verify(mockApi.openFile(captureAny));
95-
final FileSelectorConfig config =
96-
result.captured[0] as FileSelectorConfig;
97-
expect(listEquals(config.utis, <String>['public.data']), isTrue);
88+
expect(
89+
listEquals(api.passedConfig?.utis, <String>['public.data']),
90+
isTrue,
91+
);
9892
});
9993
});
10094

10195
group('openFiles', () {
10296
setUp(() {
103-
when(mockApi.openFile(any)).thenAnswer((_) async => <String>['foo']);
97+
api.result = <String>['foo'];
10498
});
10599

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

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

124-
final VerificationResult result = verify(mockApi.openFile(captureAny));
125-
final FileSelectorConfig config =
126-
result.captured[0] as FileSelectorConfig;
127-
128-
// iOS only accepts uniformTypeIdentifiers.
129118
expect(
130-
listEquals(config.utis, <String>['public.text', 'public.image']),
119+
listEquals(api.passedConfig?.utis, <String>[
120+
'public.text',
121+
'public.image',
122+
]),
131123
isTrue,
132124
);
133-
expect(config.allowMultiSelection, isTrue);
125+
expect(api.passedConfig?.allowMultiSelection, isTrue);
134126
});
135127

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

148140
test('correctly handles no type groups', () async {
149141
await expectLater(plugin.openFiles(), completes);
150-
final VerificationResult result = verify(mockApi.openFile(captureAny));
151-
final FileSelectorConfig config =
152-
result.captured[0] as FileSelectorConfig;
153-
expect(listEquals(config.utis, <String>['public.data']), isTrue);
142+
expect(
143+
listEquals(api.passedConfig?.utis, <String>['public.data']),
144+
isTrue,
145+
);
154146
});
155147

156148
test('correctly handles a wildcard group', () async {
@@ -160,10 +152,30 @@ void main() {
160152
plugin.openFiles(acceptedTypeGroups: <XTypeGroup>[group]),
161153
completes,
162154
);
163-
final VerificationResult result = verify(mockApi.openFile(captureAny));
164-
final FileSelectorConfig config =
165-
result.captured[0] as FileSelectorConfig;
166-
expect(listEquals(config.utis, <String>['public.data']), isTrue);
155+
expect(
156+
listEquals(api.passedConfig?.utis, <String>['public.data']),
157+
isTrue,
158+
);
167159
});
168160
});
169161
}
162+
163+
/// Fake implementation that stores arguments and provides a canned response.
164+
class FakeFileSelectorApi implements FileSelectorApi {
165+
List<String> result = <String>[];
166+
FileSelectorConfig? passedConfig;
167+
168+
@override
169+
Future<List<String>> openFile(FileSelectorConfig config) async {
170+
passedConfig = config;
171+
return result;
172+
}
173+
174+
@override
175+
// ignore: non_constant_identifier_names
176+
BinaryMessenger? get pigeonVar_binaryMessenger => null;
177+
178+
@override
179+
// ignore: non_constant_identifier_names
180+
String get pigeonVar_messageChannelSuffix => '';
181+
}

packages/file_selector/file_selector_ios/test/file_selector_ios_test.mocks.dart

Lines changed: 0 additions & 42 deletions
This file was deleted.

packages/file_selector/file_selector_ios/test/test_api.g.dart

Lines changed: 0 additions & 100 deletions
This file was deleted.

packages/file_selector/file_selector_linux/pigeons/messages.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class PlatformFileChooserOptions {
5252
final bool? selectMultiple;
5353
}
5454

55-
@HostApi(dartHostTestHandler: 'TestFileSelectorApi')
55+
@HostApi()
5656
abstract class FileSelectorApi {
5757
/// Shows an file chooser with the given [type] and [options], returning the
5858
/// list of selected paths.

0 commit comments

Comments
 (0)