]> git.pond.sub.org Git - eow/blob - static/dojo-release-1.1.1/dojox/dtl/tests/text/filter.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / dtl / tests / text / filter.js
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.dtl.Context");
7 dojo.require("dojox.dtl.utils.date");
8 dojo.require("dojox.date.php");
9 dojo.require("dojox.string.sprintf");
10
11 // If you update something here, update it in the HTML tests
12 doh.register("dojox.dtl.text.filter", 
13         [
14                 function test_filter_add(t){
15                         var dd = dojox.dtl;
16
17                         var context = new dd.Context({ four: 4 });
18                         tpl = new dd.Template('{{ four|add:"6" }}');
19                         t.is("10", tpl.render(context));
20                         context.four = "4";
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));
26                 },
27                 function test_filter_addslashes(t){
28                         var dd = dojox.dtl;
29
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));
33                 },
34                 function test_filter_capfirst(t){
35                         var dd = dojox.dtl;
36
37                         var tpl = new dd.Template('{{ uncapped|capfirst }}');
38                         t.is("Cap", tpl.render(new dd.Context({ uncapped: "cap" })));
39                 },
40                 function test_filter_center(t){
41                         var dd = dojox.dtl;
42
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));
64                 },
65                 function test_filter_cut(t){
66                         var dd = dojox.dtl;
67
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));
77                 },
78                 function test_filter_date(t){
79                         var dd = dojox.dtl;
80                         var context = new dd.Context({ now: new Date(2007, 0, 1), then: new Date(2007, 1, 1) });
81
82                         var tpl = new dd.Template('{{ now|date }}');
83                         t.is(dojox.dtl.utils.date.format(context.now, "N j, Y"), tpl.render(context));
84
85                         context.then = new Date(2007, 0, 1);
86                         tpl = new dd.Template('{{ now|date:"d" }}');
87                         t.is("01", tpl.render(context));
88
89                         tpl = new dd.Template('{{ now|date:"D" }}');
90                         t.is("Mon", tpl.render(context));
91
92                         tpl = new dd.Template('{{ now|date:"j" }}');
93                         t.is("1", tpl.render(context));
94
95                         tpl = new dd.Template('{{ now|date:"l" }}');
96                         t.is("Monday", tpl.render(context));
97
98                         tpl = new dd.Template('{{ now|date:"N" }}');
99                         t.is("Jan.", tpl.render(context));
100
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);
164
165                         tpl = new dd.Template('{{ now|date:"w" }}');
166                         t.is("1", tpl.render(context));
167
168                         tpl = new dd.Template('{{ now|date:"z" }}');
169                         t.is("0", tpl.render(context));
170                 
171                         tpl = new dd.Template('{{ now|date:"W" }}');
172                         t.is("1", tpl.render(context));
173                 },
174                 function test_filter_default(t){
175                         var dd = dojox.dtl;
176
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));
184                 },
185                 function test_filter_default_if_none(t){
186                         var dd = dojox.dtl;
187
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));
197                 },
198                 function test_filter_dictsort(t){
199                         var dd = dojox.dtl;
200
201                         var context = new dd.Context({
202                                 fruit: [
203                                         { name: "lemons", toString: function(){ return this.name; } },
204                                         { name: "apples", toString: function(){ return this.name; } },
205                                         { name: "grapes", toString: function(){ return this.name; } }
206                                 ]
207                         });
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));
212                 },
213                 function test_filter_dictsort_reversed(t){
214                         var dd = dojox.dtl;
215
216                         context = new dd.Context({
217                                 fruit: [
218                                         { name: "lemons", toString: function(){ return this.name; } },
219                                         { name: "apples", toString: function(){ return this.name; } },
220                                         { name: "grapes", toString: function(){ return this.name; } }
221                                 ]
222                         });
223                         tpl = new dd.Template('{{ fruit|dictsortreversed:"name"|join:"|" }}');
224                         t.is("lemons|grapes|apples", tpl.render(context));
225                 },
226                 function test_filter_divisibleby(t){
227                         var dd = dojox.dtl;
228
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));
235                 },
236                 function test_filter_escape(t){
237                         var dd = dojox.dtl;
238
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 &amp; cover &lt;all&gt; the &quot;major&quot; &#39;situations&#39; at once", tpl.render(context));
242                 },
243                 function test_filter_filesizeformat(t){
244                         var dd = dojox.dtl;
245
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());
258                 },
259                 function test_filter_first(t){
260                         var dd = dojox.dtl;
261
262                         var context = new dd.Context({
263                                 fruit: [
264                                         { name: "lemons", toString: function(){ return this.name; } },
265                                         { name: "apples", toString: function(){ return this.name; } },
266                                         { name: "grapes", toString: function(){ return this.name; } }
267                                 ]
268                         });
269                         tpl = new dd.Template('{{ fruit|first }}');
270                         t.is("lemons", tpl.render(context));
271                 },
272                 function test_filter_fix_ampersands(t){
273                         var dd = dojox.dtl;
274
275                         var tpl = new dd.Template('{{ "One & Two"|fix_ampersands }}');
276                         t.is("One &amp; Two", tpl.render());
277                 },
278                 function test_filter_floatformat(t){
279                         var dd = dojox.dtl;
280
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));
294                 },
295                 function test_filter_get_digit(t){
296                         var dd = dojox.dtl;
297
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));
307                 },
308                 function test_filter_iriencode(t){
309                         var dd = dojox.dtl;
310
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());
315                 },
316                 function test_filter_join(t){
317                         var dd = dojox.dtl;
318
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));
322
323                         tpl = new dd.Template('{{ items|join:"mustard" }}');
324                         t.is("foomustardbarmustardbaz", tpl.render(context));
325                 },
326                 function test_filter_length(t){
327                         var dd = dojox.dtl;
328
329                         var context = new dd.Context({
330                                 fruit: [
331                                         { name: "lemons", toString: function(){ return this.name; } },
332                                         { name: "apples", toString: function(){ return this.name; } },
333                                         { name: "grapes", toString: function(){ return this.name; } }
334                                 ]
335                         });
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));
340                 },
341                 function test_filter_length_is(t){
342                         var dd = dojox.dtl;
343
344                         var context = new dd.Context({
345                                 fruit: [
346                                         { name: "lemons", toString: function(){ return this.name; } },
347                                         { name: "apples", toString: function(){ return this.name; } },
348                                         { name: "grapes", toString: function(){ return this.name; } }
349                                 ]
350                         });
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));
355                 },
356                 function test_filter_linebreaks(t){
357                         var dd = dojox.dtl;
358
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));
362                 },
363                 function test_filter_linebreaksbr(t){
364                         var dd = dojox.dtl;
365
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));
369                 },
370                 function test_filter_linenumbers(t){
371                         var dd = dojox.dtl;
372
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));
376                 },
377                 function test_filter_ljust(t){
378                         var dd = dojox.dtl;
379
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));
401                 },
402                 function test_filter_lower(t){
403                         var dd = dojox.dtl;
404
405                         var context = new dd.Context({ mixed: "MiXeD" });
406                         var tpl  = new dd.Template('{{ mixed|lower }}');
407                         t.is("mixed", tpl.render(context));
408                 },
409                 function test_filter_make_list(t){
410                         var dd = dojox.dtl;
411
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));
415                 },
416                 function test_filter_phone2numeric(t){
417                         var dd = dojox.dtl;
418
419                         tpl = new dd.Template('{{ "1-800-pottedmeat"|phone2numeric }}');
420                         t.is("1-800-7688336328", tpl.render());
421                 },
422                 function test_filter_pluralize(t){
423                         var dd = dojox.dtl;
424
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));
435                 },
436                 function test_filter_pprint(t){
437                         var dd = dojox.dtl;
438
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));
442                 },
443                 function test_filter_random(t){
444                         var dd = dojox.dtl;
445
446                         var context = new dd.Context({
447                                 fruit: [
448                                         { name: "lemons", toString: function(){ return this.name; } },
449                                         { name: "apples", toString: function(){ return this.name; } },
450                                         { name: "grapes", toString: function(){ return this.name; } }
451                                 ]
452                         });
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"){
460                                         different = true;
461                                         break;
462                                 }
463                         }
464                         t.t(different);
465                 },
466                 function test_filter_removetags(t){
467                         var dd = dojox.dtl;
468
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));
472                 },
473                 function test_filter_rjust(t){
474                         var dd = dojox.dtl;
475
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));
497                 },
498                 function test_filter_slice(t){
499                         var dd = dojox.dtl;
500
501                         var context = new dd.Context({
502                                 fruit: [
503                                         { name: "lemons", toString: function(){ return this.name; } },
504                                         { name: "apples", toString: function(){ return this.name; } },
505                                         { name: "grapes", toString: function(){ return this.name; } }
506                                 ]
507                         });
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));
522                 },
523                 function test_filter_slugify(t){
524                         var dd = dojox.dtl;
525
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));
529                 },
530                 function test_filter_stringformat(t){
531                         var dd = dojox.dtl;
532
533                         var tpl = new dd.Template('{{ 42|stringformat:"7.3f" }}');
534                         t.is(" 42.000", tpl.render());
535                 },
536                 function test_filter_striptags(t){
537                         var dd = dojox.dtl;
538
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));
542                 },
543                 function test_filter_time(t){
544                         var dd = dojox.dtl;
545                         var context = new dd.Context({ now: new Date(2007, 0, 1) });
546
547                         tpl = new dd.Template('{{ now|time }}');
548                         t.is(dojox.dtl.utils.date.format(context.now, "P"), tpl.render(context));
549                 },
550                 function test_filter_timesince(t){
551                         var dd = dojox.dtl;
552                         var context = new dd.Context({ now: new Date(2007, 0, 1), then: new Date(2007, 1, 1) });
553
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));
562                 },
563                 function test_filter_timeuntil(t){
564                         var dd = dojox.dtl;
565
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));    
575                 },
576                 function test_filter_title(t){
577                         var dd = dojox.dtl;
578
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));
582
583                         context.name = "What's going on?";
584                         t.is("What's Going On?", tpl.render(context));
585
586                         context.name = "use\nline\nbREAKs\tand tabs";
587                         t.is("Use\nLine\nBreaks\tAnd Tabs", tpl.render(context));
588                 },
589                 function test_filter_truncatewords(t){
590                         var dd = dojox.dtl;
591
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));
595
596                         tpl = new dd.Template('{{ word|truncatewords:"1" }}');
597                         t.is("potted", tpl.render(context));
598
599                         tpl = new dd.Template('{{ word|truncatewords:"2" }}');
600                         t.is("potted meat", tpl.render(context));
601
602                         tpl = new dd.Template('{{ word|truncatewords:20" }}');
603                         t.is(context.word, tpl.render(context));
604
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));
608                 },
609                 function test_filter_truncatewords_html(t){
610                         var dd = dojox.dtl;
611
612                         var context = new dd.Context({
613                                 body: "Test a string <em>that ends <i>inside a</i> tag</em> with different args",
614                                 size: 2
615                         })
616                         var tpl = new dd.Template('{{ body|truncatewords_html:size }}');
617                         t.is("Test a ...", tpl.render(context));
618                         context.size = 4;
619                         t.is("Test a string <em>that ...</em>", tpl.render(context));
620                         context.size = 6;
621                         t.is("Test a string <em>that ends <i>inside ...</i></em>", tpl.render(context));
622                 },
623                 function test_filter_unordered_list(t){
624                         var dd = dojox.dtl;
625
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));
629                 },
630                 function test_filter_upper(t){
631                         var dd = dojox.dtl;
632
633                         var context = new dd.Context({ mixed: "MiXeD" });
634                         var tpl  = new dd.Template('{{ mixed|upper }}');
635                         t.is("MIXED", tpl.render(context));
636                 },
637                 function test_filter_urlencode(t){
638                         var dd = dojox.dtl;
639
640                         var tpl = new dd.Template('{{ "http://homepage.com/~user"|urlencode }}');
641                         t.is("http%3A//homepage.com/%7Euser", tpl.render());
642                 },
643                 function test_filter_urlize(t){
644                         var dd = dojox.dtl;
645
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"
648                         });
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));
651                 },
652                 function test_filter_urlizetrunc(t){
653                         var dd = dojox.dtl;
654
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"
657                         });
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));
664                 },
665                 function test_filter_wordcount(t){
666                         var dd = dojox.dtl;
667
668                         var context = new dd.Context({
669                                 food: "Hot Pocket"
670                         });
671                         var tpl = new dd.Template("{{ food|wordcount }}");
672                         t.is("2", tpl.render(context));
673                         context.food = "";
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));
677                 },
678                 function test_filter_wordwrap(t){
679                         var dd = dojox.dtl;
680
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"
683                         });
684                         var tpl = new dd.Template("{{ body|wordwrap }}");
685                         t.is(context.body, tpl.render(context));
686                         tpl = new dd.Template("{{ body|wordwrap:width }}");
687                         context.width = 10;
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));
691                 },
692                 function test_filter_yesno(t){
693                         var dd = dojox.dtl;
694
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));
716                 },
717                 function test_filter_contrib_key(t){
718                         var dd = dojox.dtl;
719
720                         var context = new dd.Context({
721                                 headers: ["action", "type"],
722                                 items: [
723                                         {
724                                                 action: "eat",
725                                                 type: "apple",
726                                         },
727                                         {
728                                                 action: "mash",
729                                                 type: "banana"
730                                         }
731                                 ]
732                         });
733
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));
736                 }
737         ]
738 );
739
740 }