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

Side by Side Diff: pkg/template_binding/test/template_element_test.dart

Issue 34453003: Rename mdv -> template_binding, remove experiemntal apis from dart:html (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library template_element_test; 5 library template_binding.test.template_element_test;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 import 'dart:html'; 9 import 'dart:html';
10 import 'dart:math' as math; 10 import 'dart:math' as math;
11 import 'package:mdv/mdv.dart' as mdv;
12 import 'package:observe/observe.dart'; 11 import 'package:observe/observe.dart';
12 import 'package:template_binding/template_binding.dart';
13 import 'package:unittest/html_config.dart'; 13 import 'package:unittest/html_config.dart';
14 import 'package:unittest/unittest.dart'; 14 import 'package:unittest/unittest.dart';
15 import 'mdv_test_utils.dart'; 15 import 'utils.dart';
16 16
17 // Note: this file ported from 17 // Note: this file ported from
18 // https://github.com/toolkitchen/mdv/blob/master/tests/template_element.js 18 // https://github.com/toolkitchen/mdv/blob/master/tests/template_element.js
19 // TODO(jmesserly): submit a small cleanup patch to original. I fixed some 19 // TODO(jmesserly): submit a small cleanup patch to original. I fixed some
20 // cases where "div" and "t" were unintentionally using the JS global scope; 20 // cases where "div" and "t" were unintentionally using the JS global scope;
21 // look for "assertNodesAre". 21 // look for "assertNodesAre".
22 22
23 main() { 23 main() {
24 mdv.initialize();
25 useHtmlConfiguration(); 24 useHtmlConfiguration();
26 group('Template Element', templateElementTests); 25 group('Template Element', templateElementTests);
27 } 26 }
28 27
29 templateElementTests() { 28 templateElementTests() {
30 var testDiv;
31
32 setUp(() { 29 setUp(() {
33 document.body.append(testDiv = new DivElement()); 30 document.body.append(testDiv = new DivElement());
34 }); 31 });
35 32
36 tearDown(() { 33 tearDown(() {
37 testDiv.remove(); 34 testDiv.remove();
38 testDiv = null; 35 testDiv = null;
39 }); 36 });
40 37
41 createTestHtml(s) {
42 var div = new DivElement();
43 div.setInnerHtml(s, treeSanitizer: new NullTreeSanitizer());
44 testDiv.append(div);
45
46 for (var node in div.queryAll('*')) {
47 if (node.isTemplate) TemplateElement.decorate(node);
48 }
49
50 return div;
51 }
52
53 createShadowTestHtml(s) {
54 var div = new DivElement();
55 var root = div.createShadowRoot();
56 root.innerHtml = s;
57 testDiv.append(div);
58
59 for (var node in root.queryAll('*')) {
60 if (node.isTemplate) TemplateElement.decorate(node);
61 }
62
63 return root;
64 }
65
66 var expando = new Expando('observeTest'); 38 var expando = new Expando('observeTest');
67 void addExpandos(node) { 39 void addExpandos(node) {
68 while (node != null) { 40 while (node != null) {
69 expando[node] = node.text; 41 expando[node] = node.text;
70 node = node.nextNode; 42 node = node.nextNode;
71 } 43 }
72 } 44 }
73 45
74 void checkExpandos(node) { 46 void checkExpandos(node) {
75 expect(node, isNotNull); 47 expect(node, isNotNull);
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 548
577 expect(div.children.length, 4); 549 expect(div.children.length, 4);
578 expect(div.nodes.length, 4); 550 expect(div.nodes.length, 4);
579 551
580 expect(div.nodes[1].tagName, 'P'); 552 expect(div.nodes[1].tagName, 'P');
581 expect(div.nodes[3].tagName, 'P'); 553 expect(div.nodes[3].tagName, 'P');
582 }); 554 });
583 555
584 observeTest('DefaultStyles', () { 556 observeTest('DefaultStyles', () {
585 var t = new Element.tag('template'); 557 var t = new Element.tag('template');
586 TemplateElement.decorate(t); 558 TemplateBindExtension.decorate(t);
587 559
588 document.body.append(t); 560 document.body.append(t);
589 expect(t.getComputedStyle().display, 'none'); 561 expect(t.getComputedStyle().display, 'none');
590 562
591 t.remove(); 563 t.remove();
592 }); 564 });
593 565
594 566
595 observeTest('Bind', () { 567 observeTest('Bind', () {
596 var div = createTestHtml('<template bind="{{}}">Hi {{ name }}</template>'); 568 var div = createTestHtml('<template bind="{{}}">Hi {{ name }}</template>');
597 var model = toObservable({'name': 'Leela'}); 569 var model = toObservable({'name': 'Leela'});
598 recursivelySetTemplateModel(div, model); 570 recursivelySetTemplateModel(div, model);
599 571
600 deliverChanges(model); 572 deliverChanges(model);
601 expect(div.nodes[1].text, 'Hi Leela'); 573 expect(div.nodes[1].text, 'Hi Leela');
602 }); 574 });
603 575
604 observeTest('BindImperative', () { 576 observeTest('BindImperative', () {
605 var div = createTestHtml( 577 var div = createTestHtml(
606 '<template>' 578 '<template>'
607 'Hi {{ name }}' 579 'Hi {{ name }}'
608 '</template>'); 580 '</template>');
609 var t = div.nodes.first; 581 var t = div.nodes.first;
610 582
611 var model = toObservable({'name': 'Leela'}); 583 var model = toObservable({'name': 'Leela'});
612 t.bind('bind', model, ''); 584 nodeBind(t).bind('bind', model, '');
613 585
614 deliverChanges(model); 586 deliverChanges(model);
615 expect(div.nodes[1].text, 'Hi Leela'); 587 expect(div.nodes[1].text, 'Hi Leela');
616 }); 588 });
617 589
618 observeTest('BindPlaceHolderHasNewLine', () { 590 observeTest('BindPlaceHolderHasNewLine', () {
619 var div = createTestHtml('<template bind="{{}}">Hi {{\nname\n}}</template>') ; 591 var div = createTestHtml('<template bind="{{}}">Hi {{\nname\n}}</template>') ;
Siggi Cherem (dart-lang) 2013/10/23 01:41:11 while you are here, consider wrapping at 80
Jennifer Messerly 2013/10/23 02:05:02 Done.
620 var model = toObservable({'name': 'Leela'}); 592 var model = toObservable({'name': 'Leela'});
621 recursivelySetTemplateModel(div, model); 593 recursivelySetTemplateModel(div, model);
622 594
623 deliverChanges(model); 595 deliverChanges(model);
624 expect(div.nodes[1].text, 'Hi Leela'); 596 expect(div.nodes[1].text, 'Hi Leela');
625 }); 597 });
626 598
627 observeTest('BindWithRef', () { 599 observeTest('BindWithRef', () {
628 var id = 't${new math.Random().nextDouble()}'; 600 var id = 't${new math.Random().nextDouble()}';
629 var div = createTestHtml( 601 var div = createTestHtml(
630 '<template id="$id">' 602 '<template id="$id">'
631 'Hi {{ name }}' 603 'Hi {{ name }}'
632 '</template>' 604 '</template>'
633 '<template ref="$id" bind="{{}}"></template>'); 605 '<template ref="$id" bind="{{}}"></template>');
634 606
635 var t1 = div.nodes.first; 607 var t1 = div.nodes.first;
636 var t2 = div.nodes[1]; 608 var t2 = div.nodes[1];
637 609
638 expect(t2.ref, t1); 610 expect(templateBind(t2).ref, t1);
639 611
640 var model = toObservable({'name': 'Fry'}); 612 var model = toObservable({'name': 'Fry'});
641 recursivelySetTemplateModel(div, model); 613 recursivelySetTemplateModel(div, model);
642 614
643 deliverChanges(model); 615 deliverChanges(model);
644 expect(t2.nextNode.text, 'Hi Fry'); 616 expect(t2.nextNode.text, 'Hi Fry');
645 }); 617 });
646 618
647 observeTest('BindChanged', () { 619 observeTest('BindChanged', () {
648 var model = toObservable({ 620 var model = toObservable({
649 'XX': {'name': 'Leela', 'title': 'Captain'}, 621 'XX': {'name': 'Leela', 'title': 'Captain'},
650 'XY': {'name': 'Fry', 'title': 'Delivery boy'}, 622 'XY': {'name': 'Fry', 'title': 'Delivery boy'},
651 'XZ': {'name': 'Zoidberg', 'title': 'Doctor'} 623 'XZ': {'name': 'Zoidberg', 'title': 'Doctor'}
652 }); 624 });
653 625
654 var div = createTestHtml( 626 var div = createTestHtml(
655 '<template bind="{{ XX }}">Hi {{ name }}</template>'); 627 '<template bind="{{ XX }}">Hi {{ name }}</template>');
656 628
657 recursivelySetTemplateModel(div, model); 629 recursivelySetTemplateModel(div, model);
658 630
659 var t = div.nodes.first; 631 var t = div.nodes.first;
660 deliverChanges(model); 632 deliverChanges(model);
661 633
662 expect(div.nodes.length, 2); 634 expect(div.nodes.length, 2);
663 expect(t.nextNode.text, 'Hi Leela'); 635 expect(t.nextNode.text, 'Hi Leela');
664 636
665 t.bind('bind', model, 'XZ'); 637 nodeBind(t).bind('bind', model, 'XZ');
666 deliverChanges(model); 638 deliverChanges(model);
667 639
668 expect(div.nodes.length, 2); 640 expect(div.nodes.length, 2);
669 expect(t.nextNode.text, 'Hi Zoidberg'); 641 expect(t.nextNode.text, 'Hi Zoidberg');
670 }); 642 });
671 643
672 assertNodesAre(div, [arguments]) { 644 assertNodesAre(div, [arguments]) {
673 var expectedLength = arguments.length; 645 var expectedLength = arguments.length;
674 expect(div.nodes.length, expectedLength + 1); 646 expect(div.nodes.length, expectedLength + 1);
675 647
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 825
854 observeTest('Checked', () { 826 observeTest('Checked', () {
855 var div = createTestHtml( 827 var div = createTestHtml(
856 '<template>' 828 '<template>'
857 '<input type="checkbox" checked="{{a}}">' 829 '<input type="checkbox" checked="{{a}}">'
858 '</template>'); 830 '</template>');
859 var t = div.nodes.first; 831 var t = div.nodes.first;
860 var m = toObservable({ 832 var m = toObservable({
861 'a': true 833 'a': true
862 }); 834 });
863 t.bind('bind', m, ''); 835 nodeBind(t).bind('bind', m, '');
864 deliverChanges(m); 836 deliverChanges(m);
865 837
866 var instanceInput = t.nextNode; 838 var instanceInput = t.nextNode;
867 expect(instanceInput.checked, true); 839 expect(instanceInput.checked, true);
868 840
869 instanceInput.click(); 841 instanceInput.click();
870 expect(instanceInput.checked, false); 842 expect(instanceInput.checked, false);
871 843
872 instanceInput.click(); 844 instanceInput.click();
873 expect(instanceInput.checked, true); 845 expect(instanceInput.checked, true);
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
1117 var select = div.nodes[0].nextNode; 1089 var select = div.nodes[0].nextNode;
1118 expect(select.nodes.length, 2); 1090 expect(select.nodes.length, 2);
1119 1091
1120 scheduleMicrotask(expectAsync0(() { 1092 scheduleMicrotask(expectAsync0(() {
1121 scheduleMicrotask(expectAsync0(() { 1093 scheduleMicrotask(expectAsync0(() {
1122 // TODO(jmesserly): this should be called sooner. 1094 // TODO(jmesserly): this should be called sooner.
1123 expect(select.selectedIndex, 1); 1095 expect(select.selectedIndex, 1);
1124 })); 1096 }));
1125 })); 1097 }));
1126 expect(select.nodes[0].tagName, 'TEMPLATE'); 1098 expect(select.nodes[0].tagName, 'TEMPLATE');
1127 expect(select.nodes[0].ref.content.nodes[0].tagName, 'OPTGROUP'); 1099 expect(templateBind(select.nodes[0]).ref.content.nodes[0].tagName,
1100 'OPTGROUP');
1128 1101
1129 var optgroup = select.nodes[1]; 1102 var optgroup = select.nodes[1];
1130 expect(optgroup.nodes[0].tagName, 'TEMPLATE'); 1103 expect(optgroup.nodes[0].tagName, 'TEMPLATE');
1131 expect(optgroup.nodes[1].tagName, 'OPTION'); 1104 expect(optgroup.nodes[1].tagName, 'OPTION');
1132 expect(optgroup.nodes[1].text, '0'); 1105 expect(optgroup.nodes[1].text, '0');
1133 expect(optgroup.nodes[2].tagName, 'OPTION'); 1106 expect(optgroup.nodes[2].tagName, 'OPTION');
1134 expect(optgroup.nodes[2].text, '1'); 1107 expect(optgroup.nodes[2].text, '1');
1135 }); 1108 });
1136 1109
1137 observeTest('NestedIterateTableMixedSemanticNative', () { 1110 observeTest('NestedIterateTableMixedSemanticNative', () {
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
1421 var div = createTestHtml('<template repeat>{{ foo }}</template>'); 1394 var div = createTestHtml('<template repeat>{{ foo }}</template>');
1422 1395
1423 var m = toObservable([{ 'foo': 'bar' }, { 'foo': 'bat'}]); 1396 var m = toObservable([{ 'foo': 'bar' }, { 'foo': 'bat'}]);
1424 recursivelySetTemplateModel(div, m); 1397 recursivelySetTemplateModel(div, m);
1425 performMicrotaskCheckpoint(); 1398 performMicrotaskCheckpoint();
1426 1399
1427 var observer = new MutationObserver((records, _) {}); 1400 var observer = new MutationObserver((records, _) {});
1428 observer.observe(div, childList: true); 1401 observer.observe(div, childList: true);
1429 1402
1430 var template = div.firstChild; 1403 var template = div.firstChild;
1431 template.bind('repeat', toObservable(m.toList()), ''); 1404 nodeBind(template).bind('repeat', toObservable(m.toList()), '');
1432 performMicrotaskCheckpoint(); 1405 performMicrotaskCheckpoint();
1433 var records = observer.takeRecords(); 1406 var records = observer.takeRecords();
1434 expect(records.length, 0); 1407 expect(records.length, 0);
1435 }); 1408 });
1436 1409
1437 observeTest('RecursiveRef', () { 1410 observeTest('RecursiveRef', () {
1438 var div = createTestHtml( 1411 var div = createTestHtml(
1439 '<template bind>' 1412 '<template bind>'
1440 '<template id=src>{{ foo }}</template>' 1413 '<template id=src>{{ foo }}</template>'
1441 '<template bind ref=src></template>' 1414 '<template bind ref=src></template>'
(...skipping 24 matching lines...) Expand all
1466 // Note: this will use the Map "length" property, not the "length" key. 1439 // Note: this will use the Map "length" property, not the "length" key.
1467 {'length': 42, 'c': 123} 1440 {'length': 42, 'c': 123}
1468 ] 1441 ]
1469 }); 1442 });
1470 recursivelySetTemplateModel(div, m); 1443 recursivelySetTemplateModel(div, m);
1471 deliverChanges(m); 1444 deliverChanges(m);
1472 1445
1473 expect(div.nodes.length, 2); 1446 expect(div.nodes.length, 2);
1474 expect(div.nodes[1].text, '3'); 1447 expect(div.nodes[1].text, '3');
1475 1448
1476 template.unbind('bind'); 1449 nodeBind(template)
1477 template.bind('repeat', m, 'a'); 1450 ..unbind('bind')
1451 ..bind('repeat', m, 'a');
1478 deliverChanges(m); 1452 deliverChanges(m);
1479 expect(div.nodes.length, 4); 1453 expect(div.nodes.length, 4);
1480 expect(div.nodes[1].text, '0'); 1454 expect(div.nodes[1].text, '0');
1481 expect(div.nodes[2].text, '1'); 1455 expect(div.nodes[2].text, '1');
1482 expect(div.nodes[3].text, '2'); 1456 expect(div.nodes[3].text, '2');
1483 1457
1484 template.unbind('repeat'); 1458 nodeBind(template).unbind('repeat');
1485 template.bind('bind', m, 'a.1.b'); 1459 nodeBind(template).bind('bind', m, 'a.1.b');
1486 1460
1487 deliverChanges(m); 1461 deliverChanges(m);
1488 expect(div.nodes.length, 2); 1462 expect(div.nodes.length, 2);
1489 expect(div.nodes[1].text, '4'); 1463 expect(div.nodes[1].text, '4');
1490 }); 1464 });
1491 1465
1492 observeTest('ChangeRefId', () { 1466 observeTest('ChangeRefId', () {
1493 var div = createTestHtml( 1467 var div = createTestHtml(
1494 '<template id="a">a:{{ }}</template>' 1468 '<template id="a">a:{{ }}</template>'
1495 '<template id="b">b:{{ }}</template>' 1469 '<template id="b">b:{{ }}</template>'
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1563 deliverChanges(model); 1537 deliverChanges(model);
1564 expect(root.nodes[1].text, 'Hi Leela'); 1538 expect(root.nodes[1].text, 'Hi Leela');
1565 } 1539 }
1566 }); 1540 });
1567 1541
1568 observeTest('BindShadowDOM createInstance', () { 1542 observeTest('BindShadowDOM createInstance', () {
1569 if (ShadowRoot.supported) { 1543 if (ShadowRoot.supported) {
1570 var model = toObservable({'name': 'Leela'}); 1544 var model = toObservable({'name': 'Leela'});
1571 var template = new Element.html('<template>Hi {{ name }}</template>'); 1545 var template = new Element.html('<template>Hi {{ name }}</template>');
1572 var root = createShadowTestHtml(''); 1546 var root = createShadowTestHtml('');
1573 root.nodes.add(template.createInstance(model)); 1547 root.nodes.add(templateBind(template).createInstance(model));
1574 1548
1575 performMicrotaskCheckpoint(); 1549 performMicrotaskCheckpoint();
1576 expect(root.text, 'Hi Leela'); 1550 expect(root.text, 'Hi Leela');
1577 1551
1578 model['name'] = 'Fry'; 1552 model['name'] = 'Fry';
1579 performMicrotaskCheckpoint(); 1553 performMicrotaskCheckpoint();
1580 expect(root.text, 'Hi Fry'); 1554 expect(root.text, 'Hi Fry');
1581 } 1555 }
1582 }); 1556 });
1583 1557
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1638 performMicrotaskCheckpoint(); 1612 performMicrotaskCheckpoint();
1639 }); 1613 });
1640 1614
1641 observeTest('CreateInstance', () { 1615 observeTest('CreateInstance', () {
1642 var div = createTestHtml( 1616 var div = createTestHtml(
1643 '<template bind="{{a}}">' 1617 '<template bind="{{a}}">'
1644 '<template bind="{{b}}">' 1618 '<template bind="{{b}}">'
1645 '{{ foo }}:{{ replaceme }}' 1619 '{{ foo }}:{{ replaceme }}'
1646 '</template>' 1620 '</template>'
1647 '</template>'); 1621 '</template>');
1648 var outer = div.nodes.first; 1622 var outer = templateBind(div.nodes.first);
1649 var model = toObservable({'b': {'foo': 'bar'}}); 1623 var model = toObservable({'b': {'foo': 'bar'}});
1650 1624
1651 var host = new DivElement(); 1625 var host = new DivElement();
1652 var instance = outer.createInstance(model, new TestBindingSyntax()); 1626 var instance = outer.createInstance(model, new TestBindingSyntax());
1653 expect(outer.content.nodes.first, instance.nodes.first.ref); 1627 expect(outer.content.nodes.first,
1628 templateBind(instance.nodes.first).ref);
1654 1629
1655 host.append(instance); 1630 host.append(instance);
1656 performMicrotaskCheckpoint(); 1631 performMicrotaskCheckpoint();
1657 expect(host.firstChild.nextNode.text, 'bar:replaced'); 1632 expect(host.firstChild.nextNode.text, 'bar:replaced');
1658 }); 1633 });
1659 1634
1660 observeTest('Bootstrap', () { 1635 observeTest('Bootstrap', () {
1661 var div = new DivElement(); 1636 var div = new DivElement();
1662 div.innerHtml = 1637 div.innerHtml =
1663 '<template>' 1638 '<template>'
1664 '<div></div>' 1639 '<div></div>'
1665 '<template>' 1640 '<template>'
1666 'Hello' 1641 'Hello'
1667 '</template>' 1642 '</template>'
1668 '</template>'; 1643 '</template>';
1669 1644
1670 TemplateElement.bootstrap(div); 1645 TemplateBindExtension.bootstrap(div);
1671 var template = div.nodes.first; 1646 var template = templateBind(div.nodes.first);
1672 expect(template.content.nodes.length, 2); 1647 expect(template.content.nodes.length, 2);
1673 var template2 = template.content.nodes.first.nextNode; 1648 var template2 = templateBind(template.content.nodes.first.nextNode);
1674 expect(template2.content.nodes.length, 1); 1649 expect(template2.content.nodes.length, 1);
1675 expect(template2.content.nodes.first.text, 'Hello'); 1650 expect(template2.content.nodes.first.text, 'Hello');
1676 1651
1677 template = new Element.tag('template'); 1652 template = new Element.tag('template');
1678 template.innerHtml = 1653 template.innerHtml =
1679 '<template>' 1654 '<template>'
1680 '<div></div>' 1655 '<div></div>'
1681 '<template>' 1656 '<template>'
1682 'Hello' 1657 'Hello'
1683 '</template>' 1658 '</template>'
1684 '</template>'; 1659 '</template>';
1685 1660
1686 TemplateElement.bootstrap(template); 1661 TemplateBindExtension.bootstrap(template);
1687 template2 = template.content.nodes.first; 1662 template2 = template.content.nodes.first;
1688 expect(template2.content.nodes.length, 2); 1663 expect(template2.content.nodes.length, 2);
1689 var template3 = template2.content.nodes.first.nextNode; 1664 var template3 = template2.content.nodes.first.nextNode;
1690 expect(template3.content.nodes.length, 1); 1665 expect(template3.content.nodes.length, 1);
1691 expect(template3.content.nodes.first.text, 'Hello'); 1666 expect(template3.content.nodes.first.text, 'Hello');
1692 }); 1667 });
1693
1694 observeTest('instanceCreated hack', () {
1695 var called = false;
1696
1697 callback(node) {
1698 called = true;
1699 expect(node.nodeType, Node.DOCUMENT_FRAGMENT_NODE);
1700 }
1701 mdv.instanceCreated.add(callback);
1702
1703 var div = createTestHtml('<template bind="{{}}">Foo</template>');
1704 expect(called, false);
1705
1706 recursivelySetTemplateModel(div, null);
1707 performMicrotaskCheckpoint();
1708 expect(called, true);
1709
1710 mdv.instanceCreated.remove(callback);
1711 });
1712 } 1668 }
1713 1669
1714 class TestBindingSyntax extends BindingDelegate { 1670 class TestBindingSyntax extends BindingDelegate {
1715 getBinding(model, String path, name, node) { 1671 getBinding(model, String path, name, node) {
1716 if (path.trim() == 'replaceme') return new ObservableBox('replaced'); 1672 if (path.trim() == 'replaceme') return new ObservableBox('replaced');
1717 return null; 1673 return null;
1718 } 1674 }
1719 } 1675 }
1720 1676
1721 class UnbindingInNestedBindSyntax extends BindingDelegate { 1677 class UnbindingInNestedBindSyntax extends BindingDelegate {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1767 k = k is String ? new Symbol(k) : _deepToSymbol(k); 1723 k = k is String ? new Symbol(k) : _deepToSymbol(k);
1768 result[k] = _deepToSymbol(v); 1724 result[k] = _deepToSymbol(v);
1769 }); 1725 });
1770 return result; 1726 return result;
1771 } 1727 }
1772 if (value is Iterable) { 1728 if (value is Iterable) {
1773 return value.map(_deepToSymbol).toList(); 1729 return value.map(_deepToSymbol).toList();
1774 } 1730 }
1775 return value; 1731 return value;
1776 } 1732 }
1777
1778 /**
1779 * Sanitizer which does nothing.
1780 */
1781 class NullTreeSanitizer implements NodeTreeSanitizer {
1782 void sanitizeTree(Node node) {}
1783 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698