fileMinifierTest.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/jquery1.8.3.js'));
  54. var fileSize = fileContent.length;
  55. var entry = {
  56. method: 'GET',
  57. url: 'http://localhost:8388/jquery1.8.3.js',
  58. requestHeaders: {
  59. 'User-Agent': 'something',
  60. Referer: 'http://www.google.fr/',
  61. Accept: '*/*',
  62. 'Accept-Encoding': 'gzip, deflate'
  63. },
  64. status: 200,
  65. isJS: true,
  66. type: 'js',
  67. contentLength: 999,
  68. weightCheck: {
  69. body: fileContent.toString('utf8'),
  70. totalWeight: fileSize + 200,
  71. headersSize: 200,
  72. bodySize: fileSize,
  73. isCompressed: false,
  74. uncompressedSize: fileSize
  75. }
  76. };
  77. fileMinifier.minifyFile(entry)
  78. .then(function(newEntry) {
  79. newEntry.weightCheck.should.not.have.a.property('isMinified');
  80. newEntry.weightCheck.should.not.have.a.property('minified');
  81. done();
  82. })
  83. .fail(function(err) {
  84. done(err);
  85. });
  86. });
  87. it('should fail minifying a JS with syntax errors', function(done) {
  88. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/svg-image.svg'));
  89. var fileSize = fileContent.length;
  90. var entry = {
  91. method: 'GET',
  92. url: 'http://localhost:8388/svg-image.svg',
  93. requestHeaders: {
  94. 'User-Agent': 'something',
  95. Referer: 'http://www.google.fr/',
  96. Accept: '*/*',
  97. 'Accept-Encoding': 'gzip, deflate'
  98. },
  99. status: 200,
  100. isJS: true,
  101. type: 'js',
  102. contentLength: 999,
  103. weightCheck: {
  104. body: fileContent.toString('utf8'),
  105. totalWeight: fileSize + 200,
  106. headersSize: 200,
  107. bodySize: fileSize,
  108. isCompressed: false,
  109. uncompressedSize: fileSize
  110. }
  111. };
  112. fileMinifier.minifyFile(entry)
  113. .then(function(newEntry) {
  114. newEntry.weightCheck.should.not.have.a.property('isMinified');
  115. newEntry.weightCheck.should.not.have.a.property('minified');
  116. done();
  117. })
  118. .fail(function(err) {
  119. done(err);
  120. });
  121. });
  122. it('should minify a CSS file with clean-css', function(done) {
  123. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/unminified-stylesheet.css'));
  124. var fileSize = fileContent.length;
  125. fileMinifier.minifyCss(fileContent.toString()).then(function(newFile) {
  126. var newFileSize = newFile.length;
  127. newFileSize.should.be.below(fileSize);
  128. done();
  129. }).fail(function(err) {
  130. done(err);
  131. });
  132. });
  133. it('should minify a CSS file with minifyFile', function(done) {
  134. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/unminified-stylesheet.css'));
  135. var fileSize = fileContent.length;
  136. var entry = {
  137. method: 'GET',
  138. url: 'http://localhost:8388/unminified-stylesheet.css',
  139. requestHeaders: {
  140. 'User-Agent': 'something',
  141. Referer: 'http://www.google.fr/',
  142. Accept: '*/*',
  143. 'Accept-Encoding': 'gzip, deflate'
  144. },
  145. status: 200,
  146. isCSS: true,
  147. type: 'css',
  148. contentLength: 999,
  149. weightCheck: {
  150. body: fileContent.toString('utf8'),
  151. totalWeight: fileSize + 200,
  152. headersSize: 200,
  153. bodySize: fileSize,
  154. isCompressed: false,
  155. uncompressedSize: fileSize
  156. }
  157. };
  158. fileMinifier.minifyFile(entry)
  159. .then(function(newEntry) {
  160. newEntry.weightCheck.should.have.a.property('isMinified').that.equals(false);
  161. newEntry.weightCheck.should.have.a.property('minified').that.is.below(fileSize);
  162. done();
  163. })
  164. .fail(function(err) {
  165. done(err);
  166. });
  167. });
  168. it('should minify an HTML file with ', function(done) {
  169. var fileContent = fs.readFileSync(path.resolve(__dirname, '../www/jquery-page.html'));
  170. var fileSize = fileContent.length;
  171. fileMinifier.minifyHtml(fileContent.toString()).then(function(newFile) {
  172. var newFileSize = newFile.length;
  173. newFileSize.should.be.below(fileSize);
  174. done();
  175. }).fail(function(err) {
  176. done(err);
  177. });
  178. });
  179. });