fileMinifierTest.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. var should = require('chai').should();
  2. var fileMinifier = require('../../lib/tools/weightChecker/fileMinifier');
  3. var fs = require('fs');
  4. var path = require('path');
  5. describe('fileMinifier', function() {
  6. it('should minify a JS file with minifyJs', function(done) {
  7. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/unminified-script.js'));
  8. var fileSize = fileContent.length;
  9. fileMinifier.minifyJs(fileContent.toString()).then(function(newFile) {
  10. var newFileSize = newFile.length;
  11. newFileSize.should.be.below(fileSize);
  12. done();
  13. }).fail(function(err) {
  14. done(err);
  15. });
  16. });
  17. it('should minify a JS file with minifyFile', function(done) {
  18. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/unminified-script.js'));
  19. var fileSize = fileContent.length;
  20. var entry = {
  21. method: 'GET',
  22. url: 'http://localhost:8388/unminified-script.js',
  23. requestHeaders: {
  24. 'User-Agent': 'something',
  25. Referer: 'http://www.google.fr/',
  26. Accept: '*/*',
  27. 'Accept-Encoding': 'gzip, deflate'
  28. },
  29. status: 200,
  30. isJS: true,
  31. type: 'js',
  32. contentLength: 999,
  33. weightCheck: {
  34. body: fileContent.toString('utf8'),
  35. totalWeight: fileSize + 200,
  36. headersSize: 200,
  37. bodySize: fileSize,
  38. isCompressed: false,
  39. uncompressedSize: fileSize
  40. }
  41. };
  42. fileMinifier.minifyFile(entry)
  43. .then(function(newEntry) {
  44. newEntry.weightCheck.should.have.a.property('isMinified').that.equals(false);
  45. newEntry.weightCheck.should.have.a.property('minified').that.is.below(fileSize);
  46. done();
  47. })
  48. .fail(function(err) {
  49. done(err);
  50. });
  51. });
  52. it('should fail minifying an already minified JS', function(done) {
  53. this.timeout(5000);
  54. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/jquery1.8.3.js'));
  55. var fileSize = fileContent.length;
  56. var entry = {
  57. method: 'GET',
  58. url: 'http://localhost:8388/jquery1.8.3.js',
  59. requestHeaders: {
  60. 'User-Agent': 'something',
  61. Referer: 'http://www.google.fr/',
  62. Accept: '*/*',
  63. 'Accept-Encoding': 'gzip, deflate'
  64. },
  65. status: 200,
  66. isJS: true,
  67. type: 'js',
  68. contentLength: 999,
  69. weightCheck: {
  70. body: fileContent.toString('utf8'),
  71. totalWeight: fileSize + 200,
  72. headersSize: 200,
  73. bodySize: fileSize,
  74. isCompressed: false,
  75. uncompressedSize: fileSize
  76. }
  77. };
  78. fileMinifier.minifyFile(entry)
  79. .then(function(newEntry) {
  80. newEntry.weightCheck.should.not.have.a.property('isMinified');
  81. newEntry.weightCheck.should.not.have.a.property('minified');
  82. done();
  83. })
  84. .fail(function(err) {
  85. done(err);
  86. });
  87. });
  88. it('should fail minifying a JS with syntax errors', function(done) {
  89. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/svg-image.svg'));
  90. var fileSize = fileContent.length;
  91. var entry = {
  92. method: 'GET',
  93. url: 'http://localhost:8388/svg-image.svg',
  94. requestHeaders: {
  95. 'User-Agent': 'something',
  96. Referer: 'http://www.google.fr/',
  97. Accept: '*/*',
  98. 'Accept-Encoding': 'gzip, deflate'
  99. },
  100. status: 200,
  101. isJS: true,
  102. type: 'js',
  103. contentLength: 999,
  104. weightCheck: {
  105. body: fileContent.toString('utf8'),
  106. totalWeight: fileSize + 200,
  107. headersSize: 200,
  108. bodySize: fileSize,
  109. isCompressed: false,
  110. uncompressedSize: fileSize
  111. }
  112. };
  113. fileMinifier.minifyFile(entry)
  114. .then(function(newEntry) {
  115. newEntry.weightCheck.should.not.have.a.property('isMinified');
  116. newEntry.weightCheck.should.not.have.a.property('minified');
  117. done();
  118. })
  119. .fail(function(err) {
  120. done(err);
  121. });
  122. });
  123. it('should minify a CSS file with clean-css', function(done) {
  124. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/unminified-stylesheet.css'));
  125. var fileSize = fileContent.length;
  126. fileMinifier.minifyCss(fileContent.toString()).then(function(newFile) {
  127. var newFileSize = newFile.length;
  128. newFileSize.should.be.below(fileSize);
  129. done();
  130. }).fail(function(err) {
  131. done(err);
  132. });
  133. });
  134. it('should minify a CSS file with minifyFile', function(done) {
  135. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/unminified-stylesheet.css'));
  136. var fileSize = fileContent.length;
  137. var entry = {
  138. method: 'GET',
  139. url: 'http://localhost:8388/unminified-stylesheet.css',
  140. requestHeaders: {
  141. 'User-Agent': 'something',
  142. Referer: 'http://www.google.fr/',
  143. Accept: '*/*',
  144. 'Accept-Encoding': 'gzip, deflate'
  145. },
  146. status: 200,
  147. isCSS: true,
  148. type: 'css',
  149. contentLength: 999,
  150. weightCheck: {
  151. body: fileContent.toString('utf8'),
  152. totalWeight: fileSize + 200,
  153. headersSize: 200,
  154. bodySize: fileSize,
  155. isCompressed: false,
  156. uncompressedSize: fileSize
  157. }
  158. };
  159. fileMinifier.minifyFile(entry)
  160. .then(function(newEntry) {
  161. newEntry.weightCheck.should.have.a.property('isMinified').that.equals(false);
  162. newEntry.weightCheck.should.have.a.property('minified').that.is.below(fileSize);
  163. done();
  164. })
  165. .fail(function(err) {
  166. done(err);
  167. });
  168. });
  169. it('should minify an HTML file with ', function(done) {
  170. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/jquery-page.html'));
  171. var fileSize = fileContent.length;
  172. fileMinifier.minifyHtml(fileContent.toString()).then(function(newFile) {
  173. var newFileSize = newFile.length;
  174. newFileSize.should.be.below(fileSize);
  175. done();
  176. }).fail(function(err) {
  177. done(err);
  178. });
  179. });
  180. });