diff --git a/src/__tests__/upload.js b/src/__tests__/upload.js index fb6a2b7d..f09a6ae2 100644 --- a/src/__tests__/upload.js +++ b/src/__tests__/upload.js @@ -163,55 +163,3 @@ test('should call onChange/input bubbling up the event when a file is selected', expect(onInputInput).toHaveBeenCalledTimes(1) expect(onInputForm).toHaveBeenCalledTimes(1) }) - -test('should upload file with accepted format', () => { - const file = new File(['hello'], 'hello.png', {type: 'image/png'}) - const {element} = setup('') - - userEvent.upload(element, file) - - expect(element.files).toHaveLength(1) -}) - -test('should upload multiple files with accepted format', () => { - const files = [ - new File(['hello'], 'hello.png', {type: 'image/png'}), - new File(['there'], 'there.jpg', {type: 'audio/mp3'}), - new File(['there'], 'there.csv', {type: 'text/csv'}), - new File(['there'], 'there.jpg', {type: 'video/mp4'}), - ] - const {element} = setup(` - - `) - - userEvent.upload(element, files) - - expect(element.files).toHaveLength(3) -}) - -test('should not upload file with unaccepted format', () => { - const file = new File(['hello'], 'hello.png', {type: 'image/png'}) - const {element} = setup('') - - userEvent.upload(element, file) - - expect(element.files).toHaveLength(0) -}) - -test('should not upload multiple files with unaccepted formats', () => { - const files = [ - new File(['hello'], 'hello.txt', {type: 'text/plain'}), - new File(['there'], 'there.pdf', {type: 'application/pdf'}), - new File(['there'], 'there.png', {type: 'image/png'}), - ] - const {element} = setup(` - - `) - - userEvent.upload(element, files) - - expect(element.files).toHaveLength(0) -}) diff --git a/src/upload.js b/src/upload.js index 7a3b990a..a252b438 100644 --- a/src/upload.js +++ b/src/upload.js @@ -10,20 +10,16 @@ function upload(element, fileOrFiles, init) { const input = element.tagName === 'LABEL' ? element.control : element - const files = (Array.isArray(fileOrFiles) ? fileOrFiles : [fileOrFiles]) - .filter(file => isAcceptableFile(file, element.accept)) - .slice(0, input.multiple ? undefined : 1) + const files = (Array.isArray(fileOrFiles) + ? fileOrFiles + : [fileOrFiles] + ).slice(0, input.multiple ? undefined : 1) // blur fires when the file selector pops up blur(element, init) // focus fires when they make their selection focus(element, init) - // treat empty array as if the user just closed the file upload dialog - if (files.length === 0) { - return - } - // the event fired in the browser isn't actually an "input" or "change" event // but a new Event with a type set to "input" and "change" // Kinda odd... @@ -50,22 +46,4 @@ function upload(element, fileOrFiles, init) { }) } -function isAcceptableFile(file, accept) { - if (!accept) { - return true - } - - const wildcards = ['audio/*', 'image/*', 'video/*'] - - return accept.split(',').some(acceptToken => { - if (acceptToken[0] === '.') { - // 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 - }) -} - export {upload}