main.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. var should = require('should');
  2. var flatten = require('../');
  3. var File = require('gulp-util').File;
  4. var gulp = require('gulp');
  5. var path = require('path');
  6. var fileInstance;
  7. describe('gulp-flatten', function () {
  8. beforeEach(function () {
  9. fileInstance = new File({
  10. cwd: '/some/project/',
  11. base: '/some/project/src/',
  12. path: '/some/project/src/assets/css/app.css',
  13. contents: new Buffer('html { background-color: #777; }')
  14. });
  15. });
  16. describe('flatten()', function () {
  17. it('should strip relative path without options', function (done) {
  18. var stream = flatten();
  19. stream.on('error', done);
  20. stream.on('data', function(newFile) {
  21. should.exist(newFile);
  22. should.exist(newFile.path);
  23. should.exist(newFile.relative);
  24. newFile.relative.should.equal('app.css');
  25. done();
  26. });
  27. stream.write(fileInstance);
  28. });
  29. it('should replace relative path with option path', function (done) {
  30. var stream = flatten({newPath: 'new/path'});
  31. stream.on('error', done);
  32. stream.on('data', function(newFile) {
  33. should.exist(newFile);
  34. should.exist(newFile.path);
  35. should.exist(newFile.relative);
  36. newFile.relative.should.equal('new/path/app.css'.split('/').join(path.sep));
  37. done();
  38. });
  39. stream.write(fileInstance);
  40. });
  41. it('should emit arg error with nonstring option', function (done) {
  42. var stream = flatten(123);
  43. stream.on('error', function (err) {
  44. should.exist(err);
  45. should.exist(err.message);
  46. should.ok(err.message === 'Path must be a string. Received undefined'
  47. || err.message === 'Arguments to path.join must be strings')
  48. done();
  49. });
  50. stream.write(fileInstance);
  51. });
  52. it('should ignore directories', function (done) {
  53. var stream = flatten();
  54. stream.on('error', done);
  55. stream.on('data', function(newFile) {
  56. should.exist(newFile);
  57. should.exist(newFile.path);
  58. should.exist(newFile.relative);
  59. newFile.relative.should.equal('test.css');
  60. done();
  61. });
  62. gulp.task('dottask', function () {
  63. gulp.src(path.join(__dirname, '/test_dir/**/*.css'))
  64. .pipe(stream);
  65. });
  66. gulp.start('dottask');
  67. });
  68. it('should strip relative path at the specified depth if depth option is passed', function (done) {
  69. var stream = flatten({includeParents: 2});
  70. stream.on('error', done);
  71. stream.on('data', function(newFile) {
  72. should.exist(newFile);
  73. should.exist(newFile.path);
  74. should.exist(newFile.relative);
  75. newFile.relative.should.equal('one/two/app.css'.split('/').join(path.sep));
  76. done();
  77. });
  78. fileInstance.path = '/some/project/src/one/two/three/four/app.css';
  79. stream.write(fileInstance);
  80. });
  81. it('should leave path from the end if depth option is passed as negative number', function (done) {
  82. var stream = flatten({includeParents: -2});
  83. stream.on('error', done);
  84. stream.on('data', function(newFile) {
  85. should.exist(newFile);
  86. should.exist(newFile.path);
  87. should.exist(newFile.relative);
  88. newFile.relative.should.equal('three/four/app.css'.split('/').join(path.sep));
  89. done();
  90. });
  91. fileInstance.path = '/some/project/src/one/two/three/four/app.css';
  92. stream.write(fileInstance);
  93. });
  94. it('should make no changes if the absolute depth option is greater than the tree depth', function (done) {
  95. var stream = flatten({includeParents: 8});
  96. stream.on('error', done);
  97. stream.on('data', function(newFile) {
  98. should.exist(newFile);
  99. should.exist(newFile.path);
  100. should.exist(newFile.relative);
  101. newFile.relative.should.equal('one/two/three/four/app.css'.split('/').join(path.sep));
  102. done();
  103. });
  104. fileInstance.path = '/some/project/src/one/two/three/four/app.css';
  105. stream.write(fileInstance);
  106. });
  107. });
  108. });