Skip to content

Commit 31a3c7d

Browse files
committed
chore: use real HTMLFormElement in the browser
Signed-off-by: Logan McAnsh <[email protected]>
1 parent 780fdc6 commit 31a3c7d

File tree

1 file changed

+60
-31
lines changed

1 file changed

+60
-31
lines changed

packages/form-data/test/form-data.spec.js

Lines changed: 60 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -260,41 +260,70 @@ export const test = (test) => {
260260
);
261261
});
262262

263-
test("Should allow passing a form element", () => {
264-
class FakeForm {
265-
get [Symbol.toStringTag]() {
266-
return "HTMLFormElement";
263+
test("Should allow passing a form element", () => {
264+
/** @type {globalThis.HTMLFormElement} */
265+
let form;
266+
267+
if (typeof window === 'undefined') {
268+
/** @implements {globalThis.HTMLFormElement} */
269+
class FakeForm {
270+
get [Symbol.toStringTag]() {
271+
return "HTMLFormElement";
272+
}
273+
274+
toString() {
275+
return `<form></form>`;
276+
}
277+
278+
// @ts-ignore
279+
get elements() {
280+
return [
281+
{
282+
tagName: "INPUT",
283+
name: "inside",
284+
value: "",
285+
},
286+
{
287+
tagName: "INPUT",
288+
name: "outside",
289+
value: "",
290+
form: "my-form",
291+
},
292+
{
293+
tagName: "INPUT",
294+
name: "remember-me",
295+
value: "on",
296+
checked: true,
297+
}
298+
]
299+
}
300+
301+
get id() {
302+
return "my-form"
303+
}
267304
}
268305

269-
get elements() {
270-
return [
271-
{
272-
tagName: "INPUT",
273-
name: "inside",
274-
value: "",
275-
},
276-
{
277-
tagName: "INPUT",
278-
name: "outside",
279-
value: "",
280-
form: "my-form",
281-
},
282-
{
283-
tagName: "INPUT",
284-
name: "remember-me",
285-
value: "on",
286-
checked: true,
287-
}
288-
]
289-
}
290-
291-
get id() {
292-
return "my-form"
293-
}
306+
form = /** @type {globalThis.HTMLFormElement} */ (/** @type {unknown} */ (new FakeForm()))
307+
} else {
308+
form = document.createElement('form');
309+
let inside = document.createElement('input')
310+
let outside = document.createElement('input')
311+
let checkbox = document.createElement('input')
312+
313+
form.id = 'my-form'
314+
inside.name = 'inside'
315+
outside.name = 'outside'
316+
outside.setAttribute('form', 'my-form')
317+
checkbox.name = "remember-me"
318+
checkbox.type = 'checkbox'
319+
checkbox.checked = true;
320+
321+
form.appendChild(inside);
322+
form.appendChild(checkbox);
323+
document.body.appendChild(form);
324+
document.body.appendChild(outside);
294325
}
295326

296-
let form = /** @type {globalThis.HTMLFormElement} */ (/** @type {unknown} */ (new FakeForm()))
297-
298327
const formData = new FormData(form);
299328
assert.equal(formData.has("inside"), true)
300329
assert.equal(formData.has("outside"), true)

0 commit comments

Comments
 (0)