aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/blueimp/jquery-file-upload/test/unit.js
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/blueimp/jquery-file-upload/test/unit.js')
-rw-r--r--vendor/blueimp/jquery-file-upload/test/unit.js992
1 files changed, 992 insertions, 0 deletions
diff --git a/vendor/blueimp/jquery-file-upload/test/unit.js b/vendor/blueimp/jquery-file-upload/test/unit.js
new file mode 100644
index 000000000..c70d35dd6
--- /dev/null
+++ b/vendor/blueimp/jquery-file-upload/test/unit.js
@@ -0,0 +1,992 @@
+/*
+ * jQuery File Upload Test
+ * https://github.com/blueimp/JavaScript-Load-Image
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+/* global beforeEach, afterEach, describe, it */
+/* eslint-disable new-cap */
+
+(function(expect, $) {
+ 'use strict';
+
+ var canCreateBlob = !!window.dataURLtoBlob;
+ // 80x60px GIF image (color black, base64 data):
+ var b64DataGIF =
+ 'R0lGODdhUAA8AIABAAAAAP///ywAAAAAUAA8AAACS4SPqcvtD6' +
+ 'OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73/g8MCofE' +
+ 'ovGITCqXzKbzCY1Kp9Sq9YrNarfcrvcLDovH5PKsAAA7';
+ var imageUrlGIF = 'data:image/gif;base64,' + b64DataGIF;
+ var blobGIF = canCreateBlob && window.dataURLtoBlob(imageUrlGIF);
+
+ // 2x1px JPEG (color white, with the Exif orientation flag set to 6 and the
+ // IPTC ObjectName (2:5) set to 'objectname'):
+ var b64DataJPEG =
+ '/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAASUkqAAgAAAABABIBAwABAAAA' +
+ 'BgASAAAAAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAA8cAgUACm9iamVj' +
+ 'dG5hbWUA/9sAQwABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB' +
+ 'AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/9sAQwEBAQEBAQEBAQEBAQEBAQEB' +
+ 'AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB' +
+ '/8AAEQgAAQACAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYH' +
+ 'CAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGh' +
+ 'CCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldY' +
+ 'WVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1' +
+ 'tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8B' +
+ 'AAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAEC' +
+ 'dwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBka' +
+ 'JicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWG' +
+ 'h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ' +
+ '2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/v4ooooA/9k=';
+ var imageUrlJPEG = 'data:image/jpeg;base64,' + b64DataJPEG;
+ var blobJPEG = canCreateBlob && window.dataURLtoBlob(imageUrlJPEG);
+
+ var fileGIF, fileJPEG, files, items, eventObject;
+
+ var uploadURL = '../server/php/';
+
+ /**
+ * Creates a fileupload form and adds it to the DOM
+ *
+ * @returns {object} jQuery node
+ */
+ function createFileuploadForm() {
+ return $('<form><input type="file" name="files[]" multiple></form>')
+ .prop({
+ action: uploadURL,
+ method: 'POST',
+ enctype: 'multipart/form-data'
+ })
+ .css({ display: 'none' })
+ .appendTo(document.body);
+ }
+
+ /**
+ * Deletes all files from the upload server
+ *
+ * @param {Array} files Response files list
+ * @param {Function} callback Callback function
+ */
+ function deleteFiles(files, callback) {
+ $.when(
+ files.map(function(file) {
+ return $.ajax({
+ type: file.deleteType,
+ url: file.deleteUrl
+ });
+ })
+ ).always(function() {
+ callback();
+ });
+ }
+
+ beforeEach(function() {
+ fileGIF = new File([blobGIF], 'example.gif', { type: 'image/gif' });
+ fileJPEG = new File([blobJPEG], 'example.jpg', { type: 'image/jpeg' });
+ files = [fileGIF, fileJPEG];
+ items = [
+ {
+ getAsFile: function() {
+ return files[0];
+ }
+ },
+ {
+ getAsFile: function() {
+ return files[1];
+ }
+ }
+ ];
+ eventObject = {
+ originalEvent: {
+ dataTransfer: { files: files, types: ['Files'] },
+ clipboardData: { items: items }
+ }
+ };
+ });
+
+ afterEach(function(done) {
+ $.getJSON(uploadURL).then(function(result) {
+ deleteFiles(result.files, done);
+ });
+ });
+
+ describe('Initialization', function() {
+ var form;
+
+ beforeEach(function() {
+ form = createFileuploadForm();
+ });
+
+ afterEach(function() {
+ form.remove();
+ });
+
+ it('widget', function() {
+ form.fileupload();
+ expect(form.data('blueimp-fileupload')).to.be.an('object');
+ });
+
+ it('file input', function() {
+ form.fileupload();
+ expect(form.fileupload('option', 'fileInput').length).to.equal(1);
+ });
+
+ it('drop zone', function() {
+ form.fileupload();
+ expect(form.fileupload('option', 'dropZone').length).to.equal(1);
+ });
+
+ it('paste zone', function() {
+ form.fileupload({ pasteZone: document });
+ expect(form.fileupload('option', 'pasteZone').length).to.equal(1);
+ });
+
+ it('data attributes', function() {
+ form.attr('data-url', 'https://example.org');
+ form.fileupload();
+ expect(form.fileupload('option', 'url')).to.equal('https://example.org');
+ expect(form.data('blueimp-fileupload')).to.be.an('object');
+ });
+
+ it('event listeners', function() {
+ var eventsData = {};
+ form.fileupload({
+ autoUpload: false,
+ pasteZone: document,
+ dragover: function() {
+ eventsData.dragover = true;
+ },
+ dragenter: function() {
+ eventsData.dragenter = true;
+ },
+ dragleave: function() {
+ eventsData.dragleave = true;
+ },
+ drop: function(e, data) {
+ eventsData.drop = data;
+ },
+ paste: function(e, data) {
+ eventsData.paste = data;
+ },
+ change: function() {
+ eventsData.change = true;
+ }
+ });
+ form
+ .fileupload('option', 'fileInput')
+ .trigger($.Event('change', eventObject));
+ expect(eventsData.change).to.equal(true);
+ form
+ .fileupload('option', 'dropZone')
+ .trigger($.Event('dragover', eventObject))
+ .trigger($.Event('dragenter', eventObject))
+ .trigger($.Event('dragleave', eventObject))
+ .trigger($.Event('drop', eventObject));
+ expect(eventsData.dragover).to.equal(true);
+ expect(eventsData.dragenter).to.equal(true);
+ expect(eventsData.dragleave).to.equal(true);
+ expect(eventsData.drop.files).to.deep.equal(files);
+ form
+ .fileupload('option', 'pasteZone')
+ .trigger($.Event('paste', eventObject));
+ expect(eventsData.paste.files).to.deep.equal(files);
+ });
+ });
+
+ describe('API', function() {
+ var form;
+
+ beforeEach(function() {
+ form = createFileuploadForm().fileupload({
+ dataType: 'json',
+ autoUpload: false
+ });
+ });
+
+ afterEach(function() {
+ form.remove();
+ });
+
+ it('destroy', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ pasteZone: document,
+ dragover: function() {
+ eventsData.dragover = true;
+ },
+ dragenter: function() {
+ eventsData.dragenter = true;
+ },
+ dragleave: function() {
+ eventsData.dragleave = true;
+ },
+ drop: function(e, data) {
+ eventsData.drop = data;
+ },
+ paste: function(e, data) {
+ eventsData.paste = data;
+ },
+ change: function() {
+ eventsData.change = true;
+ }
+ });
+ var fileInput = form.fileupload('option', 'fileInput');
+ var dropZone = form.fileupload('option', 'dropZone');
+ var pasteZone = form.fileupload('option', 'pasteZone');
+ form.fileupload('destroy');
+ expect(form.data('blueimp-fileupload')).to.equal();
+ fileInput.trigger($.Event('change', eventObject));
+ expect(eventsData.change).to.equal();
+ dropZone
+ .trigger($.Event('dragover', eventObject))
+ .trigger($.Event('dragenter', eventObject))
+ .trigger($.Event('dragleave', eventObject))
+ .trigger($.Event('drop', eventObject));
+ expect(eventsData.dragover).to.equal();
+ expect(eventsData.dragenter).to.equal();
+ expect(eventsData.dragleave).to.equal();
+ expect(eventsData.drop).to.equal();
+ pasteZone.trigger($.Event('paste', eventObject));
+ expect(eventsData.paste).to.equal();
+ });
+
+ it('disable', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ pasteZone: document,
+ dragover: function() {
+ eventsData.dragover = true;
+ },
+ dragenter: function() {
+ eventsData.dragenter = true;
+ },
+ dragleave: function() {
+ eventsData.dragleave = true;
+ },
+ drop: function(e, data) {
+ eventsData.drop = data;
+ },
+ paste: function(e, data) {
+ eventsData.paste = data;
+ },
+ change: function() {
+ eventsData.change = true;
+ }
+ });
+ form.fileupload('disable');
+ form
+ .fileupload('option', 'fileInput')
+ .trigger($.Event('change', eventObject));
+ expect(eventsData.change).to.equal();
+ form
+ .fileupload('option', 'dropZone')
+ .trigger($.Event('dragover', eventObject))
+ .trigger($.Event('dragenter', eventObject))
+ .trigger($.Event('dragleave', eventObject))
+ .trigger($.Event('drop', eventObject));
+ expect(eventsData.dragover).to.equal();
+ expect(eventsData.dragenter).to.equal();
+ expect(eventsData.dragleave).to.equal();
+ expect(eventsData.drop).to.equal();
+ form
+ .fileupload('option', 'pasteZone')
+ .trigger($.Event('paste', eventObject));
+ expect(eventsData.paste).to.equal();
+ });
+
+ it('enable', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ pasteZone: document,
+ dragover: function() {
+ eventsData.dragover = true;
+ },
+ dragenter: function() {
+ eventsData.dragenter = true;
+ },
+ dragleave: function() {
+ eventsData.dragleave = true;
+ },
+ drop: function(e, data) {
+ eventsData.drop = data;
+ },
+ paste: function(e, data) {
+ eventsData.paste = data;
+ },
+ change: function() {
+ eventsData.change = true;
+ }
+ });
+ form.fileupload('disable');
+ form.fileupload('enable');
+ form
+ .fileupload('option', 'fileInput')
+ .trigger($.Event('change', eventObject));
+ expect(eventsData.change).to.equal(true);
+ form
+ .fileupload('option', 'dropZone')
+ .trigger($.Event('dragover', eventObject))
+ .trigger($.Event('dragenter', eventObject))
+ .trigger($.Event('dragleave', eventObject))
+ .trigger($.Event('drop', eventObject));
+ expect(eventsData.dragover).to.equal(true);
+ expect(eventsData.dragenter).to.equal(true);
+ expect(eventsData.dragleave).to.equal(true);
+ expect(eventsData.drop.files).to.deep.equal(files);
+ form
+ .fileupload('option', 'pasteZone')
+ .trigger($.Event('paste', eventObject));
+ expect(eventsData.paste.files).to.deep.equal(files);
+ });
+
+ it('option', function() {
+ var eventsData = {};
+ form.fileupload('option', 'drop', function(e, data) {
+ eventsData.drop = data;
+ });
+ var dropZone = form
+ .fileupload('option', 'dropZone')
+ .trigger($.Event('drop', eventObject));
+ expect(eventsData.drop.files).to.deep.equal(files);
+ delete eventsData.drop;
+ form.fileupload('option', 'dropZone', null);
+ dropZone.trigger($.Event('drop', eventObject));
+ expect(eventsData.drop).to.equal();
+ form.fileupload('option', {
+ dropZone: dropZone
+ });
+ dropZone.trigger($.Event('drop', eventObject));
+ expect(eventsData.drop.files).to.deep.equal(files);
+ });
+
+ it('add', function() {
+ var eventData = [];
+ form.fileupload('option', 'add', function(e, data) {
+ eventData.push(data);
+ });
+ form.fileupload('add', { files: files });
+ expect(eventData.length).to.equal(2);
+ expect(eventData[0].files[0]).to.equal(files[0]);
+ expect(eventData[1].files[0]).to.equal(files[1]);
+ });
+
+ it('send', function(done) {
+ this.slow(200);
+ form.fileupload('send', { files: files }).complete(function(result) {
+ var uploadedFiles = result.responseJSON.files;
+ expect(uploadedFiles.length).to.equal(2);
+ expect(uploadedFiles[0].type).to.equal(files[0].type);
+ expect(uploadedFiles[0].error).to.equal();
+ expect(uploadedFiles[1].type).to.equal(files[1].type);
+ expect(uploadedFiles[1].error).to.equal();
+ done();
+ });
+ });
+ });
+
+ describe('Callbacks', function() {
+ var form;
+
+ beforeEach(function() {
+ form = createFileuploadForm().fileupload({ dataType: 'json' });
+ });
+
+ afterEach(function() {
+ form.remove();
+ });
+
+ it('add', function() {
+ var eventData = [];
+ form.fileupload('option', 'add', function(e, data) {
+ eventData.push(data);
+ });
+ form.fileupload('add', { files: files });
+ expect(eventData.length).to.equal(2);
+ expect(eventData[0].files[0]).to.equal(files[0]);
+ expect(eventData[1].files[0]).to.equal(files[1]);
+ });
+
+ it('submit', function(done) {
+ this.slow(200);
+ var eventData = [];
+ form.fileupload('option', {
+ submit: function(e, data) {
+ eventData.push(data);
+ },
+ stop: function() {
+ if (eventData.length < 2) return;
+ expect(eventData[0].files[0]).to.equal(files[0]);
+ expect(eventData[1].files[0]).to.equal(files[1]);
+ done();
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+
+ it('send', function(done) {
+ this.slow(200);
+ var eventData = [];
+ form.fileupload('option', {
+ send: function(e, data) {
+ eventData.push(data);
+ },
+ stop: function() {
+ expect(eventData.length).to.equal(1);
+ expect(eventData[0].files).to.deep.equal(files);
+ done();
+ }
+ });
+ form.fileupload('send', { files: files });
+ });
+
+ it('done', function(done) {
+ this.slow(200);
+ var eventData = [];
+ form.fileupload('option', {
+ done: function(e, data) {
+ eventData.push(data);
+ },
+ stop: function() {
+ if (eventData.length < 2) return;
+ expect(eventData[0].result.files.length).to.equal(1);
+ expect(eventData[1].result.files.length).to.equal(1);
+ done();
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+
+ it('fail', function(done) {
+ this.slow(200);
+ var eventData = [];
+ form.fileupload('option', {
+ url: uploadURL + '404',
+ fail: function(e, data) {
+ eventData.push(data);
+ },
+ stop: function() {
+ if (eventData.length < 2) return;
+ expect(eventData[0].result).to.equal();
+ expect(eventData[1].result).to.equal();
+ done();
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+
+ it('always', function(done) {
+ this.slow(200);
+ var eventData = [];
+ form.fileupload('option', {
+ always: function(e, data) {
+ eventData.push(data);
+ },
+ stop: function() {
+ if (eventData.length < 2) {
+ expect(eventData[0].result).to.equal();
+ form.fileupload('add', { files: [fileGIF] });
+ return;
+ }
+ expect(eventData[1].result.files.length).to.equal(1);
+ done();
+ }
+ });
+ form.fileupload('add', { files: [fileGIF], url: uploadURL + '404' });
+ });
+
+ it('progress', function(done) {
+ this.slow(200);
+ var loaded;
+ var total;
+ form.fileupload('option', {
+ progress: function(e, data) {
+ loaded = data.loaded;
+ total = data.total;
+ expect(loaded).to.be.at.most(total);
+ },
+ stop: function() {
+ expect(loaded).to.equal(total);
+ done();
+ }
+ });
+ form.fileupload('add', { files: [fileGIF] });
+ });
+
+ it('progressall', function(done) {
+ this.slow(200);
+ var loaded;
+ var total;
+ var completed = 0;
+ form.fileupload('option', {
+ progressall: function(e, data) {
+ loaded = data.loaded;
+ total = data.total;
+ expect(loaded).to.be.at.most(total);
+ },
+ always: function() {
+ completed++;
+ },
+ stop: function() {
+ if (completed < 2) return;
+ expect(loaded).to.equal(total);
+ done();
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+
+ it('start', function(done) {
+ this.slow(200);
+ var started;
+ form.fileupload('option', {
+ start: function() {
+ started = true;
+ },
+ stop: function() {
+ expect(started).to.equal(true);
+ done();
+ }
+ });
+ form.fileupload('add', { files: [fileGIF] });
+ });
+
+ it('stop', function(done) {
+ this.slow(200);
+ form.fileupload('option', {
+ stop: function() {
+ done();
+ }
+ });
+ form.fileupload('add', { files: [fileGIF] });
+ });
+
+ it('dragover', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ autoUpload: false,
+ dragover: function() {
+ eventsData.dragover = true;
+ }
+ });
+ form
+ .fileupload('option', 'dropZone')
+ .trigger($.Event('dragover', eventObject));
+ expect(eventsData.dragover).to.equal(true);
+ });
+
+ it('dragenter', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ autoUpload: false,
+ dragenter: function() {
+ eventsData.dragenter = true;
+ }
+ });
+ form
+ .fileupload('option', 'dropZone')
+ .trigger($.Event('dragenter', eventObject));
+ expect(eventsData.dragenter).to.equal(true);
+ });
+
+ it('dragleave', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ autoUpload: false,
+ dragleave: function() {
+ eventsData.dragleave = true;
+ }
+ });
+ form
+ .fileupload('option', 'dropZone')
+ .trigger($.Event('dragleave', eventObject));
+ expect(eventsData.dragleave).to.equal(true);
+ });
+
+ it('drop', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ autoUpload: false,
+ drop: function(e, data) {
+ eventsData.drop = data;
+ }
+ });
+ form
+ .fileupload('option', 'dropZone')
+ .trigger($.Event('drop', eventObject));
+ expect(eventsData.drop.files).to.deep.equal(files);
+ });
+
+ it('paste', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ autoUpload: false,
+ pasteZone: document,
+ paste: function(e, data) {
+ eventsData.paste = data;
+ }
+ });
+ form
+ .fileupload('option', 'pasteZone')
+ .trigger($.Event('paste', eventObject));
+ expect(eventsData.paste.files).to.deep.equal(files);
+ });
+
+ it('change', function() {
+ var eventsData = {};
+ form.fileupload('option', {
+ autoUpload: false,
+ change: function() {
+ eventsData.change = true;
+ }
+ });
+ form
+ .fileupload('option', 'fileInput')
+ .trigger($.Event('change', eventObject));
+ expect(eventsData.change).to.equal(true);
+ });
+ });
+
+ describe('Options', function() {
+ var form;
+
+ beforeEach(function() {
+ form = createFileuploadForm();
+ });
+
+ afterEach(function() {
+ form.remove();
+ });
+
+ it('paramName', function(done) {
+ form.fileupload({
+ send: function(e, data) {
+ expect(data.paramName[0]).to.equal(
+ form.fileupload('option', 'fileInput').prop('name')
+ );
+ done();
+ return false;
+ }
+ });
+ form.fileupload('add', { files: [fileGIF] });
+ });
+
+ it('url', function(done) {
+ form.fileupload({
+ send: function(e, data) {
+ expect(data.url).to.equal(form.prop('action'));
+ done();
+ return false;
+ }
+ });
+ form.fileupload('add', { files: [fileGIF] });
+ });
+
+ it('type', function(done) {
+ form.fileupload({
+ type: 'PUT',
+ send: function(e, data) {
+ expect(data.type).to.equal('PUT');
+ done();
+ return false;
+ }
+ });
+ form.fileupload('add', { files: [fileGIF] });
+ });
+
+ it('replaceFileInput', function() {
+ form.fileupload();
+ var fileInput = form.fileupload('option', 'fileInput');
+ fileInput.trigger($.Event('change', eventObject));
+ expect(form.fileupload('option', 'fileInput')[0]).to.not.equal(
+ fileInput[0]
+ );
+ form.fileupload('option', 'replaceFileInput', false);
+ fileInput = form.fileupload('option', 'fileInput');
+ fileInput.trigger($.Event('change', eventObject));
+ expect(form.fileupload('option', 'fileInput')[0]).to.equal(fileInput[0]);
+ });
+
+ it('forceIframeTransport', function(done) {
+ form.fileupload({
+ forceIframeTransport: 'PUT',
+ send: function(e, data) {
+ expect(data.dataType.substr(0, 6)).to.equal('iframe');
+ done();
+ return false;
+ }
+ });
+ form.fileupload('add', { files: [fileGIF] });
+ });
+
+ it('singleFileUploads', function(done) {
+ form.fileupload({
+ singleFileUploads: false,
+ send: function(e, data) {
+ expect(data.files).to.deep.equal(files);
+ done();
+ return false;
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+
+ it('limitMultiFileUploads', function(done) {
+ var completed = 0;
+ form.fileupload({
+ singleFileUploads: false,
+ limitMultiFileUploads: 2,
+ send: function(e, data) {
+ expect(data.files).to.deep.equal(files);
+ completed++;
+ if (completed < 2) return;
+ done();
+ return false;
+ }
+ });
+ form.fileupload('add', { files: files.concat(files) });
+ });
+
+ it('limitMultiFileUploadSize', function(done) {
+ var completed = 0;
+ form.fileupload({
+ singleFileUploads: false,
+ limitMultiFileUploadSize: files[0].size + files[1].size,
+ limitMultiFileUploadSizeOverhead: 0,
+ send: function(e, data) {
+ expect(data.files).to.deep.equal(files);
+ completed++;
+ if (completed < 2) return;
+ done();
+ return false;
+ }
+ });
+ form.fileupload('add', { files: files.concat(files) });
+ });
+
+ it('sequentialUploads', function(done) {
+ this.slow(400);
+ var completed = 0;
+ var events = [];
+ form.fileupload({
+ sequentialUploads: true,
+ dataType: 'json',
+ send: function() {
+ events.push('send');
+ },
+ always: function() {
+ events.push('complete');
+ completed++;
+ },
+ stop: function() {
+ if (completed === 4) {
+ expect(events.join(',')).to.equal(
+ [
+ 'send',
+ 'complete',
+ 'send',
+ 'complete',
+ 'send',
+ 'complete',
+ 'send',
+ 'complete'
+ ].join(',')
+ );
+ done();
+ }
+ }
+ });
+ form.fileupload('add', { files: files.concat(files) });
+ });
+
+ it('limitConcurrentUploads', function(done) {
+ this.slow(800);
+ var completed = 0;
+ var loadCount = 0;
+ form.fileupload({
+ limitConcurrentUploads: 2,
+ dataType: 'json',
+ send: function() {
+ loadCount++;
+ expect(loadCount).to.be.at.most(2);
+ },
+ always: function() {
+ completed++;
+ loadCount--;
+ },
+ stop: function() {
+ if (completed === 8) {
+ done();
+ }
+ }
+ });
+ form.fileupload('add', {
+ files: files
+ .concat(files)
+ .concat(files)
+ .concat(files)
+ });
+ });
+
+ it('multipart', function(done) {
+ form.fileupload({
+ multipart: false,
+ send: function(e, data) {
+ expect(data.contentType).to.equal(fileGIF.type);
+ expect(data.headers['Content-Disposition']).to.equal(
+ 'attachment; filename="' + fileGIF.name + '"'
+ );
+ done();
+ return false;
+ }
+ });
+ form.fileupload('add', { files: [fileGIF] });
+ });
+
+ it('uniqueFilenames', function(done) {
+ form.fileupload({
+ uniqueFilenames: {},
+ send: function(e, data) {
+ var formFiles = data.data.getAll('files[]');
+ expect(formFiles[0].name).to.equal(fileGIF.name);
+ expect(formFiles[1].name).to.equal(
+ fileGIF.name.replace('.gif', ' (1).gif')
+ );
+ expect(formFiles[2].name).to.equal(
+ fileGIF.name.replace('.gif', ' (2).gif')
+ );
+ done();
+ return false;
+ }
+ });
+ form.fileupload('send', { files: [fileGIF, fileGIF, fileGIF] });
+ });
+
+ it('maxChunkSize', function(done) {
+ this.slow(400);
+ var events = [];
+ form.fileupload({
+ maxChunkSize: 32,
+ dataType: 'json',
+ chunkbeforesend: function() {
+ events.push('chunkbeforesend');
+ },
+ chunksend: function() {
+ events.push('chunksend');
+ },
+ chunkdone: function() {
+ events.push('chunkdone');
+ },
+ done: function(e, data) {
+ var uploadedFile = data.result.files[0];
+ expect(uploadedFile.type).to.equal(fileGIF.type);
+ expect(uploadedFile.size).to.equal(fileGIF.size);
+ },
+ stop: function() {
+ expect(events.join(',')).to.equal(
+ [
+ 'chunkbeforesend',
+ 'chunksend',
+ 'chunkdone',
+ 'chunkbeforesend',
+ 'chunksend',
+ 'chunkdone',
+ 'chunkbeforesend',
+ 'chunksend',
+ 'chunkdone',
+ 'chunkbeforesend',
+ 'chunksend',
+ 'chunkdone'
+ ].join(',')
+ );
+ done();
+ }
+ });
+ form.fileupload('send', { files: [fileGIF] });
+ });
+
+ it('acceptFileTypes', function(done) {
+ var processData;
+ form.fileupload({
+ acceptFileTypes: /^image\/gif$/,
+ singleFileUploads: false,
+ processalways: function(e, data) {
+ processData = data;
+ },
+ processstop: function() {
+ expect(processData.files[0].error).to.equal();
+ expect(processData.files[1].error).to.equal(
+ form.fileupload('option').i18n('acceptFileTypes')
+ );
+ done();
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+
+ it('maxFileSize', function(done) {
+ var processData;
+ form.fileupload({
+ maxFileSize: 200,
+ singleFileUploads: false,
+ processalways: function(e, data) {
+ processData = data;
+ },
+ processstop: function() {
+ expect(processData.files[0].error).to.equal();
+ expect(processData.files[1].error).to.equal(
+ form.fileupload('option').i18n('maxFileSize')
+ );
+ done();
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+
+ it('minFileSize', function(done) {
+ var processData;
+ form.fileupload({
+ minFileSize: 200,
+ singleFileUploads: false,
+ processalways: function(e, data) {
+ processData = data;
+ },
+ processstop: function() {
+ expect(processData.files[0].error).to.equal(
+ form.fileupload('option').i18n('minFileSize')
+ );
+ expect(processData.files[1].error).to.equal();
+ done();
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+
+ it('maxNumberOfFiles', function(done) {
+ var processData;
+ form.fileupload({
+ maxNumberOfFiles: 2,
+ getNumberOfFiles: function() {
+ return 2;
+ },
+ singleFileUploads: false,
+ processalways: function(e, data) {
+ processData = data;
+ },
+ processstop: function() {
+ expect(processData.files[0].error).to.equal(
+ form.fileupload('option').i18n('maxNumberOfFiles')
+ );
+ expect(processData.files[1].error).to.equal(
+ form.fileupload('option').i18n('maxNumberOfFiles')
+ );
+ done();
+ }
+ });
+ form.fileupload('add', { files: files });
+ });
+ });
+})(this.chai.expect, this.jQuery);