UNPKG

xtemplate

Version:

eXtensible Template Engine lib on browser and nodejs. support async control, inheritance, include, logic expression, custom function and more.

252 lines (211 loc) 7.06 kB
var XTemplate = require('xtemplate'); describe('each', function () { it('support foreach', function () { var tpl = '{{#foreach(data, "v", "i")}}{{i}}: {{v}}{{/foreach}}'; var data = { data: [1, 2] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('0: 11: 2'); }); it('this will prevent up resolve',function(){ var tpl = '{{#each (data)}}{{this.title}}{{/each}}'; var data = { title:'2', data: [{title2:'1'}] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal(''); }); it('this will prevent up resolve -2',function(){ var tpl = '{{#each (data)}}{{this["title"]}}{{/each}}'; var data = { title:'2', data: [{title2:'1'}] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal(''); }); it('support forin', function () { var tpl = '{{#forin (data)}}{{r}}{{xindex}}:{{this}}{{/forin}}'; var data = { r: '!', data: { x: 1, y: 2 } }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('!x:1!y:2'); }); it('support null as array element', function () { var tpl = '{{#each (data)}}{{xindex}}:{{this}}{{/each}}'; var data = { data: [null] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('0:'); }); it('support access parent scope', function () { var tpl = '{{#each (data)}}{{r}}{{xindex}}:{{this}}{{/each}}'; var data = { r: '!', data: { x: 1, y: 2 } }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('!x:1!y:2'); }); it('support xindex name', function () { var tpl = '{{#each(data, "v", "i")}}{{i}}: {{v}}{{/each}}'; var data = { data: [1, 2] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('0: 11: 2'); }); it('support value name', function () { var tpl = '{{#each (data, "v")}}{{xindex}}: {{v}}{{/each}}'; var data = { data: [1, 2] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('0: 11: 2'); }); it('support nest array', function () { var tpl = '{{#each (data)}}{{this[0]}}{{this[1]}}{{this}}{{/each}}'; var data = { data: [ [1, 2] ] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('121,2'); }); it('support each object', function () { var tpl = '{{#each (data)}}{{xindex}}:{{this}}{{/each}}'; var data = { data: { x: 1, y: 2 } }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('x:1y:2'); }); it('allow empty content', function () { var tpl = '{{#each (l)}}{{/each}}'; var data = { x: [ { title: 5 } ] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal(''); tpl = '{{#each( x)}}{{/each}}'; data = { x: [ { title: 5 } ] }; render = new XTemplate(tpl).render(data); expect(render).to.equal(''); }); it('support variable as index', function () { var tpl = '{{#each (data[d])}}{{this}}{{/each}}'; var data = { data: { my: [1, 2] }, d: 'my' }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('12'); }); it('ignore if not found', function () { var tpl = '{{#each( l)}}{{title}}{{/each}}'; var data = { x: [ { title: 5 } ] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal(''); }); it('support array as render parameter', function () { var tpl = '!{{#each (this)}}{{this}}-{{/each}}!'; var data = [1, 2]; var render = new XTemplate(tpl, data).render(data); expect(render).to.equal('!1-2-!'); }); it('support object in array', function () { var tpl = '{{#each( data)}}{{name}}-{{xindex}}/{{xcount}}|{{/each}}'; var data = { data: [ { name: 1 }, { name: 2 } ] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('1-0/2|2-1/2|'); }); it('support simple array', function () { var tpl = '{{#each (data)}}{{this}}-{{xindex}}/{{xcount}}|{{/each}}'; var data = { data: [1, 2] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('1-0/2|2-1/2|'); }); it('support nested each', function () { var tpl = '{{#each (outer)}}{{t}}{{#each (inner)}}{{this}}{{/each}}{{/each}}'; var data = { outer: [ { t: 1, inner: [11, 12] }, { t: 2, inner: [21, 22] } ] }; var render = new XTemplate(tpl).render(data); expect(render).to.equal('1111222122'); }); describe('range', function () { it('support ascending order', function () { var tpl = '{{#each(range(0,3))}}{{this}}{{/each}}'; var render = new XTemplate(tpl).render({}); expect(render).to.equal('012'); }); it('support descending order', function () { var tpl = '{{#each(range(3,0))}}{{this}}{{/each}}'; var render = new XTemplate(tpl).render({}); expect(render).to.equal('321'); }); it('can specify step', function () { var tpl = '{{#each(range(5,0,-2))}}{{this}}{{/each}}'; var render = new XTemplate(tpl).render({}); expect(render).to.equal('531'); }); it('can specify step', function () { var tpl = '{{#each(range(0,5,2))}}{{this}}{{/each}}'; var render = new XTemplate(tpl).render({}); expect(render).to.equal('024'); }); }); });