@@ -67,7 +67,7 @@ class exampleTests: XCTestCase {
67
67
called. fulfill ( )
68
68
}
69
69
70
- wait ( for: [ called] , timeout : 0.5 )
70
+ wait ( for: [ called] )
71
71
XCTAssertNotNil ( panelController. openPanel)
72
72
if let panel = panelController. openPanel {
73
73
XCTAssertTrue ( panel. canChooseFiles)
@@ -104,7 +104,7 @@ class exampleTests: XCTestCase {
104
104
called. fulfill ( )
105
105
}
106
106
107
- wait ( for: [ called] , timeout : 0.5 )
107
+ wait ( for: [ called] )
108
108
XCTAssertNotNil ( panelController. openPanel)
109
109
if let panel = panelController. openPanel {
110
110
XCTAssertEqual ( panel. directoryURL? . path, " /some/dir " )
@@ -140,7 +140,7 @@ class exampleTests: XCTestCase {
140
140
called. fulfill ( )
141
141
}
142
142
143
- wait ( for: [ called] , timeout : 0.5 )
143
+ wait ( for: [ called] )
144
144
XCTAssertNotNil ( panelController. openPanel)
145
145
}
146
146
@@ -173,7 +173,7 @@ class exampleTests: XCTestCase {
173
173
called. fulfill ( )
174
174
}
175
175
176
- wait ( for: [ called] , timeout : 0.5 )
176
+ wait ( for: [ called] )
177
177
XCTAssertNotNil ( panelController. openPanel)
178
178
if let panel = panelController. openPanel {
179
179
if #available( macOS 11 . 0 , * ) {
@@ -188,6 +188,51 @@ class exampleTests: XCTestCase {
188
188
}
189
189
}
190
190
191
+ func testFilterUnknownFileExtension( ) throws {
192
+ let panelController = TestPanelController ( )
193
+ let plugin = FileSelectorPlugin (
194
+ viewProvider: TestViewProvider ( ) ,
195
+ panelController: panelController)
196
+
197
+ let unknownExtension = " somenewextension "
198
+ let returnPath = " /foo/bar "
199
+ panelController. openURLs = [ URL ( fileURLWithPath: returnPath) ]
200
+
201
+ let called = XCTestExpectation ( )
202
+ let options = OpenPanelOptions (
203
+ allowsMultipleSelection: true ,
204
+ canChooseDirectories: false ,
205
+ canChooseFiles: true ,
206
+ baseOptions: SavePanelOptions (
207
+ allowedFileTypes: AllowedTypes (
208
+ extensions: [ unknownExtension] ,
209
+ mimeTypes: [ ] ,
210
+ utis: [ ] ) ) )
211
+ plugin. displayOpenPanel ( options: options) { result in
212
+ switch result {
213
+ case . success( let paths) :
214
+ XCTAssertEqual ( paths [ 0 ] , returnPath)
215
+ case . failure( let error) :
216
+ XCTFail ( " \( error) " )
217
+ }
218
+ called. fulfill ( )
219
+ }
220
+
221
+ wait ( for: [ called] )
222
+ XCTAssertNotNil ( panelController. openPanel)
223
+ if let panel = panelController. openPanel {
224
+ if #available( macOS 11 . 0 , * ) {
225
+ XCTAssertEqual ( panel. allowedContentTypes. count, 1 )
226
+ XCTAssertEqual ( panel. allowedContentTypes [ 0 ] . preferredFilenameExtension, unknownExtension)
227
+ // If this isn't true, the dynamic type created for the extension won't work as a file
228
+ // extension filter.
229
+ XCTAssertTrue ( panel. allowedContentTypes [ 0 ] . conforms ( to: UTType . data) )
230
+ } else {
231
+ XCTAssertEqual ( panel. allowedFileTypes, [ unknownExtension] )
232
+ }
233
+ }
234
+ }
235
+
191
236
func testOpenWithFilterLegacy( ) throws {
192
237
let panelController = TestPanelController ( )
193
238
let plugin = FileSelectorPlugin (
@@ -218,7 +263,7 @@ class exampleTests: XCTestCase {
218
263
called. fulfill ( )
219
264
}
220
265
221
- wait ( for: [ called] , timeout : 0.5 )
266
+ wait ( for: [ called] )
222
267
XCTAssertNotNil ( panelController. openPanel)
223
268
if let panel = panelController. openPanel {
224
269
// On the legacy path, the allowedFileTypes should be set directly.
@@ -257,7 +302,7 @@ class exampleTests: XCTestCase {
257
302
called. fulfill ( )
258
303
}
259
304
260
- wait ( for: [ called] , timeout : 0.5 )
305
+ wait ( for: [ called] )
261
306
XCTAssertNotNil ( panelController. openPanel)
262
307
}
263
308
@@ -282,7 +327,7 @@ class exampleTests: XCTestCase {
282
327
called. fulfill ( )
283
328
}
284
329
285
- wait ( for: [ called] , timeout : 0.5 )
330
+ wait ( for: [ called] )
286
331
XCTAssertNotNil ( panelController. savePanel)
287
332
}
288
333
@@ -309,7 +354,7 @@ class exampleTests: XCTestCase {
309
354
called. fulfill ( )
310
355
}
311
356
312
- wait ( for: [ called] , timeout : 0.5 )
357
+ wait ( for: [ called] )
313
358
XCTAssertNotNil ( panelController. savePanel)
314
359
if let panel = panelController. savePanel {
315
360
XCTAssertEqual ( panel. directoryURL? . path, " /some/dir " )
@@ -335,7 +380,7 @@ class exampleTests: XCTestCase {
335
380
called. fulfill ( )
336
381
}
337
382
338
- wait ( for: [ called] , timeout : 0.5 )
383
+ wait ( for: [ called] )
339
384
XCTAssertNotNil ( panelController. savePanel)
340
385
}
341
386
@@ -364,7 +409,7 @@ class exampleTests: XCTestCase {
364
409
called. fulfill ( )
365
410
}
366
411
367
- wait ( for: [ called] , timeout : 0.5 )
412
+ wait ( for: [ called] )
368
413
XCTAssertNotNil ( panelController. openPanel)
369
414
if let panel = panelController. openPanel {
370
415
XCTAssertTrue ( panel. canChooseDirectories)
@@ -398,7 +443,7 @@ class exampleTests: XCTestCase {
398
443
called. fulfill ( )
399
444
}
400
445
401
- wait ( for: [ called] , timeout : 0.5 )
446
+ wait ( for: [ called] )
402
447
XCTAssertNotNil ( panelController. openPanel)
403
448
}
404
449
@@ -408,7 +453,7 @@ class exampleTests: XCTestCase {
408
453
viewProvider: TestViewProvider ( ) ,
409
454
panelController: panelController)
410
455
411
- let returnPaths = [ " /foo/bar " , " /foo/test " ] ;
456
+ let returnPaths = [ " /foo/bar " , " /foo/test " ]
412
457
panelController. openURLs = returnPaths. map ( { path in URL ( fileURLWithPath: path) } )
413
458
414
459
let called = XCTestExpectation ( )
@@ -427,7 +472,7 @@ class exampleTests: XCTestCase {
427
472
called. fulfill ( )
428
473
}
429
474
430
- wait ( for: [ called] , timeout : 0.5 )
475
+ wait ( for: [ called] )
431
476
XCTAssertNotNil ( panelController. openPanel)
432
477
if let panel = panelController. openPanel {
433
478
XCTAssertTrue ( panel. canChooseDirectories)
@@ -459,7 +504,7 @@ class exampleTests: XCTestCase {
459
504
called. fulfill ( )
460
505
}
461
506
462
- wait ( for: [ called] , timeout : 0.5 )
507
+ wait ( for: [ called] )
463
508
XCTAssertNotNil ( panelController. openPanel)
464
509
}
465
510
}
0 commit comments