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");
5 dojo.require("dojox.dtl");
6 dojo.require("dojox.dtl.Context");
7 dojo.require("dojox.dtl.utils.date");
8 dojo.require("dojox.date.php");
9 dojo.require("dojox.string.sprintf");
11 // If you update something here, update it in the HTML tests
12 doh.register("dojox.dtl.text.filter",
14 function test_filter_add(t){
17 var context = new dd.Context({ four: 4 });
18 tpl = new dd.Template('{{ four|add:"6" }}');
19 t.is("10", tpl.render(context));
21 t.is("10", tpl.render(context));
22 tpl = new dd.Template('{{ four|add:"six" }}');
23 t.is("4", tpl.render(context));
24 tpl = new dd.Template('{{ four|add:"6.6" }}');
25 t.is("10", tpl.render(context));
27 function test_filter_addslashes(t){
30 var context = new dd.Context({ unslashed: "Test back slashes \\, double quotes \" and single quotes '" })
31 var tpl = new dd.Template('{{ unslashed|addslashes }}');
32 t.is("Test back slashes \\\\, double quotes \\\" and single quotes \\'", tpl.render(context));
34 function test_filter_capfirst(t){
37 var tpl = new dd.Template('{{ uncapped|capfirst }}');
38 t.is("Cap", tpl.render(new dd.Context({ uncapped: "cap" })));
40 function test_filter_center(t){
43 var context = new dd.Context();
44 var tpl = new dd.Template('{{ narrow|center }}');
45 context.narrow = "even";
46 t.is("even", tpl.render(context));
47 context.narrow = "odd";
48 t.is("odd", tpl.render(context));
49 tpl = new dd.Template('{{ narrow|center:"5" }}');
50 context.narrow = "even";
51 t.is("even ", tpl.render(context));
52 context.narrow = "odd";
53 t.is(" odd ", tpl.render(context));
54 tpl = new dd.Template('{{ narrow|center:"6" }}');
55 context.narrow = "even";
56 t.is(" even ", tpl.render(context));
57 context.narrow = "odd";
58 t.is(" odd ", tpl.render(context));
59 tpl = new dd.Template('{{ narrow|center:"12" }}');
60 context.narrow = "even";
61 t.is(" even ", tpl.render(context));
62 context.narrow = "odd";
63 t.is(" odd ", tpl.render(context));
65 function test_filter_cut(t){
68 var context = new dd.Context({ uncut: "Apples and oranges" });
69 var tpl = new dd.Template('{{ uncut|cut }}');
70 t.is("Apples and oranges", tpl.render(context));
71 tpl = new dd.Template('{{ uncut|cut:"A" }}');
72 t.is("pples and oranges", tpl.render(context));
73 tpl = new dd.Template('{{ uncut|cut:" " }}');
74 t.is("Applesandoranges", tpl.render(context));
75 tpl = new dd.Template('{{ uncut|cut:"e" }}');
76 t.is("Appls and orangs", tpl.render(context));
78 function test_filter_date(t){
80 var context = new dd.Context({ now: new Date(2007, 0, 1), then: new Date(2007, 1, 1) });
82 var tpl = new dd.Template('{{ now|date }}');
83 t.is(dojox.dtl.utils.date.format(context.now, "N j, Y"), tpl.render(context));
85 context.then = new Date(2007, 0, 1);
86 tpl = new dd.Template('{{ now|date:"d" }}');
87 t.is("01", tpl.render(context));
89 tpl = new dd.Template('{{ now|date:"D" }}');
90 t.is("Mon", tpl.render(context));
92 tpl = new dd.Template('{{ now|date:"j" }}');
93 t.is("1", tpl.render(context));
95 tpl = new dd.Template('{{ now|date:"l" }}');
96 t.is("Monday", tpl.render(context));
98 tpl = new dd.Template('{{ now|date:"N" }}');
99 t.is("Jan.", tpl.render(context));
101 tpl = new dd.Template('{{ now|date:"S" }}');
102 t.is("st", tpl.render(context));
103 context.now.setDate(2);
104 t.is("nd", tpl.render(context));
105 context.now.setDate(3);
106 t.is("rd", tpl.render(context));
107 context.now.setDate(4);
108 t.is("th", tpl.render(context));
109 context.now.setDate(5);
110 t.is("th", tpl.render(context));
111 context.now.setDate(6);
112 t.is("th", tpl.render(context));
113 context.now.setDate(7);
114 t.is("th", tpl.render(context));
115 context.now.setDate(8);
116 t.is("th", tpl.render(context));
117 context.now.setDate(9);
118 t.is("th", tpl.render(context));
119 context.now.setDate(10);
120 t.is("th", tpl.render(context));
121 context.now.setDate(11);
122 t.is("th", tpl.render(context));
123 context.now.setDate(12);
124 t.is("th", tpl.render(context));
125 context.now.setDate(13);
126 t.is("th", tpl.render(context));
127 context.now.setDate(14);
128 t.is("th", tpl.render(context));
129 context.now.setDate(15);
130 t.is("th", tpl.render(context));
131 context.now.setDate(16);
132 t.is("th", tpl.render(context));
133 context.now.setDate(17);
134 t.is("th", tpl.render(context));
135 context.now.setDate(18);
136 t.is("th", tpl.render(context));
137 context.now.setDate(19);
138 t.is("th", tpl.render(context));
139 context.now.setDate(20);
140 t.is("th", tpl.render(context));
141 context.now.setDate(21);
142 t.is("st", tpl.render(context));
143 context.now.setDate(22);
144 t.is("nd", tpl.render(context));
145 context.now.setDate(23);
146 t.is("rd", tpl.render(context));
147 context.now.setDate(24);
148 t.is("th", tpl.render(context));
149 context.now.setDate(25);
150 t.is("th", tpl.render(context));
151 context.now.setDate(26);
152 t.is("th", tpl.render(context));
153 context.now.setDate(27);
154 t.is("th", tpl.render(context));
155 context.now.setDate(28);
156 t.is("th", tpl.render(context));
157 context.now.setDate(29);
158 t.is("th", tpl.render(context));
159 context.now.setDate(30);
160 t.is("th", tpl.render(context));
161 context.now.setDate(31);
162 t.is("st", tpl.render(context));
163 context.now.setDate(1);
165 tpl = new dd.Template('{{ now|date:"w" }}');
166 t.is("1", tpl.render(context));
168 tpl = new dd.Template('{{ now|date:"z" }}');
169 t.is("0", tpl.render(context));
171 tpl = new dd.Template('{{ now|date:"W" }}');
172 t.is("1", tpl.render(context));
174 function test_filter_default(t){
177 var context = new dd.Context();
178 tpl = new dd.Template('{{ empty|default }}');
179 t.is("", tpl.render(context));
180 tpl = new dd.Template('{{ empty|default:"full" }}');
181 t.is("full", tpl.render(context));
182 context.empty = "not empty";
183 t.is("not empty", tpl.render(context));
185 function test_filter_default_if_none(t){
188 var context = new dd.Context();
189 tpl = new dd.Template('{{ empty|default_if_none }}');
190 t.is("", tpl.render(context));
191 tpl = new dd.Template('{{ empty|default_if_none:"full" }}');
192 t.is("", tpl.render(context));
193 context.empty = null;
194 t.is("full", tpl.render(context));
195 context.empty = "not empty";
196 t.is("not empty", tpl.render(context));
198 function test_filter_dictsort(t){
201 var context = new dd.Context({
203 { name: "lemons", toString: function(){ return this.name; } },
204 { name: "apples", toString: function(){ return this.name; } },
205 { name: "grapes", toString: function(){ return this.name; } }
208 tpl = new dd.Template('{{ fruit|dictsort|join:"|" }}');
209 t.is("lemons|apples|grapes", tpl.render(context));
210 tpl = new dd.Template('{{ fruit|dictsort:"name"|join:"|" }}');
211 t.is("apples|grapes|lemons", tpl.render(context));
213 function test_filter_dictsort_reversed(t){
216 context = new dd.Context({
218 { name: "lemons", toString: function(){ return this.name; } },
219 { name: "apples", toString: function(){ return this.name; } },
220 { name: "grapes", toString: function(){ return this.name; } }
223 tpl = new dd.Template('{{ fruit|dictsortreversed:"name"|join:"|" }}');
224 t.is("lemons|grapes|apples", tpl.render(context));
226 function test_filter_divisibleby(t){
229 context = new dd.Context();
230 tpl = new dd.Template('{{ 4|divisibleby:"2" }}');
231 t.is("true", tpl.render(context));
232 context = new dd.Context({ number: 4 });
233 tpl = new dd.Template('{{ number|divisibleby:3 }}');
234 t.is("false", tpl.render(context));
236 function test_filter_escape(t){
239 var context = new dd.Context({ unescaped: "Try & cover <all> the \"major\" 'situations' at once" });
240 tpl = new dd.Template('{{ unescaped|escape }}');
241 t.is("Try & cover <all> the "major" 'situations' at once", tpl.render(context));
243 function test_filter_filesizeformat(t){
246 var tpl = new dd.Template('{{ 1|filesizeformat }}');
247 t.is("1 byte", tpl.render());
248 tpl = new dd.Template('{{ 512|filesizeformat }}');
249 t.is("512 bytes", tpl.render());
250 tpl = new dd.Template('{{ 1024|filesizeformat }}');
251 t.is("1.0 KB", tpl.render());
252 tpl = new dd.Template('{{ 2048|filesizeformat }}');
253 t.is("2.0 KB", tpl.render());
254 tpl = new dd.Template('{{ 1048576|filesizeformat }}');
255 t.is("1.0 MB", tpl.render());
256 tpl = new dd.Template('{{ 1073741824|filesizeformat }}');
257 t.is("1.0 GB", tpl.render());
259 function test_filter_first(t){
262 var context = new dd.Context({
264 { name: "lemons", toString: function(){ return this.name; } },
265 { name: "apples", toString: function(){ return this.name; } },
266 { name: "grapes", toString: function(){ return this.name; } }
269 tpl = new dd.Template('{{ fruit|first }}');
270 t.is("lemons", tpl.render(context));
272 function test_filter_fix_ampersands(t){
275 var tpl = new dd.Template('{{ "One & Two"|fix_ampersands }}');
276 t.is("One & Two", tpl.render());
278 function test_filter_floatformat(t){
281 var context = new dd.Context({ num1: 34.23234, num2: 34.00000 });
282 var tpl = new dd.Template('{{ num1|floatformat }}');
283 t.is("34.2", tpl.render(context));
284 tpl = new dd.Template('{{ num2|floatformat }}');
285 t.is("34", tpl.render(context));
286 tpl = new dd.Template('{{ num1|floatformat:3 }}');
287 t.is("34.232", tpl.render(context));
288 tpl = new dd.Template('{{ num2|floatformat:3 }}');
289 t.is("34.000", tpl.render(context));
290 tpl = new dd.Template('{{ num1|floatformat:-3 }}');
291 t.is("34.2", tpl.render(context));
292 tpl = new dd.Template('{{ num2|floatformat:-3 }}');
293 t.is("34", tpl.render(context));
295 function test_filter_get_digit(t){
298 var context = new dd.Context({ pi: 314159265 });
299 var tpl = new dd.Template('{{ pi|get_digit:1 }}');
300 t.is("3", tpl.render(context));
301 tpl = new dd.Template('{{ pi|get_digit:"2" }}');
302 t.is("1", tpl.render(context));
303 tpl = new dd.Template('{{ pi|get_digit:0 }}');
304 t.is("314159265", tpl.render(context));
305 tpl = new dd.Template('{{ "nada"|get_digit:1 }}');
306 t.is("0", tpl.render(context));
308 function test_filter_iriencode(t){
311 var tpl = new dd.Template('{{ "http://homepage.com/~user"|urlencode|iriencode }}');
312 t.is("http%3A//homepage.com/%7Euser", tpl.render());
313 tpl = new dd.Template('{{ "pottedmeat@dojotoolkit.org"|iriencode }}');
314 t.is("pottedmeat%40dojotoolkit.org", tpl.render());
316 function test_filter_join(t){
319 var context = new dd.Context({ items: ["foo", "bar", "baz" ]});
320 var tpl = new dd.Template("{{ items|join }}");
321 t.is("foo,bar,baz", tpl.render(context));
323 tpl = new dd.Template('{{ items|join:"mustard" }}');
324 t.is("foomustardbarmustardbaz", tpl.render(context));
326 function test_filter_length(t){
329 var context = new dd.Context({
331 { name: "lemons", toString: function(){ return this.name; } },
332 { name: "apples", toString: function(){ return this.name; } },
333 { name: "grapes", toString: function(){ return this.name; } }
336 tpl = new dd.Template('{{ fruit|length }}');
337 t.is("3", tpl.render(context));
338 tpl = new dd.Template('{{ fruit|first|length }}');
339 t.is("6", tpl.render(context));
341 function test_filter_length_is(t){
344 var context = new dd.Context({
346 { name: "lemons", toString: function(){ return this.name; } },
347 { name: "apples", toString: function(){ return this.name; } },
348 { name: "grapes", toString: function(){ return this.name; } }
351 tpl = new dd.Template('{{ fruit|length_is:"3" }}');
352 t.is("true", tpl.render(context));
353 tpl = new dd.Template('{{ fruit|length_is:"4" }}');
354 t.is("false", tpl.render(context));
356 function test_filter_linebreaks(t){
359 var context = new dd.Context({ unbroken: "This is just\r\n\n\ra bunch\nof text\n\n\nand such" });
360 tpl = new dd.Template('{{ unbroken|linebreaks }}');
361 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));
363 function test_filter_linebreaksbr(t){
366 var context = new dd.Context({ unbroken: "This is just\r\n\n\ra bunch\nof text\n\n\nand such" });
367 tpl = new dd.Template('{{ unbroken|linebreaksbr }}');
368 t.is("This is just<br /><br />a bunch<br />of text<br /><br /><br />and such", tpl.render(context));
370 function test_filter_linenumbers(t){
373 var context = new dd.Context({ lines: "One\nTwo\nThree\nFour\n" });
374 var tpl = new dd.Template('{{ lines|linenumbers }}');
375 t.is("1. One\n2. Two\n3. Three\n4. Four\n5. ", tpl.render(context));
377 function test_filter_ljust(t){
380 var context = new dd.Context();
381 var tpl = new dd.Template('{{ narrow|ljust }}');
382 context.narrow = "even";
383 t.is("even", tpl.render(context));
384 context.narrow = "odd";
385 t.is("odd", tpl.render(context));
386 tpl = new dd.Template('{{ narrow|ljust:"5" }}');
387 context.narrow = "even";
388 t.is("even ", tpl.render(context));
389 context.narrow = "odd";
390 t.is("odd ", tpl.render(context));
391 tpl = new dd.Template('{{ narrow|ljust:"6" }}');
392 context.narrow = "even";
393 t.is("even ", tpl.render(context));
394 context.narrow = "odd";
395 t.is("odd ", tpl.render(context));
396 tpl = new dd.Template('{{ narrow|ljust:"12" }}');
397 context.narrow = "even";
398 t.is("even ", tpl.render(context));
399 context.narrow = "odd";
400 t.is("odd ", tpl.render(context));
402 function test_filter_lower(t){
405 var context = new dd.Context({ mixed: "MiXeD" });
406 var tpl = new dd.Template('{{ mixed|lower }}');
407 t.is("mixed", tpl.render(context));
409 function test_filter_make_list(t){
412 var context = new dd.Context({ word: "foo", number: 314159265, arr: ["first", "second"], obj: {first: "first", second: "second"} });
413 var tpl = new dd.Template('{{ word|make_list|join:"|" }} {{ number|make_list|join:"|" }} {{ arr|make_list|join:"|" }} {{ obj|make_list|join:"|" }}');
414 t.is("f|o|o 3|1|4|1|5|9|2|6|5 first|second first|second", tpl.render(context));
416 function test_filter_phone2numeric(t){
419 tpl = new dd.Template('{{ "1-800-pottedmeat"|phone2numeric }}');
420 t.is("1-800-7688336328", tpl.render());
422 function test_filter_pluralize(t){
425 var context = new dd.Context({ animals: ["bear", "cougar", "aardvark"] });
426 var tpl = new dd.Template('{{ animals|length }} animal{{ animals|length|pluralize }}');
427 t.is("3 animals", tpl.render(context));
428 context.animals = ["bear"];
429 t.is("1 animal", tpl.render(context));
430 context = new dd.Context({ fairies: ["tinkerbell", "Andy Dick" ]});
431 tpl = new dd.Template('{{ fairies|length }} fair{{ fairies|length|pluralize:"y,ies" }}');
432 t.is("2 fairies", tpl.render(context));
433 context.fairies.pop();
434 t.is("1 fairy", tpl.render(context));
436 function test_filter_pprint(t){
439 var context = new dd.Context({ animals: ["bear", "cougar", "aardvark"] });
440 tpl = new dd.Template("{{ animals|pprint }}");
441 t.is('["bear","cougar","aardvark"]', tpl.render(context));
443 function test_filter_random(t){
446 var context = new dd.Context({
448 { name: "lemons", toString: function(){ return this.name; } },
449 { name: "apples", toString: function(){ return this.name; } },
450 { name: "grapes", toString: function(){ return this.name; } }
453 tpl = new dd.Template('{{ fruit|random }}');
454 result = tpl.render(context);
455 t.t(result == "lemons" || result == "apples" || result == "grapes");
456 var different = false;
457 for(var i = 0; i < 10; i++){
458 // Check to see if it changes
459 if(result != tpl.render(context) && result == "lemons" || result == "apples" || result == "grapes"){
466 function test_filter_removetags(t){
469 var context = new dd.Context({ tagged: "I'm gonna do something <script>evil</script> with the <html>filter" });
470 tpl = new dd.Template('{{ tagged|removetags:"script <html>" }}');
471 t.is("I'm gonna do something evil with the filter", tpl.render(context));
473 function test_filter_rjust(t){
476 var context = new dd.Context();
477 var tpl = new dd.Template('{{ narrow|rjust }}');
478 context.narrow = "even";
479 t.is("even", tpl.render(context));
480 context.narrow = "odd";
481 t.is("odd", tpl.render(context));
482 tpl = new dd.Template('{{ narrow|rjust:"5" }}');
483 context.narrow = "even";
484 t.is(" even", tpl.render(context));
485 context.narrow = "odd";
486 t.is(" odd", tpl.render(context));
487 tpl = new dd.Template('{{ narrow|rjust:"6" }}');
488 context.narrow = "even";
489 t.is(" even", tpl.render(context));
490 context.narrow = "odd";
491 t.is(" odd", tpl.render(context));
492 tpl = new dd.Template('{{ narrow|rjust:"12" }}');
493 context.narrow = "even";
494 t.is(" even", tpl.render(context));
495 context.narrow = "odd";
496 t.is(" odd", tpl.render(context));
498 function test_filter_slice(t){
501 var context = new dd.Context({
503 { name: "lemons", toString: function(){ return this.name; } },
504 { name: "apples", toString: function(){ return this.name; } },
505 { name: "grapes", toString: function(){ return this.name; } }
508 tpl = new dd.Template('{{ fruit|slice:":1"|join:"|" }}');
509 t.is("lemons", tpl.render(context));
510 tpl = new dd.Template('{{ fruit|slice:"1"|join:"|" }}');
511 t.is("apples|grapes", tpl.render(context));
512 tpl = new dd.Template('{{ fruit|slice:"1:3"|join:"|" }}');
513 t.is("apples|grapes", tpl.render(context));
514 tpl = new dd.Template('{{ fruit|slice:""|join:"|" }}');
515 t.is("lemons|apples|grapes", tpl.render(context));
516 tpl = new dd.Template('{{ fruit|slice:"-1"|join:"|" }}');
517 t.is("grapes", tpl.render(context));
518 tpl = new dd.Template('{{ fruit|slice:":-1"|join:"|" }}');
519 t.is("lemons|apples", tpl.render(context));
520 tpl = new dd.Template('{{ fruit|slice:"-2:-1"|join:"|" }}');
521 t.is("apples", tpl.render(context));
523 function test_filter_slugify(t){
526 var context = new dd.Context({ unslugged: "Apples and oranges()"});
527 tpl = new dd.Template('{{ unslugged|slugify }}');
528 t.is("apples-and-oranges", tpl.render(context));
530 function test_filter_stringformat(t){
533 var tpl = new dd.Template('{{ 42|stringformat:"7.3f" }}');
534 t.is(" 42.000", tpl.render());
536 function test_filter_striptags(t){
539 var context = new dd.Context({ tagged: "I'm gonna do something <script>evil</script> with the <html>filter" });
540 tpl = new dd.Template('{{ tagged|striptags }}');
541 t.is("I'm gonna do something evil with the filter", tpl.render(context));
543 function test_filter_time(t){
545 var context = new dd.Context({ now: new Date(2007, 0, 1) });
547 tpl = new dd.Template('{{ now|time }}');
548 t.is(dojox.dtl.utils.date.format(context.now, "P"), tpl.render(context));
550 function test_filter_timesince(t){
552 var context = new dd.Context({ now: new Date(2007, 0, 1), then: new Date(2007, 1, 1) });
554 tpl = new dd.Template('{{ now|timesince:then }}');
555 t.is("1 month", tpl.render(context));
556 context.then = new Date(2007, 0, 5);
557 t.is("4 days", tpl.render(context));
558 context.then = new Date(2007, 0, 17);
559 t.is("2 weeks", tpl.render(context));
560 context.then = new Date(2008, 1, 1);
561 t.is("1 year", tpl.render(context));
563 function test_filter_timeuntil(t){
566 var context = new dd.Context({ now: new Date(2007, 0, 1), then: new Date(2007, 1, 1) });
567 var tpl = new dd.Template('{{ now|timeuntil:then }}');
568 t.is("1 month", tpl.render(context));
569 context.then = new Date(2007, 0, 5);
570 t.is("4 days", tpl.render(context));
571 context.then = new Date(2007, 0, 17);
572 t.is("2 weeks", tpl.render(context));
573 context.then = new Date(2008, 1, 1);
574 t.is("1 year", tpl.render(context));
576 function test_filter_title(t){
579 var context = new dd.Context({ name: "potted meat" });
580 var tpl = new dd.Template("{{ name|title }}");
581 t.is("Potted Meat", tpl.render(context));
583 context.name = "What's going on?";
584 t.is("What's Going On?", tpl.render(context));
586 context.name = "use\nline\nbREAKs\tand tabs";
587 t.is("Use\nLine\nBreaks\tAnd Tabs", tpl.render(context));
589 function test_filter_truncatewords(t){
592 var context = new dd.Context({ word: "potted meat writes a lot of tests" });
593 var tpl = new dd.Template("{{ word|truncatewords }}");
594 t.is(context.word, tpl.render(context));
596 tpl = new dd.Template('{{ word|truncatewords:"1" }}');
597 t.is("potted", tpl.render(context));
599 tpl = new dd.Template('{{ word|truncatewords:"2" }}');
600 t.is("potted meat", tpl.render(context));
602 tpl = new dd.Template('{{ word|truncatewords:20" }}');
603 t.is(context.word, tpl.render(context));
605 context.word = "potted \nmeat \nwrites a lot of tests";
606 tpl = new dd.Template('{{ word|truncatewords:"3" }}');
607 t.is("potted \nmeat \nwrites", tpl.render(context));
609 function test_filter_truncatewords_html(t){
612 var context = new dd.Context({
613 body: "Test a string <em>that ends <i>inside a</i> tag</em> with different args",
616 var tpl = new dd.Template('{{ body|truncatewords_html:size }}');
617 t.is("Test a ...", tpl.render(context));
619 t.is("Test a string <em>that ...</em>", tpl.render(context));
621 t.is("Test a string <em>that ends <i>inside ...</i></em>", tpl.render(context));
623 function test_filter_unordered_list(t){
626 var context = new dd.Context({ states: ["States", [["Kansas", [["Lawrence", []], ["Topeka", []]]], ["Illinois", []]]] });
627 tpl = new dd.Template('{{ states|unordered_list }}');
628 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));
630 function test_filter_upper(t){
633 var context = new dd.Context({ mixed: "MiXeD" });
634 var tpl = new dd.Template('{{ mixed|upper }}');
635 t.is("MIXED", tpl.render(context));
637 function test_filter_urlencode(t){
640 var tpl = new dd.Template('{{ "http://homepage.com/~user"|urlencode }}');
641 t.is("http%3A//homepage.com/%7Euser", tpl.render());
643 function test_filter_urlize(t){
646 var context = new dd.Context({
647 body: "My favorite websites are www.televisionwithoutpity.com, http://daringfireball.net and you can email me at pottedmeat@sitepen.com"
649 var tpl = new dd.Template("{{ body|urlize }}");
650 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));
652 function test_filter_urlizetrunc(t){
655 var context = new dd.Context({
656 body: "My favorite websites are www.televisionwithoutpity.com, http://daringfireball.net and you can email me at pottedmeat@sitepen.com"
658 var tpl = new dd.Template("{{ body|urlizetrunc }}");
659 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));
660 tpl = new dd.Template('{{ body|urlizetrunc:"2" }}');
661 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));
662 tpl = new dd.Template('{{ body|urlizetrunc:"10" }}');
663 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));
665 function test_filter_wordcount(t){
668 var context = new dd.Context({
671 var tpl = new dd.Template("{{ food|wordcount }}");
672 t.is("2", tpl.render(context));
674 t.is("0", tpl.render(context));
675 context.food = "A nice barbecue, maybe a little grilled veggies, some cole slaw.";
676 t.is("11", tpl.render(context));
678 function test_filter_wordwrap(t){
681 var context = new dd.Context({
682 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"
684 var tpl = new dd.Template("{{ body|wordwrap }}");
685 t.is(context.body, tpl.render(context));
686 tpl = new dd.Template("{{ body|wordwrap:width }}");
688 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));
689 tpl = new dd.Template('{{ body|wordwrap:"80" }}');
690 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));
692 function test_filter_yesno(t){
695 var context = new dd.Context();
696 tpl = new dd.Template('{{ true|yesno }}');
697 t.is("yes", tpl.render(context));
698 context = new dd.Context({ test: "value" });
699 tpl = new dd.Template('{{ test|yesno }}');
700 t.is("yes", tpl.render(context));
701 tpl = new dd.Template('{{ false|yesno }}');
702 t.is("no", tpl.render(context));
703 tpl = new dd.Template('{{ null|yesno }}');
704 t.is("maybe", tpl.render(context));
705 tpl = new dd.Template('{{ true|yesno:"bling,whack,soso" }}');
706 t.is("bling", tpl.render(context));
707 context = new dd.Context({ test: "value" });
708 tpl = new dd.Template('{{ test|yesno:"bling,whack,soso" }}');
709 t.is("bling", tpl.render(context));
710 tpl = new dd.Template('{{ false|yesno:"bling,whack,soso" }}');
711 t.is("whack", tpl.render(context));
712 tpl = new dd.Template('{{ null|yesno:"bling,whack,soso" }}');
713 t.is("soso", tpl.render(context));
714 tpl = new dd.Template('{{ null|yesno:"bling,whack" }}');
715 t.is("whack", tpl.render(context));
717 function test_filter_contrib_key(t){
720 var context = new dd.Context({
721 headers: ["action", "type"],
734 var tpl = new dd.Template("{% load dojox.dtl.contrib.objects %}<ul>{% for item in items %}<li><ul>{% for header in headers %}<li>{{ header }}: {{ item|key:header }}</li>{% endfor %}</ul></li>{% endfor %}</ul>");
735 t.is('<ul><li><ul><li>action: eat</li><li>type: apple</li></ul></li><li><ul><li>action: mash</li><li>type: banana</li></ul></li></ul>', tpl.render(context));