From 356883ffd79024e68629f065557b82097c22f81a Mon Sep 17 00:00:00 2001 From: Antonio Ventilii Date: Wed, 29 Jan 2025 20:33:59 +0100 Subject: [PATCH 1/2] chore: remove redundant statement for autocomplete in Input --- src/lib/components/Input.svelte | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lib/components/Input.svelte b/src/lib/components/Input.svelte index 83b000bd..7f4b74a7 100644 --- a/src/lib/components/Input.svelte +++ b/src/lib/components/Input.svelte @@ -156,10 +156,6 @@ ({ selectionStart, selectionEnd } = inputElement); }; - $: step = inputType === "number" ? (step ?? "any") : undefined; - $: autocomplete = - inputType !== "number" && !currency ? (autocomplete ?? "off") : undefined; - let displayInnerEnd: boolean; $: displayInnerEnd = nonNullish($$slots["inner-end"]); From f88f893ff3586c4113c9ef031eca5a52cf11f1f6 Mon Sep 17 00:00:00 2001 From: Antonio Ventilii Date: Wed, 29 Jan 2025 20:58:56 +0100 Subject: [PATCH 2/2] test: add tests --- src/tests/lib/components/Input.spec.ts | 60 +++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/src/tests/lib/components/Input.spec.ts b/src/tests/lib/components/Input.spec.ts index 2b990e98..44576a89 100644 --- a/src/tests/lib/components/Input.spec.ts +++ b/src/tests/lib/components/Input.spec.ts @@ -7,6 +7,9 @@ import InputTest from "./InputTest.svelte"; import InputValueTest from "./InputValueTest.svelte"; describe("Input", () => { + type InputType = "icp" | "number" | "text" | "currency"; + type AutoComplete = "on" | "off" | undefined; + const props = { name: "name", placeholder: "test.placeholder" }; it("should render an input", () => { @@ -34,7 +37,7 @@ describe("Input", () => { container, }: { attribute: string; - expected: string; + expected: string | null | undefined; container: HTMLElement; }) => { const input: HTMLInputElement | null = container.querySelector("input"); @@ -553,4 +556,59 @@ describe("Input", () => { expect(input === document.activeElement).toBe(true); }); + + describe.each(["number"])("inputType=%s", (inputType) => { + it("should never set autocomplete", () => { + const { container: container1 } = render(Input, { + props: { + ...props, + inputType: inputType as InputType, + autocomplete: "off", + }, + }); + + testGetAttribute({ + container: container1, + attribute: "autocomplete", + expected: null, + }); + + const { container: container2 } = render(Input, { + props: { + ...props, + inputType: inputType as InputType, + autocomplete: "on", + }, + }); + + testGetAttribute({ + container: container2, + attribute: "autocomplete", + expected: null, + }); + }); + }); + + describe.each(["icp", "text", "currency"])("inputType='%s'", (inputType) => { + describe.each([["on"], ["off"], [undefined, "off"]])( + "autocomplete='%s'", + (autocomplete, expected = undefined) => { + it(`should set autocomplete to '${expected}' for inputType='${inputType}' and autocomplete='${autocomplete}'`, () => { + const { container } = render(Input, { + props: { + ...props, + inputType: inputType as InputType, + autocomplete: autocomplete as AutoComplete, + }, + }); + + testGetAttribute({ + container, + attribute: "autocomplete", + expected: autocomplete ?? expected, + }); + }); + }, + ); + }); });