import { describe, expect, it } from 'vitest'; import { checkFormControls } from '../../scripts/check-ui-styles.mjs'; const filename = 'src/routes/example/+page.svelte'; describe('shared form control guard', () => { it.each([ '', ' type="text"', ' type="search"', ' type="password"', ' type="email"', ' type="url"', ' type="tel"', ' type="number"', ' type="time"', ' type={visible ? "text" : "password"}' ])('rejects raw input%s with a useful location', (attributes) => { expect(checkFormControls(`
\n\n
`, filename)).toEqual([ `${filename}:2: use Field with Input instead of raw ` ]); }); it('finds selects nested in blocks without confusing event expressions for markup', () => { const source = '{#if ready}{/if}'; expect(checkFormControls(source, filename)).toEqual([ `${filename}:1: use Field with Select instead of raw `) .join('\n'); expect(checkFormControls(source, filename)).toEqual([]); expect(checkFormControls('', filename)).toEqual([]); }); it('ignores comments, script strings and shared components', () => { const source = '', 'src/lib/ui/components/primitives/Input.svelte') ).toEqual([]); expect( checkFormControls('', 'src/lib/ui/components/primitives/Select.svelte') ).toEqual([]); expect( checkFormControls('', 'src/lib/ui/components/primitives/Field.svelte') ).toHaveLength(1); expect(checkFormControls('', 'src/lib/ui/components/Input.svelte')).toHaveLength( 1 ); }); });