78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
var jsonTransform = require('../');
|
|
var Promise = require('promise');
|
|
|
|
var should = require('should');
|
|
require('mocha');
|
|
|
|
var gutil = require('gulp-util');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
|
|
var jshint = require('jshint');
|
|
|
|
describe('gulp-json-transform', function () {
|
|
|
|
var testTransform = function (inputFile, transformFn, expected) {
|
|
var inputJson = new gutil.File({
|
|
path: 'test/fixtures/' + inputFile,
|
|
cwd: 'test/',
|
|
base: 'test/fixtures',
|
|
contents: fs.readFileSync('test/fixtures/' + inputFile)
|
|
});
|
|
|
|
return function (done) {
|
|
var stream = jsonTransform(transformFn);
|
|
|
|
stream.on('error', function(err) {
|
|
should.exist(err);
|
|
done(err);
|
|
});
|
|
|
|
stream.on('data', function (newFile) {
|
|
should.exist(newFile);
|
|
should.exist(newFile.contents);
|
|
var newFilePath = path.resolve(newFile.path);
|
|
var expectedFilePath = path.resolve('test/fixtures/' + inputFile);
|
|
newFilePath.should.equal(expectedFilePath);
|
|
newFile.relative.should.equal(inputFile);
|
|
String(newFile.contents).should.equal(expected);
|
|
Buffer.isBuffer(newFile.contents).should.equal(true);
|
|
done();
|
|
});
|
|
|
|
stream.write(inputJson);
|
|
stream.end();
|
|
};
|
|
};
|
|
|
|
it('should transform a json file to a json file', testTransform('input.json', function(data) {
|
|
return {foobar: data.foo + data.bar};
|
|
}, '{"foobar":"[foo][bar]"}'));
|
|
|
|
it('should transform a json file to a text file', testTransform('input.json', function(data) {
|
|
return data.foo + data.bar;
|
|
}, '[foo][bar]'));
|
|
|
|
it('should accept the file as a parameter to the transform function', testTransform('input.json', function(data, file) {
|
|
var fileProps = ['path', 'relative', 'base'];
|
|
for (var fileProp in file) {
|
|
if (file.hasOwnProperty(fileProp)) {
|
|
var index = fileProps.indexOf(fileProp);
|
|
should.ok(index >= 0, 'file object has illegal property: ' + fileProp);
|
|
if (index >= 0) {
|
|
fileProps.splice(index, 1);
|
|
}
|
|
}
|
|
}
|
|
should.ok(fileProps.length === 0, 'file object is missing properties: ' + JSON.stringify(fileProps));
|
|
|
|
return file.relative + ' - ' + data.foo + data.bar;
|
|
}, 'input.json - [foo][bar]'));
|
|
|
|
it('should accept promises', testTransform('input.json', function(data) {
|
|
return Promise.resolve(data.foo + data.bar);
|
|
}, '[foo][bar]'));
|
|
});
|