From 55632266e9f84b456626d3536b4e2ee8365f600f Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Tue, 20 Jul 2021 00:11:50 +0200 Subject: tests: re-enable disabled Response.formData test (#11453) --- cli/tests/unit/fetch_test.ts | 2 +- cli/tests/unit/response_test.ts | 11 +++++------ 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"); } -- cgit v1.2.3