Source code

Revision control

Copy as Markdown

Other Tools

// 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);
}