@testing-library/user-event
Version:
Fire events the same way the user does
43 lines (40 loc) • 1.7 kB
JavaScript
;
require('../../utils/click/isClickableInput.js');
require('../../utils/dataTransfer/Clipboard.js');
require('../eventMap.js');
var dispatchEvent = require('../dispatchEvent.js');
require('../../utils/edit/maxLength.js');
require('../../utils/edit/isEditable.js');
var focus = require('../../utils/focus/focus.js');
var getWindow = require('../../utils/misc/getWindow.js');
var isElementType = require('../../utils/misc/isElementType.js');
var blur = require('../../utils/focus/blur.js');
var isFocusable = require('../../utils/focus/isFocusable.js');
require('../../utils/keyDef/readNextDescriptor.js');
var cloneEvent = require('../../utils/misc/cloneEvent.js');
require('@testing-library/dom');
require('../../utils/misc/level.js');
require('../../options.js');
var registry = require('./registry.js');
registry.behavior.click = (event, target, config)=>{
const context = target.closest('button,input,label,select,textarea');
const control = context && isElementType.isElementType(context, 'label') && context.control;
if (control) {
return ()=>{
if (isFocusable.isFocusable(control)) {
focus.focus(control);
}
dispatchEvent.dispatchEvent(config, control, cloneEvent.cloneEvent(event));
};
} else if (isElementType.isElementType(target, 'input', {
type: 'file'
})) {
return ()=>{
// blur fires when the file selector pops up
blur.blur(target);
target.dispatchEvent(new (getWindow.getWindow(target)).Event('fileDialog'));
// focus fires after the file selector has been closed
focus.focus(target);
};
}
};