diff --git a/test/app.render.js b/test/app.render.js index a2c1ce69..38ef0cfb 100644 --- a/test/app.render.js +++ b/test/app.render.js @@ -1,14 +1,15 @@ -var express = require('../'); +var express = require('..'); +var tmpl = require('./support/tmpl'); describe('app', function(){ describe('.render(name, fn)', function(){ it('should support absolute paths', function(done){ - var app = express(); + var app = createApp(); app.locals.user = { name: 'tobi' }; - app.render(__dirname + '/fixtures/user.jade', function(err, str){ + app.render(__dirname + '/fixtures/user.tmpl', function (err, str) { if (err) return done(err); str.should.equal('

tobi

'); done(); @@ -16,9 +17,9 @@ describe('app', function(){ }) it('should support absolute paths with "view engine"', function(done){ - var app = express(); + var app = createApp(); - app.set('view engine', 'jade'); + app.set('view engine', 'tmpl'); app.locals.user = { name: 'tobi' }; app.render(__dirname + '/fixtures/user', function(err, str){ @@ -29,12 +30,12 @@ describe('app', function(){ }) it('should expose app.locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.locals.user = { name: 'tobi' }; - app.render('user.jade', function(err, str){ + app.render('user.tmpl', function (err, str) { if (err) return done(err); str.should.equal('

tobi

'); done(); @@ -42,12 +43,12 @@ describe('app', function(){ }) it('should support index.', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); - app.set('view engine', 'jade'); + app.set('view engine', 'tmpl'); - app.render('blog/post', function(err, str){ + app.render('blog/post', function (err, str) { if (err) return done(err); str.should.equal('

blog post

'); done(); @@ -77,10 +78,11 @@ describe('app', function(){ describe('when the file does not exist', function(){ it('should provide a helpful error', function(done){ - var app = express(); + var app = createApp(); + app.set('views', __dirname + '/fixtures'); - app.render('rawr.jade', function(err){ - err.message.should.equal('Failed to lookup view "rawr.jade" in views directory "' + __dirname + '/fixtures"'); + app.render('rawr.tmpl', function (err) { + err.message.should.equal('Failed to lookup view "rawr.tmpl" in views directory "' + __dirname + '/fixtures"'); done(); }); }) @@ -88,11 +90,11 @@ describe('app', function(){ describe('when an error occurs', function(){ it('should invoke the callback', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); - app.render('user.jade', function(err, str){ + app.render('user.tmpl', function (err, str) { // nextTick to prevent cyclic process.nextTick(function(){ err.message.should.match(/Cannot read property 'name' of undefined/); @@ -104,11 +106,11 @@ describe('app', function(){ describe('when an extension is given', function(){ it('should render the template', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); - app.render('email.jade', function(err, str){ + app.render('email.tmpl', function (err, str) { if (err) return done(err); str.should.equal('

This is an email

'); done(); @@ -118,9 +120,9 @@ describe('app', function(){ describe('when "view engine" is given', function(){ it('should render the template', function(done){ - var app = express(); + var app = createApp(); - app.set('view engine', 'jade'); + app.set('view engine', 'tmpl'); app.set('views', __dirname + '/fixtures'); app.render('email', function(err, str){ @@ -219,13 +221,13 @@ describe('app', function(){ describe('.render(name, options, fn)', function(){ it('should render the template', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); var user = { name: 'tobi' }; - app.render('user.jade', { user: user }, function(err, str){ + app.render('user.tmpl', { user: user }, function (err, str) { if (err) return done(err); str.should.equal('

tobi

'); done(); @@ -233,12 +235,12 @@ describe('app', function(){ }) it('should expose app.locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.locals.user = { name: 'tobi' }; - app.render('user.jade', {}, function(err, str){ + app.render('user.tmpl', {}, function (err, str) { if (err) return done(err); str.should.equal('

tobi

'); done(); @@ -246,13 +248,13 @@ describe('app', function(){ }) it('should give precedence to app.render() locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.locals.user = { name: 'tobi' }; var jane = { name: 'jane' }; - app.render('user.jade', { user: jane }, function(err, str){ + app.render('user.tmpl', { user: jane }, function (err, str) { if (err) return done(err); str.should.equal('

jane

'); done(); @@ -292,3 +294,11 @@ describe('app', function(){ }) }) }) + +function createApp() { + var app = express(); + + app.engine('.tmpl', tmpl); + + return app; +} diff --git a/test/fixtures/blog/post/index.jade b/test/fixtures/blog/post/index.jade deleted file mode 100644 index 36c8d4d1..00000000 --- a/test/fixtures/blog/post/index.jade +++ /dev/null @@ -1 +0,0 @@ -h1 blog post \ No newline at end of file diff --git a/test/fixtures/blog/post/index.tmpl b/test/fixtures/blog/post/index.tmpl new file mode 100644 index 00000000..a9a2a3b3 --- /dev/null +++ b/test/fixtures/blog/post/index.tmpl @@ -0,0 +1 @@ +

blog post

\ No newline at end of file diff --git a/test/fixtures/email.jade b/test/fixtures/email.jade deleted file mode 100644 index 4475d8d5..00000000 --- a/test/fixtures/email.jade +++ /dev/null @@ -1 +0,0 @@ -p This is an email \ No newline at end of file diff --git a/test/fixtures/email.tmpl b/test/fixtures/email.tmpl new file mode 100644 index 00000000..8a2cb77a --- /dev/null +++ b/test/fixtures/email.tmpl @@ -0,0 +1 @@ +

This is an email

\ No newline at end of file diff --git a/test/fixtures/pet.jade b/test/fixtures/pet.jade deleted file mode 100644 index 8ee192ec..00000000 --- a/test/fixtures/pet.jade +++ /dev/null @@ -1 +0,0 @@ -p #{first} #{last} is a #{species} \ No newline at end of file diff --git a/test/fixtures/user.jade b/test/fixtures/user.jade deleted file mode 100644 index 623c6654..00000000 --- a/test/fixtures/user.jade +++ /dev/null @@ -1 +0,0 @@ -p= user.name \ No newline at end of file diff --git a/test/fixtures/user.tmpl b/test/fixtures/user.tmpl new file mode 100644 index 00000000..67ef5102 --- /dev/null +++ b/test/fixtures/user.tmpl @@ -0,0 +1 @@ +

$user.name

\ No newline at end of file diff --git a/test/res.render.js b/test/res.render.js index b55417ff..5285ad95 100644 --- a/test/res.render.js +++ b/test/res.render.js @@ -1,16 +1,17 @@ -var express = require('../') - , request = require('supertest'); +var express = require('..'); +var request = require('supertest'); +var tmpl = require('./support/tmpl'); describe('res', function(){ describe('.render(name)', function(){ it('should support absolute paths', function(done){ - var app = express(); + var app = createApp(); app.locals.user = { name: 'tobi' }; app.use(function(req, res){ - res.render(__dirname + '/fixtures/user.jade'); + res.render(__dirname + '/fixtures/user.tmpl'); }); request(app) @@ -19,10 +20,10 @@ describe('res', function(){ }) it('should support absolute paths with "view engine"', function(done){ - var app = express(); + var app = createApp(); app.locals.user = { name: 'tobi' }; - app.set('view engine', 'jade'); + app.set('view engine', 'tmpl'); app.use(function(req, res){ res.render(__dirname + '/fixtures/user'); @@ -34,13 +35,13 @@ describe('res', function(){ }) it('should expose app.locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.locals.user = { name: 'tobi' }; app.use(function(req, res){ - res.render('user.jade'); + res.render('user.tmpl'); }); request(app) @@ -49,10 +50,10 @@ describe('res', function(){ }) it('should support index.', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); - app.set('view engine', 'jade'); + app.set('view engine', 'tmpl'); app.use(function(req, res){ res.render('blog/post'); @@ -65,12 +66,12 @@ describe('res', function(){ describe('when an error occurs', function(){ it('should next(err)', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.use(function(req, res){ - res.render('user.jade'); + res.render('user.tmpl'); }); app.use(function(err, req, res, next){ @@ -85,9 +86,9 @@ describe('res', function(){ describe('when "view engine" is given', function(){ it('should render the template', function(done){ - var app = express(); + var app = createApp(); - app.set('view engine', 'jade'); + app.set('view engine', 'tmpl'); app.set('views', __dirname + '/fixtures'); app.use(function(req, res){ @@ -103,14 +104,14 @@ describe('res', function(){ describe('.render(name, option)', function(){ it('should render the template', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); var user = { name: 'tobi' }; app.use(function(req, res){ - res.render('user.jade', { user: user }); + res.render('user.tmpl', { user: user }); }); request(app) @@ -119,13 +120,13 @@ describe('res', function(){ }) it('should expose app.locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.locals.user = { name: 'tobi' }; app.use(function(req, res){ - res.render('user.jade'); + res.render('user.tmpl'); }); request(app) @@ -134,13 +135,13 @@ describe('res', function(){ }) it('should expose res.locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.use(function(req, res){ res.locals.user = { name: 'tobi' }; - res.render('user.jade'); + res.render('user.tmpl'); }); request(app) @@ -149,14 +150,14 @@ describe('res', function(){ }) it('should give precedence to res.locals over app.locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.locals.user = { name: 'tobi' }; app.use(function(req, res){ res.locals.user = { name: 'jane' }; - res.render('user.jade', {}); + res.render('user.tmpl', {}); }); request(app) @@ -165,14 +166,14 @@ describe('res', function(){ }) it('should give precedence to res.render() locals over res.locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); var jane = { name: 'jane' }; app.use(function(req, res){ res.locals.user = { name: 'tobi' }; - res.render('user.jade', { user: jane }); + res.render('user.tmpl', { user: jane }); }); request(app) @@ -181,14 +182,14 @@ describe('res', function(){ }) it('should give precedence to res.render() locals over app.locals', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.locals.user = { name: 'tobi' }; var jane = { name: 'jane' }; app.use(function(req, res){ - res.render('user.jade', { user: jane }); + res.render('user.tmpl', { user: jane }); }); request(app) @@ -199,13 +200,13 @@ describe('res', function(){ describe('.render(name, options, fn)', function(){ it('should pass the resulting string', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.use(function(req, res){ var tobi = { name: 'tobi' }; - res.render('user.jade', { user: tobi }, function(err, html){ + res.render('user.tmpl', { user: tobi }, function (err, html) { html = html.replace('tobi', 'loki'); res.end(html); }); @@ -219,13 +220,13 @@ describe('res', function(){ describe('.render(name, fn)', function(){ it('should pass the resulting string', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.use(function(req, res){ res.locals.user = { name: 'tobi' }; - res.render('user.jade', function(err, html){ + res.render('user.tmpl', function (err, html) { html = html.replace('tobi', 'loki'); res.end(html); }); @@ -238,12 +239,12 @@ describe('res', function(){ describe('when an error occurs', function(){ it('should pass it to the callback', function(done){ - var app = express(); + var app = createApp(); app.set('views', __dirname + '/fixtures'); app.use(function(req, res){ - res.render('user.jade', function(err){ + res.render('user.tmpl', function (err) { res.end(err.message); }); }); @@ -255,3 +256,11 @@ describe('res', function(){ }) }) }) + +function createApp() { + var app = express(); + + app.engine('.tmpl', tmpl); + + return app; +} diff --git a/test/support/tmpl.js b/test/support/tmpl.js new file mode 100644 index 00000000..2e8bec86 --- /dev/null +++ b/test/support/tmpl.js @@ -0,0 +1,35 @@ +var fs = require('fs'); + +var variableRegExp = /\$([0-9a-zA-Z\.]+)/g; + +module.exports = function renderFile(fileName, options, callback) { + function onReadFile(err, str) { + if (err) { + callback(err); + return; + } + + try { + str = str.replace(variableRegExp, generateVariableLookup(options)); + } catch (e) { + err = e; + } + + callback(err, str); + } + + fs.readFile(fileName, 'utf8', onReadFile); +}; + +function generateVariableLookup(data) { + return function variableLookup(str, path) { + var parts = path.split('.'); + var value = data; + + for (var i = 0; i < parts.length; i++) { + value = value[parts[i]]; + } + + return value; + }; +}