diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2019-12-24 07:32:42 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-24 07:32:42 -0500 |
commit | 8002c6bc53041c55dc1148fed008b9a229df0e9b (patch) | |
tree | 124ddcb0a400cb4ff13a23acc57e959009ff6c50 /tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWritableFileStream-piped.js | |
parent | 10fa5fa68a2244903db35e617b48ce3ccdbdc87a (diff) | |
parent | 110ca49f65ea4c20d1e89276e35b9f757c56e35d (diff) | |
download | servo-8002c6bc53041c55dc1148fed008b9a229df0e9b.tar.gz servo-8002c6bc53041c55dc1148fed008b9a229df0e9b.zip |
Auto merge of #25375 - servo-wpt-sync:wpt_update_24-12-2019, r=servo-wpt-sync
Sync WPT with upstream (24-12-2019)
Automated downstream sync of changes from upstream as of 24-12-2019.
[no-wpt-sync]
r? @servo-wpt-sync
Diffstat (limited to 'tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWritableFileStream-piped.js')
-rw-r--r-- | tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWritableFileStream-piped.js | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWritableFileStream-piped.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWritableFileStream-piped.js new file mode 100644 index 00000000000..59fc1e3d136 --- /dev/null +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemWritableFileStream-piped.js @@ -0,0 +1,135 @@ +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'foo_string.txt', root); + const wfs = await handle.createWritable(); + + const rs = recordingReadableStream({ + start(controller) { + controller.enqueue('foo_string'); + controller.close(); + } + }); + + await rs.pipeTo(wfs, { preventCancel: true }); + assert_equals(await getFileContents(handle), 'foo_string'); + assert_equals(await getFileSize(handle), 10); +}, 'can be piped to with a string'); + +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'foo_arraybuf.txt', root); + const wfs = await handle.createWritable(); + const buf = new ArrayBuffer(3); + const intView = new Uint8Array(buf); + intView[0] = 0x66; + intView[1] = 0x6f; + intView[2] = 0x6f; + + const rs = recordingReadableStream({ + start(controller) { + controller.enqueue(buf); + controller.close(); + } + }); + + await rs.pipeTo(wfs, { preventCancel: true }); + assert_equals(await getFileContents(handle), 'foo'); + assert_equals(await getFileSize(handle), 3); +}, 'can be piped to with an ArrayBuffer'); + +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'foo_blob.txt', root); + const wfs = await handle.createWritable(); + + const rs = recordingReadableStream({ + start(controller) { + controller.enqueue(new Blob(['foo'])); + controller.close(); + } + }); + + await rs.pipeTo(wfs, { preventCancel: true }); + assert_equals(await getFileContents(handle), 'foo'); + assert_equals(await getFileSize(handle), 3); +}, 'can be piped to with a Blob'); + +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'foo_write_param.txt', root); + const wfs = await handle.createWritable(); + + const rs = recordingReadableStream({ + start(controller) { + controller.enqueue({type: 'write', data: 'foobar'}); + controller.close(); + } + }); + + await rs.pipeTo(wfs, { preventCancel: true }); + assert_equals(await getFileContents(handle), 'foobar'); + assert_equals(await getFileSize(handle), 6); +}, 'can be piped to with a param object with write command'); + +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'foo_write_param.txt', root); + const wfs = await handle.createWritable(); + + const rs = recordingReadableStream({ + start(controller) { + controller.enqueue({type: 'write', data: 'foobar'}); + controller.enqueue({type: 'truncate', size: 10}); + controller.enqueue({type: 'write', position: 0, data: 'baz'}); + controller.close(); + } + }); + + await rs.pipeTo(wfs, { preventCancel: true }); + assert_equals(await getFileContents(handle), 'bazbar\0\0\0\0'); + assert_equals(await getFileSize(handle), 10); +}, 'can be piped to with a param object with multiple commands'); + +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'foo_write_queued.txt', root); + const wfs = await handle.createWritable(); + + const rs = recordingReadableStream({ + start(controller) { + controller.enqueue('foo'); + controller.enqueue('bar'); + controller.enqueue('baz'); + controller.close(); + } + }); + + await rs.pipeTo(wfs, { preventCancel: true }); + assert_equals(await getFileContents(handle), 'foobarbaz'); + assert_equals(await getFileSize(handle), 9); +}, 'multiple operations can be queued'); + +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'fetched.txt', root); + const wfs = await handle.createWritable(); + + const response = await fetch('data:text/plain,fetched from far'); + const body = await response.body; + await body.pipeTo(wfs, { preventCancel: true }); + assert_equals(await getFileContents(handle), 'fetched from far'); + assert_equals(await getFileSize(handle), 16); +}, 'plays well with fetch'); + +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'aborted should_be_empty.txt', root); + const wfs = await handle.createWritable(); + + const response = await fetch('data:text/plain,fetched from far'); + const body = await response.body; + + const abortController = new AbortController(); + const signal = abortController.signal; + + const promise = body.pipeTo(wfs, { signal }); + await abortController.abort(); + + await promise_rejects(t, 'AbortError', promise, 'stream is aborted'); + await promise_rejects(t, TypeError(), wfs.close(), 'stream cannot be closed to flush writes'); + + assert_equals(await getFileContents(handle), ''); + assert_equals(await getFileSize(handle), 0); +}, 'abort() aborts write'); |