| // This file defines a directory_test() function that can be used to define |
| // tests that require a FileSystemDirectoryHandle. The implementation of that |
| // function in this file will return an empty directory in the sandboxed file |
| // system. |
| // |
| // Another implementation of this function exists in |
| // file-system-access/local-fs-test-helpers.js, where that version uses the |
| // local file system instead. |
| |
| function getFileSystemType() { |
| return 'sandboxed'; |
| } |
| |
| async function cleanupDirectory(dir, ignoreRejections) { |
| // Get a snapshot of the entries. |
| const entries = await Array.fromAsync(dir.values()); |
| |
| // Call removeEntry on all of them. |
| const remove_entry_promises = entries.map( |
| entry => |
| dir.removeEntry(entry.name, {recursive: entry.kind === 'directory'})); |
| |
| // Wait for them all to resolve or reject, ignoring any rejections. |
| await Promise.allSettled(remove_entry_promises); |
| } |
| |
| function directory_test(func, description) { |
| promise_test(async t => { |
| const dir = await navigator.storage.getDirectory(); |
| |
| // To be extra resilient against bad tests, cleanup before every test. |
| await cleanupDirectory(dir); |
| |
| // Cleanup after every test. |
| t.add_cleanup(async () => { |
| // Ignore any rejections since other cleanup code may have deleted them |
| // before we could. |
| await cleanupDirectory(dir); |
| }); |
| |
| |
| await func(t, dir); |
| }, description); |
| } |