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