UNPKG

@testing-library/user-event

Version:
77 lines (72 loc) 3.09 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); require('../utils/click/isClickableInput.js'); var FileList = require('../utils/dataTransfer/FileList.js'); require('../utils/dataTransfer/Clipboard.js'); require('../event/eventMap.js'); require('../event/behavior/click.js'); require('../event/behavior/cut.js'); require('../event/behavior/keydown.js'); require('../event/behavior/keypress.js'); require('../event/behavior/keyup.js'); require('../event/behavior/paste.js'); require('@testing-library/dom'); require('../utils/edit/maxLength.js'); require('../utils/edit/isEditable.js'); var setFiles = require('../utils/edit/setFiles.js'); var isDisabled = require('../utils/misc/isDisabled.js'); var isElementType = require('../utils/misc/isElementType.js'); var getWindow = require('../utils/misc/getWindow.js'); require('../utils/keyDef/readNextDescriptor.js'); require('../utils/misc/level.js'); require('../options.js'); require('../setup/index.js'); var config = require('../setup/config.js'); async function upload(element, fileOrFiles) { const input = isElementType.isElementType(element, 'label') ? element.control : element; if (!input || !isElementType.isElementType(input, 'input', { type: 'file' })) { throw new TypeError(`The ${input === element ? 'given' : 'associated'} ${input === null || input === void 0 ? void 0 : input.tagName} element does not accept file uploads`); } if (isDisabled.isDisabled(element)) return; const files = (Array.isArray(fileOrFiles) ? fileOrFiles : [ fileOrFiles ]).filter((file)=>!this[config.Config].applyAccept || isAcceptableFile(file, input.accept)).slice(0, input.multiple ? undefined : 1); const fileDialog = ()=>{ var ref; // do not fire an input event if the file selection does not change if (files.length === ((ref = input.files) === null || ref === void 0 ? void 0 : ref.length) && files.every((f, i)=>{ var ref; return f === ((ref = input.files) === null || ref === void 0 ? void 0 : ref.item(i)); })) { return; } setFiles.setFiles(input, FileList.createFileList(getWindow.getWindow(element), files)); this.dispatchUIEvent(input, 'input'); this.dispatchUIEvent(input, 'change'); }; input.addEventListener('fileDialog', fileDialog); await this.click(element); input.removeEventListener('fileDialog', fileDialog); } function isAcceptableFile(file, accept) { if (!accept) { return true; } const wildcards = [ 'audio/*', 'image/*', 'video/*' ]; return accept.split(',').some((acceptToken)=>{ if (acceptToken.startsWith('.')) { // tokens starting with a dot represent a file extension return file.name.endsWith(acceptToken); } else if (wildcards.includes(acceptToken)) { return file.type.startsWith(acceptToken.substr(0, acceptToken.length - 1)); } return file.type === acceptToken; }); } exports.upload = upload;