| // META: global=window,worker |
| |
| "use strict"; |
| |
| const duplex = "half"; |
| const method = "POST"; |
| |
| test(() => { |
| const body = new ReadableStream(); |
| const request = new Request("...", { method, body, duplex }); |
| assert_equals(request.body, body); |
| }, "Constructing a Request with a stream holds the original object."); |
| |
| test((t) => { |
| const body = new ReadableStream(); |
| body.getReader(); |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body, duplex })); |
| }, "Constructing a Request with a stream on which getReader() is called"); |
| |
| test((t) => { |
| const body = new ReadableStream(); |
| body.getReader().read(); |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body, duplex })); |
| }, "Constructing a Request with a stream on which read() is called"); |
| |
| promise_test(async (t) => { |
| const body = new ReadableStream({ pull: c => c.enqueue(new Uint8Array()) }); |
| const reader = body.getReader(); |
| await reader.read(); |
| reader.releaseLock(); |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body, duplex })); |
| }, "Constructing a Request with a stream on which read() and releaseLock() are called"); |
| |
| test((t) => { |
| const request = new Request("...", { method: "POST", body: "..." }); |
| request.body.getReader(); |
| assert_throws_js(TypeError, () => new Request(request)); |
| // This doesn't throw. |
| new Request(request, { body: "..." }); |
| }, "Constructing a Request with a Request on which body.getReader() is called"); |
| |
| test((t) => { |
| const request = new Request("...", { method: "POST", body: "..." }); |
| request.body.getReader().read(); |
| assert_throws_js(TypeError, () => new Request(request)); |
| // This doesn't throw. |
| new Request(request, { body: "..." }); |
| }, "Constructing a Request with a Request on which body.getReader().read() is called"); |
| |
| promise_test(async (t) => { |
| const request = new Request("...", { method: "POST", body: "..." }); |
| const reader = request.body.getReader(); |
| await reader.read(); |
| reader.releaseLock(); |
| assert_throws_js(TypeError, () => new Request(request)); |
| // This doesn't throw. |
| new Request(request, { body: "..." }); |
| }, "Constructing a Request with a Request on which read() and releaseLock() are called"); |
| |
| test((t) => { |
| new Request("...", { method, body: null }); |
| }, "It is OK to omit .duplex when the body is null."); |
| |
| test((t) => { |
| new Request("...", { method, body: "..." }); |
| }, "It is OK to omit .duplex when the body is a string."); |
| |
| test((t) => { |
| new Request("...", { method, body: new Uint8Array(3) }); |
| }, "It is OK to omit .duplex when the body is a Uint8Array."); |
| |
| test((t) => { |
| new Request("...", { method, body: new Blob([]) }); |
| }, "It is OK to omit .duplex when the body is a Blob."); |
| |
| test((t) => { |
| const body = new ReadableStream(); |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body })); |
| }, "It is error to omit .duplex when the body is a ReadableStream."); |
| |
| test((t) => { |
| new Request("...", { method, body: null, duplex: "half" }); |
| }, "It is OK to set .duplex = 'half' when the body is null."); |
| |
| test((t) => { |
| new Request("...", { method, body: "...", duplex: "half" }); |
| }, "It is OK to set .duplex = 'half' when the body is a string."); |
| |
| test((t) => { |
| new Request("...", { method, body: new Uint8Array(3), duplex: "half" }); |
| }, "It is OK to set .duplex = 'half' when the body is a Uint8Array."); |
| |
| test((t) => { |
| new Request("...", { method, body: new Blob([]), duplex: "half" }); |
| }, "It is OK to set .duplex = 'half' when the body is a Blob."); |
| |
| test((t) => { |
| const body = new ReadableStream(); |
| new Request("...", { method, body, duplex: "half" }); |
| }, "It is OK to set .duplex = 'half' when the body is a ReadableStream."); |
| |
| test((t) => { |
| const body = null; |
| const duplex = "full"; |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body, duplex })); |
| }, "It is error to set .duplex = 'full' when the body is null."); |
| |
| test((t) => { |
| const body = "..."; |
| const duplex = "full"; |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body, duplex })); |
| }, "It is error to set .duplex = 'full' when the body is a string."); |
| |
| test((t) => { |
| const body = new Uint8Array(3); |
| const duplex = "full"; |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body, duplex })); |
| }, "It is error to set .duplex = 'full' when the body is a Uint8Array."); |
| |
| test((t) => { |
| const body = new Blob([]); |
| const duplex = "full"; |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body, duplex })); |
| }, "It is error to set .duplex = 'full' when the body is a Blob."); |
| |
| test((t) => { |
| const body = new ReadableStream(); |
| const duplex = "full"; |
| assert_throws_js(TypeError, |
| () => new Request("...", { method, body, duplex })); |
| }, "It is error to set .duplex = 'full' when the body is a ReadableStream."); |
| |
| test((t) => { |
| const body = new ReadableStream(); |
| const duplex = "half"; |
| const req1 = new Request("...", { method, body, duplex }); |
| const req2 = new Request(req1); |
| }, "It is OK to omit duplex when init.body is not given and input.body is given."); |
| |