// Changing the body after it have been passed to Response/Request
// should not change the outcome of the consumed body
const url =
'http://a';
const method =
'post';
promise_test(async t => {
const body =
new FormData();
body.set(
'a',
'1');
const res =
new Response(body);
const req =
new Request(url, { method, body });
body.set(
'a',
'2');
assert_true((await res.formData()).get(
'a') ===
'1');
assert_true((await req.formData()).get(
'a') ===
'1');
},
'FormData is cloned');
promise_test(async t => {
const body =
new URLSearchParams({a:
'1'});
const res =
new Response(body);
const req =
new Request(url, { method, body });
body.set(
'a',
'2');
assert_true((await res.formData()).get(
'a') ===
'1');
assert_true((await req.formData()).get(
'a') ===
'1');
},
'URLSearchParams is cloned');
promise_test(async t => {
const body =
new Uint8Array([97]);
// a
const res =
new Response(body);
const req =
new Request(url, { method, body });
body[0] = 98;
// b
assert_true(await res.text() ===
'a');
assert_true(await req.text() ===
'a');
},
'TypedArray is cloned');
promise_test(async t => {
const body =
new Uint8Array([97]);
// a
const res =
new Response(body.buffer);
const req =
new Request(url, { method, body: body.buffer });
body[0] = 98;
// b
assert_true(await res.text() ===
'a');
assert_true(await req.text() ===
'a');
},
'ArrayBuffer is cloned');
promise_test(async t => {
const body =
new Blob([
'a']);
const res =
new Response(body);
const req =
new Request(url, { method, body });
assert_true(await res.blob() !== body);
assert_true(await req.blob() !== body);
},
'Blob is cloned');