import assert from "node:assert/strict"; import { afterEach, describe, it } from "node:test"; import { getUserControlledFields } from "./getUserControlledFields"; describe("getUserControlledFields", () => { afterEach(() => { document.body.innerHTML = ""; }); it("excludes hidden, file, button, disabled and readonly controls", () => { const form = document.createElement("form"); const text = document.createElement("input"); text.type = "text"; text.name = "text"; const hidden = document.createElement("input"); hidden.type = "hidden"; hidden.name = "hidden"; const file = document.createElement("input"); file.type = "file"; file.name = "file"; const button = document.createElement("button"); button.type = "button"; const disabled = document.createElement("input"); disabled.type = "text"; disabled.name = "disabled"; disabled.disabled = true; const readonly = document.createElement("input"); readonly.type = "text"; readonly.name = "readonly"; readonly.readOnly = true; form.append(text, hidden, file, button, disabled, readonly); document.body.appendChild(form); const fields = getUserControlledFields(form); assert.deepStrictEqual(fields.map((item) => item.getAttribute("name")), [ "text" ]); }); it("does not duplicate custom component input", () => { const form = document.createElement("form"); const customInput = document.createElement("input"); customInput.type = "text"; customInput.name = "custom"; customInput.setAttribute("data-js-component-input", "custom"); form.appendChild(customInput); document.body.appendChild(form); const fields = getUserControlledFields(form); assert.strictEqual(fields.length, 1); assert.strictEqual(fields[0], customInput); }); });