@@ -333,6 +333,35 @@ it('should not use getAsFileSystemHandle when not in a secure context', async ()
333
333
window . isSecureContext = true ;
334
334
} ) ;
335
335
336
+ it ( 'should reject when getAsFileSystemHandle resolves to null' , async ( ) => {
337
+ const evt = dragEvtFromItems ( [
338
+ dataTransferItemWithFsHandle ( null , null )
339
+ ] ) ;
340
+ expect ( fromEvent ( evt ) ) . rejects . toThrow ( '[object Object] is not a File' ) ;
341
+ } ) ;
342
+
343
+ it ( 'should fallback to getAsFile when getAsFileSystemHandle resolves to undefined' , async ( ) => {
344
+ const name = 'test.nosec.json' ;
345
+ const mockFile = createFile ( name , { ping : false } , {
346
+ type : 'application/json'
347
+ } ) ;
348
+ const evt = dragEvtFromItems ( [
349
+ dataTransferItemWithFsHandle ( mockFile , undefined )
350
+ ] ) ;
351
+
352
+ const files = await fromEvent ( evt ) ;
353
+ expect ( files ) . toHaveLength ( 1 ) ;
354
+ expect ( files . every ( file => file instanceof File ) ) . toBe ( true ) ;
355
+
356
+ const [ file ] = files as FileWithPath [ ] ;
357
+
358
+ expect ( file . name ) . toBe ( mockFile . name ) ;
359
+ expect ( file . type ) . toBe ( mockFile . type ) ;
360
+ expect ( file . size ) . toBe ( mockFile . size ) ;
361
+ expect ( file . lastModified ) . toBe ( mockFile . lastModified ) ;
362
+ expect ( file . path ) . toBe ( `./${ name } ` ) ;
363
+ } ) ;
364
+
336
365
function dragEvtFromItems ( items : DataTransferItem | DataTransferItem [ ] , type : string = 'drop' ) : DragEvent {
337
366
return {
338
367
type,
@@ -403,7 +432,7 @@ function dataTransferItemFromEntry(entry: FileEntry | DirEntry, file?: File): Da
403
432
} as any ;
404
433
}
405
434
406
- function dataTransferItemWithFsHandle ( file ?: File , h ?: FileSystemFileHandle ) : DataTransferItem {
435
+ function dataTransferItemWithFsHandle ( file ?: File | null , h ?: FileSystemFileHandle | null ) : DataTransferItem {
407
436
return {
408
437
kind : 'file' ,
409
438
getAsFile ( ) {
@@ -510,7 +539,7 @@ function sortFiles<T extends File>(files: T[]) {
510
539
511
540
512
541
interface FileSystemFileHandle {
513
- getFile ( ) : Promise < File > ;
542
+ getFile ( ) : Promise < File | null > ;
514
543
}
515
544
516
545
type FileOrDirEntry = FileEntry | DirEntry
0 commit comments