async function run_test() { let access; try { let root = await navigator.storage.getDirectory(); let child = await root.getFileHandle("data", {create: true}); access = await child.createSyncAccessHandle(); } catch (e) { console.log("test setup failed"); throw e; } // We won't be able to open the file for writing since there is already a // file handle for it. if (Module._try_open_wronly() != 0) { throw "Did not get expected EACCES opening file for writing"; } if (Module._try_open_rdwr() != 0) { throw "Did not get expected EACCES opening file for reading and writing"; } if (Module._try_open_rdonly() != 1) { throw "Unexpected failure opening file for reading only"; } if (Module._try_truncate() != 0) { throw "Did not get expected EIO when resizing file"; } if (Module._try_unlink() != 0) { throw "Did not get expected EIO when unlinking file"; } await access.close(); // We can open the file in any mode now that there is no open access // handle for it. if (Module._try_open_wronly() != 1) { throw "Unexpected failure opening file for writing"; } if (Module._try_open_rdwr() != 1) { throw "Unexpected failure opening file for reading and writing"; } if (Module._try_open_rdonly() != 1) { throw "Unexpected failure opening file for reading"; } if (Module._try_truncate() != 1) { throw "Unexpected failure when resizing file"; } if (Module._try_oob_read() != 0) { throw "Did not get expected EINVAL doing out of bounds read"; } if (Module._try_oob_write() != 0) { throw "Did not get expected EINVAL doing out of bounds write"; } if (Module._try_unlink() != 1) { throw "Did not succeed to unlink the file (which should work now that " + "nothing prevents it)"; } if (Module._try_rename_dir() != 0) { throw "Did not get expected EBUSY while renaming directory"; } Module._report_result(0); }