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

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

Issue 19663011: Custom Syntax's are now enabled via template.bindingDelegate = (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: restore @Experimental Created 7 years, 5 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
« no previous file with comments | « pkg/mdv/test/node_bindings_test.dart ('k') | sdk/lib/html/dart2js/html_dart2js.dart » ('j') | 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) 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_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;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 root.innerHtml = s; 56 root.innerHtml = s;
57 testDiv.append(div); 57 testDiv.append(div);
58 58
59 for (var node in root.queryAll('*')) { 59 for (var node in root.queryAll('*')) {
60 if (node.isTemplate) TemplateElement.decorate(node); 60 if (node.isTemplate) TemplateElement.decorate(node);
61 } 61 }
62 62
63 return root; 63 return root;
64 } 64 }
65 65
66 recursivelySetTemplateModel(element, model) {
67 for (var node in element.queryAll('*')) {
68 if (node.isTemplate) node.model = model;
69 }
70 }
71
72 dispatchEvent(type, target) {
73 target.dispatchEvent(new Event(type, cancelable: false));
74 }
75
76 var expando = new Expando('observeTest'); 66 var expando = new Expando('observeTest');
77 void addExpandos(node) { 67 void addExpandos(node) {
78 while (node != null) { 68 while (node != null) {
79 expando[node] = node.text; 69 expando[node] = node.text;
80 node = node.nextNode; 70 node = node.nextNode;
81 } 71 }
82 } 72 }
83 73
84 void checkExpandos(node) { 74 void checkExpandos(node) {
85 expect(node, isNotNull); 75 expect(node, isNotNull);
(...skipping 1488 matching lines...) Expand 10 before | Expand all | Expand 10 after
1574 // https://github.com/toolkitchen/mdv/issues/8 1564 // https://github.com/toolkitchen/mdv/issues/8
1575 observeTest('UnbindingInNestedBind', () { 1565 observeTest('UnbindingInNestedBind', () {
1576 var div = createTestHtml( 1566 var div = createTestHtml(
1577 '<template bind="{{outer}}" if="{{outer}}" syntax="testHelper">' 1567 '<template bind="{{outer}}" if="{{outer}}" syntax="testHelper">'
1578 '<template bind="{{inner}}" if="{{inner}}">' 1568 '<template bind="{{inner}}" if="{{inner}}">'
1579 '{{ age }}' 1569 '{{ age }}'
1580 '</template>' 1570 '</template>'
1581 '</template>'); 1571 '</template>');
1582 1572
1583 var syntax = new UnbindingInNestedBindSyntax(); 1573 var syntax = new UnbindingInNestedBindSyntax();
1584 TemplateElement.syntax['testHelper'] = syntax; 1574 var model = toSymbolMap({
1585 try { 1575 'outer': {
1586 var model = toSymbolMap({ 1576 'inner': {
1587 'outer': { 1577 'age': 42
1588 'inner': {
1589 'age': 42
1590 }
1591 } 1578 }
1592 }); 1579 }
1580 });
1593 1581
1594 recursivelySetTemplateModel(div, model); 1582 recursivelySetTemplateModel(div, model, syntax);
1595 1583
1596 deliverChanges(model); 1584 deliverChanges(model);
1597 expect(syntax.count, 1); 1585 expect(syntax.count, 1);
1598 1586
1599 var inner = model[sym('outer')][sym('inner')]; 1587 var inner = model[sym('outer')][sym('inner')];
1600 model[sym('outer')] = null; 1588 model[sym('outer')] = null;
1601 1589
1602 deliverChanges(model); 1590 deliverChanges(model);
1603 expect(syntax.count, 1); 1591 expect(syntax.count, 1);
1604 1592
1605 model[sym('outer')] = toSymbols({'inner': {'age': 2}}); 1593 model[sym('outer')] = toSymbols({'inner': {'age': 2}});
1606 syntax.expectedAge = 2; 1594 syntax.expectedAge = 2;
1607 1595
1608 deliverChanges(model); 1596 deliverChanges(model);
1609 expect(syntax.count, 2); 1597 expect(syntax.count, 2);
1610 } finally {
1611 TemplateElement.syntax.remove('testHelper');
1612 }
1613 }); 1598 });
1614 1599
1615 // https://github.com/toolkitchen/mdv/issues/8 1600 // https://github.com/toolkitchen/mdv/issues/8
1616 observeTest('DontCreateInstancesForAbandonedIterators', () { 1601 observeTest('DontCreateInstancesForAbandonedIterators', () {
1617 var div = createTestHtml( 1602 var div = createTestHtml(
1618 '<template bind="{{}} {{}}">' 1603 '<template bind="{{}} {{}}">'
1619 '<template bind="{{}}">Foo' 1604 '<template bind="{{}}">Foo'
1620 '</template>' 1605 '</template>'
1621 '</template>'); 1606 '</template>');
1622 recursivelySetTemplateModel(div, null); 1607 recursivelySetTemplateModel(div, null);
1623 performMicrotaskCheckpoint(); 1608 performMicrotaskCheckpoint();
1624 }); 1609 });
1625 1610
1626 observeTest('CreateInstance', () { 1611 observeTest('CreateInstance', () {
1627 TemplateElement.syntax['Test'] = new TestBindingSyntax(); 1612 var div = createTestHtml(
1628 try { 1613 '<template bind="{{a}}">'
1629 var div = createTestHtml( 1614 '<template bind="{{b}}">'
1630 '<template bind="{{a}}">' 1615 '{{ foo }}:{{ replaceme }}'
1631 '<template bind="{{b}}">' 1616 '</template>'
1632 '{{ foo }}:{{ replaceme }}' 1617 '</template>');
1633 '</template>' 1618 var outer = div.nodes.first;
1634 '</template>'); 1619 var model = toSymbolMap({'b': {'foo': 'bar'}});
1635 var outer = div.nodes.first;
1636 var model = toSymbolMap({'b': {'foo': 'bar'}});
1637 1620
1638 var host = new DivElement(); 1621 var host = new DivElement();
1639 var instance = outer.createInstance(model, 'Test'); 1622 var instance = outer.createInstance(model, new TestBindingSyntax());
1640 expect(outer.content.nodes.first, instance.nodes.first.ref); 1623 expect(outer.content.nodes.first, instance.nodes.first.ref);
1641 expect(instance.firstChild.attributes['syntax'], 'Test');
1642 1624
1643 host.append(instance); 1625 host.append(instance);
1644 performMicrotaskCheckpoint(); 1626 performMicrotaskCheckpoint();
1645 expect(host.firstChild.nextNode.text, 'bar:replaced'); 1627 expect(host.firstChild.nextNode.text, 'bar:replaced');
1646 } finally {
1647 TemplateElement.syntax.remove('Test');
1648 }
1649 }); 1628 });
1650 1629
1651 observeTest('Bootstrap', () { 1630 observeTest('Bootstrap', () {
1652 var div = new DivElement(); 1631 var div = new DivElement();
1653 div.innerHtml = 1632 div.innerHtml =
1654 '<template>' 1633 '<template>'
1655 '<div></div>' 1634 '<div></div>'
1656 '<template>' 1635 '<template>'
1657 'Hello' 1636 'Hello'
1658 '</template>' 1637 '</template>'
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1693 expect(called, false); 1672 expect(called, false);
1694 1673
1695 recursivelySetTemplateModel(div, null); 1674 recursivelySetTemplateModel(div, null);
1696 performMicrotaskCheckpoint(); 1675 performMicrotaskCheckpoint();
1697 expect(called, true); 1676 expect(called, true);
1698 1677
1699 sub.cancel(); 1678 sub.cancel();
1700 }); 1679 });
1701 } 1680 }
1702 1681
1703 class TestBindingSyntax extends CustomBindingSyntax { 1682 class TestBindingSyntax extends BindingDelegate {
1704 getBinding(model, String path, name, node) { 1683 getBinding(model, String path, name, node) {
1705 if (path.trim() == 'replaceme') return new ObservableBox('replaced'); 1684 if (path.trim() == 'replaceme') return new ObservableBox('replaced');
1706 return null; 1685 return null;
1707 } 1686 }
1708 } 1687 }
1709 1688
1710 class UnbindingInNestedBindSyntax extends CustomBindingSyntax { 1689 class UnbindingInNestedBindSyntax extends BindingDelegate {
1711 int expectedAge = 42; 1690 int expectedAge = 42;
1712 int count = 0; 1691 int count = 0;
1713 1692
1714 getBinding(model, path, name, node) { 1693 getBinding(model, path, name, node) {
1715 if (name != 'text' || path != 'age') 1694 if (name != 'text' || path != 'age')
1716 return; 1695 return;
1717 1696
1718 expect(model[sym('age')], expectedAge); 1697 expect(model[sym('age')], expectedAge);
1719 count++; 1698 count++;
1720 } 1699 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 k = k is String ? sym(k) : _deepToSymbol(k); 1739 k = k is String ? sym(k) : _deepToSymbol(k);
1761 result[k] = _deepToSymbol(v); 1740 result[k] = _deepToSymbol(v);
1762 }); 1741 });
1763 return result; 1742 return result;
1764 } 1743 }
1765 if (value is Iterable) { 1744 if (value is Iterable) {
1766 return value.map(_deepToSymbol).toList(); 1745 return value.map(_deepToSymbol).toList();
1767 } 1746 }
1768 return value; 1747 return value;
1769 } 1748 }
OLDNEW
« no previous file with comments | « pkg/mdv/test/node_bindings_test.dart ('k') | sdk/lib/html/dart2js/html_dart2js.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698