fix(utils): explicitly exclude file type from text inputs

This commit is contained in:
Paul Chavard 2022-08-02 17:46:57 +02:00
parent b446e4867f
commit fdbcdfd043
2 changed files with 85 additions and 3 deletions

View file

@ -1,6 +1,13 @@
import { suite, test, expect } from 'vitest';
import { show, hide, toggle } from './utils';
import {
show,
hide,
toggle,
isSelectElement,
isTextInputElement,
isCheckboxOrRadioInputElement
} from './utils';
suite('@utils', () => {
test('show', () => {
@ -26,4 +33,79 @@ suite('@utils', () => {
toggle(input);
expect(input.classList.contains('hidden')).toBeFalsy();
});
test('isSelectElement', () => {
const select = document.createElement('select');
const input = document.createElement('input');
const textarea = document.createElement('textarea');
expect(isSelectElement(select)).toBeTruthy();
expect(isSelectElement(input)).toBeFalsy();
expect(isSelectElement(textarea)).toBeFalsy();
input.type = 'text';
expect(isSelectElement(input)).toBeFalsy();
input.type = 'email';
expect(isSelectElement(input)).toBeFalsy();
input.type = 'checkbox';
expect(isSelectElement(input)).toBeFalsy();
input.type = 'radio';
expect(isSelectElement(input)).toBeFalsy();
input.type = 'file';
expect(isSelectElement(input)).toBeFalsy();
});
test('isTextInputElement', () => {
const select = document.createElement('select');
const input = document.createElement('input');
const textarea = document.createElement('textarea');
expect(isTextInputElement(select)).toBeFalsy();
expect(isTextInputElement(input)).toBeTruthy();
expect(isTextInputElement(textarea)).toBeTruthy();
input.type = 'text';
expect(isTextInputElement(input)).toBeTruthy();
input.type = 'email';
expect(isTextInputElement(input)).toBeTruthy();
input.type = 'checkbox';
expect(isTextInputElement(input)).toBeFalsy();
input.type = 'radio';
expect(isTextInputElement(input)).toBeFalsy();
input.type = 'file';
expect(isTextInputElement(input)).toBeFalsy();
});
test('isCheckboxOrRadioInputElement', () => {
const select = document.createElement('select');
const input = document.createElement('input');
const textarea = document.createElement('textarea');
expect(isCheckboxOrRadioInputElement(select)).toBeFalsy();
expect(isCheckboxOrRadioInputElement(input)).toBeFalsy();
expect(isCheckboxOrRadioInputElement(textarea)).toBeFalsy();
input.type = 'text';
expect(isCheckboxOrRadioInputElement(input)).toBeFalsy();
input.type = 'email';
expect(isCheckboxOrRadioInputElement(input)).toBeFalsy();
input.type = 'checkbox';
expect(isCheckboxOrRadioInputElement(input)).toBeTruthy();
input.type = 'radio';
expect(isCheckboxOrRadioInputElement(input)).toBeTruthy();
input.type = 'file';
expect(isCheckboxOrRadioInputElement(input)).toBeFalsy();
});
});

View file

@ -297,7 +297,7 @@ export function isTextInputElement(
): element is HTMLInputElement {
return (
['INPUT', 'TEXTAREA'].includes(element.tagName) &&
element.type != 'checkbox' &&
element.type != 'radio'
typeof element.type == 'string' &&
!['checkbox', 'radio', 'file'].includes(element.type)
);
}