12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292 |
- /*
- * jQuery File Upload Plugin Test
- * https://github.com/blueimp/jQuery-File-Upload
- *
- * Copyright 2010, Sebastian Tschan
- * https://blueimp.net
- *
- * Licensed under the MIT license:
- * https://opensource.org/licenses/MIT
- */
- /* global $, QUnit, window, document, expect, module, test, asyncTest, start, ok, strictEqual, notStrictEqual */
- $(function () {
- // jshint nomen:false
- 'use strict';
- QUnit.done = function () {
- // Delete all uploaded files:
- var url = $('#fileupload').prop('action');
- $.getJSON(url, function (result) {
- $.each(result.files, function (index, file) {
- $.ajax({
- url: url + '?file=' + encodeURIComponent(file.name),
- type: 'DELETE'
- });
- });
- });
- };
- var lifecycle = {
- setup: function () {
- // Set the .fileupload method to the basic widget method:
- $.widget('blueimp.fileupload', window.testBasicWidget, {});
- },
- teardown: function () {
- // Remove all remaining event listeners:
- $(document).unbind();
- }
- },
- lifecycleUI = {
- setup: function () {
- // Set the .fileupload method to the UI widget method:
- $.widget('blueimp.fileupload', window.testUIWidget, {});
- },
- teardown: function () {
- // Remove all remaining event listeners:
- $(document).unbind();
- }
- };
- module('Initialization', lifecycle);
- test('Widget initialization', function () {
- var fu = $('#fileupload').fileupload();
- ok(fu.data('blueimp-fileupload') || fu.data('fileupload'));
- });
- test('Data attribute options', function () {
- $('#fileupload').attr('data-url', 'http://example.org');
- $('#fileupload').fileupload();
- strictEqual(
- $('#fileupload').fileupload('option', 'url'),
- 'http://example.org'
- );
- });
- test('File input initialization', function () {
- var fu = $('#fileupload').fileupload();
- ok(
- fu.fileupload('option', 'fileInput').length,
- 'File input field inside of the widget'
- );
- ok(
- fu.fileupload('option', 'fileInput').length,
- 'Widget element as file input field'
- );
- });
- test('Drop zone initialization', function () {
- ok($('#fileupload').fileupload()
- .fileupload('option', 'dropZone').length);
- });
- test('Paste zone initialization', function () {
- ok($('#fileupload').fileupload({pasteZone: document})
- .fileupload('option', 'pasteZone').length);
- });
- test('Event listeners initialization', function () {
- expect(
- $.support.xhrFormDataFileUpload ? 4 : 1
- );
- var eo = {
- originalEvent: {
- dataTransfer: {files: [{}], types: ['Files']},
- clipboardData: {items: [{}]}
- }
- },
- fu = $('#fileupload').fileupload({
- pasteZone: document,
- dragover: function () {
- ok(true, 'Triggers dragover callback');
- return false;
- },
- drop: function () {
- ok(true, 'Triggers drop callback');
- return false;
- },
- paste: function () {
- ok(true, 'Triggers paste callback');
- return false;
- },
- change: function () {
- ok(true, 'Triggers change callback');
- return false;
- }
- }),
- fileInput = fu.fileupload('option', 'fileInput'),
- dropZone = fu.fileupload('option', 'dropZone'),
- pasteZone = fu.fileupload('option', 'pasteZone');
- fileInput.trigger($.Event('change', eo));
- dropZone.trigger($.Event('dragover', eo));
- dropZone.trigger($.Event('drop', eo));
- pasteZone.trigger($.Event('paste', eo));
- });
- module('API', lifecycle);
- test('destroy', function () {
- expect(4);
- var eo = {
- originalEvent: {
- dataTransfer: {files: [{}], types: ['Files']},
- clipboardData: {items: [{}]}
- }
- },
- options = {
- pasteZone: document,
- dragover: function () {
- ok(true, 'Triggers dragover callback');
- return false;
- },
- drop: function () {
- ok(true, 'Triggers drop callback');
- return false;
- },
- paste: function () {
- ok(true, 'Triggers paste callback');
- return false;
- },
- change: function () {
- ok(true, 'Triggers change callback');
- return false;
- }
- },
- fu = $('#fileupload').fileupload(options),
- fileInput = fu.fileupload('option', 'fileInput'),
- dropZone = fu.fileupload('option', 'dropZone'),
- pasteZone = fu.fileupload('option', 'pasteZone');
- dropZone.bind('dragover', options.dragover);
- dropZone.bind('drop', options.drop);
- pasteZone.bind('paste', options.paste);
- fileInput.bind('change', options.change);
- fu.fileupload('destroy');
- fileInput.trigger($.Event('change', eo));
- dropZone.trigger($.Event('dragover', eo));
- dropZone.trigger($.Event('drop', eo));
- pasteZone.trigger($.Event('paste', eo));
- });
- test('disable/enable', function () {
- expect(
- $.support.xhrFormDataFileUpload ? 4 : 1
- );
- var eo = {
- originalEvent: {
- dataTransfer: {files: [{}], types: ['Files']},
- clipboardData: {items: [{}]}
- }
- },
- fu = $('#fileupload').fileupload({
- pasteZone: document,
- dragover: function () {
- ok(true, 'Triggers dragover callback');
- return false;
- },
- drop: function () {
- ok(true, 'Triggers drop callback');
- return false;
- },
- paste: function () {
- ok(true, 'Triggers paste callback');
- return false;
- },
- change: function () {
- ok(true, 'Triggers change callback');
- return false;
- }
- }),
- fileInput = fu.fileupload('option', 'fileInput'),
- dropZone = fu.fileupload('option', 'dropZone'),
- pasteZone = fu.fileupload('option', 'pasteZone');
- fu.fileupload('disable');
- fileInput.trigger($.Event('change', eo));
- dropZone.trigger($.Event('dragover', eo));
- dropZone.trigger($.Event('drop', eo));
- pasteZone.trigger($.Event('paste', eo));
- fu.fileupload('enable');
- fileInput.trigger($.Event('change', eo));
- dropZone.trigger($.Event('dragover', eo));
- dropZone.trigger($.Event('drop', eo));
- pasteZone.trigger($.Event('paste', eo));
- });
- test('option', function () {
- expect(
- $.support.xhrFormDataFileUpload ? 10 : 7
- );
- var eo = {
- originalEvent: {
- dataTransfer: {files: [{}], types: ['Files']},
- clipboardData: {items: [{}]}
- }
- },
- fu = $('#fileupload').fileupload({
- pasteZone: document,
- dragover: function () {
- ok(true, 'Triggers dragover callback');
- return false;
- },
- drop: function () {
- ok(true, 'Triggers drop callback');
- return false;
- },
- paste: function () {
- ok(true, 'Triggers paste callback');
- return false;
- },
- change: function () {
- ok(true, 'Triggers change callback');
- return false;
- }
- }),
- fileInput = fu.fileupload('option', 'fileInput'),
- dropZone = fu.fileupload('option', 'dropZone'),
- pasteZone = fu.fileupload('option', 'pasteZone');
- fu.fileupload('option', 'fileInput', null);
- fu.fileupload('option', 'dropZone', null);
- fu.fileupload('option', 'pasteZone', null);
- fileInput.trigger($.Event('change', eo));
- dropZone.trigger($.Event('dragover', eo));
- dropZone.trigger($.Event('drop', eo));
- pasteZone.trigger($.Event('paste', eo));
- fu.fileupload('option', 'dropZone', 'body');
- strictEqual(
- fu.fileupload('option', 'dropZone')[0],
- document.body,
- 'Allow a query string as parameter for the dropZone option'
- );
- fu.fileupload('option', 'dropZone', document);
- strictEqual(
- fu.fileupload('option', 'dropZone')[0],
- document,
- 'Allow a document element as parameter for the dropZone option'
- );
- fu.fileupload('option', 'pasteZone', 'body');
- strictEqual(
- fu.fileupload('option', 'pasteZone')[0],
- document.body,
- 'Allow a query string as parameter for the pasteZone option'
- );
- fu.fileupload('option', 'pasteZone', document);
- strictEqual(
- fu.fileupload('option', 'pasteZone')[0],
- document,
- 'Allow a document element as parameter for the pasteZone option'
- );
- fu.fileupload('option', 'fileInput', ':file');
- strictEqual(
- fu.fileupload('option', 'fileInput')[0],
- $(':file')[0],
- 'Allow a query string as parameter for the fileInput option'
- );
- fu.fileupload('option', 'fileInput', $(':file')[0]);
- strictEqual(
- fu.fileupload('option', 'fileInput')[0],
- $(':file')[0],
- 'Allow a document element as parameter for the fileInput option'
- );
- fu.fileupload('option', 'fileInput', fileInput);
- fu.fileupload('option', 'dropZone', dropZone);
- fu.fileupload('option', 'pasteZone', pasteZone);
- fileInput.trigger($.Event('change', eo));
- dropZone.trigger($.Event('dragover', eo));
- dropZone.trigger($.Event('drop', eo));
- pasteZone.trigger($.Event('paste', eo));
- });
- asyncTest('add', function () {
- expect(2);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- add: function (e, data) {
- strictEqual(
- data.files[0].name,
- param.files[0].name,
- 'Triggers add callback'
- );
- }
- }).fileupload('add', param).fileupload(
- 'option',
- 'add',
- function (e, data) {
- data.submit().complete(function () {
- ok(true, 'data.submit() Returns a jqXHR object');
- start();
- });
- }
- ).fileupload('add', param);
- });
- asyncTest('send', function () {
- expect(3);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- send: function (e, data) {
- strictEqual(
- data.files[0].name,
- 'test',
- 'Triggers send callback'
- );
- }
- }).fileupload('send', param).fail(function () {
- ok(true, 'Allows to abort the request');
- }).complete(function () {
- ok(true, 'Returns a jqXHR object');
- start();
- }).abort();
- });
- module('Callbacks', lifecycle);
- asyncTest('add', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- add: function () {
- ok(true, 'Triggers add callback');
- start();
- }
- }).fileupload('add', param);
- });
- asyncTest('submit', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- submit: function () {
- ok(true, 'Triggers submit callback');
- start();
- return false;
- }
- }).fileupload('add', param);
- });
- asyncTest('send', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- send: function () {
- ok(true, 'Triggers send callback');
- start();
- return false;
- }
- }).fileupload('send', param);
- });
- asyncTest('done', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- done: function () {
- ok(true, 'Triggers done callback');
- start();
- }
- }).fileupload('send', param);
- });
- asyncTest('fail', function () {
- expect(1);
- var param = {files: [{name: 'test'}]},
- fu = $('#fileupload').fileupload({
- url: '404',
- fail: function () {
- ok(true, 'Triggers fail callback');
- start();
- }
- });
- (fu.data('blueimp-fileupload') || fu.data('fileupload'))
- ._isXHRUpload = function () {
- return true;
- };
- fu.fileupload('send', param);
- });
- asyncTest('always', function () {
- expect(2);
- var param = {files: [{name: 'test'}]},
- counter = 0,
- fu = $('#fileupload').fileupload({
- always: function () {
- ok(true, 'Triggers always callback');
- if (counter === 1) {
- start();
- } else {
- counter += 1;
- }
- }
- });
- (fu.data('blueimp-fileupload') || fu.data('fileupload'))
- ._isXHRUpload = function () {
- return true;
- };
- fu.fileupload('add', param).fileupload(
- 'option',
- 'url',
- '404'
- ).fileupload('add', param);
- });
- asyncTest('progress', function () {
- expect(1);
- var param = {files: [{name: 'test'}]},
- counter = 0;
- $('#fileupload').fileupload({
- forceIframeTransport: true,
- progress: function () {
- ok(true, 'Triggers progress callback');
- if (counter === 0) {
- start();
- } else {
- counter += 1;
- }
- }
- }).fileupload('send', param);
- });
- asyncTest('progressall', function () {
- expect(1);
- var param = {files: [{name: 'test'}]},
- counter = 0;
- $('#fileupload').fileupload({
- forceIframeTransport: true,
- progressall: function () {
- ok(true, 'Triggers progressall callback');
- if (counter === 0) {
- start();
- } else {
- counter += 1;
- }
- }
- }).fileupload('send', param);
- });
- asyncTest('start', function () {
- expect(1);
- var param = {files: [{name: '1'}, {name: '2'}]},
- active = 0;
- $('#fileupload').fileupload({
- send: function () {
- active += 1;
- },
- start: function () {
- ok(!active, 'Triggers start callback before uploads');
- start();
- }
- }).fileupload('send', param);
- });
- asyncTest('stop', function () {
- expect(1);
- var param = {files: [{name: '1'}, {name: '2'}]},
- active = 0;
- $('#fileupload').fileupload({
- send: function () {
- active += 1;
- },
- always: function () {
- active -= 1;
- },
- stop: function () {
- ok(!active, 'Triggers stop callback after uploads');
- start();
- }
- }).fileupload('send', param);
- });
- test('change', function () {
- var fu = $('#fileupload').fileupload(),
- fuo = fu.data('blueimp-fileupload') || fu.data('fileupload'),
- fileInput = fu.fileupload('option', 'fileInput');
- expect(2);
- fu.fileupload({
- change: function (e, data) {
- ok(true, 'Triggers change callback');
- strictEqual(
- data.files.length,
- 0,
- 'Returns empty files list'
- );
- },
- add: $.noop
- });
- fuo._onChange({
- data: {fileupload: fuo},
- target: fileInput[0]
- });
- });
- test('paste', function () {
- var fu = $('#fileupload').fileupload(),
- fuo = fu.data('blueimp-fileupload') || fu.data('fileupload');
- expect(1);
- fu.fileupload({
- paste: function () {
- ok(true, 'Triggers paste callback');
- },
- add: $.noop
- });
- fuo._onPaste({
- data: {fileupload: fuo},
- originalEvent: {
- dataTransfer: {files: [{}]},
- clipboardData: {items: [{}]}
- },
- preventDefault: $.noop
- });
- });
- test('drop', function () {
- var fu = $('#fileupload').fileupload(),
- fuo = fu.data('blueimp-fileupload') || fu.data('fileupload');
- expect(1);
- fu.fileupload({
- drop: function () {
- ok(true, 'Triggers drop callback');
- },
- add: $.noop
- });
- fuo._onDrop({
- data: {fileupload: fuo},
- originalEvent: {
- dataTransfer: {files: [{}]},
- clipboardData: {items: [{}]}
- },
- preventDefault: $.noop
- });
- });
- test('dragover', function () {
- var fu = $('#fileupload').fileupload(),
- fuo = fu.data('blueimp-fileupload') || fu.data('fileupload');
- expect(1);
- fu.fileupload({
- dragover: function () {
- ok(true, 'Triggers dragover callback');
- },
- add: $.noop
- });
- fuo._onDragOver({
- data: {fileupload: fuo},
- originalEvent: {dataTransfer: {types: ['Files']}},
- preventDefault: $.noop
- });
- });
- module('Options', lifecycle);
- test('paramName', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- paramName: null,
- send: function (e, data) {
- strictEqual(
- data.paramName[0],
- data.fileInput.prop('name'),
- 'Takes paramName from file input field if not set'
- );
- return false;
- }
- }).fileupload('send', param);
- });
- test('url', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- url: null,
- send: function (e, data) {
- strictEqual(
- data.url,
- $(data.fileInput.prop('form')).prop('action'),
- 'Takes url from form action if not set'
- );
- return false;
- }
- }).fileupload('send', param);
- });
- test('type', function () {
- expect(2);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- type: null,
- send: function (e, data) {
- strictEqual(
- data.type,
- 'POST',
- 'Request type is "POST" if not set to "PUT"'
- );
- return false;
- }
- }).fileupload('send', param);
- $('#fileupload').fileupload({
- type: 'PUT',
- send: function (e, data) {
- strictEqual(
- data.type,
- 'PUT',
- 'Request type is "PUT" if set to "PUT"'
- );
- return false;
- }
- }).fileupload('send', param);
- });
- test('replaceFileInput', function () {
- var fu = $('#fileupload').fileupload(),
- fuo = fu.data('blueimp-fileupload') || fu.data('fileupload'),
- fileInput = fu.fileupload('option', 'fileInput'),
- fileInputElement = fileInput[0];
- expect(2);
- fu.fileupload({
- replaceFileInput: false,
- change: function () {
- strictEqual(
- fu.fileupload('option', 'fileInput')[0],
- fileInputElement,
- 'Keeps file input with replaceFileInput: false'
- );
- },
- add: $.noop
- });
- fuo._onChange({
- data: {fileupload: fuo},
- target: fileInput[0]
- });
- fu.fileupload({
- replaceFileInput: true,
- change: function () {
- notStrictEqual(
- fu.fileupload('option', 'fileInput')[0],
- fileInputElement,
- 'Replaces file input with replaceFileInput: true'
- );
- },
- add: $.noop
- });
- fuo._onChange({
- data: {fileupload: fuo},
- target: fileInput[0]
- });
- });
- asyncTest('forceIframeTransport', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- forceIframeTransport: true,
- done: function (e, data) {
- strictEqual(
- data.dataType.substr(0, 6),
- 'iframe',
- 'Iframe Transport is used'
- );
- start();
- }
- }).fileupload('send', param);
- });
- test('singleFileUploads', function () {
- expect(3);
- var fu = $('#fileupload').fileupload(),
- param = {files: [{name: '1'}, {name: '2'}]},
- index = 1;
- (fu.data('blueimp-fileupload') || fu.data('fileupload'))
- ._isXHRUpload = function () {
- return true;
- };
- $('#fileupload').fileupload({
- singleFileUploads: true,
- add: function () {
- ok(true, 'Triggers callback number ' + index.toString());
- index += 1;
- }
- }).fileupload('add', param).fileupload(
- 'option',
- 'singleFileUploads',
- false
- ).fileupload('add', param);
- });
- test('limitMultiFileUploads', function () {
- expect(3);
- var fu = $('#fileupload').fileupload(),
- param = {files: [
- {name: '1'},
- {name: '2'},
- {name: '3'},
- {name: '4'},
- {name: '5'}
- ]},
- index = 1;
- (fu.data('blueimp-fileupload') || fu.data('fileupload'))
- ._isXHRUpload = function () {
- return true;
- };
- $('#fileupload').fileupload({
- singleFileUploads: false,
- limitMultiFileUploads: 2,
- add: function () {
- ok(true, 'Triggers callback number ' + index.toString());
- index += 1;
- }
- }).fileupload('add', param);
- });
- test('limitMultiFileUploadSize', function () {
- expect(7);
- var fu = $('#fileupload').fileupload(),
- param = {files: [
- {name: '1-1', size: 100000},
- {name: '1-2', size: 40000},
- {name: '2-1', size: 100000},
- {name: '3-1', size: 50000},
- {name: '3-2', size: 40000},
- {name: '4-1', size: 45000} // New request due to limitMultiFileUploads
- ]},
- param2 = {files: [
- {name: '5-1'},
- {name: '5-2'},
- {name: '6-1'},
- {name: '6-2'},
- {name: '7-1'}
- ]},
- index = 1;
- (fu.data('blueimp-fileupload') || fu.data('fileupload'))
- ._isXHRUpload = function () {
- return true;
- };
- $('#fileupload').fileupload({
- singleFileUploads: false,
- limitMultiFileUploads: 2,
- limitMultiFileUploadSize: 150000,
- limitMultiFileUploadSizeOverhead: 5000,
- add: function () {
- ok(true, 'Triggers callback number ' + index.toString());
- index += 1;
- }
- }).fileupload('add', param).fileupload('add', param2);
- });
- asyncTest('sequentialUploads', function () {
- expect(6);
- var param = {files: [
- {name: '1'},
- {name: '2'},
- {name: '3'},
- {name: '4'},
- {name: '5'},
- {name: '6'}
- ]},
- addIndex = 0,
- sendIndex = 0,
- loadIndex = 0,
- fu = $('#fileupload').fileupload({
- sequentialUploads: true,
- add: function (e, data) {
- addIndex += 1;
- if (addIndex === 4) {
- data.submit().abort();
- } else {
- data.submit();
- }
- },
- send: function () {
- sendIndex += 1;
- },
- done: function () {
- loadIndex += 1;
- strictEqual(sendIndex, loadIndex, 'upload in order');
- },
- fail: function (e, data) {
- strictEqual(data.errorThrown, 'abort', 'upload aborted');
- },
- stop: function () {
- start();
- }
- });
- (fu.data('blueimp-fileupload') || fu.data('fileupload'))
- ._isXHRUpload = function () {
- return true;
- };
- fu.fileupload('add', param);
- });
- asyncTest('limitConcurrentUploads', function () {
- expect(12);
- var param = {files: [
- {name: '1'},
- {name: '2'},
- {name: '3'},
- {name: '4'},
- {name: '5'},
- {name: '6'},
- {name: '7'},
- {name: '8'},
- {name: '9'},
- {name: '10'},
- {name: '11'},
- {name: '12'}
- ]},
- addIndex = 0,
- sendIndex = 0,
- loadIndex = 0,
- fu = $('#fileupload').fileupload({
- limitConcurrentUploads: 3,
- add: function (e, data) {
- addIndex += 1;
- if (addIndex === 4) {
- data.submit().abort();
- } else {
- data.submit();
- }
- },
- send: function () {
- sendIndex += 1;
- },
- done: function () {
- loadIndex += 1;
- ok(sendIndex - loadIndex < 3);
- },
- fail: function (e, data) {
- strictEqual(data.errorThrown, 'abort', 'upload aborted');
- },
- stop: function () {
- start();
- }
- });
- (fu.data('blueimp-fileupload') || fu.data('fileupload'))
- ._isXHRUpload = function () {
- return true;
- };
- fu.fileupload('add', param);
- });
- if ($.support.xhrFileUpload) {
- asyncTest('multipart', function () {
- expect(2);
- var param = {files: [{
- name: 'test.png',
- size: 123,
- type: 'image/png'
- }]},
- fu = $('#fileupload').fileupload({
- multipart: false,
- always: function (e, data) {
- strictEqual(
- data.contentType,
- param.files[0].type,
- 'non-multipart upload sets file type as contentType'
- );
- strictEqual(
- data.headers['Content-Disposition'],
- 'attachment; filename="' + param.files[0].name + '"',
- 'non-multipart upload sets Content-Disposition header'
- );
- start();
- }
- });
- fu.fileupload('send', param);
- });
- }
- module('UI Initialization', lifecycleUI);
- test('Widget initialization', function () {
- var fu = $('#fileupload').fileupload();
- ok(fu.data('blueimp-fileupload') || fu.data('fileupload'));
- ok(
- $('#fileupload').fileupload('option', 'uploadTemplate').length,
- 'Initialized upload template'
- );
- ok(
- $('#fileupload').fileupload('option', 'downloadTemplate').length,
- 'Initialized download template'
- );
- });
- test('Buttonbar event listeners', function () {
- var buttonbar = $('#fileupload .fileupload-buttonbar'),
- files = [{name: 'test'}];
- expect(4);
- $('#fileupload').fileupload({
- send: function () {
- ok(true, 'Started file upload via global start button');
- },
- fail: function (e, data) {
- ok(true, 'Canceled file upload via global cancel button');
- data.context.remove();
- },
- destroy: function () {
- ok(true, 'Delete action called via global delete button');
- }
- });
- $('#fileupload').fileupload('add', {files: files});
- buttonbar.find('.cancel').click();
- $('#fileupload').fileupload('add', {files: files});
- buttonbar.find('.start').click();
- buttonbar.find('.cancel').click();
- files[0].deleteUrl = 'http://example.org/banana.jpg';
- ($('#fileupload').data('blueimp-fileupload') ||
- $('#fileupload').data('fileupload'))
- ._renderDownload(files)
- .appendTo($('#fileupload .files')).show()
- .find('.toggle').click();
- buttonbar.find('.delete').click();
- });
- module('UI API', lifecycleUI);
- test('destroy', function () {
- var buttonbar = $('#fileupload .fileupload-buttonbar'),
- files = [{name: 'test'}];
- expect(1);
- $('#fileupload').fileupload({
- send: function () {
- ok(true, 'This test should not run');
- return false;
- }
- })
- .fileupload('add', {files: files})
- .fileupload('destroy');
- buttonbar.find('.start').click(function () {
- ok(true, 'Clicked global start button');
- return false;
- }).click();
- });
- test('disable/enable', function () {
- var buttonbar = $('#fileupload .fileupload-buttonbar');
- $('#fileupload').fileupload();
- $('#fileupload').fileupload('disable');
- strictEqual(
- buttonbar.find('input[type=file], button').not(':disabled').length,
- 0,
- 'Disables the buttonbar buttons'
- );
- $('#fileupload').fileupload('enable');
- strictEqual(
- buttonbar.find('input[type=file], button').not(':disabled').length,
- 4,
- 'Enables the buttonbar buttons'
- );
- });
- module('UI Callbacks', lifecycleUI);
- test('destroy', function () {
- expect(3);
- $('#fileupload').fileupload({
- destroy: function (e, data) {
- ok(true, 'Triggers destroy callback');
- strictEqual(
- data.url,
- 'test',
- 'Passes over deletion url parameter'
- );
- strictEqual(
- data.type,
- 'DELETE',
- 'Passes over deletion request type parameter'
- );
- }
- });
- ($('#fileupload').data('blueimp-fileupload') ||
- $('#fileupload').data('fileupload'))
- ._renderDownload([{
- name: 'test',
- deleteUrl: 'test',
- deleteType: 'DELETE'
- }])
- .appendTo($('#fileupload .files'))
- .show()
- .find('.toggle').click();
- $('#fileupload .fileupload-buttonbar .delete').click();
- });
- asyncTest('added', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- added: function (e, data) {
- start();
- strictEqual(
- data.files[0].name,
- param.files[0].name,
- 'Triggers added callback'
- );
- },
- send: function () {
- return false;
- }
- }).fileupload('add', param);
- });
- asyncTest('started', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- started: function () {
- start();
- ok('Triggers started callback');
- return false;
- },
- sent: function () {
- return false;
- }
- }).fileupload('send', param);
- });
- asyncTest('sent', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- sent: function (e, data) {
- start();
- strictEqual(
- data.files[0].name,
- param.files[0].name,
- 'Triggers sent callback'
- );
- return false;
- }
- }).fileupload('send', param);
- });
- asyncTest('completed', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- completed: function () {
- start();
- ok('Triggers completed callback');
- return false;
- }
- }).fileupload('send', param);
- });
- asyncTest('failed', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- failed: function () {
- start();
- ok('Triggers failed callback');
- return false;
- }
- }).fileupload('send', param).abort();
- });
- asyncTest('stopped', function () {
- expect(1);
- var param = {files: [{name: 'test'}]};
- $('#fileupload').fileupload({
- stopped: function () {
- start();
- ok('Triggers stopped callback');
- return false;
- }
- }).fileupload('send', param);
- });
- asyncTest('destroyed', function () {
- expect(1);
- $('#fileupload').fileupload({
- dataType: 'html',
- destroyed: function () {
- start();
- ok(true, 'Triggers destroyed callback');
- }
- });
- ($('#fileupload').data('blueimp-fileupload') ||
- $('#fileupload').data('fileupload'))
- ._renderDownload([{
- name: 'test',
- deleteUrl: '.',
- deleteType: 'GET'
- }])
- .appendTo($('#fileupload .files'))
- .show()
- .find('.toggle').click();
- $('#fileupload .fileupload-buttonbar .delete').click();
- });
- module('UI Options', lifecycleUI);
- test('autoUpload', function () {
- expect(1);
- $('#fileupload')
- .fileupload({
- autoUpload: true,
- send: function () {
- ok(true, 'Started file upload automatically');
- return false;
- }
- })
- .fileupload('add', {files: [{name: 'test'}]})
- .fileupload('option', 'autoUpload', false)
- .fileupload('add', {files: [{name: 'test'}]});
- });
- test('maxNumberOfFiles', function () {
- expect(3);
- var addIndex = 0,
- sendIndex = 0;
- $('#fileupload')
- .fileupload({
- autoUpload: true,
- maxNumberOfFiles: 3,
- singleFileUploads: false,
- send: function () {
- strictEqual(
- sendIndex += 1,
- addIndex
- );
- },
- progress: $.noop,
- progressall: $.noop,
- done: $.noop,
- stop: $.noop
- })
- .fileupload('add', {files: [{name: (addIndex += 1)}]})
- .fileupload('add', {files: [{name: (addIndex += 1)}]})
- .fileupload('add', {files: [{name: (addIndex += 1)}]})
- .fileupload('add', {files: [{name: 'test'}]});
- });
- test('maxFileSize', function () {
- expect(2);
- var addIndex = 0,
- sendIndex = 0;
- $('#fileupload')
- .fileupload({
- autoUpload: true,
- maxFileSize: 1000,
- send: function () {
- strictEqual(
- sendIndex += 1,
- addIndex
- );
- return false;
- }
- })
- .fileupload('add', {files: [{
- name: (addIndex += 1)
- }]})
- .fileupload('add', {files: [{
- name: (addIndex += 1),
- size: 999
- }]})
- .fileupload('add', {files: [{
- name: 'test',
- size: 1001
- }]})
- .fileupload({
- send: function (e, data) {
- ok(
- !$.blueimp.fileupload.prototype.options
- .send.call(this, e, data)
- );
- return false;
- }
- });
- });
- test('minFileSize', function () {
- expect(2);
- var addIndex = 0,
- sendIndex = 0;
- $('#fileupload')
- .fileupload({
- autoUpload: true,
- minFileSize: 1000,
- send: function () {
- strictEqual(
- sendIndex += 1,
- addIndex
- );
- return false;
- }
- })
- .fileupload('add', {files: [{
- name: (addIndex += 1)
- }]})
- .fileupload('add', {files: [{
- name: (addIndex += 1),
- size: 1001
- }]})
- .fileupload('add', {files: [{
- name: 'test',
- size: 999
- }]})
- .fileupload({
- send: function (e, data) {
- ok(
- !$.blueimp.fileupload.prototype.options
- .send.call(this, e, data)
- );
- return false;
- }
- });
- });
- test('acceptFileTypes', function () {
- expect(2);
- var addIndex = 0,
- sendIndex = 0;
- $('#fileupload')
- .fileupload({
- autoUpload: true,
- acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
- disableImageMetaDataLoad: true,
- send: function () {
- strictEqual(
- sendIndex += 1,
- addIndex
- );
- return false;
- }
- })
- .fileupload('add', {files: [{
- name: (addIndex += 1) + '.jpg'
- }]})
- .fileupload('add', {files: [{
- name: (addIndex += 1),
- type: 'image/jpeg'
- }]})
- .fileupload('add', {files: [{
- name: 'test.txt',
- type: 'text/plain'
- }]})
- .fileupload({
- send: function (e, data) {
- ok(
- !$.blueimp.fileupload.prototype.options
- .send.call(this, e, data)
- );
- return false;
- }
- });
- });
- test('acceptFileTypes as HTML5 data attribute', function () {
- expect(2);
- var regExp = /(\.|\/)(gif|jpe?g|png)$/i;
- $('#fileupload')
- .attr('data-accept-file-types', regExp.toString())
- .fileupload();
- strictEqual(
- $.type($('#fileupload').fileupload('option', 'acceptFileTypes')),
- $.type(regExp)
- );
- strictEqual(
- $('#fileupload').fileupload('option', 'acceptFileTypes').toString(),
- regExp.toString()
- );
- });
- });
|