@@ -379,6 +379,37 @@ it("should not use getAsFileSystemHandle when not in a secure context", async ()
379
379
globalThis . isSecureContext = true ;
380
380
} ) ;
381
381
382
+ it ( "should reject when getAsFileSystemHandle resolves to null" , async ( ) => {
383
+ const evt = dragEvtFromItems ( [ dataTransferItemWithFsHandle ( null , null ) ] ) ;
384
+ expect ( fromEvent ( evt ) ) . rejects . toThrow ( "[object Object] is not a File" ) ;
385
+ } ) ;
386
+
387
+ it ( "should fallback to getAsFile when getAsFileSystemHandle resolves to undefined" , async ( ) => {
388
+ const name = "test.nosec.json" ;
389
+ const mockFile = createFile (
390
+ name ,
391
+ { ping : false } ,
392
+ {
393
+ type : "application/json" ,
394
+ } ,
395
+ ) ;
396
+ const evt = dragEvtFromItems ( [
397
+ dataTransferItemWithFsHandle ( mockFile , undefined ) ,
398
+ ] ) ;
399
+
400
+ const files = await fromEvent ( evt ) ;
401
+ expect ( files ) . toHaveLength ( 1 ) ;
402
+ expect ( files . every ( ( file ) => file instanceof File ) ) . toBe ( true ) ;
403
+
404
+ const [ file ] = files as FileWithPath [ ] ;
405
+
406
+ expect ( file . name ) . toBe ( mockFile . name ) ;
407
+ expect ( file . type ) . toBe ( mockFile . type ) ;
408
+ expect ( file . size ) . toBe ( mockFile . size ) ;
409
+ expect ( file . lastModified ) . toBe ( mockFile . lastModified ) ;
410
+ expect ( file . path ) . toBe ( `./${ name } ` ) ;
411
+ } ) ;
412
+
382
413
function dragEvtFromItems (
383
414
items : DataTransferItem | DataTransferItem [ ] ,
384
415
type : string = "drop" ,
@@ -456,8 +487,8 @@ function dataTransferItemFromEntry(
456
487
}
457
488
458
489
function dataTransferItemWithFsHandle (
459
- file ?: File ,
460
- h ?: FileSystemFileHandle ,
490
+ file ?: File | null ,
491
+ h ?: FileSystemFileHandle | null ,
461
492
) : DataTransferItem {
462
493
return {
463
494
kind : "file" ,
@@ -570,7 +601,7 @@ function sortFiles<T extends File>(files: T[]) {
570
601
}
571
602
572
603
interface FileSystemFileHandle {
573
- getFile ( ) : Promise < File > ;
604
+ getFile ( ) : Promise < File | null > ;
574
605
}
575
606
576
607
type FileOrDirEntry = FileEntry | DirEntry ;
0 commit comments