Name: js-handler/node_modules/nodeunit/deps/ejs/test/ejs.test.js 
1:
/**
2:
 * Module dependencies.
3:
 */
4:
 
5:
var ejs = require('../')
6:
  , assert = require('assert');
7:
 
8:
module.exports = {
9:
  'test .version': function(){
10:
    assert.ok(/^\d+\.\d+\.\d+$/.test(ejs.version), 'Test .version format');
11:
  },
12:
  
13:
  'test html': function(){
14:
    assert.equal('<p>yay</p>', ejs.render('<p>yay</p>'));
15:
  },
16:
  
17:
  'test buffered code': function(){
18:
    var html = '<p>tj</p>',
19:
      str = '<p><%= name %></p>',
20:
      locals = { name: 'tj' };
21:
    assert.equal(html, ejs.render(str, { locals: locals }));
22:
  },
23:
  
24:
  'test unbuffered code': function(){
25:
    var html = '<p>tj</p>',
26:
      str = '<% if (name) { %><p><%= name %></p><% } %>',
27:
      locals = { name: 'tj' };
28:
    assert.equal(html, ejs.render(str, { locals: locals }));
29:
  },
30:
  
31:
  'test `scope` option': function(){
32:
    var html = '<p>tj</p>',
33:
      str = '<p><%= this %></p>';
34:
    assert.equal(html, ejs.render(str, { scope: 'tj' }));
35:
  },
36:
  
37:
  'test escaping': function(){
38:
    assert.equal('<script>', ejs.render('<%= "<script>" %>'));
39:
    assert.equal('<script>', ejs.render('<%- "<script>" %>'));
40:
  },
41:
  
42:
  'test newlines': function(){
43:
    var html = '\n<p>tj</p>\n<p>[email protected]</p>',
44:
      str = '<% if (name) { %>\n<p><%= name %></p>\n<p><%= email %></p><% } %>',
45:
      locals = { name: 'tj', email: '[email protected]' };
46:
    assert.equal(html, ejs.render(str, { locals: locals }));
47:
  },
48:
  
49:
  'test single quotes': function(){
50:
    var html = '<p>WAHOO</p>',
51:
      str = "<p><%= up('wahoo') %></p>",
52:
      locals = { up: function(str){ return str.toUpperCase(); }};
53:
    assert.equal(html, ejs.render(str, { locals: locals }));
54:
  },
55:
 
56:
  'test single quotes in the html': function(){
57:
    var html = '<p>WAHOO that\'s cool</p>',
58:
      str = '<p><%= up(\'wahoo\') %> that\'s cool</p>',
59:
      locals = { up: function(str){ return str.toUpperCase(); }};
60:
    assert.equal(html, ejs.render(str, { locals: locals }));
61:
  },
62:
 
63:
  'test multiple single quotes': function() {
64:
    var html = "<p>couldn't shouldn't can't</p>",
65:
      str = "<p>couldn't shouldn't can't</p>";
66:
    assert.equal(html, ejs.render(str));
67:
  },
68:
 
69:
  'test single quotes inside tags': function() {
70:
    var html = '<p>string</p>',
71:
      str = "<p><%= 'string' %></p>";
72:
    assert.equal(html, ejs.render(str));
73:
  },
74:
 
75:
  'test back-slashes in the document': function() {
76:
    var html = "<p>backslash: '\\'</p>",
77:
      str = "<p>backslash: '\\'</p>";
78:
    assert.equal(html, ejs.render(str));
79:
  },
80:
  
81:
  'test double quotes': function(){
82:
    var html = '<p>WAHOO</p>',
83:
      str = '<p><%= up("wahoo") %></p>',
84:
      locals = { up: function(str){ return str.toUpperCase(); }};
85:
    assert.equal(html, ejs.render(str, { locals: locals }));
86:
  },
87:
  
88:
  'test multiple double quotes': function() {
89:
    var html = '<p>just a "test" wahoo</p>',
90:
      str = '<p>just a "test" wahoo</p>';
91:
    assert.equal(html, ejs.render(str));
92:
  },
93:
  
94:
  'test whitespace': function(){
95:
    var html = '<p>foo</p>',
96:
      str = '<p><%="foo"%></p>';
97:
    assert.equal(html, ejs.render(str));
98:
 
99:
    var html = '<p>foo</p>',
100:
      str = '<p><%=bar%></p>';
101:
    assert.equal(html, ejs.render(str, { locals: { bar: 'foo' }}));
102:
  },
103:
  
104:
  'test custom tags': function(){
105:
    var html = '<p>foo</p>',
106:
      str = '<p>{{= "foo" }}</p>';
107:
 
108:
    assert.equal(html, ejs.render(str, {
109:
      open: '{{',
110:
      close: '}}'
111:
    }));
112:
 
113:
    var html = '<p>foo</p>',
114:
      str = '<p><?= "foo" ?></p>';
115:
 
116:
    assert.equal(html, ejs.render(str, {
117:
      open: '<?',
118:
      close: '?>'
119:
    }));
120:
  },
121:
 
122:
  'test custom tags over 2 chars': function(){
123:
    var html = '<p>foo</p>',
124:
      str = '<p>{{{{= "foo" }>>}</p>';
125:
 
126:
    assert.equal(html, ejs.render(str, {
127:
      open: '{{{{',
128:
      close: '}>>}'
129:
    }));
130:
 
131:
    var html = '<p>foo</p>',
132:
      str = '<p><??= "foo" ??></p>';
133:
 
134:
    assert.equal(html, ejs.render(str, {
135:
      open: '<??',
136:
      close: '??>'
137:
    }));
138:
  },
139:
  
140:
  'test global custom tags': function(){
141:
    var html = '<p>foo</p>',
142:
      str = '<p>{{= "foo" }}</p>';
143:
    ejs.open = '{{';
144:
    ejs.close = '}}';
145:
    assert.equal(html, ejs.render(str));
146:
    delete ejs.open;
147:
    delete ejs.close;
148:
  },
149:
  
150:
  'test iteration': function(){
151:
    var html = '<p>foo</p>',
152:
      str = '<% for (var key in items) { %>'
153:
        + '<p><%= items[key] %></p>'
154:
        + '<% } %>';
155:
    assert.equal(html, ejs.render(str, {
156:
      locals: {
157:
        items: ['foo']
158:
      }
159:
    }));
160:
    
161:
    var html = '<p>foo</p>',
162:
      str = '<% items.forEach(function(item){ %>'
163:
        + '<p><%= item %></p>'
164:
        + '<% }) %>';
165:
    assert.equal(html, ejs.render(str, {
166:
      locals: {
167:
        items: ['foo']
168:
      }
169:
    }));
170:
  },
171:
  
172:
  'test filter support': function(){
173:
    var html = 'Zab',
174:
      str = '<%=: items | reverse | first | reverse | capitalize %>';
175:
    assert.equal(html, ejs.render(str, {
176:
      locals: {
177:
        items: ['foo', 'bar', 'baz']
178:
      }
179:
    }));
180:
  },
181:
  
182:
  'test filter argument support': function(){
183:
    var html = 'tj, guillermo',
184:
      str = '<%=: users | map:"name" | join:", " %>';
185:
    assert.equal(html, ejs.render(str, {
186:
      locals: {
187:
        users: [
188:
          { name: 'tj' },
189:
          { name: 'guillermo' }
190:
        ]
191:
      }
192:
    }));
193:
  },
194:
  
195:
  'test sort_by filter': function(){
196:
    var html = 'tj',
197:
      str = '<%=: users | sort_by:"name" | last | get:"name" %>';
198:
    assert.equal(html, ejs.render(str, {
199:
      locals: {
200:
        users: [
201:
          { name: 'guillermo' },
202:
          { name: 'tj' },
203:
          { name: 'mape' }
204:
        ]
205:
      }
206:
    }));
207:
  },
208:
  
209:
  'test custom filters': function(){
210:
    var html = 'Welcome Tj Holowaychuk',
211:
      str = '<%=: users | first | greeting %>';
212:
 
213:
    ejs.filters.greeting = function(user){
214:
      return 'Welcome ' + user.first + ' ' + user.last + '';
215:
    };
216:
 
217:
    assert.equal(html, ejs.render(str, {
218:
      locals: {
219:
        users: [
220:
          { first: 'Tj', last: 'Holowaychuk' }
221:
        ]
222:
      }
223:
    }));
224:
  },
225:
 
226:
  'test useful stack traces': function(){  
227:
    var str = [
228:
      "A little somethin'",
229:
      "somethin'",
230:
      "<% if (name) { %>", // Failing line
231:
      "  <p><%= name %></p>",
232:
      "  <p><%= email %></p>",
233:
      "<% } %>"
234:
    ].join("\n");
235:
    
236:
    try {
237:
      ejs.render(str)
238:
    } catch( err ){
239:
      assert.includes(err.message,"name is not defined");
240:
      assert.eql(err.name,"ReferenceError");
241:
      var lineno = parseInt(err.toString().match(/ejs:(\d+)\n/)[1]);
242:
      assert.eql(lineno,3,"Error should been thrown on line 3, was thrown on line "+lineno);
243:
    }
244:
  },
245:
  
246:
  'test useful stack traces multiline': function(){  
247:
    var str = [
248:
      "A little somethin'",
249:
      "somethin'",
250:
      "<% var some = 'pretty';",
251:
      "   var multiline = 'javascript';",
252:
      "%>",
253:
      "<% if (name) { %>", // Failing line
254:
      "  <p><%= name %></p>",
255:
      "  <p><%= email %></p>",
256:
      "<% } %>"
257:
    ].join("\n");
258:
    
259:
    try {
260:
      ejs.render(str)
261:
    } catch( err ){
262:
      assert.includes(err.message,"name is not defined");
263:
      assert.eql(err.name,"ReferenceError");
264:
      var lineno = parseInt(err.toString().match(/ejs:(\d+)\n/)[1]);
265:
      assert.eql(lineno,6,"Error should been thrown on line 3, was thrown on line "+lineno);
266:
    }
267:
  }
268:
};