UNPKG

5.29 kBJavaScriptView Raw
1'use strict';
2
3var Velocity = require('../src/velocity')
4var assert = require("assert")
5var render = Velocity.render;
6
7describe('Loops', function() {
8
9 it('#foreach', function() {
10 var vm = '#foreach( $product in $allProducts )<li>$product</li>#end'
11 var data = {allProducts: ["book", "phone"]}
12 assert.equal('<li>book</li><li>phone</li>', render(vm, data))
13 })
14
15 it('#foreach with map', function() {
16 var vm = '#foreach($key in $products) name => $products.name #end'
17 var data = {products: {name: "hanwen"}}
18 assert.equal(' name => hanwen ', render(vm, data))
19 })
20
21 it('#foreach with map hasNext', function() {
22 var vm = '#foreach($product in $products)$product.name#if($foreach.hasNext),#end#end'
23 var data = {products: {product1: {name: "hanwen1"}, product2: {name: "hanwen2"}, product3: {name: "hanwen3"}}};
24 assert.equal('hanwen1,hanwen2,hanwen3', render(vm, data))
25 })
26
27 it('#foreach with map keySet', function() {
28 var vm = '#foreach($key in $products.keySet())' +
29 ' $key => $products.get($key) #end'
30 var data = {products: {name: "hanwen"}}
31 assert.equal(' name => hanwen ', render(vm, data))
32 })
33
34 it('#foreach with nest foreach', function() {
35 var vm = '#foreach($i in [1..2])${velocityCount}' +
36 '#foreach($j in [2..3])${velocityCount}#end#end'
37 assert.equal('112212', render(vm))
38 var vm = '#foreach($i in [5..2])$i#end'
39 assert.equal('5432', render(vm))
40 })
41
42 it('#foreach with nest non-empty foreach', function() {
43 var vm = '#foreach($i in [1..2])' +
44 '[#foreach($j in [1..2])$j#if($foreach.hasNext),#end#end]' +
45 '#if($foreach.hasNext),#end#end'
46 assert.equal('[1,2],[1,2]', render(vm))
47 })
48
49 it('#foreach with nest empty foreach', function() {
50 var vm = '#foreach($i in [1..2])' +
51 '[#foreach($j in [])$j#if($foreach.hasNext),#end#end]' +
52 '#if($foreach.hasNext),#end#end'
53 assert.equal('[],[]', render(vm))
54 })
55
56 it('#foreach with map entrySet', function() {
57 var vm = '' +
58 '#set($js_file = {\n' +
59 ' "js_arale":"build/js/arale.js?t=20110608",\n' +
60 ' "js_ma_template":"build/js/ma/template.js?t=20110608",\n' +
61 ' "js_pa_pa":"build/js/pa/pa.js?t=20110608",\n' +
62 ' "js_swiff":"build/js/app/swiff.js?t=20110608",\n' +
63 ' "js_alieditControl":"build/js/pa/alieditcontrol-update.js?"\n' +
64 '})\n' +
65 '#foreach($_item in $js_file.entrySet())' +
66 '$_item.key = $staticServer.getURI("/${_item.value}")\n' +
67 '#end'
68
69 var ret = 'js_arale = /path/build/js/arale.js?t=20110608\n' +
70 'js_ma_template = /path/build/js/ma/template.js?t=20110608\n' +
71 'js_pa_pa = /path/build/js/pa/pa.js?t=20110608\n' +
72 'js_swiff = /path/build/js/app/swiff.js?t=20110608\n' +
73 'js_alieditControl = /path/build/js/pa/alieditcontrol-update.js?\n'
74
75 var data = {
76 staticServer: {
77 getURI: function(url) {
78 return '/path' + url
79 }
80 }
81 }
82
83 assert.equal(ret.trim(), render(vm, data).trim())
84
85 })
86
87 it('#foreach with #macro, $velocityCount should work, #25', function() {
88 var vm = '#macro(local) #end ' +
89 '#foreach ($one in [1,2,4]) #local() $velocityCount #end'
90 var ret = render(vm).replace(/\s+/g, '')
91 assert.equal('123', ret)
92 })
93
94 it('#break', function() {
95 var vm = '#foreach($num in [1..6])' +
96 ' #if($foreach.count > 3) #break #end $num #end'
97 assert.equal(' 1 2 3 4 ', render(vm))
98 })
99
100 it('#break for map', function() {
101 var vm = '#foreach($item in $map)' +
102 ' #if($foreach.count > 2) #break #end $item #end'
103 var data = {map: {item1: '1', item2: '2', item3: '3', item4: '4'}}
104 assert.equal(' 1 2 3 ', render(vm, data))
105 })
106
107 it('foreach for null', function() {
108 var vm = '#foreach($num in $bar) #end';
109 assert.equal('', render(vm))
110 })
111
112 it('support #foreach(${itemData} in ${defaultData})', function() {
113 const vm = `#set($allProducts = [1, 2, 3])
114 #foreach(\${product} in \${allProducts}) <li>$product</li> #end`;
115 const html = render(vm)
116 html.should.containEql('<li>1</li>');
117 html.should.containEql('<li>2</li>');
118 });
119
120 it('issue 100', function() {
121 const vm = `
122 #set($records = [[1], [2], [3]])
123 #foreach($rec in $records)
124 #set($match = true)
125 #foreach($val in $rec)
126 #if($val % 2 != 0)
127 #set($match = false)
128 #break
129 #end
130 #end
131 #if($match == true)
132 matched: "$rec"
133 #end
134 #end
135 `;
136 const context = {
137 records: [[1], [2], [3]]
138 };
139 const ret = render(vm, context);
140 ret.replace(/\s+/g, '').should.equal('matched:"[2]"');
141 });
142
143 it('set ok, fix #129', () => {
144 const context = {
145 records: [{ ID: '1' }, { ID: '2' }, { ID: '3' }],
146 };
147
148 const template1 = `
149 #foreach($item in $records)
150 #set( $item.key = $item.ID )
151 #end
152 $records`;
153 const template2 = `
154 #foreach($x in $records)
155 #set( $item = $x )
156 #set( $item.key = $item.ID )
157 #end
158 $records`;
159
160 const ret = render(template1, context);
161 ret.trim().should.equal('[{ID=1, key=1}, {ID=2, key=2}, {ID=3, key=3}]');
162 const ret2 = render(template2, context);
163 ret2.trim().should.equal('[{ID=1, key=1}, {ID=2, key=2}, {ID=3, key=3}]');
164 });
165})