diff --git a/beacon/beacon-readablestream.window.js b/beacon/beacon-readablestream.window.js new file mode 100644 index 00000000000000..fc7f81f884bdf4 --- /dev/null +++ b/beacon/beacon-readablestream.window.js @@ -0,0 +1,3 @@ +test(() => { + assert_throws(new TypeError(), () => navigator.sendBeacon("...", new ReadableStream())); +}, "sendBeacon() with a stream does not work due to the keepalive flag being set"); diff --git a/fetch/api/request/request-init-stream.any.js b/fetch/api/request/request-init-stream.any.js new file mode 100644 index 00000000000000..22e3f41bc2d8a3 --- /dev/null +++ b/fetch/api/request/request-init-stream.any.js @@ -0,0 +1,51 @@ +// META: global=window,worker + +"use strict"; + +async function assert_request(input, init) { + assert_throws(new TypeError(), () => new Request(input, init), "new Request()"); + assert_throws(new TypeError(), async () => await fetch(input, init), "fetch()"); +} + +promise_test(async () => { + const stream = new ReadableStream(); + stream.getReader(); + await assert_request("...", { method:"POST", body: stream }); +}, "Constructing a Request with a stream on which getReader() is called"); + +promise_test(async () => { + const stream = new ReadableStream(); + stream.getReader().read(); + await assert_request("...", { method:"POST", body: stream }); +}, "Constructing a Request with a stream on which read() is called"); + +promise_test(async () => { + const stream = new ReadableStream({ pull: c => c.enqueue(new Uint8Array()) }), + reader = stream.getReader(); + await reader.read(); + reader.releaseLock(); + await assert_request("...", { method:"POST", body: stream }); +}, "Constructing a Request with a stream on which read() and releaseLock() are called"); + +promise_test(async () => { + const request = new Request("...", { method: "POST", body: "..." }); + request.body.getReader(); + await assert_request(request); + assert_class_string(new Request(request, { body: "..." }), "Request"); +}, "Constructing a Request with a Request on which body.getReader() is called"); + +promise_test(async () => { + const request = new Request("...", { method: "POST", body: "..." }); + request.body.getReader().read(); + await assert_request(request); + assert_class_string(new Request(request, { body: "..." }), "Request"); +}, "Constructing a Request with a Request on which body.getReader().read() is called"); + +promise_test(async () => { + const request = new Request("...", { method: "POST", body: "..." }), + reader = request.body.getReader(); + await reader.read(); + reader.releaseLock(); + await assert_request(request); + assert_class_string(new Request(request, { body: "..." }), "Request"); +}, "Constructing a Request with a Request on which read() and releaseLock() are called"); diff --git a/fetch/api/response/response-from-stream.any.js b/fetch/api/response/response-from-stream.any.js new file mode 100644 index 00000000000000..93b29b42867f47 --- /dev/null +++ b/fetch/api/response/response-from-stream.any.js @@ -0,0 +1,23 @@ +// META: global=window,worker + +"use strict"; + +test(() => { + const stream = new ReadableStream(); + stream.getReader(); + assert_throws(new TypeError(), () => new Response(stream)); +}, "Constructing a Response with a stream on which getReader() is called"); + +test(() => { + const stream = new ReadableStream(); + stream.getReader().read(); + assert_throws(new TypeError(), () => new Response(stream)); +}, "Constructing a Response with a stream on which read() is called"); + +promise_test(async () => { + const stream = new ReadableStream({ pull: c => c.enqueue(new Uint8Array()) }), + reader = stream.getReader(); + await reader.read(); + reader.releaseLock(); + assert_throws(new TypeError(), () => new Response(stream)); +}, "Constructing a Response with a stream on which read() and releaseLock() are called"); diff --git a/xhr/send-data-readablestream.any.js b/xhr/send-data-readablestream.any.js new file mode 100644 index 00000000000000..cca6e76a042cc8 --- /dev/null +++ b/xhr/send-data-readablestream.any.js @@ -0,0 +1,27 @@ +// META: global=window,dedicatedworker,sharedworker + +function assert_xhr(stream) { + const client = new XMLHttpRequest(); + client.open("POST", "..."); + assert_throws(new TypeError(), () => client.send(stream)); +} + +test(() => { + const stream = new ReadableStream(); + stream.getReader(); + assert_xhr(stream); +}, "XMLHttpRequest: send() with a stream on which getReader() is called"); + +test(() => { + const stream = new ReadableStream(); + stream.getReader().read(); + assert_xhr(stream); +}, "XMLHttpRequest: send() with a stream on which read() is called"); + +promise_test(async () => { + const stream = new ReadableStream({ pull: c => c.enqueue(new Uint8Array()) }), + reader = stream.getReader(); + await reader.read(); + reader.releaseLock(); + assert_xhr(stream); +}, "XMLHttpRequest: send() with a stream on which read() and releaseLock() are called");