| <!doctype html> |
| <title>readEntries() called multiple times</title> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="resources/fs-test-util.js"></script> |
| <script> |
| |
| // Needed as a rejected promise is lazily analyzed. |
| setup({ allow_uncaught_exception: true }); |
| |
| // Wrap a typical FS method call with trailing success/error callback |
| // methods into a promise. Pass object as first arg, method as second, |
| // and optional args. |
| // Example: file = await asPromise(dir, dir.getFile, path, {}); |
| function asPromise(receiver, func) { |
| const args = [...arguments].slice(2); |
| return new Promise((resolve, reject) => { |
| func.apply(receiver, [...args, resolve, reject]); |
| }); |
| } |
| |
| promise_test(async t => { |
| const fileSystem = |
| await asPromise(window, webkitRequestFileSystem, TEMPORARY, 100); |
| const dir = fileSystem.root; |
| await asPromise(null, removeAllInDirectory, dir); |
| t.add_cleanup(() => asPromise(null, removeAllInDirectory, dir)); |
| |
| const files = ['a', 'b', 'c', 'd', 'e', 'f']; |
| for (const file of files) { |
| await asPromise(dir, dir.getFile, file, {create: true}); |
| } |
| |
| const reader = dir.createReader(); |
| const read = []; |
| |
| while (true) { |
| // Call, but don't await as that could let the first one finish. |
| const p = asPromise(reader, reader.readEntries); |
| const q = asPromise(reader, reader.readEntries); |
| |
| // First call should have succeeded. |
| const entries = await p; |
| |
| // Second should have failed. |
| promise_rejects_dom(t, 'InvalidStateError', q, |
| 'Second call before first finishes should fail'); |
| |
| if (entries.length === 0) |
| break; |
| entries.forEach(entry => { read.push(entry.name); }); |
| } |
| |
| assert_array_equals(read.sort(), files.sort(), |
| 'Should read all files, despite failed calls.'); |
| |
| }, 'Verify that readEntries() fails predictably when called multiple times'); |
| |
| </script> |