@@ -379,6 +379,37 @@ it("should not use getAsFileSystemHandle when not in a secure context", async ()
379379 globalThis . isSecureContext = true ;
380380} ) ;
381381
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+
382413function dragEvtFromItems (
383414 items : DataTransferItem | DataTransferItem [ ] ,
384415 type : string = "drop" ,
@@ -456,8 +487,8 @@ function dataTransferItemFromEntry(
456487}
457488
458489function dataTransferItemWithFsHandle (
459- file ?: File ,
460- h ?: FileSystemFileHandle ,
490+ file ?: File | null ,
491+ h ?: FileSystemFileHandle | null ,
461492) : DataTransferItem {
462493 return {
463494 kind : "file" ,
@@ -570,7 +601,7 @@ function sortFiles<T extends File>(files: T[]) {
570601}
571602
572603interface FileSystemFileHandle {
573- getFile ( ) : Promise < File > ;
604+ getFile ( ) : Promise < File | null > ;
574605}
575606
576607type FileOrDirEntry = FileEntry | DirEntry ;
0 commit comments