diff options
-rw-r--r-- | cli/tests/unit/fetch_test.ts | 2 | ||||
-rw-r--r-- | cli/tests/unit/response_test.ts | 11 | ||||
-rw-r--r-- | extensions/fetch/22_body.js | 34 |
3 files changed, 22 insertions, 25 deletions
diff --git a/cli/tests/unit/fetch_test.ts b/cli/tests/unit/fetch_test.ts index 24a820dba..45ab2d12c 100644 --- a/cli/tests/unit/fetch_test.ts +++ b/cli/tests/unit/fetch_test.ts @@ -275,7 +275,7 @@ unitTest( await response.formData(); }, TypeError, - "Invalid form data", + "Body can not be decoded as form data", ); }, ); diff --git a/cli/tests/unit/response_test.ts b/cli/tests/unit/response_test.ts index 1faf8991a..c1ef80fb6 100644 --- a/cli/tests/unit/response_test.ts +++ b/cli/tests/unit/response_test.ts @@ -43,18 +43,17 @@ unitTest(async function responseBlob() { assertEquals(await blob.arrayBuffer(), new Uint8Array([1, 2, 3]).buffer); }); -// TODO(lucacasonato): re-enable test once #10002 is fixed. -unitTest({ ignore: true }, async function responseFormData() { +unitTest(async function responseFormData() { const input = new FormData(); input.append("hello", "world"); - const response = new Response(input, { - headers: { "content-type": "application/x-www-form-urlencoded" }, - }); + const response = new Response(input); + const contentType = response.headers.get("content-type")!; + assert(contentType.startsWith("multipart/form-data")); const formDataPromise = response.formData(); assert(formDataPromise instanceof Promise); const formData = await formDataPromise; assert(formData instanceof FormData); - assertEquals(formData, input); + assertEquals([...formData], [...input]); }); unitTest(function customInspectFunction(): void { diff --git a/extensions/fetch/22_body.js b/extensions/fetch/22_body.js index 2a1a91159..97ed57c8b 100644 --- a/extensions/fetch/22_body.js +++ b/extensions/fetch/22_body.js @@ -286,27 +286,25 @@ }); case "FormData": { if (mimeType !== null) { - if (mimeType !== null) { - const essence = mimesniff.essence(mimeType); - if (essence === "multipart/form-data") { - const boundary = mimeType.parameters.get("boundary"); - if (boundary === null) { - throw new TypeError( - "Missing boundary parameter in mime type of multipart formdata.", - ); - } - return parseFormData(bytes, boundary); - } else if (essence === "application/x-www-form-urlencoded") { - const entries = parseUrlEncoded(bytes); - return formDataFromEntries( - ArrayPrototypeMap( - entries, - (x) => ({ name: x[0], value: x[1] }), - ), + const essence = mimesniff.essence(mimeType); + if (essence === "multipart/form-data") { + const boundary = mimeType.parameters.get("boundary"); + if (boundary === null) { + throw new TypeError( + "Missing boundary parameter in mime type of multipart formdata.", ); } + return parseFormData(bytes, boundary); + } else if (essence === "application/x-www-form-urlencoded") { + const entries = parseUrlEncoded(bytes); + return formDataFromEntries( + ArrayPrototypeMap( + entries, + (x) => ({ name: x[0], value: x[1] }), + ), + ); } - throw new TypeError("Invalid form data"); + throw new TypeError("Body can not be decoded as form data"); } throw new TypeError("Missing content type"); } |