Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
if(!dojo._hasResource["dojox.dtl.tests.text.filter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2
dojo._hasResource["dojox.dtl.tests.text.filter"] = true;
3
dojo.provide("dojox.dtl.tests.text.filter");
4
 
5
dojo.require("dojox.dtl");
6
dojo.require("dojox.date.php");
7
dojo.require("dojox.string.sprintf");
8
 
9
doh.register("dojox.dtl.text.filter",
10
	[
11
		function test_filter_add(t){
12
			var dd = dojox.dtl;
13
 
14
			var context = new dd.Context({ four: 4 });
15
			tpl = new dd.Template('{{ four|add:"6" }}');
16
			t.is("10", tpl.render(context));
17
			context.four = "4";
18
			t.is("10", tpl.render(context));
19
			tpl = new dd.Template('{{ four|add:"six" }}');
20
			t.is("4", tpl.render(context));
21
			tpl = new dd.Template('{{ four|add:"6.6" }}');
22
			t.is("10", tpl.render(context));
23
		},
24
		function test_filter_addslashes(t){
25
			var dd = dojox.dtl;
26
 
27
			var context = new dd.Context({ unslashed: "Test back slashes \\, double quotes \" and single quotes '" })
28
			var tpl = new dd.Template('{{ unslashed|addslashes }}');
29
			t.is("Test back slashes \\\\, double quotes \\\" and single quotes \\'", tpl.render(context));
30
		},
31
		function test_filter_capfirst(t){
32
			var dd = dojox.dtl;
33
 
34
			var tpl = new dd.Template('{{ uncapped|capfirst }}');
35
			t.is("Cap", tpl.render(new dd.Context({ uncapped: "cap" })));
36
		},
37
		function test_filter_center(t){
38
			var dd = dojox.dtl;
39
 
40
			var context = new dd.Context();
41
			var tpl = new dd.Template('{{ narrow|center }}');
42
			context.narrow = "even";
43
			t.is("even", tpl.render(context));
44
			context.narrow = "odd";
45
			t.is("odd", tpl.render(context));
46
			tpl = new dd.Template('{{ narrow|center:"5" }}');
47
			context.narrow = "even";
48
			t.is("even ", tpl.render(context));
49
			context.narrow = "odd";
50
			t.is(" odd ", tpl.render(context));
51
			tpl = new dd.Template('{{ narrow|center:"6" }}');
52
			context.narrow = "even";
53
			t.is(" even ", tpl.render(context));
54
			context.narrow = "odd";
55
			t.is(" odd  ", tpl.render(context));
56
			tpl = new dd.Template('{{ narrow|center:"12" }}');
57
			context.narrow = "even";
58
			t.is("    even    ", tpl.render(context));
59
			context.narrow = "odd";
60
			t.is("    odd     ", tpl.render(context));
61
		},
62
		function test_filter_cut(t){
63
			var dd = dojox.dtl;
64
 
65
			var context = new dd.Context({ uncut: "Apples and oranges" });
66
			var tpl = new dd.Template('{{ uncut|cut }}');
67
			t.is("Apples and oranges", tpl.render(context));
68
			tpl = new dd.Template('{{ uncut|cut:"A" }}');
69
			t.is("pples and oranges", tpl.render(context));
70
			tpl = new dd.Template('{{ uncut|cut:" " }}');
71
			t.is("Applesandoranges", tpl.render(context));
72
			tpl = new dd.Template('{{ uncut|cut:"e" }}');
73
			t.is("Appls and orangs", tpl.render(context));
74
		},
75
		function test_filter_date(t){
76
			var dd = dojox.dtl;
77
			var context = new dd.Context({ now: new Date(2007, 0, 1), then: new Date(2007, 1, 1) });
78
 
79
			var tpl = new dd.Template('{{ now|date }}');
80
			t.is(dojox.date.php.format(context.now, "N j, Y", dd.utils.date._overrides), tpl.render(context));
81
 
82
			context.then = new Date(2007, 0, 1);
83
			tpl = new dd.Template('{{ now|date:"d" }}');
84
			t.is("01", tpl.render(context));
85
 
86
			tpl = new dd.Template('{{ now|date:"D" }}');
87
			t.is("Mon", tpl.render(context));
88
 
89
			tpl = new dd.Template('{{ now|date:"j" }}');
90
			t.is("1", tpl.render(context));
91
 
92
			tpl = new dd.Template('{{ now|date:"l" }}');
93
			t.is("Monday", tpl.render(context));
94
 
95
			tpl = new dd.Template('{{ now|date:"N" }}');
96
			t.is("Jan.", tpl.render(context));
97
 
98
			tpl = new dd.Template('{{ now|date:"S" }}');
99
			t.is("st", tpl.render(context));
100
			context.now.setDate(2);
101
			t.is("nd", tpl.render(context));
102
			context.now.setDate(3);
103
			t.is("rd", tpl.render(context));
104
			context.now.setDate(4);
105
			t.is("th", tpl.render(context));
106
			context.now.setDate(5);
107
			t.is("th", tpl.render(context));
108
			context.now.setDate(6);
109
			t.is("th", tpl.render(context));
110
			context.now.setDate(7);
111
			t.is("th", tpl.render(context));
112
			context.now.setDate(8);
113
			t.is("th", tpl.render(context));
114
			context.now.setDate(9);
115
			t.is("th", tpl.render(context));
116
			context.now.setDate(10);
117
			t.is("th", tpl.render(context));
118
			context.now.setDate(11);
119
			t.is("th", tpl.render(context));
120
			context.now.setDate(12);
121
			t.is("th", tpl.render(context));
122
			context.now.setDate(13);
123
			t.is("th", tpl.render(context));
124
			context.now.setDate(14);
125
			t.is("th", tpl.render(context));
126
			context.now.setDate(15);
127
			t.is("th", tpl.render(context));
128
			context.now.setDate(16);
129
			t.is("th", tpl.render(context));
130
			context.now.setDate(17);
131
			t.is("th", tpl.render(context));
132
			context.now.setDate(18);
133
			t.is("th", tpl.render(context));
134
			context.now.setDate(19);
135
			t.is("th", tpl.render(context));
136
			context.now.setDate(20);
137
			t.is("th", tpl.render(context));
138
			context.now.setDate(21);
139
			t.is("st", tpl.render(context));
140
			context.now.setDate(22);
141
			t.is("nd", tpl.render(context));
142
			context.now.setDate(23);
143
			t.is("rd", tpl.render(context));
144
			context.now.setDate(24);
145
			t.is("th", tpl.render(context));
146
			context.now.setDate(25);
147
			t.is("th", tpl.render(context));
148
			context.now.setDate(26);
149
			t.is("th", tpl.render(context));
150
			context.now.setDate(27);
151
			t.is("th", tpl.render(context));
152
			context.now.setDate(28);
153
			t.is("th", tpl.render(context));
154
			context.now.setDate(29);
155
			t.is("th", tpl.render(context));
156
			context.now.setDate(30);
157
			t.is("th", tpl.render(context));
158
			context.now.setDate(31);
159
			t.is("st", tpl.render(context));
160
			context.now.setDate(1);
161
 
162
			tpl = new dd.Template('{{ now|date:"w" }}');
163
			t.is("1", tpl.render(context));
164
 
165
			tpl = new dd.Template('{{ now|date:"z" }}');
166
			t.is("0", tpl.render(context));
167
 
168
			tpl = new dd.Template('{{ now|date:"W" }}');
169
			t.is("1", tpl.render(context));
170
		},
171
		function test_filter_default(t){
172
			var dd = dojox.dtl;
173
 
174
			var context = new dd.Context();
175
			tpl = new dd.Template('{{ empty|default }}');
176
			t.is("", tpl.render(context));
177
			tpl = new dd.Template('{{ empty|default:"full" }}');
178
			t.is("full", tpl.render(context));
179
			context.empty = "not empty";
180
			t.is("not empty", tpl.render(context));
181
		},
182
		function test_filter_default_if_none(t){
183
			var dd = dojox.dtl;
184
 
185
			var context = new dd.Context();
186
			tpl = new dd.Template('{{ empty|default_if_none }}');
187
			t.is("", tpl.render(context));
188
			tpl = new dd.Template('{{ empty|default_if_none:"full" }}');
189
			t.is("", tpl.render(context));
190
			context.empty = null;
191
			t.is("full", tpl.render(context));
192
			context.empty = "not empty";
193
			t.is("not empty", tpl.render(context));
194
		},
195
		function test_filter_dictsort(t){
196
			var dd = dojox.dtl;
197
 
198
			var context = new dd.Context({
199
				fruit: [
200
					{ name: "lemons", toString: function(){ return this.name; } },
201
					{ name: "apples", toString: function(){ return this.name; } },
202
					{ name: "grapes", toString: function(){ return this.name; } }
203
				]
204
			});
205
 			tpl = new dd.Template('{{ fruit|dictsort|join:"|" }}');
206
			t.is("lemons|apples|grapes", tpl.render(context));
207
			tpl = new dd.Template('{{ fruit|dictsort:"name"|join:"|" }}');
208
			t.is("apples|grapes|lemons", tpl.render(context));
209
		},
210
		function test_filter_dictsort_reversed(t){
211
			var dd = dojox.dtl;
212
 
213
			context = new dd.Context({
214
				fruit: [
215
					{ name: "lemons", toString: function(){ return this.name; } },
216
					{ name: "apples", toString: function(){ return this.name; } },
217
					{ name: "grapes", toString: function(){ return this.name; } }
218
				]
219
			});
220
			tpl = new dd.Template('{{ fruit|dictsortreversed:"name"|join:"|" }}');
221
			t.is("lemons|grapes|apples", tpl.render(context));
222
		},
223
		function test_filter_divisibleby(t){
224
			var dd = dojox.dtl;
225
 
226
			context = new dd.Context();
227
			tpl = new dd.Template('{{ 4|divisibleby:"2" }}');
228
			t.is("true", tpl.render(context));
229
			context = new dd.Context({ number: 4 });
230
			tpl = new dd.Template('{{ number|divisibleby:3 }}');
231
			t.is("false", tpl.render(context));
232
		},
233
		function test_filter_escape(t){
234
			var dd = dojox.dtl;
235
 
236
			var context = new dd.Context({ unescaped: "Try & cover <all> the \"major\" 'situations' at once" });
237
			tpl = new dd.Template('{{ unescaped|escape }}');
238
			t.is("Try &amp; cover &lt;all&gt; the &quot;major&quot; &#39;situations&#39; at once", tpl.render(context));
239
		},
240
		function test_filter_filesizeformat(t){
241
			var dd = dojox.dtl;
242
 
243
			var tpl = new dd.Template('{{ 1|filesizeformat }}');
244
			t.is("1 byte", tpl.render());
245
			tpl = new dd.Template('{{ 512|filesizeformat }}');
246
			t.is("512 bytes", tpl.render());
247
			tpl = new dd.Template('{{ 1024|filesizeformat }}');
248
			t.is("1.0 KB", tpl.render());
249
			tpl = new dd.Template('{{ 2048|filesizeformat }}');
250
			t.is("2.0 KB", tpl.render());
251
			tpl = new dd.Template('{{ 1048576|filesizeformat }}');
252
			t.is("1.0 MB", tpl.render());
253
			tpl = new dd.Template('{{ 1073741824|filesizeformat }}');
254
			t.is("1.0 GB", tpl.render());
255
		},
256
		function test_filter_first(t){
257
			var dd = dojox.dtl;
258
 
259
			var context = new dd.Context({
260
				fruit: [
261
					{ name: "lemons", toString: function(){ return this.name; } },
262
					{ name: "apples", toString: function(){ return this.name; } },
263
					{ name: "grapes", toString: function(){ return this.name; } }
264
				]
265
			});
266
			tpl = new dd.Template('{{ fruit|first }}');
267
			t.is("lemons", tpl.render(context));
268
		},
269
		function test_filter_fix_ampersands(t){
270
			var dd = dojox.dtl;
271
 
272
			var tpl = new dd.Template('{{ "One & Two"|fix_ampersands }}');
273
			t.is("One &amp; Two", tpl.render());
274
		},
275
		function test_filter_floatformat(t){
276
			var dd = dojox.dtl;
277
 
278
			var context = new dd.Context({ num1: 34.23234, num2: 34.00000 });
279
			var tpl = new dd.Template('{{ num1|floatformat }}');
280
			t.is("34.2", tpl.render(context));
281
			tpl = new dd.Template('{{ num2|floatformat }}');
282
			t.is("34", tpl.render(context));
283
			tpl = new dd.Template('{{ num1|floatformat:3 }}');
284
			t.is("34.232", tpl.render(context));
285
			tpl = new dd.Template('{{ num2|floatformat:3 }}');
286
			t.is("34.000", tpl.render(context));
287
			tpl = new dd.Template('{{ num1|floatformat:-3 }}');
288
			t.is("34.2", tpl.render(context));
289
			tpl = new dd.Template('{{ num2|floatformat:-3 }}');
290
			t.is("34", tpl.render(context));
291
		},
292
		function test_filter_get_digit(t){
293
			var dd = dojox.dtl;
294
 
295
			var context = new dd.Context({ pi: 314159265 });
296
			var tpl = new dd.Template('{{ pi|get_digit:1 }}');
297
			t.is("3", tpl.render(context));
298
			tpl = new dd.Template('{{ pi|get_digit:"2" }}');
299
			t.is("1", tpl.render(context));
300
			tpl = new dd.Template('{{ pi|get_digit:0 }}');
301
			t.is("314159265", tpl.render(context));
302
			tpl = new dd.Template('{{ "nada"|get_digit:1 }}');
303
			t.is("0", tpl.render(context));
304
		},
305
		function test_filter_iriencode(t){
306
			var dd = dojox.dtl;
307
 
308
			var tpl = new dd.Template('{{ "http://homepage.com/~user"|urlencode|iriencode }}');
309
			t.is("http%3A//homepage.com/%7Euser", tpl.render());
310
			tpl = new dd.Template('{{ "pottedmeat@dojotoolkit.org"|iriencode }}');
311
			t.is("pottedmeat%40dojotoolkit.org", tpl.render());
312
		},
313
		function test_filter_join(t){
314
			var dd = dojox.dtl;
315
 
316
			var context = new dd.Context({ items: ["foo", "bar", "baz" ]});
317
			var tpl = new dd.Template("{{ items|join }}");
318
			t.is("foo,bar,baz", tpl.render(context));
319
 
320
			tpl = new dd.Template('{{ items|join:"mustard" }}');
321
			t.is("foomustardbarmustardbaz", tpl.render(context));
322
		},
323
		function test_filter_length(t){
324
			var dd = dojox.dtl;
325
 
326
			var context = new dd.Context({
327
				fruit: [
328
					{ name: "lemons", toString: function(){ return this.name; } },
329
					{ name: "apples", toString: function(){ return this.name; } },
330
					{ name: "grapes", toString: function(){ return this.name; } }
331
				]
332
			});
333
			tpl = new dd.Template('{{ fruit|length }}');
334
			t.is("3", tpl.render(context));
335
			tpl = new dd.Template('{{ fruit|first|length }}');
336
			t.is("6", tpl.render(context));
337
		},
338
		function test_filter_length_is(t){
339
			var dd = dojox.dtl;
340
 
341
			var context = new dd.Context({
342
				fruit: [
343
					{ name: "lemons", toString: function(){ return this.name; } },
344
					{ name: "apples", toString: function(){ return this.name; } },
345
					{ name: "grapes", toString: function(){ return this.name; } }
346
				]
347
			});
348
			tpl = new dd.Template('{{ fruit|length_is:"3" }}');
349
			t.is("true", tpl.render(context));
350
			tpl = new dd.Template('{{ fruit|length_is:"4" }}');
351
			t.is("false", tpl.render(context));
352
		},
353
		function test_filter_linebreaks(t){
354
			var dd = dojox.dtl;
355
 
356
			var context = new dd.Context({ unbroken: "This is just\r\n\n\ra bunch\nof text\n\n\nand such" });
357
			tpl = new dd.Template('{{ unbroken|linebreaks }}');
358
			t.is("<p>This is just</p>\n\n<p>a bunch<br />of text</p>\n\n<p>and such</p>", tpl.render(context));
359
		},
360
		function test_filter_linebreaksbr(t){
361
			var dd = dojox.dtl;
362
 
363
			var context = new dd.Context({ unbroken: "This is just\r\n\n\ra bunch\nof text\n\n\nand such" });
364
			tpl = new dd.Template('{{ unbroken|linebreaksbr }}');
365
			t.is("This is just<br /><br />a bunch<br />of text<br /><br /><br />and such", tpl.render(context));
366
		},
367
		function test_filter_linenumbers(t){
368
			var dd = dojox.dtl;
369
 
370
			var context = new dd.Context({ lines: "One\nTwo\nThree\nFour\n" });
371
			var tpl = new dd.Template('{{ lines|linenumbers }}');
372
			t.is("1. One\n2. Two\n3. Three\n4. Four\n5. ", tpl.render(context));
373
		},
374
		function test_filter_ljust(t){
375
			var dd = dojox.dtl;
376
 
377
			var context = new dd.Context();
378
			var tpl = new dd.Template('{{ narrow|ljust }}');
379
			context.narrow = "even";
380
			t.is("even", tpl.render(context));
381
			context.narrow = "odd";
382
			t.is("odd", tpl.render(context));
383
			tpl = new dd.Template('{{ narrow|ljust:"5" }}');
384
			context.narrow = "even";
385
			t.is("even ", tpl.render(context));
386
			context.narrow = "odd";
387
			t.is("odd  ", tpl.render(context));
388
			tpl = new dd.Template('{{ narrow|ljust:"6" }}');
389
			context.narrow = "even";
390
			t.is("even  ", tpl.render(context));
391
			context.narrow = "odd";
392
			t.is("odd   ", tpl.render(context));
393
			tpl = new dd.Template('{{ narrow|ljust:"12" }}');
394
			context.narrow = "even";
395
			t.is("even        ", tpl.render(context));
396
			context.narrow = "odd";
397
			t.is("odd         ", tpl.render(context));
398
		},
399
		function test_filter_lower(t){
400
			var dd = dojox.dtl;
401
 
402
			var context = new dd.Context({ mixed: "MiXeD" });
403
			var tpl  = new dd.Template('{{ mixed|lower }}');
404
			t.is("mixed", tpl.render(context));
405
		},
406
		function test_filter_make_list(t){
407
			var dd = dojox.dtl;
408
 
409
			var context = new dd.Context({ word: "foo", number: 314159265, arr: ["first", "second"], obj: {first: "first", second: "second"} });
410
			var tpl = new dd.Template('{{ word|make_list|join:"|" }} {{ number|make_list|join:"|" }} {{ arr|make_list|join:"|" }} {{ obj|make_list|join:"|" }}');
411
			t.is("f|o|o 3|1|4|1|5|9|2|6|5 first|second first|second", tpl.render(context));
412
		},
413
		function test_filter_phone2numeric(t){
414
			var dd = dojox.dtl;
415
 
416
			tpl = new dd.Template('{{ "1-800-pottedmeat"|phone2numeric }}');
417
			t.is("1-800-7688336328", tpl.render());
418
		},
419
		function test_filter_pluralize(t){
420
			var dd = dojox.dtl;
421
 
422
			var context = new dd.Context({ animals: ["bear", "cougar", "aardvark"] });
423
			var tpl = new dd.Template('{{ animals|length }} animal{{ animals|length|pluralize }}');
424
			t.is("3 animals", tpl.render(context));
425
			context.animals = ["bear"];
426
			t.is("1 animal", tpl.render(context));
427
			context = new dd.Context({ fairies: ["tinkerbell", "Andy Dick" ]});
428
			tpl = new dd.Template('{{ fairies|length }} fair{{ fairies|length|pluralize:"y,ies" }}');
429
			t.is("2 fairies", tpl.render(context));
430
			context.fairies.pop();
431
			t.is("1 fairy", tpl.render(context));
432
		},
433
		function test_filter_pprint(t){
434
			var dd = dojox.dtl;
435
 
436
			var context = new dd.Context({ animals: ["bear", "cougar", "aardvark"] });
437
			tpl = new dd.Template("{{ animals|pprint }}");
438
			t.is('["bear", "cougar", "aardvark"]', tpl.render(context));
439
		},
440
		function test_filter_random(t){
441
			var dd = dojox.dtl;
442
 
443
			var context = new dd.Context({
444
				fruit: [
445
					{ name: "lemons", toString: function(){ return this.name; } },
446
					{ name: "apples", toString: function(){ return this.name; } },
447
					{ name: "grapes", toString: function(){ return this.name; } }
448
				]
449
			});
450
			tpl = new dd.Template('{{ fruit|random }}');
451
			result = tpl.render(context);
452
			t.t(result == "lemons" || result == "apples" || result == "grapes");
453
			var different = false;
454
			for(var i = 0; i < 10; i++){
455
				// Check to see if it changes
456
				if(result != tpl.render(context) && result == "lemons" || result == "apples" || result == "grapes"){
457
					different = true;
458
					break;
459
				}
460
			}
461
			t.t(different);
462
		},
463
		function test_filter_removetags(t){
464
			var dd = dojox.dtl;
465
 
466
			var context = new dd.Context({ tagged: "I'm gonna do something <script>evil</script> with the <html>filter" });
467
			tpl = new dd.Template('{{ tagged|removetags:"script <html>" }}');
468
			t.is("I'm gonna do something evil with the filter", tpl.render(context));
469
		},
470
		function test_filter_rjust(t){
471
			var dd = dojox.dtl;
472
 
473
			var context = new dd.Context();
474
			var tpl = new dd.Template('{{ narrow|rjust }}');
475
			context.narrow = "even";
476
			t.is("even", tpl.render(context));
477
			context.narrow = "odd";
478
			t.is("odd", tpl.render(context));
479
			tpl = new dd.Template('{{ narrow|rjust:"5" }}');
480
			context.narrow = "even";
481
			t.is(" even", tpl.render(context));
482
			context.narrow = "odd";
483
			t.is("  odd", tpl.render(context));
484
			tpl = new dd.Template('{{ narrow|rjust:"6" }}');
485
			context.narrow = "even";
486
			t.is("  even", tpl.render(context));
487
			context.narrow = "odd";
488
			t.is("   odd", tpl.render(context));
489
			tpl = new dd.Template('{{ narrow|rjust:"12" }}');
490
			context.narrow = "even";
491
			t.is("        even", tpl.render(context));
492
			context.narrow = "odd";
493
			t.is("         odd", tpl.render(context));
494
		},
495
		function test_filter_slice(t){
496
			var dd = dojox.dtl;
497
 
498
			var context = new dd.Context({
499
				fruit: [
500
					{ name: "lemons", toString: function(){ return this.name; } },
501
					{ name: "apples", toString: function(){ return this.name; } },
502
					{ name: "grapes", toString: function(){ return this.name; } }
503
				]
504
			});
505
			tpl = new dd.Template('{{ fruit|slice:":1"|join:"|" }}');
506
			t.is("lemons", tpl.render(context));
507
			tpl = new dd.Template('{{ fruit|slice:"1"|join:"|" }}');
508
			t.is("apples|grapes", tpl.render(context));
509
			tpl = new dd.Template('{{ fruit|slice:"1:3"|join:"|" }}');
510
			t.is("apples|grapes", tpl.render(context));
511
			tpl = new dd.Template('{{ fruit|slice:""|join:"|" }}');
512
			t.is("lemons|apples|grapes", tpl.render(context));
513
			tpl = new dd.Template('{{ fruit|slice:"-1"|join:"|" }}');
514
			t.is("grapes", tpl.render(context));
515
			tpl = new dd.Template('{{ fruit|slice:":-1"|join:"|" }}');
516
			t.is("lemons|apples", tpl.render(context));
517
			tpl = new dd.Template('{{ fruit|slice:"-2:-1"|join:"|" }}');
518
			t.is("apples", tpl.render(context));
519
		},
520
		function test_filter_slugify(t){
521
			var dd = dojox.dtl;
522
 
523
			var context = new dd.Context({ unslugged: "Apples and oranges()"});
524
			tpl = new dd.Template('{{ unslugged|slugify }}');
525
			t.is("apples-and-oranges", tpl.render(context));
526
		},
527
		function test_filter_stringformat(t){
528
			var dd = dojox.dtl;
529
 
530
			var tpl = new dd.Template('{{ 42|stringformat:"7.3f" }}');
531
			t.is(" 42.000", tpl.render());
532
		},
533
		function test_filter_striptags(t){
534
			var dd = dojox.dtl;
535
 
536
			var context = new dd.Context({ tagged: "I'm gonna do something <script>evil</script> with the <html>filter" });
537
			tpl = new dd.Template('{{ tagged|striptags }}');
538
			t.is("I'm gonna do something evil with the filter", tpl.render(context));
539
		},
540
		function test_filter_time(t){
541
			var dd = dojox.dtl;
542
			var context = new dd.Context({ now: new Date(2007, 0, 1) });
543
 
544
			tpl = new dd.Template('{{ now|time }}');
545
			t.is(dojox.date.php.format(context.now, "P", dd.utils.date._overrides), tpl.render(context));
546
		},
547
		function test_filter_timesince(t){
548
			var dd = dojox.dtl;
549
			var context = new dd.Context({ now: new Date(2007, 0, 1), then: new Date(2007, 1, 1) });
550
 
551
			tpl = new dd.Template('{{ now|timesince:then }}');
552
			t.is("1 month", tpl.render(context));
553
			context.then = new Date(2007, 0, 5);
554
			t.is("4 days", tpl.render(context));
555
			context.then = new Date(2007, 0, 17);
556
			t.is("2 weeks", tpl.render(context));
557
			context.then = new Date(2008, 1, 1);
558
			t.is("1 year", tpl.render(context));
559
		},
560
		function test_filter_timeuntil(t){
561
			var dd = dojox.dtl;
562
 
563
			var context = new dd.Context({ now: new Date(2007, 0, 1), then: new Date(2007, 1, 1) });
564
			var tpl = new dd.Template('{{ now|timeuntil:then }}');
565
			t.is("1 month", tpl.render(context));
566
			context.then = new Date(2007, 0, 5);
567
			t.is("4 days", tpl.render(context));
568
			context.then = new Date(2007, 0, 17);
569
			t.is("2 weeks", tpl.render(context));
570
			context.then = new Date(2008, 1, 1);
571
			t.is("1 year", tpl.render(context));
572
		},
573
		function test_filter_title(t){
574
			var dd = dojox.dtl;
575
 
576
			var context = new dd.Context({ name: "potted meat" });
577
			var tpl = new dd.Template("{{ name|title }}");
578
			t.is("Potted Meat", tpl.render(context));
579
 
580
			context.name = "What's going on?";
581
			t.is("What's Going On?", tpl.render(context));
582
 
583
			context.name = "use\nline\nbREAKs\tand tabs";
584
			t.is("Use\nLine\nBreaks\tAnd Tabs", tpl.render(context));
585
		},
586
		function test_filter_truncatewords(t){
587
			var dd = dojox.dtl;
588
 
589
			var context = new dd.Context({ word: "potted meat writes a lot of tests" });
590
			var tpl = new dd.Template("{{ word|truncatewords }}");
591
			t.is(context.word, tpl.render(context));
592
 
593
			tpl = new dd.Template('{{ word|truncatewords:"1" }}');
594
			t.is("potted", tpl.render(context));
595
 
596
			tpl = new dd.Template('{{ word|truncatewords:"2" }}');
597
			t.is("potted meat", tpl.render(context));
598
 
599
			tpl = new dd.Template('{{ word|truncatewords:20" }}');
600
			t.is(context.word, tpl.render(context));
601
 
602
			context.word = "potted \nmeat   \nwrites  a lot of tests";
603
			tpl = new dd.Template('{{ word|truncatewords:"3" }}');
604
			t.is("potted \nmeat   \nwrites", tpl.render(context));
605
		},
606
		function test_filter_truncatewords_html(t){
607
			var dd = dojox.dtl;
608
 
609
			var context = new dd.Context({
610
				body: "Test a string <em>that ends <i>inside a</i> tag</em> with different args",
611
				size: 2
612
			})
613
			var tpl = new dd.Template('{{ body|truncatewords_html:size }}');
614
			t.is("Test a ...", tpl.render(context));
615
			context.size = 4;
616
			t.is("Test a string <em>that ...</em>", tpl.render(context));
617
			context.size = 6;
618
			t.is("Test a string <em>that ends <i>inside ...</i></em>", tpl.render(context));
619
		},
620
		function test_filter_unordered_list(t){
621
			var dd = dojox.dtl;
622
 
623
			var context = new dd.Context({ states: ["States", [["Kansas", [["Lawrence", []], ["Topeka", []]]], ["Illinois", []]]] });
624
			tpl = new dd.Template('{{ states|unordered_list }}');
625
			t.is("\t<li>States\n\t<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>Lawrence</li>\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>\n\t\t<li>Illinois</li>\n\t</ul>\n\t</li>", tpl.render(context));
626
		},
627
		function test_filter_upper(t){
628
			var dd = dojox.dtl;
629
 
630
			var context = new dd.Context({ mixed: "MiXeD" });
631
			var tpl  = new dd.Template('{{ mixed|upper }}');
632
			t.is("MIXED", tpl.render(context));
633
		},
634
		function test_filter_urlencode(t){
635
			var dd = dojox.dtl;
636
 
637
			var tpl = new dd.Template('{{ "http://homepage.com/~user"|urlencode }}');
638
			t.is("http%3A//homepage.com/%7Euser", tpl.render());
639
		},
640
		function test_filter_urlize(t){
641
			var dd = dojox.dtl;
642
 
643
			var context = new dd.Context({
644
				body: "My favorite websites are www.televisionwithoutpity.com, http://daringfireball.net and you can email me at pottedmeat@sitepen.com"
645
			});
646
			var tpl = new dd.Template("{{ body|urlize }}");
647
			t.is('My favorite websites are <a href="http://www.televisionwithoutpity.com" rel="nofollow">www.televisionwithoutpity.com</a> <a href="http://daringfireball.net" rel="nofollow">http://daringfireball.net</a> and you can email me at <a href="mailto:pottedmeat@sitepen.com">pottedmeat@sitepen.com</a>', tpl.render(context));
648
		},
649
		function test_filter_urlizetrunc(t){
650
			var dd = dojox.dtl;
651
 
652
			var context = new dd.Context({
653
				body: "My favorite websites are www.televisionwithoutpity.com, http://daringfireball.net and you can email me at pottedmeat@sitepen.com"
654
			});
655
			var tpl = new dd.Template("{{ body|urlizetrunc }}");
656
			t.is('My favorite websites are <a href="http://www.televisionwithoutpity.com" rel="nofollow">www.televisionwithoutpity.com</a> <a href="http://daringfireball.net" rel="nofollow">http://daringfireball.net</a> and you can email me at <a href="mailto:pottedmeat@sitepen.com">pottedmeat@sitepen.com</a>', tpl.render(context));
657
			tpl = new dd.Template('{{ body|urlizetrunc:"2" }}');
658
			t.is('My favorite websites are <a href="http://www.televisionwithoutpity.com" rel="nofollow">www.televisionwithoutpity.com</a> <a href="http://daringfireball.net" rel="nofollow">http://daringfireball.net</a> and you can email me at <a href="mailto:pottedmeat@sitepen.com">pottedmeat@sitepen.com</a>', tpl.render(context));
659
			tpl = new dd.Template('{{ body|urlizetrunc:"10" }}');
660
			t.is('My favorite websites are <a href="http://www.televisionwithoutpity.com" rel="nofollow">www.tel...</a> <a href="http://daringfireball.net" rel="nofollow">http://...</a> and you can email me at <a href="mailto:pottedmeat@sitepen.com">pottedmeat@sitepen.com</a>', tpl.render(context));
661
		},
662
		function test_filter_wordcount(t){
663
			var dd = dojox.dtl;
664
 
665
			var context = new dd.Context({
666
				food: "Hot Pocket"
667
			});
668
			var tpl = new dd.Template("{{ food|wordcount }}");
669
			t.is("2", tpl.render(context));
670
			context.food = "";
671
			t.is("0", tpl.render(context));
672
			context.food = "A nice barbecue, maybe a little grilled veggies, some cole slaw.";
673
			t.is("11", tpl.render(context));
674
		},
675
		function test_filter_wordwrap(t){
676
			var dd = dojox.dtl;
677
 
678
			var context = new dd.Context({
679
				body: "shrimp gumbo, shrimp pie, shrimp scampi, shrimp stew, fried shrimp, baked shrimp, shrimp o grotten, grilled shrimp, shrimp on a stick, shrimp salad, shrimp pop overs, shrimp cake, shrimp legs, shrimp stuffed eggs, shrimp cre oll, shrimp soup, creamed shrimp on toast, shrimp crapes, shrimply good crescent rolls, shrimp pizza, scalloped shrimp, boiled shrimp, shrimp cocktail"
680
			});
681
			var tpl = new dd.Template("{{ body|wordwrap }}");
682
			t.is(context.body, tpl.render(context));
683
			tpl = new dd.Template("{{ body|wordwrap:width }}");
684
			context.width = 10;
685
			t.is("shrimp\ngumbo,\nshrimp\npie,\nshrimp\nscampi,\nshrimp\nstew,\nfried\nshrimp,\nbaked\nshrimp,\nshrimp o\ngrotten,\ngrilled\nshrimp,\nshrimp on\na stick,\nshrimp\nsalad,\nshrimp pop\novers,\nshrimp\ncake,\nshrimp\nlegs,\nshrimp\nstuffed\neggs,\nshrimp cre\noll,\nshrimp\nsoup,\ncreamed\nshrimp on\ntoast,\nshrimp\ncrapes,\nshrimply\ngood\ncrescent\nrolls,\nshrimp\npizza,\nscalloped\nshrimp,\nboiled\nshrimp,\nshrimp\ncocktail", tpl.render(context));
686
			tpl = new dd.Template('{{ body|wordwrap:"80" }}');
687
			t.is("shrimp gumbo, shrimp pie, shrimp scampi, shrimp stew, fried shrimp, baked\nshrimp, shrimp o grotten, grilled shrimp, shrimp on a stick, shrimp salad,\nshrimp pop overs, shrimp cake, shrimp legs, shrimp stuffed eggs, shrimp cre oll,\nshrimp soup, creamed shrimp on toast, shrimp crapes, shrimply good crescent\nrolls, shrimp pizza, scalloped shrimp, boiled shrimp, shrimp cocktail", tpl.render(context));
688
		},
689
		function test_filter_yesno(t){
690
			var dd = dojox.dtl;
691
 
692
			var context = new dd.Context();
693
			tpl = new dd.Template('{{ true|yesno }}');
694
			t.is("yes", tpl.render(context));
695
			context = new dd.Context({ test: "value" });
696
			tpl = new dd.Template('{{ test|yesno }}');
697
			t.is("yes", tpl.render(context));
698
			tpl = new dd.Template('{{ false|yesno }}');
699
			t.is("no", tpl.render(context));
700
			tpl = new dd.Template('{{ null|yesno }}');
701
			t.is("maybe", tpl.render(context));
702
			tpl = new dd.Template('{{ true|yesno:"bling,whack,soso" }}');
703
			t.is("bling", tpl.render(context));
704
			context = new dd.Context({ test: "value" });
705
			tpl = new dd.Template('{{ test|yesno:"bling,whack,soso" }}');
706
			t.is("bling", tpl.render(context));
707
			tpl = new dd.Template('{{ false|yesno:"bling,whack,soso" }}');
708
			t.is("whack", tpl.render(context));
709
			tpl = new dd.Template('{{ null|yesno:"bling,whack,soso" }}');
710
			t.is("soso", tpl.render(context));
711
			tpl = new dd.Template('{{ null|yesno:"bling,whack" }}');
712
			t.is("whack", tpl.render(context));
713
		}
714
	]
715
);
716
 
717
}