main.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. var dedupe = require('../');
  2. var should = require('should');
  3. var through = require('through');
  4. var path = require('path');
  5. var File = require('gulp-util').File;
  6. var Buffer = require('buffer').Buffer;
  7. var fs = require('fs');
  8. require('mocha');
  9. describe('gulp-dedupe', function() {
  10. describe('dedupe()', function() {
  11. testDedupe(
  12. undefined,
  13. [
  14. 'file1.txt', 'Contents1',
  15. 'file1.txt', 'Contents1',
  16. 'file2.txt', 'Contents2',
  17. 'file1.txt', 'Contents1',
  18. 'file2.txt', 'Contents2',
  19. 'file3.txt', 'Contents3',
  20. 'file4.txt', 'Contents4',
  21. 'test/file1.txt', 'Contents1',
  22. 'file4.txt', 'Contents4'
  23. ],
  24. [
  25. 'file1.txt', 'Contents1',
  26. 'file2.txt', 'Contents2',
  27. 'file3.txt', 'Contents3',
  28. 'file4.txt', 'Contents4',
  29. 'test/file1.txt', 'Contents1'
  30. ]
  31. );
  32. testDedupe(
  33. {error: true},
  34. [
  35. 'file1.txt', 'Contents1',
  36. 'file1.txt', 'Contents1'
  37. ],
  38. [
  39. 'file1.txt', 'Contents1', 'Duplicate `file1.txt`'
  40. ]
  41. );
  42. testDedupe(
  43. undefined,
  44. [
  45. 'file1.txt', 'Contents1',
  46. 'file1.txt', 'Contents2'
  47. ],
  48. [
  49. 'file1.txt', 'Contents1', 'Duplicate file `file1.txt` with different contents'
  50. ]
  51. );
  52. testDedupe(
  53. {diff: true},
  54. [
  55. 'file1.txt', 'Contents1',
  56. 'file1.txt', 'Contents2'
  57. ],
  58. [
  59. 'file1.txt', 'Contents1', 'Duplicate file `file1.txt` with different contents:\n'
  60. ]
  61. );
  62. testDedupe(
  63. {same: false},
  64. [
  65. 'file1.txt', 'Contents1',
  66. 'file1.txt', 'Contents2'
  67. ],
  68. [
  69. 'file1.txt', 'Contents1'
  70. ]
  71. );
  72. function testDedupe(options, files, results) {
  73. var stream = dedupe(options);
  74. it('should dedupe files', function(done) {
  75. stream.on('data', function (file) {
  76. var expectedFilename = results.shift(),
  77. expectedHead = results.shift();
  78. should.exist(file);
  79. should.exist(file.relative);
  80. should.exist(file.contents);
  81. should.exist(expectedFilename);
  82. should.exist(expectedHead);
  83. var retFilename = path.resolve(file.path);
  84. retFilename.should.equal(path.resolve(expectedFilename));
  85. file.relative.should.equal(expectedFilename);
  86. Buffer.isBuffer(file.contents).should.equal(true);
  87. file.contents.toString().substring(0, expectedHead.length).should.equal(expectedHead);
  88. if (results && !results.length) {
  89. results = null;
  90. done();
  91. }
  92. });
  93. stream.on('error', function(err) {
  94. var expected = results.shift();
  95. var msg = (err.message || '').substring(0, expected.length);
  96. msg.should.equal(expected);
  97. });
  98. while (files.length) {
  99. stream.write(new File({
  100. path: files.shift(),
  101. contents: new Buffer(files.shift())
  102. }));
  103. }
  104. stream.end();
  105. if (results && !results.length) {
  106. results = null;
  107. done();
  108. }
  109. });
  110. }
  111. });
  112. });