Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Side by Side Diff: test/emitter_test.dart

Issue 11416259: fix #136, support watch exprs and two way bindings for component fields (Closed) Base URL: https://github.com/dart-lang/dart-web-components.git@master
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/data/input/todomvc_markdone_test.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 group('emit text node field', () { 169 group('emit text node field', () {
170 test('declaration', () { 170 test('declaration', () {
171 var elem = parseSubtree('<div>{{bar}}</div>'); 171 var elem = parseSubtree('<div>{{bar}}</div>');
172 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); 172 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]);
173 expect(_declarations(emitter), 'var __binding0;'); 173 expect(_declarations(emitter), 'var __binding0;');
174 }); 174 });
175 175
176 test('created', () { 176 test('created', () {
177 var elem = parseSubtree('<div>{{bar}}</div>'); 177 var elem = parseSubtree('<div>{{bar}}</div>');
178 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); 178 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]);
179 expect(_created(emitter), 179 expect(_created(emitter), "__binding0 = new autogenerated.Text('');");
180 '__binding0 = autogenerated.nodeForBinding(bar);');
181 }); 180 });
182 181
183 test('inserted', () { 182 test('inserted', () {
184 var elem = parseSubtree('<div>{{bar}}</div>'); 183 var elem = parseSubtree('<div>{{bar}}</div>');
185 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]); 184 var emitter = new ContentFieldEmitter(analyzeElement(elem).children[0]);
186 expect(_inserted(emitter), ''); 185 expect(_inserted(emitter), '');
187 }); 186 });
188 187
189 test('removed', () { 188 test('removed', () {
190 var elem = parseSubtree('<div>{{bar}}</div>'); 189 var elem = parseSubtree('<div>{{bar}}</div>');
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 var elem = parseSubtree('<div foo="{{bar}}"></div>'); 252 var elem = parseSubtree('<div foo="{{bar}}"></div>');
254 var emitter = new AttributeEmitter(analyzeElement(elem)); 253 var emitter = new AttributeEmitter(analyzeElement(elem));
255 expect(_created(emitter), equals('__stoppers1 = [];')); 254 expect(_created(emitter), equals('__stoppers1 = [];'));
256 }); 255 });
257 256
258 test('inserted', () { 257 test('inserted', () {
259 var elem = parseSubtree('<div foo="{{bar}}"></div>'); 258 var elem = parseSubtree('<div foo="{{bar}}"></div>');
260 var emitter = new AttributeEmitter(analyzeElement(elem)); 259 var emitter = new AttributeEmitter(analyzeElement(elem));
261 expect(_inserted(emitter), equalsIgnoringWhitespace( 260 expect(_inserted(emitter), equalsIgnoringWhitespace(
262 '__stoppers1.add(autogenerated.watchAndInvoke(() => ' 261 '__stoppers1.add(autogenerated.watchAndInvoke(() => '
263 'bar, (__e) { __e0.attributes["foo"] = __e.newValue; }));')); 262 "bar, (__e) { __e0.attributes['foo'] = __e.newValue; }));"));
264 }); 263 });
265 264
266 test('inserted for 1-way binding with dom accessor', () { 265 test('inserted for 1-way binding with dom accessor', () {
267 var elem = parseSubtree('<input value="{{bar}}">'); 266 var elem = parseSubtree('<input value="{{bar}}">');
268 var emitter = new AttributeEmitter(analyzeElement(elem)); 267 var emitter = new AttributeEmitter(analyzeElement(elem));
269 expect(_inserted(emitter), equalsIgnoringWhitespace( 268 expect(_inserted(emitter), equalsIgnoringWhitespace(
270 '__stoppers1.add(autogenerated.watchAndInvoke(() => bar, (__e) { ' 269 '__stoppers1.add(autogenerated.watchAndInvoke(() => bar, (__e) { '
271 '__e0.value = __e.newValue; }));')); 270 '__e0.value = __e.newValue; }));'));
272 }); 271 });
273 272
274 test('inserted for 2-way binding with dom accessor', () { 273 test('inserted for 2-way binding with dom accessor', () {
275 var elem = parseSubtree('<input data-bind="value:bar">'); 274 var elem = parseSubtree('<input data-bind="value:bar">');
276 var emitter = new AttributeEmitter(analyzeElement(elem)); 275 var emitter = new AttributeEmitter(analyzeElement(elem));
277 expect(_inserted(emitter), equalsIgnoringWhitespace( 276 expect(_inserted(emitter), equalsIgnoringWhitespace(
278 '__stoppers1.add(autogenerated.watchAndInvoke(() => bar, (__e) { ' 277 '__stoppers1.add(autogenerated.watchAndInvoke(() => bar, (__e) { '
279 '__e0.value = __e.newValue; }));')); 278 '__e0.value = __e.newValue; }));'));
280 }); 279 });
281 280
282 test('inserted for data attribute', () { 281 test('inserted for data attribute', () {
283 var elem = parseSubtree('<div data-foo="{{bar}}"></div>'); 282 var elem = parseSubtree('<div data-foo="{{bar}}"></div>');
284 var emitter = new AttributeEmitter(analyzeElement(elem)); 283 var emitter = new AttributeEmitter(analyzeElement(elem));
285 expect(_inserted(emitter), equalsIgnoringWhitespace( 284 expect(_inserted(emitter), equalsIgnoringWhitespace(
286 '__stoppers1.add(autogenerated.watchAndInvoke(() => bar, (__e) { ' 285 '__stoppers1.add(autogenerated.watchAndInvoke(() => bar, (__e) { '
287 '__e0.attributes["data-foo"] = __e.newValue; }));')); 286 "__e0.attributes['data-foo'] = __e.newValue; }));"));
288 }); 287 });
289 288
290 test('inserted for class', () { 289 test('inserted for class', () {
291 var elem = parseSubtree('<div class="{{bar}} {{foo}}" />'); 290 var elem = parseSubtree('<div class="{{bar}} {{foo}}" />');
292 var emitter = new AttributeEmitter(analyzeElement(elem)); 291 var emitter = new AttributeEmitter(analyzeElement(elem));
293 expect(_inserted(emitter), equalsIgnoringWhitespace(''' 292 expect(_inserted(emitter), equalsIgnoringWhitespace('''
294 __stoppers1.add(autogenerated.bindCssClasses(__e0, () => bar)); 293 __stoppers1.add(autogenerated.bindCssClasses(__e0, () => bar));
295 __stoppers1.add(autogenerated.bindCssClasses(__e0, () => foo)); 294 __stoppers1.add(autogenerated.bindCssClasses(__e0, () => foo));
296 ''')); 295 '''));
297 }); 296 });
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 var context = new Context(); 393 var context = new Context();
395 new RecursiveEmitter(null, context).visit(info); 394 new RecursiveEmitter(null, context).visit(info);
396 return context.createdMethod.toString().trim(); 395 return context.createdMethod.toString().trim();
397 } 396 }
398 397
399 _declarationsRecursive(ElementInfo info) { 398 _declarationsRecursive(ElementInfo info) {
400 var context = new Context(); 399 var context = new Context();
401 new RecursiveEmitter(null, context).visit(info); 400 new RecursiveEmitter(null, context).visit(info);
402 return context.declarations.toString().trim(); 401 return context.declarations.toString().trim();
403 } 402 }
OLDNEW
« no previous file with comments | « test/data/input/todomvc_markdone_test.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698