xtemplate
Version:
eXtensible Template Engine lib on browser and nodejs. support async control, inheritance, include, logic expression, custom function and more.
90 lines (59 loc) • 3 kB
JavaScript
/**
* extend system for XTemplate
* @author yiminghe@gmail.com
*/
var XTemplate = require('xtemplate');
var util = require('./util');
describe('extend', function () {
var mods = ['template_extend/base', 'template_extend/base2', 'template_extend/base3', 'template_extend/base4'];
beforeEach(function () {
util.each(mods, function (mod) {
delete XTemplate.loader.cache[mod];
delete modulex.Env.mods[mod];
});
});
it('support block', function () {
var base = 'title {{#block ("name")}}{{content}}{{/block}}';
var sub = '{{extend("template_extend/base")}}{{#block ("name")}}sub {{content}}{{/block}}';
modulex.add('template_extend/base', base);
var result = new XTemplate(sub).render({
content: 1
});
expect(result).to.equal('title sub 1');
});
it('support block append', function () {
var base = 'title {{#block( "name")}}{{content}}{{/block}}';
var base2 = '{{extend ("template_extend/base")}}{{#block ("append", "name")}} append base2 {{/block}}';
modulex.add('template_extend/base', base);
modulex.add('template_extend/base2', base2);
var sub = '{{extend ("template_extend/base2")}}{{#block ("append", "name")}} append sub {{/block}}';
var result = new XTemplate(sub).render({
content: 1
});
expect(result).to.equal('title 1 append base2 append sub ');
});
it('support block prepend', function () {
var base = 'title {{#block ("name")}}{{content}}{{/block}}';
var base2 = '{{extend ("template_extend/base")}}{{#block( "prepend", "name")}} prepend base2 {{/block}}';
modulex.add('template_extend/base', base);
modulex.add('template_extend/base2', base2);
var sub = '{{extend ("template_extend/base2")}}{{#block( "prepend", "name")}} prepend sub {{/block}}';
var result = new XTemplate(sub).render({
content: 1
});
expect(result).to.equal('title prepend sub prepend base2 1');
});
it('support mixing prepend and append', function () {
var base = 'title {{#block ("name")}}{{content}}{{/block}}';
var base2 = '{{extend ("template_extend/base")}}{{#block ("prepend", "name")}} prepend base2 {{/block}}';
var base3 = '{{extend ("template_extend/base2")}}{{#block( "append", "name")}} append base3 {{/block}}';
modulex.add('template_extend/base', base);
modulex.add('template_extend/base2', base2);
modulex.add('template_extend/base3', base3);
var sub = '{{extend( "template_extend/base3")}}{{#block ("prepend", "name")}} prepend sub< {{/block}}';
var result = new XTemplate(sub).render({
content: 1
});
expect(result).to.equal('title prepend sub< prepend base2 1 append base3 ');
});
});