]> git.pond.sub.org Git - eow/blob - static/dojo-release-1.1.1/dojox/dtl/tests/html/tag.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / dtl / tests / html / tag.js
1 if(!dojo._hasResource["dojox.dtl.tests.html.tag"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2 dojo._hasResource["dojox.dtl.tests.html.tag"] = true;
3 dojo.provide("dojox.dtl.tests.html.tag");
4
5 dojo.require("dojox.dtl.html");
6 dojo.require("dojox.dtl.Context");
7 dojo.require("dojox.dtl.tests.html.util");
8
9 doh.register("dojox.dtl.html.tag", 
10         [
11                 function test_errors(t){
12                         var dd = dojox.dtl;
13                         var template;
14
15                         // No root node after rendering
16                         var found = false;
17                         try {
18                                 template = new dd.HtmlTemplate('No div');
19                                 dd.tests.html.util.render(template);
20                         }catch(e){
21                                 t.is("Text should not exist outside of the root node in template", e.message);
22                                 found = true;
23                         }
24                         t.t(found);
25
26                         var context = new dojox.dtl.Context({test: "Pocket"});
27                         found = false;
28                         try {
29                                 template = new dd.HtmlTemplate('{{ test }}');
30                                 dd.tests.html.util.render(template, context);
31                         }catch(e){
32                                 t.is("Text should not exist outside of the root node in template", e.message);
33                                 found = true;
34                         }
35                         t.t(found);
36
37                         template = new dd.HtmlTemplate('<div></div>extra content');
38                         found = false;
39                         try {
40                                 dd.tests.html.util.render(template);
41                         }catch(e){
42                                 t.is("Content should not exist outside of the root node in template", e.message);
43                                 found = true;
44                         }
45                         t.t(found);
46
47                         // More than one top-level node (except for blocks)
48                         template = new dd.HtmlTemplate('<div></div><div></div>');
49                         found = false;
50                         try {
51                                 dd.tests.html.util.render(template);
52                         }catch(e){
53                                 t.is("Content should not exist outside of the root node in template", e.message);
54                                 found = true;
55                         }
56                         t.t(found);
57
58                         // Logic block rules out any root node
59                         template = new dd.HtmlTemplate('{% if missing %}<div></div>{% endif %}');
60                         found = false;
61                         try {
62                                 dd.tests.html.util.render(template);
63                         }catch(e){
64                                 t.is("Rendered template does not have a root node", e.message);
65                                 found = true;
66                         }
67                         t.t(found);
68                 },
69                 function test_structures(t){
70                         var dd = dojox.dtl;
71
72                         var context = new dd.Context({
73                                 actions: ["ate", "picked"],
74                                 items: [
75                                         {
76                                                 name: "apple"
77                                         },
78                                         {
79                                                 name: "banana",
80                                                 date: new Date(2007, 2, 16, 14, 30, 10)
81                                         },
82                                         {
83                                                 name: "orange",
84                                                 date: new Date(2008, 0, 1, 12, 0, 0)
85                                         }
86                                 ]
87                         });
88
89                         var template = new dd.HtmlTemplate('<div><ul>I {% for action in actions %}{% if not forloop.first %}, {% endif %}{{action}}{% endfor %} the following:<ul>{% for item in items %}<li>{{ item.name }}{% if item.date %} at {{ item.date|date:"P" }}{% endif %}</li>{% endfor %}</ul></ul></div>');
90                         t.is('<div><ul>I ate, picked the following:<ul><li>apple</li><li>banana at 2:30 pm</li><li>orange at noon</li></ul></ul></div>', dd.tests.html.util.render(template, context));
91                 },
92                 function test_tag_extend(t){
93                         // Problems to look for:
94                         //      * Content outside of blocks
95                 },
96                 function test_tag_for(t){
97                         var dd = dojox.dtl;
98
99                         var context = new dd.Context({
100                                 items: ["apple", "banana", "lemon"]
101                         });
102                         var template = new dd.HtmlTemplate('<div><ul>{% for item in items %}<li class="{{ item|length }}">{{ item }}</li>{% endfor %}</ul></div>');
103
104                         t.is('<div><ul><li class="5">apple</li><li class="6">banana</li><li class="5">lemon</li></ul></div>', dd.tests.html.util.render(template, context));
105
106                         // The line break is there to make sure our regex works
107                         template = new dd.HtmlTemplate('<div><select>{% for item in items %}<option>{{ item }}</option>\n{% endfor %}</select></div>');
108
109                         t.is('<div><select><option>apple</option><option>banana</option><option>lemon</option></select></div>', dd.tests.html.util.render(template, context));
110                 },
111                 function test_tag_if(t){
112                         var dd = dojox.dtl;
113
114                         var context = new dd.Context({key: true});
115                         var template = new dd.HtmlTemplate('{% if key %}<div>has key</div>{% else %}<div>no key</div>{% endif %}');
116                         t.is("<div>has key</div>", dd.tests.html.util.render(template, context));
117                         context.key = false;
118                         t.is("<div>no key</div>", dd.tests.html.util.render(template, context));
119                 },
120                 function test_tag_ifchanged(t){
121                         var dd = dojox.dtl;
122
123                         var context = new dd.Context({
124                                 year: 2008,
125                                 days: [
126                                         new Date(2008, 0, 12),
127                                         new Date(2008, 0, 28),
128                                         new Date(2008, 1, 1),
129                                         new Date(2008, 1, 1),
130                                         new Date(2008, 1, 1)
131                                 ]
132                         });
133
134                         var template = new dd.HtmlTemplate("<div><h1>Archive for {{ year }}</h1>"+
135 "{% for date in days %}"+
136 '{% ifchanged %}<h3>Month: </h3><h3>{{ date|date:"F" }}</h3>{% endifchanged %}'+
137 '<a href="{{ date|date:\'M/d\'|lower }}/">{{ date|date:\'j\' }}</a>'+
138 "{% endfor %}</div>");
139
140                         t.is('<div><h1>Archive for 2008</h1>'+
141 '<h3>Month: </h3><h3>January</h3>'+
142 '<a href="jan/12/">12</a>'+
143 '<a href="jan/28/">28</a>'+
144 '<h3>Month: </h3><h3>February</h3>'+
145 '<a href="feb/01/">1</a>'+
146 '<a href="feb/01/">1</a>'+
147 '<a href="feb/01/">1</a></div>', dd.tests.html.util.render(template, context));
148
149                         template = new dd.HtmlTemplate('<div>{% for date in days %}'+
150 '{% ifchanged date.date %} {{ date.date }} {% endifchanged %}'+
151 '{% ifchanged date.hour date.date %}'+
152 '{{ date.hour }}'+
153 '{% endifchanged %}'+
154 '{% endfor %}</div>');
155                         t.is('<div> 2008-01-12 0 2008-01-28 0 2008-02-01 0</div>', dd.tests.html.util.render(template, context));
156                 },
157                 function test_tag_ifequal(t){
158                         var dd = dojox.dtl;
159
160                         var context = new dd.Context({
161                                 items: [
162                                         { name: "apple", color: "red" },
163                                         { name: "banana", color: "yellow" },
164                                         { name: "pear", color: "green" },
165                                         { name: "kiwi", color: "brown" }
166                                 ],
167                                 edit_item: "banana"
168                         });
169
170                         var template = new dd.HtmlTemplate("<div><ul>{% for item in items %}<li>{{ item.name }}</li>{% endfor %}</ul></div>");
171                         t.is('<div><ul><li>apple</li><li>banana</li><li>pear</li><li>kiwi</li></ul></div>', dd.tests.html.util.render(template, context));
172
173                         template = new dd.HtmlTemplate("<div><ul>{% for item in items %}<li><span>{{ item.name }}</span><br/><p>{{ item.color }}</p></li>{% endfor %}</ul></div>");
174                         t.is('<div><ul><li><span>apple</span><br/><p>red</p></li><li><span>banana</span><br/><p>yellow</p></li><li><span>pear</span><br/><p>green</p></li><li><span>kiwi</span><br/><p>brown</p></li></ul></div>', dd.tests.html.util.render(template, context));
175
176                         template = new dd.HtmlTemplate("<div><ul>{% for item in items %}<li>{% ifequal item.name edit_item %}<label>Name: <input type='text' name='name' value=\"{{ item.name }}\"/></label><br/><label>Color: <textarea name='color'>{{ item.color }}</textarea></label>{% else %}<span>{{ item.name }}</span><br/><p>{{ item.color }}</p>{% endifequal %}</li>{% endfor %}</ul></div>");
177                         t.is('<div><ul><li><span>apple</span><br/><p>red</p></li><li><label>Name: <input type="text" name="name" value="banana"/></label><br/><label>Color: <textarea name="color">yellow</textarea></label></li><li><span>pear</span><br/><p>green</p></li><li><span>kiwi</span><br/><p>brown</p></li></ul></div>', dd.tests.html.util.render(template, context));
178
179                         template = new dd.HtmlTemplate("<div><ul>{% for item in items %}<li>{% ifequal item.name edit_item %}<div><label>Name: <input type='text' name='name' value=\"{{ item.name }}\"/></label><br/><label>Color: <textarea name='color'>{{ item.color }}</textarea></label></div>{% else %}<div><span>{{ item.name }}</span><br/><p>{{ item.color }}</p></div>{% endifequal %}</li>{% endfor %}</ul></div>");
180                         t.is('<div><ul><li><div><span>apple</span><br/><p>red</p></div></li><li><div><label>Name: <input type="text" name="name" value="banana"/></label><br/><label>Color: <textarea name="color">yellow</textarea></label></div></li><li><div><span>pear</span><br/><p>green</p></div></li><li><div><span>kiwi</span><br/><p>brown</p></div></li></ul></div>', dd.tests.html.util.render(template, context));
181
182                         template = new dd.HtmlTemplate("<div><ul>{% for item in items %}{% ifequal item.name edit_item %}<li><label>Name: <input type='text' name='name' value=\"{{ item.name }}\"/></label><br/><label>Color: <textarea name='color'>{{ item.color }}</textarea></label></li>{% else %}<li><span>{{ item.name }}</span><br/><p>{{ item.color }}</p></li>{% endifequal %}{% endfor %}</ul></div>");
183                         t.is('<div><ul><li><span>apple</span><br/><p>red</p></li><li><label>Name: <input type="text" name="name" value="banana"/></label><br/><label>Color: <textarea name="color">yellow</textarea></label></li><li><span>pear</span><br/><p>green</p></li><li><span>kiwi</span><br/><p>brown</p></li></ul></div>', dd.tests.html.util.render(template, context));
184                 },
185                 function test_tag_include(t){
186                         var dd = dojox.dtl;
187
188                         var context = new dd.Context({
189                                 hello: dojo.moduleUrl("dojox.dtl.tests.templates", "hello.html"),
190                                 person: "Bob",
191                                 people: ["Charles", "Ralph", "Julia"]
192                         });
193
194                         var template = new dd.HtmlTemplate("<div>{% include hello %}</div>");
195                         t.is("<div>Hello, <span>Bob</span></div>", dd.tests.html.util.render(template, context));
196
197                         template = new dd.HtmlTemplate('<div>{% include "../../dojox/dtl/tests/templates/hello.html" %}</div>');
198                         t.is("<div>Hello, <span>Bob</span></div>", dd.tests.html.util.render(template, context));
199
200                         template = new dd.HtmlTemplate('<div>{% for person in people %}<div class="include">{% include hello %} </div>{% endfor %}</div>');
201                         t.is('<div><div class="include">Hello, <span>Charles</span> </div><div class="include">Hello, <span>Ralph</span> </div><div class="include">Hello, <span>Julia</span> </div></div>', dd.tests.html.util.render(template, context));
202                 },
203                 function test_tag_spaceless(t){
204                         var dd = dojox.dtl;
205
206                         var template = new dd.HtmlTemplate("{% spaceless %}<ul> \n <li>Hot</li> \n\n<li>Pocket </li>\n </ul>{% endspaceless %}");
207                         t.is("<ul><li>Hot</li><li>Pocket </li></ul>", dd.tests.html.util.render(template));
208                 },
209                 function test_tag_ssi(t){
210                         var dd = dojox.dtl;
211
212                         var context = new dd.Context({
213                                 hello: dojo.moduleUrl("dojox.dtl.tests.templates", "hello.html"),
214                                 person: "Bob",
215                                 people: ["Charles", "Ralph", "Julia"]
216                         });
217
218                         var template = new dd.HtmlTemplate("<div>{% ssi hello parsed %}</div>");
219                         t.is("<div>Hello, <span>Bob</span></div>", dd.tests.html.util.render(template, context));
220
221                         template = new dd.HtmlTemplate("<div>{% ssi hello %}</div>");
222                         t.is("<div>Hello, <span>{{ person }}</span></div>", dd.tests.html.util.render(template, context));
223
224                         template = new dd.HtmlTemplate('<div>{% ssi "../../dojox/dtl/tests/templates/hello.html" parsed %}</div>');
225                         t.is("<div>Hello, <span>Bob</span></div>", dd.tests.html.util.render(template, context));
226
227                         template = new dd.HtmlTemplate('<div>{% for person in people %}{% ssi hello parsed %} {% endfor %}</div>');
228                         t.is("<div>Hello, <span>Charles</span> Hello, <span>Ralph</span> Hello, <span>Julia</span> </div>", dd.tests.html.util.render(template, context));
229                 }
230         ]
231 );
232
233 }