Uploader.html 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>Plupload: Test Uploader</title>
  6. <script src="../loader.js"></script>
  7. <script type="text/javascript">
  8. QUnit.config.reorder = false;
  9. QUnit.config.autostart = false;
  10. QUnit.config.testTimeout = 10000;
  11. FileHash.init({
  12. files: ['files/01.min.js', 'files/02.min.js'],
  13. onready: function() {
  14. QUnit.start();
  15. }
  16. });
  17. o.Env.swf_url = "../../js/flash/Moxie.swf";
  18. o.Env.xap_url = "../../js/silverlight/Moxie.xap";
  19. module("plupload.Uploader", {
  20. setup: function() {
  21. var options, up;
  22. $('#qunit-fixture').html('<div id="uploader" />');
  23. options = this.options = {
  24. browse_button: 'uploader',
  25. container: 'qunit-fixture',
  26. url: "Plupload/upload.php"
  27. };
  28. up = this.up = new plupload.Uploader(options);
  29. up.bind('PostInit', function() {
  30. QUnit.start();
  31. });
  32. QUnit.stop();
  33. up.init();
  34. // introduce special event that can be binded or unbinded without problems
  35. up.bind('FilesAdded', function(up, files) {
  36. up.trigger('TestFilesAdded', files);
  37. });
  38. up.bind('FilesRemoved', function(up, files) {
  39. up.trigger('TestFilesRemoved', files);
  40. });
  41. up.bind('QueueChanged', function(up) {
  42. up.trigger('TestQueueChanged');
  43. });
  44. },
  45. teardown: function() {
  46. this.up.destroy();
  47. }
  48. });
  49. test('addFile()', function() {
  50. var up = this.up
  51. , file
  52. , files = FileHash.getRuntimeFiles()
  53. , nFiles = FileHash.getNativeFiles()
  54. , queue = []
  55. ;
  56. if (nFiles.length) {
  57. queue.push(
  58. // window.Blob
  59. function(cb) {
  60. up.bind('TestFilesAdded', function(up) {
  61. equal(up.files.length, 1, "window.Blob added.");
  62. up.unbind('TestFilesAdded');
  63. cb();
  64. });
  65. up.addFile(nFiles[0].blob, nFiles[0].name);
  66. },
  67. // o.Blob
  68. function(cb) {
  69. file = new o.Blob(null, files[0].getSource());
  70. up.bind('TestFilesAdded', function(up) {
  71. equal(up.files[0].name, files[0].name, "File name set properly through the second, optional argument.");
  72. equal(up.files.length, 2, "o.Blob added (file name: " + up.files[1].name + ").");
  73. up.unbind('TestFilesAdded');
  74. cb();
  75. });
  76. up.addFile(file, files[0].name);
  77. }
  78. );
  79. }
  80. queue.push(
  81. // o.File
  82. function(cb) {
  83. up.bind('TestFilesAdded', function(up) {
  84. equal(up.files.length, 3, "o.File added (file name: " + up.files[2].name + ").");
  85. up.unbind('TestFilesAdded');
  86. cb();
  87. });
  88. up.addFile(files[0]);
  89. },
  90. // plupload.File
  91. function(cb) {
  92. file = new plupload.File(files[1]);
  93. up.bind('TestFilesAdded', function(up) {
  94. equal(up.files.length, 4, "plupload.File added (file name: " + up.files[3].name + ").");
  95. up.unbind('TestFilesAdded');
  96. cb();
  97. });
  98. up.addFile(file);
  99. },
  100. // array of file objects
  101. function(cb) {
  102. var mixedArr = [];
  103. if (nFiles.length) {
  104. [].push.apply(mixedArr, [
  105. nFiles[0].blob,
  106. new o.Blob(null, nFiles[0].blob)
  107. ]);
  108. }
  109. [].push.apply(mixedArr, [
  110. files[0],
  111. new plupload.File(files[1])
  112. ]);
  113. up.bind('TestQueueChanged', function() {
  114. ok(true, "QueueChanged triggered.");
  115. up.unbind('TestQueueChanged');
  116. });
  117. up.bind('Refresh', function() {
  118. ok(true, "Refresh triggered.");
  119. });
  120. up.bind('TestFilesAdded', function(up) {
  121. equal(up.files.length, 8, "Mixed array of various file objects added.");
  122. notEqual(up.files[7].name, files[0].name, "Second parameter (fileName) properly ignored, when first one is an array.");
  123. up.unbind('TestFilesAdded');
  124. cb();
  125. });
  126. up.addFile(mixedArr, files[0].name);
  127. }
  128. );
  129. stop();
  130. o.inSeries(queue, function() {
  131. start();
  132. });
  133. });
  134. test('getFile()', function() {
  135. expect(1);
  136. var files = FileHash.getRuntimeFiles();
  137. this.up.bind('TestFilesAdded', function(up, files) {
  138. start();
  139. var file = up.getFile(files[0].id);
  140. deepEqual(file, files[0], "File retrieved by id with getFile().");
  141. up.unbind('TestFilesAdded');
  142. });
  143. stop();
  144. this.up.addFile(files);
  145. });
  146. test('removeFile() / splice()', function() {
  147. expect(5);
  148. var countFiles, files = FileHash.getRuntimeFiles();
  149. this.up.bind('TestFilesAdded', function(up, files) {
  150. start();
  151. countFiles = up.files.length;
  152. up.removeFile(up.files[0]);
  153. equal(up.files.length, --countFiles, "File removed from the queue by passing a plupload.File object.");
  154. up.removeFile(up.files[0].id);
  155. equal(up.files.length, --countFiles, "File removed from the queue by passing file id.");
  156. up.bind('FilesRemoved', function(up, files) {
  157. equal(files.length, 2, "FilesRemoved triggred, " + files.length + " removed.");
  158. });
  159. up.bind('QueueChanged', function(up) {
  160. ok(true, "QueueChanged triggered.");
  161. });
  162. up.splice(0, 2);
  163. equal(up.files.length, 0, "Two files removed simultaneously with splice().");
  164. up.unbind('TestFilesAdded');
  165. });
  166. stop();
  167. this.up.addFile([
  168. new o.File(null, files[0]),
  169. new o.File(null, files[1]),
  170. new plupload.File(files[0]),
  171. new plupload.File(files[1])
  172. ]);
  173. });
  174. test('Test if internal file counters are properly updated, when queue changes.', function() {
  175. var up = this.up
  176. , file
  177. , files = FileHash.getRuntimeFiles()
  178. , nFiles = FileHash.getNativeFiles()
  179. , queue = []
  180. ;
  181. queue.push(
  182. // when files are added to the queue
  183. function(cb) {
  184. up.bind('TestFilesAdded', function() {
  185. ok(true, "FilesAdded triggered when file was added.");
  186. equal(up.files.length, files.length, "Queue updated.");
  187. equal(up.total.queued, files.length, "up.total updated.");
  188. up.unbind('TestFilesAdded');
  189. cb();
  190. });
  191. up.addFile(files);
  192. },
  193. // when files are removed from the queue
  194. function(cb) {
  195. up.bind('TestFilesRemoved', function() {
  196. ok(true, "FilesRemoved triggered when file was removed.");
  197. equal(up.files.length, files.length - 1, "Queue updated.");
  198. equal(up.total.queued, files.length - 1, "up.total updated.");
  199. up.unbind('TestFilesRemoved');
  200. cb();
  201. });
  202. up.removeFile(up.files[1]);
  203. }
  204. );
  205. stop();
  206. o.inSeries(queue, function() {
  207. start();
  208. });
  209. });
  210. test('setOption() - set option that requires reinitialization', function() {
  211. var oldValue = this.up.getOption('multi_selection');
  212. var newValue = !oldValue;
  213. this.up.setOption('multi_selection', newValue);
  214. notEqual(oldValue, this.up.getOption('multi_selection'), "Option successfully changed.");
  215. });
  216. </script>
  217. </head>
  218. <body>
  219. <div id="qunit"></div>
  220. <div id="qunit-fixture" style="position: relative; top: 0 !important; left: 0 !important; width: 100%; height: 9px;"></div>
  221. </body>
  222. </html>