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;
+ };
+}