ld31-space-diggers/node_modules/gulp-coffee/test/main.js

254 lines
8.7 KiB
JavaScript
Raw Normal View History

2014-12-07 20:57:49 +01:00
var coffee = require('../');
var should = require('should');
var coffeescript = require('coffee-script');
var gutil = require('gulp-util');
var fs = require('fs');
var path = require('path');
var sourcemaps = require('gulp-sourcemaps');
var stream = require('stream');
require('mocha');
var createFile = function (filepath, contents) {
var base = path.dirname(filepath);
return new gutil.File({
path: filepath,
base: base,
cwd: path.dirname(base),
contents: contents
});
};
describe('gulp-coffee', function() {
describe('coffee()', function() {
before(function() {
this.testData = function (expected, newPath, done) {
var newPaths = [newPath],
expectedSourceMap;
if (expected.v3SourceMap) {
expectedSourceMap = JSON.parse(expected.v3SourceMap);
expected = [expected.js];
} else {
expected = [expected];
}
return function (newFile) {
this.expected = expected.shift();
this.newPath = newPaths.shift();
should.exist(newFile);
should.exist(newFile.path);
should.exist(newFile.relative);
should.exist(newFile.contents);
newFile.path.should.equal(this.newPath);
newFile.relative.should.equal(path.basename(this.newPath));
String(newFile.contents).should.equal(this.expected);
if (expectedSourceMap) {
// check whether the sources from the coffee have been
// applied to the files source map
newFile.sourceMap.sources
.should.containDeep(expectedSourceMap.sources);
}
if (done && !expected.length) {
done.call(this);
}
};
};
});
it('should concat two files', function(done) {
var filepath = '/home/contra/test/file.coffee';
var contents = new Buffer('a = 2');
var opts = {bare: true};
var expected = coffeescript.compile(String(contents), opts);
coffee(opts)
.on('error', done)
.on('data', this.testData(expected, '/home/contra/test/file.js', done))
.write(createFile(filepath, contents));
});
it('should emit errors correctly', function(done) {
var filepath = '/home/contra/test/file.coffee';
var contents = new Buffer('if a()\r\n then huh');
coffee({bare: true})
.on('error', function(err) {
err.message.should.equal('unexpected then');
done();
})
.on('data', function(newFile) {
throw new Error('no file should have been emitted!');
})
.write(createFile(filepath, contents));
});
it('should compile a file (no bare)', function(done) {
var filepath = 'test/fixtures/grammar.coffee';
var contents = new Buffer(fs.readFileSync(filepath));
var expected = coffeescript.compile(String(contents));
coffee()
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/grammar.js', done))
.write(createFile(filepath, contents));
});
it('should compile a file (with bare)', function(done) {
var filepath = 'test/fixtures/grammar.coffee';
var contents = new Buffer(fs.readFileSync(filepath));
var opts = {bare: true};
var expected = coffeescript.compile(String(contents), opts);
coffee(opts)
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/grammar.js', done))
.write(createFile(filepath, contents));
});
it('should compile a file with source map', function(done) {
var filepath = 'test/fixtures/grammar.coffee';
var contents = new Buffer(fs.readFileSync(filepath));
var expected = coffeescript.compile(String(contents), {
sourceMap: true,
sourceFiles: ['grammar.coffee'],
generatedFile: 'grammar.js'
});
var stream = sourcemaps.init();
stream.write(createFile(filepath, contents));
stream
.pipe(coffee({}))
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/grammar.js', done));
});
it('should compile a file with bare and with source map', function(done) {
var filepath = 'test/fixtures/grammar.coffee';
var contents = new Buffer(fs.readFileSync(filepath));
var expected = coffeescript.compile(String(contents), {
bare: true,
sourceMap: true,
sourceFiles: ['grammar.coffee'],
generatedFile: 'grammar.js'
});
var stream = sourcemaps.init();
stream.write(createFile(filepath, contents));
stream
.pipe(coffee({bare: true}))
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/grammar.js', done));
});
it('should compile a file (no header)', function(done) {
var filepath = 'test/fixtures/grammar.coffee';
var contents = new Buffer(fs.readFileSync(filepath));
var expected = coffeescript.compile(String(contents), {header: false});
coffee()
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/grammar.js', done))
.write(createFile(filepath, contents));
});
it('should compile a file (with header)', function(done) {
var filepath = 'test/fixtures/grammar.coffee';
var contents = new Buffer(fs.readFileSync(filepath));
var expected = coffeescript.compile(String(contents), {header: true});
coffee({header: true})
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/grammar.js', done))
.write(createFile(filepath, contents));
});
it('should compile a literate file', function(done) {
var filepath = 'test/fixtures/journo.litcoffee';
var contents = new Buffer(fs.readFileSync(filepath));
var opts = {literate: true};
var expected = coffeescript.compile(String(contents), opts);
coffee(opts)
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/journo.js', done))
.write(createFile(filepath, contents));
});
it('should compile a literate file (implicit)', function(done) {
var filepath = 'test/fixtures/journo.litcoffee';
var contents = new Buffer(fs.readFileSync(filepath));
var expected = coffeescript.compile(String(contents), {literate: true});
coffee()
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/journo.js', done))
.write(createFile(filepath, contents));
});
it('should compile a literate file (with bare)', function(done) {
var filepath = 'test/fixtures/journo.litcoffee';
var contents = new Buffer(fs.readFileSync(filepath));
var opts = {literate: true, bare: true};
var expected = coffeescript.compile(String(contents), opts);
coffee(opts)
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/journo.js', done))
.write(createFile(filepath, contents));
});
it('should compile a literate file with source map', function(done) {
var filepath = 'test/fixtures/journo.litcoffee';
var contents = new Buffer(fs.readFileSync(filepath));
var expected = coffeescript.compile(String(contents), {
literate: true,
sourceMap: true,
sourceFiles: ['journo.litcoffee'],
generatedFile: 'journo.js'
});
var stream = sourcemaps.init();
stream.write(createFile(filepath, contents));
stream
.pipe(coffee({literate: true}))
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/journo.js', done));
});
it('should compile a literate file with bare and with source map', function(done) {
var filepath = 'test/fixtures/journo.litcoffee';
var contents = new Buffer(fs.readFileSync(filepath));
var expected = coffeescript.compile(String(contents), {
literate: true,
bare: true,
sourceMap: true,
sourceFiles: ['journo.litcoffee'],
generatedFile: 'journo.js'
});
var stream = sourcemaps.init();
stream.write(createFile(filepath, contents));
stream
.pipe(coffee({literate: true, bare: true}))
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/journo.js', done));
});
it('should rename a literate markdown file', function(done) {
var filepath = 'test/fixtures/journo.coffee.md';
var contents = new Buffer(fs.readFileSync(filepath));
var opts = {literate: true};
var expected = coffeescript.compile(String(contents), opts);
coffee(opts)
.on('error', done)
.on('data', this.testData(expected, 'test/fixtures/journo.js', done))
.write(createFile(filepath, contents));
});
});
});