OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * These are not quite unit tests, since we build on top of the analyzer and the | 6 * These are not quite unit tests, since we build on top of the analyzer and the |
7 * html5parser to build the input for each test. | 7 * html5parser to build the input for each test. |
8 */ | 8 */ |
9 library emitter_test; | 9 library emitter_test; |
10 | 10 |
(...skipping 16 matching lines...) Expand all Loading... |
27 test('no data binding', () { | 27 test('no data binding', () { |
28 var elem = parseSubtree('<div></div>'); | 28 var elem = parseSubtree('<div></div>'); |
29 var code = _declarationsRecursive(analyzeElement(elem)); | 29 var code = _declarationsRecursive(analyzeElement(elem)); |
30 expect(code, equals('')); | 30 expect(code, equals('')); |
31 }); | 31 }); |
32 | 32 |
33 test('id only, no data binding', () { | 33 test('id only, no data binding', () { |
34 var elem = parseSubtree('<div id="one"></div>'); | 34 var elem = parseSubtree('<div id="one"></div>'); |
35 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 35 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
36 expect(_declarations(emitter), | 36 expect(_declarations(emitter), |
37 equals('autogenerated.DivElement __one;')); | 37 equals('autogenerated_html.DivElement __one;')); |
38 }); | 38 }); |
39 | 39 |
40 test('action with no id', () { | 40 test('action with no id', () { |
41 var elem = parseSubtree('<div data-action="foo:bar"></div>'); | 41 var elem = parseSubtree('<div data-action="foo:bar"></div>'); |
42 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 42 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
43 expect(_declarations(emitter), | 43 expect(_declarations(emitter), |
44 equals('autogenerated.DivElement __e0;')); | 44 equals('autogenerated_html.DivElement __e0;')); |
45 }); | 45 }); |
46 | 46 |
47 test('action with id', () { | 47 test('action with id', () { |
48 var elem = parseSubtree('<div id="my-id" data-action="foo:bar"></div>'); | 48 var elem = parseSubtree('<div id="my-id" data-action="foo:bar"></div>'); |
49 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 49 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
50 expect(_declarations(emitter), | 50 expect(_declarations(emitter), |
51 equals('autogenerated.DivElement __myId;')); | 51 equals('autogenerated_html.DivElement __myId;')); |
52 }); | 52 }); |
53 | 53 |
54 test('1 way binding with no id', () { | 54 test('1 way binding with no id', () { |
55 var elem = parseSubtree('<div class="{{bar}}"></div>'); | 55 var elem = parseSubtree('<div class="{{bar}}"></div>'); |
56 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 56 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
57 expect(_declarations(emitter), | 57 expect(_declarations(emitter), |
58 equals('autogenerated.DivElement __e0;')); | 58 equals('autogenerated_html.DivElement __e0;')); |
59 }); | 59 }); |
60 | 60 |
61 test('1 way binding with id', () { | 61 test('1 way binding with id', () { |
62 var elem = parseSubtree('<div id="my-id" class="{{bar}}"></div>'); | 62 var elem = parseSubtree('<div id="my-id" class="{{bar}}"></div>'); |
63 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 63 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
64 expect(_declarations(emitter), | 64 expect(_declarations(emitter), |
65 equals('autogenerated.DivElement __myId;')); | 65 equals('autogenerated_html.DivElement __myId;')); |
66 }); | 66 }); |
67 | 67 |
68 test('2 way binding with no id', () { | 68 test('2 way binding with no id', () { |
69 var elem = parseSubtree('<input data-bind="value:bar"></input>'); | 69 var elem = parseSubtree('<input data-bind="value:bar"></input>'); |
70 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 70 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
71 expect(_declarations(emitter), | 71 expect(_declarations(emitter), |
72 equals('autogenerated.InputElement __e0;')); | 72 equals('autogenerated_html.InputElement __e0;')); |
73 }); | 73 }); |
74 | 74 |
75 test('2 way binding with id', () { | 75 test('2 way binding with id', () { |
76 var elem = parseSubtree( | 76 var elem = parseSubtree( |
77 '<input id="my-id" data-bind="value:bar"></input>'); | 77 '<input id="my-id" data-bind="value:bar"></input>'); |
78 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 78 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
79 expect(_declarations(emitter), | 79 expect(_declarations(emitter), |
80 equals('autogenerated.InputElement __myId;')); | 80 equals('autogenerated_html.InputElement __myId;')); |
81 }); | 81 }); |
82 | 82 |
83 test('1 way binding in content with no id', () { | 83 test('1 way binding in content with no id', () { |
84 var elem = parseSubtree('<div>{{bar}}</div>'); | 84 var elem = parseSubtree('<div>{{bar}}</div>'); |
85 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 85 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
86 expect(_declarations(emitter), 'autogenerated.DivElement __e1;'); | 86 expect(_declarations(emitter), 'autogenerated_html.DivElement __e1;'); |
87 }); | 87 }); |
88 | 88 |
89 test('1 way binding in content with id', () { | 89 test('1 way binding in content with id', () { |
90 var elem = parseSubtree('<div id="my-id">{{bar}}</div>'); | 90 var elem = parseSubtree('<div id="my-id">{{bar}}</div>'); |
91 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 91 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
92 expect(_declarations(emitter), 'autogenerated.DivElement __myId;'); | 92 expect(_declarations(emitter), 'autogenerated_html.DivElement __myId;'); |
93 }); | 93 }); |
94 }); | 94 }); |
95 | 95 |
96 group('created', () { | 96 group('created', () { |
97 test('no data binding', () { | 97 test('no data binding', () { |
98 var elem = parseSubtree('<div></div>'); | 98 var elem = parseSubtree('<div></div>'); |
99 var code = _createdRecursive(analyzeElement(elem)); | 99 var code = _createdRecursive(analyzeElement(elem)); |
100 expect(code, equals('')); | 100 expect(code, equals('')); |
101 }); | 101 }); |
102 | 102 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 var elem = parseSubtree( | 140 var elem = parseSubtree( |
141 '<input id="my-id" data-bind="value:bar"></input>'); | 141 '<input id="my-id" data-bind="value:bar"></input>'); |
142 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 142 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
143 expect(_created(emitter), equals("__myId = _root.query('#my-id');")); | 143 expect(_created(emitter), equals("__myId = _root.query('#my-id');")); |
144 }); | 144 }); |
145 | 145 |
146 test('sibling of a data-bound text node, with id and children', () { | 146 test('sibling of a data-bound text node, with id and children', () { |
147 var elem = parseSubtree('<div id="a1">{{x}}<div id="a2">a</div></div>'); | 147 var elem = parseSubtree('<div id="a1">{{x}}<div id="a2">a</div></div>'); |
148 var emitter = new ElementFieldEmitter(analyzeElement(elem).children[1]); | 148 var emitter = new ElementFieldEmitter(analyzeElement(elem).children[1]); |
149 expect(_created(emitter), | 149 expect(_created(emitter), |
150 "__a2 = new autogenerated.Element.html('<div id=\"a2\">a</div>');"); | 150 "__a2 = new autogenerated_html.Element.html(" |
| 151 "'<div id=\"a2\">a</div>');"); |
151 }); | 152 }); |
152 }); | 153 }); |
153 | 154 |
154 group('type', () { | 155 group('type', () { |
155 htmlElementNames.forEach((tag, className) { | 156 htmlElementNames.forEach((tag, className) { |
156 // Skip script and body tags, we don't create fields for them. | 157 // Skip script and body tags, we don't create fields for them. |
157 if (tag == 'script' || tag == 'body') return; | 158 if (tag == 'script' || tag == 'body') return; |
158 | 159 |
159 test('$tag -> $className', () { | 160 test('$tag -> $className', () { |
160 var elem = new Element(tag)..attributes['class'] = "{{bar}}"; | 161 var elem = new Element(tag)..attributes['class'] = "{{bar}}"; |
161 var emitter = new ElementFieldEmitter(analyzeElement(elem)); | 162 var emitter = new ElementFieldEmitter(analyzeElement(elem)); |
162 expect(_declarations(emitter), | 163 expect(_declarations(emitter), |
163 equals('autogenerated.$className __e0;')); | 164 equals('autogenerated_$className __e0;')); |
164 }); | 165 }); |
165 }); | 166 }); |
166 }); | 167 }); |
167 }); | 168 }); |
168 | 169 |
169 group('emit text node field', () { | 170 group('emit text node field', () { |
170 test('declaration', () { | 171 test('declaration', () { |
171 var elem = parseSubtree('<div>{{bar}}</div>'); | 172 var elem = parseSubtree('<div>{{bar}}</div>'); |
172 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); | 173 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); |
173 expect(_declarations(emitter), 'var __binding0;'); | 174 expect(_declarations(emitter), 'var __binding0;'); |
174 }); | 175 }); |
175 | 176 |
176 test('created', () { | 177 test('created', () { |
177 var elem = parseSubtree('<div>{{bar}}</div>'); | 178 var elem = parseSubtree('<div>{{bar}}</div>'); |
178 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); | 179 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); |
179 expect(_created(emitter), "__binding0 = new autogenerated.Text('');"); | 180 expect(_created(emitter), |
| 181 "__binding0 = new autogenerated_html.Text('');"); |
180 }); | 182 }); |
181 | 183 |
182 test('inserted', () { | 184 test('inserted', () { |
183 var elem = parseSubtree('<div>{{bar}}</div>'); | 185 var elem = parseSubtree('<div>{{bar}}</div>'); |
184 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); | 186 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); |
185 expect(_inserted(emitter), ''); | 187 expect(_inserted(emitter), ''); |
186 }); | 188 }); |
187 | 189 |
188 test('removed', () { | 190 test('removed', () { |
189 var elem = parseSubtree('<div>{{bar}}</div>'); | 191 var elem = parseSubtree('<div>{{bar}}</div>'); |
190 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); | 192 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); |
191 expect(_removed(emitter), '__binding0 = null;'); | 193 expect(_removed(emitter), '__binding0 = null;'); |
192 }); | 194 }); |
193 }); | 195 }); |
194 | 196 |
195 group('emit event listeners', () { | 197 group('emit event listeners', () { |
196 test('declaration for action', () { | 198 test('declaration for action', () { |
197 var elem = parseSubtree('<div data-action="foo:bar"></div>'); | 199 var elem = parseSubtree('<div data-action="foo:bar"></div>'); |
198 var emitter = new EventListenerEmitter(analyzeElement(elem)); | 200 var emitter = new EventListenerEmitter(analyzeElement(elem)); |
199 expect(_declarations(emitter), equals( | 201 expect(_declarations(emitter), equals( |
200 'autogenerated.EventListener __listener__e0_foo_1;')); | 202 'autogenerated_html.EventListener __listener__e0_foo_1;')); |
201 }); | 203 }); |
202 | 204 |
203 test('declaration for input value data-bind', () { | 205 test('declaration for input value data-bind', () { |
204 var elem = parseSubtree('<input data-bind="value:bar"></input>'); | 206 var elem = parseSubtree('<input data-bind="value:bar"></input>'); |
205 var emitter = new EventListenerEmitter(analyzeElement(elem)); | 207 var emitter = new EventListenerEmitter(analyzeElement(elem)); |
206 expect(_declarations(emitter), | 208 expect(_declarations(emitter), |
207 equals('autogenerated.EventListener __listener__e0_input_1;')); | 209 equals('autogenerated_html.EventListener __listener__e0_input_1;')); |
208 }); | 210 }); |
209 | 211 |
210 test('created', () { | 212 test('created', () { |
211 var elem = parseSubtree('<div data-action="foo:bar"></div>'); | 213 var elem = parseSubtree('<div data-action="foo:bar"></div>'); |
212 var emitter = new EventListenerEmitter(analyzeElement(elem)); | 214 var emitter = new EventListenerEmitter(analyzeElement(elem)); |
213 expect(_created(emitter), equals('')); | 215 expect(_created(emitter), equals('')); |
214 }); | 216 }); |
215 | 217 |
216 test('inserted', () { | 218 test('inserted', () { |
217 var elem = parseSubtree('<div data-action="foo:bar"></div>'); | 219 var elem = parseSubtree('<div data-action="foo:bar"></div>'); |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 var context = new Context(); | 395 var context = new Context(); |
394 new RecursiveEmitter(null, context).visit(info); | 396 new RecursiveEmitter(null, context).visit(info); |
395 return context.createdMethod.toString().trim(); | 397 return context.createdMethod.toString().trim(); |
396 } | 398 } |
397 | 399 |
398 _declarationsRecursive(ElementInfo info) { | 400 _declarationsRecursive(ElementInfo info) { |
399 var context = new Context(); | 401 var context = new Context(); |
400 new RecursiveEmitter(null, context).visit(info); | 402 new RecursiveEmitter(null, context).visit(info); |
401 return context.declarations.toString().trim(); | 403 return context.declarations.toString().trim(); |
402 } | 404 } |
OLD | NEW |