aboutsummaryrefslogtreecommitdiff
path: root/vendors/jquery-file-upload/test/test.js
diff options
context:
space:
mode:
authorSem <sembrestels@riseup.net>2012-08-02 21:44:44 +0200
committerSem <sembrestels@riseup.net>2012-08-02 21:44:44 +0200
commitdad0209bbd7994b623bc0126e3e37b1f521d2977 (patch)
tree1e954b32439cbfc2acbbd63ed62dc372a260f37e /vendors/jquery-file-upload/test/test.js
parentfa81c487488064f684649272a6579079d3a88e2c (diff)
parent28b1669c4b1afaed7429da2cc9580340dcb13b6e (diff)
downloadelgg-dad0209bbd7994b623bc0126e3e37b1f521d2977.tar.gz
elgg-dad0209bbd7994b623bc0126e3e37b1f521d2977.tar.bz2
Merge branch 'jquery-uploader' of git://github.com/sembrestels/Tidypics
Conflicts: start.php views/default/photos/css.php
Diffstat (limited to 'vendors/jquery-file-upload/test/test.js')
-rw-r--r--vendors/jquery-file-upload/test/test.js1279
1 files changed, 1279 insertions, 0 deletions
diff --git a/vendors/jquery-file-upload/test/test.js b/vendors/jquery-file-upload/test/test.js
new file mode 100644
index 000000000..0f6d90afb
--- /dev/null
+++ b/vendors/jquery-file-upload/test/test.js
@@ -0,0 +1,1279 @@
+/*
+ * jQuery File Upload Plugin Test 6.9.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint nomen: true, unparam: true */
+/*global $, QUnit, document, expect, module, test, asyncTest, start, ok, strictEqual, notStrictEqual */
+
+$(function () {
+ 'use strict';
+
+ QUnit.done = function () {
+ // Delete all uploaded files:
+ var url = $('#fileupload').find('form').prop('action');
+ $.getJSON(url, function (files) {
+ $.each(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', $.blueimp.fileupload, {});
+ },
+ teardown: function () {
+ // De-initialize the file input plugin:
+ $('#fileupload:blueimp-fileupload').fileupload('destroy');
+ // Remove all remaining event listeners:
+ $('#fileupload input').unbind();
+ $(document).unbind();
+ }
+ },
+ lifecycleUI = {
+ setup: function () {
+ // Set the .fileupload method to the JUI widget method:
+ $.widget('blueimpJUI.fileupload', $.blueimpJUI.fileupload, {});
+ },
+ teardown: function () {
+ // De-initialize the file input plugin:
+ $('#fileupload:blueimpJUI-fileupload').fileupload('destroy');
+ // Remove all remaining event listeners:
+ $('#fileupload input, #fileupload button').unbind();
+ $(document).unbind();
+ }
+ };
+
+ module('Initialization', lifecycle);
+
+ test('Widget initialization', function () {
+ ok($('#fileupload').fileupload().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('Event listeners initialization', function () {
+ var fu = $('#fileupload').fileupload();
+ ok(
+ fu.fileupload('option', 'fileInput')
+ .data('events').change.length,
+ 'Listens to file input change events'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ ok(
+ fu.fileupload('option', 'dropZone')
+ .data('events').drop.length,
+ 'Listens to drop zone drop events'
+ );
+ ok(
+ fu.fileupload('option', 'dropZone')
+ .data('events').dragover.length,
+ 'Listens to drop zone dragover events'
+ );
+ }
+ });
+
+ module('API', lifecycle);
+
+ test('destroy', function () {
+ var fu = $('#fileupload').fileupload(),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone');
+ fileInput.change($.noop);
+ dropZone.bind('drop', $.noop);
+ dropZone.bind('dragover', $.noop);
+ fu.fileupload('destroy');
+ strictEqual(
+ fileInput.data('events').change.length,
+ 1,
+ 'Removes own file input change event listener'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ strictEqual(
+ dropZone.data('events').drop.length,
+ 1,
+ 'Removes own drop zone drop event listener'
+ );
+ strictEqual(
+ dropZone.data('events').dragover.length,
+ 1,
+ 'Removes own drop zone dragover event listener'
+ );
+ }
+ });
+
+ test('disable', function () {
+ var fu = $('#fileupload').fileupload(),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone'),
+ param = {files: [{name: 'test'}]};
+ fileInput.change($.noop);
+ dropZone.bind('drop', $.noop);
+ dropZone.bind('dragover', $.noop);
+ fu.fileupload('disable');
+ strictEqual(
+ fileInput.data('events').change.length,
+ 1,
+ 'Removes own file input change event listener'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ strictEqual(
+ dropZone.data('events').drop.length,
+ 1,
+ 'Removes own drop zone drop event listener'
+ );
+ strictEqual(
+ dropZone.data('events').dragover.length,
+ 1,
+ 'Removes own drop zone dragover event listener'
+ );
+ }
+ fu.fileupload({
+ add: function (e, data) {
+ ok(false);
+ }
+ }).fileupload('add', param);
+ });
+
+ test('enable', function () {
+ var fu = $('#fileupload').fileupload(),
+ param = {files: [{name: 'test'}]};
+ fu.fileupload('disable');
+ fu.fileupload('enable');
+ ok(
+ fu.fileupload('option', 'fileInput')
+ .data('events').change.length,
+ 'Listens to file input change events'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ ok(
+ fu.fileupload('option', 'dropZone')
+ .data('events').drop.length,
+ 'Listens to drop zone drop events'
+ );
+ ok(
+ fu.fileupload('option', 'dropZone')
+ .data('events').dragover.length,
+ 'Listens to drop zone dragover events'
+ );
+ }
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ strictEqual(
+ data.files[0].name,
+ 'test',
+ 'Triggers send callback'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ test('option', function () {
+ var fu = $('#fileupload').fileupload(),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone');
+ fu.fileupload('option', 'fileInput', null);
+ fu.fileupload('option', 'dropZone', null);
+ ok(
+ !fileInput.data('events'),
+ 'Removes event listener after changing fileInput option'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ ok(
+ !dropZone.data('events'),
+ 'Removes event listeners after changing dropZone option'
+ );
+ }
+ fu.fileupload('option', 'fileInput', fileInput);
+ fu.fileupload('option', 'dropZone', dropZone);
+ ok(
+ fileInput.data('events').change.length,
+ 'Adds change event listener after setting fileInput option'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ ok(
+ dropZone.data('events').drop.length,
+ 'Adds drop event listener after setting dropZone option'
+ );
+ ok(
+ dropZone.data('events').dragover.length,
+ 'Adds dragover event listener after setting dropZone option'
+ );
+ }
+ 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', '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'
+ );
+ });
+
+ asyncTest('add', function () {
+ expect(4);
+ var param = {files: [{name: 'test'}]},
+ param2 = {files: [{fileName: 'test', fileSize: 123}]};
+ $('#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) {
+ strictEqual(
+ data.files[0].name,
+ param2.files[0].fileName,
+ 'Normalizes fileName'
+ );
+ strictEqual(
+ data.files[0].size,
+ param2.files[0].fileSize,
+ 'Normalizes fileSize'
+ );
+ data.submit().complete(function () {
+ ok(true, 'data.submit() Returns a jqXHR object');
+ start();
+ });
+ }
+ ).fileupload('add', param2);
+ });
+
+ 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 (e, data) {
+ ok(true, 'Triggers add callback');
+ start();
+ }
+ }).fileupload('add', param);
+ });
+
+ asyncTest('submit', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ submit: function (e, data) {
+ 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 (e, data) {
+ 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 (e, data) {
+ 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 (e, data) {
+ ok(true, 'Triggers fail callback');
+ start();
+ }
+ });
+ 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 (e, data) {
+ ok(true, 'Triggers always callback');
+ if (counter === 1) {
+ start();
+ } else {
+ counter += 1;
+ }
+ }
+ });
+ 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 (e, data) {
+ 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 (e, data) {
+ 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 (e, data) {
+ active += 1;
+ },
+ start: function (e, data) {
+ 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 (e, data) {
+ active += 1;
+ },
+ always: function (e, data) {
+ active -= 1;
+ },
+ stop: function (e, data) {
+ ok(!active, 'Triggers stop callback after uploads');
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ test('change', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = 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('fileupload');
+ expect(1);
+ fu.fileupload({
+ paste: function (e, data) {
+ ok(true, 'Triggers paste callback');
+ },
+ add: $.noop
+ });
+ fuo._onPaste({
+ data: {fileupload: fuo},
+ originalEvent: {clipboardData: {}},
+ preventDefault: $.noop
+ });
+ });
+
+ test('drop', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('fileupload');
+ expect(1);
+ fu.fileupload({
+ drop: function (e, data) {
+ ok(true, 'Triggers drop callback');
+ },
+ add: $.noop
+ });
+ fuo._onDrop({
+ data: {fileupload: fuo},
+ originalEvent: {dataTransfer: {}},
+ preventDefault: $.noop
+ });
+ });
+
+ test('dragover', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('fileupload');
+ expect(1);
+ fu.fileupload({
+ dragover: function (e, data) {
+ ok(true, 'Triggers dragover callback');
+ },
+ add: $.noop
+ });
+ fuo._onDragOver({
+ data: {fileupload: fuo},
+ originalEvent: {dataTransfer: {}},
+ 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('fileupload'),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ fileInputElement = fileInput[0];
+ expect(2);
+ fu.fileupload({
+ replaceFileInput: false,
+ change: function (e, data) {
+ 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 (e, data) {
+ 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('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ $('#fileupload').fileupload({
+ singleFileUploads: true,
+ add: function (e, data) {
+ 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('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ $('#fileupload').fileupload({
+ singleFileUploads: false,
+ limitMultiFileUploads: 2,
+ add: function (e, data) {
+ ok(true, 'Triggers callback number ' + index.toString());
+ index += 1;
+ }
+ }).fileupload('add', param);
+ });
+
+ 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 (e, data) {
+ sendIndex += 1;
+ },
+ done: function (e, data) {
+ loadIndex += 1;
+ strictEqual(sendIndex, loadIndex, 'upload in order');
+ },
+ fail: function (e, data) {
+ strictEqual(data.errorThrown, 'abort', 'upload aborted');
+ },
+ stop: function (e) {
+ start();
+ }
+ });
+ 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 (e, data) {
+ sendIndex += 1;
+ },
+ done: function (e, data) {
+ loadIndex += 1;
+ ok(sendIndex - loadIndex < 3);
+ },
+ fail: function (e, data) {
+ strictEqual(data.errorThrown, 'abort', 'upload aborted');
+ },
+ stop: function (e) {
+ start();
+ }
+ });
+ fu.data('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('add', param);
+ });
+
+ if ($.support.xhrFileUpload) {
+ asyncTest('multipart', function () {
+ expect(4);
+ 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['X-File-Name'],
+ param.files[0].name,
+ 'non-multipart upload sets X-File-Name header'
+ );
+ strictEqual(
+ data.headers['X-File-Type'],
+ param.files[0].type,
+ 'non-multipart upload sets X-File-Type header'
+ );
+ strictEqual(
+ data.headers['X-File-Size'],
+ param.files[0].size,
+ 'non-multipart upload sets X-File-Size header'
+ );
+ start();
+ }
+ });
+ fu.fileupload('send', param);
+ });
+ }
+
+ module('UI Initialization', lifecycleUI);
+
+ test('Widget initialization', function () {
+ ok($('#fileupload').fileupload().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(7);
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ 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 (e, data) {
+ ok(true, 'Delete action called via global delete button');
+ }
+ });
+ ok(
+ buttonbar.find('.start')
+ .data('events').click.length,
+ 'Listens to start button click events'
+ );
+ ok(
+ buttonbar.find('.cancel')
+ .data('events').click.length,
+ 'Listens to cancel button click events'
+ );
+ ok(
+ buttonbar.find('.delete')
+ .data('events').click.length,
+ 'Listens to delete button click events'
+ );
+ $('#fileupload').fileupload('add', {files: files});
+ buttonbar.find('.cancel').click();
+ $('#fileupload').fileupload('add', {files: files});
+ buttonbar.find('.start').click();
+ buttonbar.find('.cancel').click();
+ $('#fileupload').data('fileupload')._renderDownload(files)
+ .appendTo($('#fileupload .files')).show()
+ .find('.delete input').click();
+ buttonbar.find('.delete').click();
+ });
+
+ module('UI API', lifecycleUI);
+
+ test('destroy', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar');
+ $('#fileupload').fileupload();
+ buttonbar.find('button').click($.noop);
+ $('#fileupload').fileupload('destroy');
+ strictEqual(
+ buttonbar.find('.start').data('events').click.length,
+ 1,
+ 'Removes own start button click event listener'
+ );
+ strictEqual(
+ buttonbar.find('.cancel').data('events').click.length,
+ 1,
+ 'Removes own cancel button click event listener'
+ );
+ strictEqual(
+ buttonbar.find('.delete').data('events').click.length,
+ 1,
+ 'Removes own delete button click event listener'
+ );
+ });
+
+ test('disable', 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'
+ );
+ });
+
+ test('enable', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar');
+ $('#fileupload')
+ .fileupload()
+ .fileupload('disable')
+ .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('fileupload')._renderDownload([{
+ name: 'test',
+ delete_url: 'test',
+ delete_type: 'DELETE'
+ }]).appendTo($('#fileupload .files')).show()
+ .find('.delete input').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 (e) {
+ start();
+ ok('Triggers started callback');
+ return false;
+ },
+ sent: function (e, data) {
+ 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 (e, data) {
+ start();
+ ok('Triggers completed callback');
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('failed', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ failed: function (e, data) {
+ 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 (e, data) {
+ start();
+ ok('Triggers stopped callback');
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('destroyed', function () {
+ expect(1);
+ $('#fileupload').fileupload({
+ destroyed: function (e, data) {
+ start();
+ ok(true, 'Triggers destroyed callback');
+ }
+ });
+ $('#fileupload').data('fileupload')._renderDownload([{
+ name: 'test',
+ delete_url: 'test',
+ delete_type: 'DELETE'
+ }]).appendTo($('#fileupload .files')).show()
+ .find('.delete input').click();
+ $('#fileupload .fileupload-buttonbar .delete').click();
+ });
+
+ module('UI Options', lifecycleUI);
+
+ test('autoUpload', function () {
+ expect(1);
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ send: function (e, data) {
+ 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(4);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ maxNumberOfFiles: 1,
+ singleFileUploads: false,
+ send: function (e, data) {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ },
+ progress: $.noop,
+ progressall: $.noop,
+ done: $.noop,
+ stop: $.noop
+ })
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload('add', {files: [{name: 'test'}]})
+ .fileupload('option', 'maxNumberOfFiles', 1)
+ .fileupload('add', {files: [{name: 1}, {name: 2}]})
+ .fileupload({
+ maxNumberOfFiles: 1,
+ send: function (e, data) {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload({
+ maxNumberOfFiles: 0,
+ send: function (e, data) {
+ ok(
+ !$.blueimpUI.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ })
+ .fileupload('send', {files: [{name: 'test'}]});
+ });
+
+ test('maxFileSize', function () {
+ expect(3);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ maxFileSize: 1000,
+ send: function (e, data) {
+ 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(
+ !$.blueimpUI.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ })
+ .fileupload('send', {files: [{
+ name: 'test',
+ size: 1001
+ }]});
+ });
+
+ test('minFileSize', function () {
+ expect(3);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ minFileSize: 1000,
+ send: function (e, data) {
+ 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(
+ !$.blueimpUI.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ })
+ .fileupload('send', {files: [{
+ name: 'test',
+ size: 999
+ }]});
+ });
+
+ test('acceptFileTypes', function () {
+ expect(3);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
+ previewFileTypes: /none/,
+ send: function (e, data) {
+ 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(
+ !$.blueimpUI.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ })
+ .fileupload('send', {files: [{
+ name: 'test.txt',
+ type: 'text/plain'
+ }]});
+ });
+
+ 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()
+ );
+ });
+
+});