@testing-library/user-event
Version:
Fire events the same way the user does
40 lines (35 loc) • 1.56 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var isElementType = require('../misc/isElementType.js');
var getValue = require('./getValue.js');
var maxLengthSupportedTypes;
(function(maxLengthSupportedTypes) {
maxLengthSupportedTypes['email'] = 'email';
maxLengthSupportedTypes['password'] = 'password';
maxLengthSupportedTypes['search'] = 'search';
maxLengthSupportedTypes['telephone'] = 'telephone';
maxLengthSupportedTypes['text'] = 'text';
maxLengthSupportedTypes['url'] = 'url';
})(maxLengthSupportedTypes || (maxLengthSupportedTypes = {}));
function getSpaceUntilMaxLength(element) {
const value = getValue.getValue(element);
/* istanbul ignore if */ if (value === null) {
return undefined;
}
const maxLength = getSanitizedMaxLength(element);
return maxLength ? maxLength - value.length : undefined;
}
// can't use .maxLength property because of a jsdom bug:
// https://github.com/jsdom/jsdom/issues/2927
function getSanitizedMaxLength(element) {
if (!supportsMaxLength(element)) {
return undefined;
}
var ref;
const attr = (ref = element.getAttribute('maxlength')) !== null && ref !== void 0 ? ref : '';
return /^\d+$/.test(attr) && Number(attr) >= 0 ? Number(attr) : undefined;
}
function supportsMaxLength(element) {
return isElementType.isElementType(element, 'textarea') || isElementType.isElementType(element, 'input') && Boolean(maxLengthSupportedTypes[element.type]);
}
exports.getSpaceUntilMaxLength = getSpaceUntilMaxLength;