252 lines
9.6 KiB
JavaScript
252 lines
9.6 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var concatFilenames = require('../index.js'),
|
||
|
chai = require('chai'),
|
||
|
sinonChai = require('sinon-chai'),
|
||
|
expect = chai.expect,
|
||
|
assert = require('stream-assert'),
|
||
|
File = require('gulp-util').File,
|
||
|
gulp = require('gulp'),
|
||
|
path = require('path');
|
||
|
|
||
|
chai.use(sinonChai);
|
||
|
|
||
|
function fixtures(glob) {
|
||
|
return path.join(__dirname, 'fixtures', glob);
|
||
|
}
|
||
|
|
||
|
describe('Given gulp-concat-filenames', function () {
|
||
|
describe('When I do not provide a filename', function () {
|
||
|
it('Then it should error', function () {
|
||
|
|
||
|
function nofilenameProvided() {
|
||
|
concatFilenames();
|
||
|
}
|
||
|
|
||
|
expect(nofilenameProvided)
|
||
|
.to
|
||
|
.throw(Error, 'Missing fileName option for gulp-concat-filenames');
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('When I do provide a filename', function () {
|
||
|
it('Then it should support null files', function (done) {
|
||
|
var expectedFilenames = ([
|
||
|
path.join(__dirname, 'fixtures/fork.txt'),
|
||
|
path.join(__dirname, 'fixtures/knife.js'),
|
||
|
path.join(__dirname, 'fixtures/spoon.html'),
|
||
|
]
|
||
|
.join('\n') + '\n')
|
||
|
.replace(/\\/g, '\/')
|
||
|
.toString();
|
||
|
|
||
|
gulp
|
||
|
.src(fixtures('*'), {
|
||
|
read: false
|
||
|
})
|
||
|
.pipe(concatFilenames('example.js'))
|
||
|
.pipe(assert.first(function (d) {
|
||
|
|
||
|
var contents = d.contents.toString();
|
||
|
expect(contents)
|
||
|
.to
|
||
|
.equal(expectedFilenames);
|
||
|
}))
|
||
|
.pipe(assert.end(done));
|
||
|
});
|
||
|
|
||
|
it('Then it support streamed files', function (done) {
|
||
|
var expectedFilenames = ([
|
||
|
path.join(__dirname, 'fixtures/fork.txt'),
|
||
|
path.join(__dirname, 'fixtures/knife.js'),
|
||
|
path.join(__dirname, 'fixtures/spoon.html'),
|
||
|
]
|
||
|
.join('\n') + '\n')
|
||
|
.replace(/\\/g, '\/')
|
||
|
.toString();
|
||
|
|
||
|
gulp
|
||
|
.src(fixtures('*'), {
|
||
|
buffer: false
|
||
|
})
|
||
|
.pipe(concatFilenames('example.js'))
|
||
|
.pipe(assert.first(function (d) {
|
||
|
|
||
|
var contents = d.contents.toString();
|
||
|
expect(contents)
|
||
|
.to
|
||
|
.equal(expectedFilenames);
|
||
|
}))
|
||
|
.pipe(assert.end(done));
|
||
|
});
|
||
|
|
||
|
describe('When I do not provide the "root" optional argument', function () {
|
||
|
it('then it will concatinate all filenames into a single file with absolute paths', function (done) {
|
||
|
var expectedFilenames = ([
|
||
|
path.join(__dirname, 'fixtures/fork.txt'),
|
||
|
path.join(__dirname, 'fixtures/knife.js'),
|
||
|
path.join(__dirname, 'fixtures/spoon.html'),
|
||
|
]
|
||
|
.join('\n') + '\n')
|
||
|
.replace(/\\/g, '\/')
|
||
|
.toString();
|
||
|
|
||
|
gulp
|
||
|
.src(fixtures('*'))
|
||
|
.pipe(concatFilenames('mainfest.txt'))
|
||
|
.pipe(assert.first(function (d) {
|
||
|
|
||
|
var contents = d.contents.toString();
|
||
|
expect(contents)
|
||
|
.to
|
||
|
.equal(expectedFilenames);
|
||
|
}))
|
||
|
.pipe(assert.end(done));
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('When I do provide the "root" optional argument', function () {
|
||
|
it('then it will concatinate all filenames into a single file with relative paths', function (done) {
|
||
|
var expectedFilenames = ([
|
||
|
'../test/fixtures/fork.txt',
|
||
|
'../test/fixtures/knife.js',
|
||
|
'../test/fixtures/spoon.html',
|
||
|
].join('\n') + '\n').toString();
|
||
|
|
||
|
gulp
|
||
|
.src(fixtures('*'))
|
||
|
.pipe(concatFilenames('mainfest.txt', {
|
||
|
root: 'fixtures'
|
||
|
}))
|
||
|
.pipe(assert.first(function (d) {
|
||
|
|
||
|
var contents = d.contents.toString();
|
||
|
expect(contents)
|
||
|
.to
|
||
|
.equal(expectedFilenames);
|
||
|
}))
|
||
|
.pipe(assert.end(done));
|
||
|
});
|
||
|
|
||
|
describe('When I provide prepend and append arguments', function () {
|
||
|
it('then it will concatinate all filenames into a single file with prefix and suffix strings', function (done) {
|
||
|
var expectedFilenames = ([
|
||
|
'XXX../test/fixtures/fork.txtYYY',
|
||
|
'XXX../test/fixtures/knife.jsYYY',
|
||
|
'XXX../test/fixtures/spoon.htmlYYY',
|
||
|
].join('\n') + '\n').toString();
|
||
|
|
||
|
gulp
|
||
|
.src(fixtures('*'))
|
||
|
.pipe(concatFilenames('mainfest.txt', {
|
||
|
root: 'fixtures',
|
||
|
prepend: 'XXX',
|
||
|
append: 'YYY'
|
||
|
}))
|
||
|
.pipe(assert.first(function (d) {
|
||
|
|
||
|
var contents = d.contents.toString();
|
||
|
expect(contents)
|
||
|
.to
|
||
|
.equal(expectedFilenames);
|
||
|
}))
|
||
|
.pipe(assert.end(done));
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('When I provide a differnt newLine argument', function () {
|
||
|
|
||
|
it('then it will concatinate all filenames into a single file with an alternate newLine', function (done) {
|
||
|
var expectedFilenames = ([
|
||
|
'../test/fixtures/fork.txt',
|
||
|
'../test/fixtures/knife.js',
|
||
|
'../test/fixtures/spoon.html',
|
||
|
].join('XXX') + 'XXX').toString();
|
||
|
|
||
|
gulp
|
||
|
.src(fixtures('*'))
|
||
|
.pipe(concatFilenames('mainfest.txt', {
|
||
|
root: 'fixtures',
|
||
|
newLine: 'XXX'
|
||
|
}))
|
||
|
.pipe(assert.first(function (d) {
|
||
|
|
||
|
var contents = d.contents.toString();
|
||
|
expect(contents)
|
||
|
.to
|
||
|
.equal(expectedFilenames);
|
||
|
}))
|
||
|
.pipe(assert.end(done));
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('When I provide a formatting function', function () {
|
||
|
|
||
|
it('then it will apply that function to each entry', function (done) {
|
||
|
var expectedFilenames = ([
|
||
|
'XXX../test/fixtures/fork.txtYYY',
|
||
|
'XXX../test/fixtures/knife.jsYYY',
|
||
|
'XXX../test/fixtures/spoon.htmlYYY',
|
||
|
].join('\n') + '\n').toString().toUpperCase();
|
||
|
|
||
|
gulp
|
||
|
.src(fixtures('*'))
|
||
|
.pipe(concatFilenames('mainfest.txt', {
|
||
|
root: 'fixtures',
|
||
|
template: function(filename) {
|
||
|
return 'XXX' + filename.toUpperCase() + 'YYY';
|
||
|
}
|
||
|
}))
|
||
|
.pipe(assert.first(function (d) {
|
||
|
|
||
|
var contents = d.contents.toString();
|
||
|
expect(contents)
|
||
|
.to
|
||
|
.equal(expectedFilenames);
|
||
|
}))
|
||
|
.pipe(assert.end(done));
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('When I provide a formatting function with a syntax error', function () {
|
||
|
|
||
|
it('then it will fail and throw an error', function (done) {
|
||
|
gulp
|
||
|
.src(fixtures('*'))
|
||
|
.pipe(concatFilenames('mainfest.txt', {
|
||
|
root: 'fixtures',
|
||
|
template: function(filename) {
|
||
|
/* jshint ignore:start */
|
||
|
y = 0; // deliberate syntax error
|
||
|
/* jshint ignore:end */
|
||
|
return filename;
|
||
|
}
|
||
|
}))
|
||
|
.on('error', function (err) {
|
||
|
expect(err.message).to.have.string('Error in template function');
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('When I provide a formatting function that does not return a string', function () {
|
||
|
|
||
|
it('then it will fail and throw an error', function (done) {
|
||
|
gulp
|
||
|
.src(fixtures('*'))
|
||
|
.pipe(concatFilenames('mainfest.txt', {
|
||
|
root: 'fixtures',
|
||
|
template: function() {
|
||
|
return 5;
|
||
|
}
|
||
|
}))
|
||
|
.on('error', function (err) {
|
||
|
expect(err.message).to.equal('Error in template function');
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|