UNPKG

grand-central-pipeline

Version:

(DEPRECIATED) A javascript asset pipeline for Node

191 lines (170 loc) 5.66 kB
var assert = require('assert'), path = require('path'), fs = require('fs'), express = require('express'), gcp = require('../lib/index'), supertest = require('supertest'); var source = path.join(__dirname, 'helpers'), dest = path.join(__dirname, 'assets'), app, request, config, mtime; before(function(done) { app = express(); config = function(){ app.use(express.static(dest)); app.use(function(req, res) { res.statusCode = 404; res.end("Not found"); }); app.use(function(err, req, res, next) { console.error(err); res.statusCode = 500; res.end("Internal server error"); }); }; var GCP = gcp({ source: path.join(__dirname, 'helpers'), dest: dest }); app.configure(function() { app.use(GCP); }); app.configure(config); request = supertest(app); done(); }); describe('grand-central-pipeline', function() { it('should get other assets normally', function(done) { request.get('/nocompile.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/requested/) .end(done); }); it('should compile requested file', function(done) { request.get('/javascripts/app.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/Hello.World/) .end(done); }); it('should compile nested file', function(done) { request.get('/javascripts/tree/gamma.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/g.=.3/) .end(done); }); it('should compile required file', function(done) { request.get('/javascripts/app.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/included.file/) .end(done); }); it('should compile javascript template', function(done) { request.get('/javascripts/app.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/jst\["tmp"\]/) .end(done); }); it('should compile included file', function(done) { request.get('/javascripts/app.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/b.=.2/) .end(done); }); it('should compile required directory', function(done) { request.get('/javascripts/folders.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/a.=.1/) .expect(/b.=.2/) .end(done); }); it('should compile required tree', function(done) { request.get('/javascripts/folders.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/g.=.3/) .expect(/d.=.4/) .end(done); }); it("should recompile if changed", function(done) { var file = path.join(source, 'app.js'); fs.appendFile(file, "var m=0", function(err) { request.get('/javascripts/app.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/var\sm=0/) .end(done); }); }); it('should minify javascript', function(done) { app = express(); app.configure(function() { app.use(gcp({ source: source, dest: dest, force: true, minify: true, templateName: 'temps' })); }); app.configure(config); request = supertest(app); request.get('/javascripts/app.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/b=2;console/) .end(done); }); it('should allow change of template namespace', function(done) { request.get('/javascripts/app.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect(/temps\.tmp/) .end(done); }); it('should return nothing if require doesnt exist', function(done) { request.get('/javascripts/bizzaro.js') .set('Accept', 'application/javascript') .expect(200) .expect("content-type", /application\/javascript/) .expect("") .end(done); }); }); after(function(done) { var file = path.join(source, 'app.js'); fs.readFile(file, function(err, str) { str = str + ''; str = str.replace(/var\sm=0/, ''); fs.writeFile(file, str, function(err) { deleteFolderRecursive(path.join(dest, 'javascripts'), done); }); }); }); function deleteFolderRecursive(path, callback) { fs.readdirSync(path).forEach(function(file){ var curPath = path + "/" + file; if(fs.statSync(curPath).isDirectory()) { // recurse deleteFolderRecursive(curPath); } else { // delete file fs.unlinkSync(curPath); } }); fs.rmdir(path, callback); }