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

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

Issue 50203004: port TemplateBinding to ed3266266e751b5ab1f75f8e0509d0d5f0ef35d8 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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_binding.test.template_element_test; 5 library template_binding.test.template_binding_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:observe/observe.dart'; 11 import 'package:observe/observe.dart';
12 import 'package:template_binding/template_binding.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
16 // TODO(jmesserly): merge this file?
17 import 'binding_syntax.dart' show syntaxTests;
15 import 'utils.dart'; 18 import 'utils.dart';
16 19
17 // Note: this file ported from 20 // Note: this file ported from
18 // https://github.com/toolkitchen/mdv/blob/master/tests/template_element.js 21 // https://github.com/Polymer/TemplateBinding/blob/ed3266266e751b5ab1f75f8e0509d 0d5f0ef35d8/tests/tests.js
22
19 // TODO(jmesserly): submit a small cleanup patch to original. I fixed some 23 // 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; 24 // cases where "div" and "t" were unintentionally using the JS global scope;
21 // look for "assertNodesAre". 25 // look for "assertNodesAre".
22 26
23 main() { 27 main() {
24 useHtmlConfiguration(); 28 useHtmlConfiguration();
25 group('Template Element', templateElementTests);
26 }
27 29
28 templateElementTests() {
29 setUp(() { 30 setUp(() {
30 document.body.append(testDiv = new DivElement()); 31 document.body.append(testDiv = new DivElement());
31 }); 32 });
32 33
33 tearDown(() { 34 tearDown(() {
34 testDiv.remove(); 35 testDiv.remove();
35 testDiv = null; 36 testDiv = null;
36 }); 37 });
37 38
38 var expando = new Expando('observeTest'); 39 group('Template Instantiation', templateInstantiationTests);
39 void addExpandos(node) { 40
40 while (node != null) { 41 group('Binding Delegate API', () {
41 expando[node] = node.text; 42 group('with Observable', () {
42 node = node.nextNode; 43 syntaxTests(([f, b]) => new FooBarModel(f, b));
43 } 44 });
45
46 group('with ChangeNotifier', () {
47 syntaxTests(([f, b]) => new FooBarNotifyModel(f, b));
48 });
49 });
50
51 group('Compat', compatTests);
52 }
53
54 var expando = new Expando('test');
55 void addExpandos(node) {
56 while (node != null) {
57 expando[node] = node.text;
58 node = node.nextNode;
44 } 59 }
60 }
45 61
46 void checkExpandos(node) { 62 void checkExpandos(node) {
47 expect(node, isNotNull); 63 expect(node, isNotNull);
48 while (node != null) { 64 while (node != null) {
49 expect(expando[node], node.text); 65 expect(expando[node], node.text);
50 node = node.nextNode; 66 node = node.nextNode;
51 }
52 } 67 }
68 }
69
70 templateInstantiationTests() {
53 71
54 observeTest('Template', () { 72 observeTest('Template', () {
55 var div = createTestHtml('<template bind={{}}>text</template>'); 73 var div = createTestHtml('<template bind={{}}>text</template>');
56 recursivelySetTemplateModel(div, null); 74 templateBind(div.firstChild).model = {};
57 performMicrotaskCheckpoint(); 75 performMicrotaskCheckpoint();
58 expect(div.nodes.length, 2); 76 expect(div.nodes.length, 2);
59 expect(div.nodes.last.text, 'text'); 77 expect(div.nodes.last.text, 'text');
78
79 templateBind(div.firstChild).model = null;
80 performMicrotaskCheckpoint();
81 expect(div.nodes.length, 1);
60 }); 82 });
61 83
62 observeTest('Template bind, no parent', () { 84 observeTest('Template bind, no parent', () {
63 var div = createTestHtml('<template bind>text</template>'); 85 var div = createTestHtml('<template bind>text</template>');
64 var template = div.nodes[0]; 86 var template = div.firstChild;
65 template.remove(); 87 template.remove();
66 88
67 recursivelySetTemplateModel(template, toObservable({})); 89 templateBind(template).model = {};
68 performMicrotaskCheckpoint(); 90 performMicrotaskCheckpoint();
69 expect(template.nodes.length, 0); 91 expect(template.nodes.length, 0);
70 expect(template.nextNode, null); 92 expect(template.nextNode, null);
71 }); 93 });
72 94
73 observeTest('Template bind, no defaultView', () { 95 observeTest('Template bind, no defaultView', () {
74 var div = createTestHtml('<template bind>text</template>'); 96 var div = createTestHtml('<template bind>text</template>');
75 var template = div.nodes[0]; 97 var template = div.firstChild;
76 var doc = document.implementation.createHtmlDocument(''); 98 var doc = document.implementation.createHtmlDocument('');
77 doc.adoptNode(div); 99 doc.adoptNode(div);
78 recursivelySetTemplateModel(template, toObservable({})); 100 recursivelySetTemplateModel(template, {});
79 performMicrotaskCheckpoint(); 101 performMicrotaskCheckpoint();
80 expect(div.nodes.length, 1); 102 expect(div.nodes.length, 1);
81 }); 103 });
82 104
83 observeTest('Template-Empty Bind', () { 105 observeTest('Template-Empty Bind', () {
84 var div = createTestHtml('<template bind>text</template>'); 106 var div = createTestHtml('<template bind>text</template>');
85 recursivelySetTemplateModel(div, null); 107 var template = div.firstChild;
108 templateBind(template).model = {};
86 performMicrotaskCheckpoint(); 109 performMicrotaskCheckpoint();
87 expect(div.nodes.length, 2); 110 expect(div.nodes.length, 2);
88 expect(div.nodes.last.text, 'text'); 111 expect(div.nodes.last.text, 'text');
89 }); 112 });
90 113
91 observeTest('Template Bind If', () { 114 observeTest('Template Bind If', () {
92 var div = createTestHtml('<template bind if="{{ foo }}">text</template>'); 115 var div = createTestHtml('<template bind if="{{ foo }}">text</template>');
93 // Note: changed this value from 0->null because zero is not falsey in Dart. 116 // Note: changed this value from 0->null because zero is not falsey in Dart.
94 // See https://code.google.com/p/dart/issues/detail?id=11956 117 // See https://code.google.com/p/dart/issues/detail?id=11956
95 var m = toObservable({ 'foo': null }); 118 var m = toObservable({ 'foo': null });
96 recursivelySetTemplateModel(div, m); 119 var template = div.firstChild;
120 templateBind(template).model = m;
97 performMicrotaskCheckpoint(); 121 performMicrotaskCheckpoint();
98 expect(div.nodes.length, 1); 122 expect(div.nodes.length, 1);
99 123
100 m['foo'] = 1; 124 m['foo'] = 1;
101 performMicrotaskCheckpoint(); 125 performMicrotaskCheckpoint();
102 expect(div.nodes.length, 2); 126 expect(div.nodes.length, 2);
103 expect(div.lastChild.text, 'text'); 127 expect(div.lastChild.text, 'text');
128
129 templateBind(template).model = null;
130 performMicrotaskCheckpoint();
131 expect(div.nodes.length, 1);
104 }); 132 });
105 133
106 observeTest('Template Bind If, 2', () { 134 observeTest('Template Bind If, 2', () {
107 var div = createTestHtml( 135 var div = createTestHtml(
108 '<template bind="{{ foo }}" if="{{ bar }}">{{ bat }}</template>'); 136 '<template bind="{{ foo }}" if="{{ bar }}">{{ bat }}</template>');
109 var m = toObservable({ 'bar': null, 'foo': { 'bat': 'baz' } }); 137 var m = toObservable({ 'bar': null, 'foo': { 'bat': 'baz' } });
110 recursivelySetTemplateModel(div, m); 138 recursivelySetTemplateModel(div, m);
111 performMicrotaskCheckpoint(); 139 performMicrotaskCheckpoint();
112 expect(div.nodes.length, 1); 140 expect(div.nodes.length, 1);
113 141
114 m['bar'] = 1; 142 m['bar'] = 1;
115 performMicrotaskCheckpoint(); 143 performMicrotaskCheckpoint();
116 expect(div.nodes.length, 2); 144 expect(div.nodes.length, 2);
117 expect(div.lastChild.text, 'baz'); 145 expect(div.lastChild.text, 'baz');
118 }); 146 });
119 147
120 observeTest('Template If', () { 148 observeTest('Template If', () {
121 var div = createTestHtml('<template if="{{ foo }}">{{ value }}</template>'); 149 var div = createTestHtml('<template if="{{ foo }}">{{ value }}</template>');
122 // Note: changed this value from 0->null because zero is not falsey in Dart. 150 // Note: changed this value from 0->null because zero is not falsey in
123 // See https://code.google.com/p/dart/issues/detail?id=11956 151 // Dart. See https://code.google.com/p/dart/issues/detail?id=11956
124 var m = toObservable({ 'foo': null, 'value': 'foo' }); 152 var m = toObservable({ 'foo': null, 'value': 'foo' });
125 recursivelySetTemplateModel(div, m); 153 var template = div.firstChild;
154 templateBind(template).model = m;
126 performMicrotaskCheckpoint(); 155 performMicrotaskCheckpoint();
127 expect(div.nodes.length, 1); 156 expect(div.nodes.length, 1);
128 157
129 m['foo'] = 1; 158 m['foo'] = 1;
130 performMicrotaskCheckpoint(); 159 performMicrotaskCheckpoint();
131 expect(div.nodes.length, 2); 160 expect(div.nodes.length, 2);
132 expect(div.lastChild.text, 'foo'); 161 expect(div.lastChild.text, 'foo');
162
163 templateBind(template).model = null;
164 performMicrotaskCheckpoint();
165 expect(div.nodes.length, 1);
166 });
167
168 observeTest('Template Empty-If', () {
169 var div = createTestHtml('<template if>{{ value }}</template>');
170 var m = toObservable({ 'value': 'foo' });
171 recursivelySetTemplateModel(div, null);
172 performMicrotaskCheckpoint();
173 expect(div.nodes.length, 1);
174
175 recursivelySetTemplateModel(div, m);
176 performMicrotaskCheckpoint();
177 expect(div.nodes.length, 2);
178 expect(div.lastChild.text, 'foo');
133 }); 179 });
134 180
135 observeTest('Template Repeat If', () { 181 observeTest('Template Repeat If', () {
136 var div = createTestHtml( 182 var div = createTestHtml(
137 '<template repeat="{{ foo }}" if="{{ bar }}">{{ }}</template>'); 183 '<template repeat="{{ foo }}" if="{{ bar }}">{{ }}</template>');
138 // Note: changed this value from 0->null because zero is not falsey in Dart. 184 // Note: changed this value from 0->null because zero is not falsey in Dart.
139 // See https://code.google.com/p/dart/issues/detail?id=11956 185 // See https://code.google.com/p/dart/issues/detail?id=11956
140 var m = toObservable({ 'bar': null, 'foo': [1, 2, 3] }); 186 var m = toObservable({ 'bar': null, 'foo': [1, 2, 3] });
141 recursivelySetTemplateModel(div, m); 187 var template = div.firstChild;
188 templateBind(template).model = m;
142 performMicrotaskCheckpoint(); 189 performMicrotaskCheckpoint();
143 expect(div.nodes.length, 1); 190 expect(div.nodes.length, 1);
144 191
145 m['bar'] = 1; 192 m['bar'] = 1;
146 performMicrotaskCheckpoint(); 193 performMicrotaskCheckpoint();
147 expect(div.nodes.length, 4); 194 expect(div.nodes.length, 4);
148 expect(div.nodes[1].text, '1'); 195 expect(div.nodes[1].text, '1');
149 expect(div.nodes[2].text, '2'); 196 expect(div.nodes[2].text, '2');
150 expect(div.nodes[3].text, '3'); 197 expect(div.nodes[3].text, '3');
198
199 templateBind(template).model = null;
200 performMicrotaskCheckpoint();
201 expect(div.nodes.length, 1);
151 }); 202 });
152 203
153 observeTest('TextTemplateWithNullStringBinding', () { 204 observeTest('TextTemplateWithNullStringBinding', () {
154 var div = createTestHtml('<template bind={{}}>a{{b}}c</template>'); 205 var div = createTestHtml('<template bind={{}}>a{{b}}c</template>');
155 var model = toObservable({'b': 'B'}); 206 var model = toObservable({'b': 'B'});
156 recursivelySetTemplateModel(div, model); 207 recursivelySetTemplateModel(div, model);
157 208
158 performMicrotaskCheckpoint(); 209 performMicrotaskCheckpoint();
159 expect(div.nodes.length, 2); 210 expect(div.nodes.length, 2);
160 expect(div.nodes.last.text, 'aBc'); 211 expect(div.nodes.last.text, 'aBc');
161 212
162 model['b'] = 'b'; 213 model['b'] = 'b';
163 performMicrotaskCheckpoint(); 214 performMicrotaskCheckpoint();
164 expect(div.nodes.last.text, 'abc'); 215 expect(div.nodes.last.text, 'abc');
165 216
166 model['b'] = null; 217 model['b'] = null;
167 performMicrotaskCheckpoint(); 218 performMicrotaskCheckpoint();
168 expect(div.nodes.last.text, 'ac'); 219 expect(div.nodes.last.text, 'ac');
169 220
170 model = null; 221 model = null;
171 performMicrotaskCheckpoint(); 222 performMicrotaskCheckpoint();
172 // setting model isn't observable. 223 // setting model isn't observable.
173 expect(div.nodes.last.text, 'ac'); 224 expect(div.nodes.last.text, 'ac');
174 }); 225 });
175 226
176 observeTest('TextTemplateWithBindingPath', () { 227 observeTest('TextTemplateWithBindingPath', () {
177 var div = createTestHtml( 228 var div = createTestHtml(
178 '<template bind="{{ data }}">a{{b}}c</template>'); 229 '<template bind="{{ data }}">a{{b}}c</template>');
179 var model = toObservable({ 'data': {'b': 'B'} }); 230 var model = toObservable({ 'data': {'b': 'B'} });
180 recursivelySetTemplateModel(div, model); 231 var template = div.firstChild;
232 templateBind(template).model = model;
181 233
182 performMicrotaskCheckpoint(); 234 performMicrotaskCheckpoint();
183 expect(div.nodes.length, 2); 235 expect(div.nodes.length, 2);
184 expect(div.nodes.last.text, 'aBc'); 236 expect(div.nodes.last.text, 'aBc');
185 237
186 model['data']['b'] = 'b'; 238 model['data']['b'] = 'b';
187 performMicrotaskCheckpoint(); 239 performMicrotaskCheckpoint();
188 expect(div.nodes.last.text, 'abc'); 240 expect(div.nodes.last.text, 'abc');
189 241
190 model['data'] = toObservable({'b': 'X'}); 242 model['data'] = toObservable({'b': 'X'});
191 performMicrotaskCheckpoint(); 243 performMicrotaskCheckpoint();
192 expect(div.nodes.last.text, 'aXc'); 244 expect(div.nodes.last.text, 'aXc');
193 245
246 // Dart note: changed from `null` since our null means don't render a model.
247 model['data'] = toObservable({});
248 performMicrotaskCheckpoint();
249 expect(div.nodes.last.text, 'ac');
250
194 model['data'] = null; 251 model['data'] = null;
195 performMicrotaskCheckpoint(); 252 performMicrotaskCheckpoint();
196 expect(div.nodes.last.text, 'ac'); 253 expect(div.nodes.length, 1);
197 }); 254 });
198 255
199 observeTest('TextTemplateWithBindingAndConditional', () { 256 observeTest('TextTemplateWithBindingAndConditional', () {
200 var div = createTestHtml( 257 var div = createTestHtml(
201 '<template bind="{{}}" if="{{ d }}">a{{b}}c</template>'); 258 '<template bind="{{}}" if="{{ d }}">a{{b}}c</template>');
202 var model = toObservable({'b': 'B', 'd': 1}); 259 var model = toObservable({'b': 'B', 'd': 1});
203 recursivelySetTemplateModel(div, model); 260 recursivelySetTemplateModel(div, model);
204 261
205 performMicrotaskCheckpoint(); 262 performMicrotaskCheckpoint();
206 expect(div.nodes.length, 2); 263 expect(div.nodes.length, 2);
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 var div = createTestHtml( 649 var div = createTestHtml(
593 '<template bind="{{}}">Hi {{\nname\n}}</template>'); 650 '<template bind="{{}}">Hi {{\nname\n}}</template>');
594 var model = toObservable({'name': 'Leela'}); 651 var model = toObservable({'name': 'Leela'});
595 recursivelySetTemplateModel(div, model); 652 recursivelySetTemplateModel(div, model);
596 653
597 performMicrotaskCheckpoint(); 654 performMicrotaskCheckpoint();
598 expect(div.nodes[1].text, 'Hi Leela'); 655 expect(div.nodes[1].text, 'Hi Leela');
599 }); 656 });
600 657
601 observeTest('BindWithRef', () { 658 observeTest('BindWithRef', () {
602 var id = 't${new math.Random().nextDouble()}'; 659 var id = 't${new math.Random().nextInt(100)}';
603 var div = createTestHtml( 660 var div = createTestHtml(
604 '<template id="$id">' 661 '<template id="$id">'
605 'Hi {{ name }}' 662 'Hi {{ name }}'
606 '</template>' 663 '</template>'
607 '<template ref="$id" bind="{{}}"></template>'); 664 '<template ref="$id" bind="{{}}"></template>');
608 665
609 var t1 = div.nodes.first; 666 var t1 = div.nodes.first;
610 var t2 = div.nodes[1]; 667 var t2 = div.nodes[1];
611 668
612 expect(templateBind(t2).ref, t1); 669 expect(templateBind(t2).ref, t1);
613 670
614 var model = toObservable({'name': 'Fry'}); 671 var model = toObservable({'name': 'Fry'});
615 recursivelySetTemplateModel(div, model); 672 recursivelySetTemplateModel(div, model);
616 673
617 performMicrotaskCheckpoint(); 674 performMicrotaskCheckpoint();
618 expect(t2.nextNode.text, 'Hi Fry'); 675 expect(t2.nextNode.text, 'Hi Fry');
619 }); 676 });
620 677
678 observeTest('BindWithDynamicRef', () {
679 var id = 't${new math.Random().nextInt(100)}';
680 var div = createTestHtml(
681 '<template id="$id">'
682 'Hi {{ name }}'
683 '</template>'
684 '<template ref="{{ id }}" bind="{{}}"></template>');
685
686 var t1 = div.firstChild;
687 var t2 = div.nodes[1];
688 var model = toObservable({'name': 'Fry', 'id': id });
689 recursivelySetTemplateModel(div, model);
690
691 performMicrotaskCheckpoint();
692 expect(t2.nextNode.text, 'Hi Fry');
693 });
694
621 observeTest('BindChanged', () { 695 observeTest('BindChanged', () {
622 var model = toObservable({ 696 var model = toObservable({
623 'XX': {'name': 'Leela', 'title': 'Captain'}, 697 'XX': {'name': 'Leela', 'title': 'Captain'},
624 'XY': {'name': 'Fry', 'title': 'Delivery boy'}, 698 'XY': {'name': 'Fry', 'title': 'Delivery boy'},
625 'XZ': {'name': 'Zoidberg', 'title': 'Doctor'} 699 'XZ': {'name': 'Zoidberg', 'title': 'Doctor'}
626 }); 700 });
627 701
628 var div = createTestHtml( 702 var div = createTestHtml(
629 '<template bind="{{ XX }}">Hi {{ name }}</template>'); 703 '<template bind="{{ XX }}">Hi {{ name }}</template>');
630 704
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 if (ShadowRoot.supported) { 1615 if (ShadowRoot.supported) {
1542 var root = createShadowTestHtml( 1616 var root = createShadowTestHtml(
1543 '<template bind="{{}}">Hi {{ name }}</template>'); 1617 '<template bind="{{}}">Hi {{ name }}</template>');
1544 var model = toObservable({'name': 'Leela'}); 1618 var model = toObservable({'name': 'Leela'});
1545 recursivelySetTemplateModel(root, model); 1619 recursivelySetTemplateModel(root, model);
1546 performMicrotaskCheckpoint(); 1620 performMicrotaskCheckpoint();
1547 expect(root.nodes[1].text, 'Hi Leela'); 1621 expect(root.nodes[1].text, 'Hi Leela');
1548 } 1622 }
1549 }); 1623 });
1550 1624
1625 // Dart note: this test seems gone from JS. Keeping for posterity sake.
1551 observeTest('BindShadowDOM createInstance', () { 1626 observeTest('BindShadowDOM createInstance', () {
1552 if (ShadowRoot.supported) { 1627 if (ShadowRoot.supported) {
1553 var model = toObservable({'name': 'Leela'}); 1628 var model = toObservable({'name': 'Leela'});
1554 var template = new Element.html('<template>Hi {{ name }}</template>'); 1629 var template = new Element.html('<template>Hi {{ name }}</template>');
1555 var root = createShadowTestHtml(''); 1630 var root = createShadowTestHtml('');
1556 root.nodes.add(templateBind(template).createInstance(model)); 1631 root.nodes.add(templateBind(template).createInstance(model));
1557 1632
1558 performMicrotaskCheckpoint(); 1633 performMicrotaskCheckpoint();
1559 expect(root.text, 'Hi Leela'); 1634 expect(root.text, 'Hi Leela');
1560 1635
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 '</template>' 1742 '</template>'
1668 '</template>'; 1743 '</template>';
1669 1744
1670 TemplateBindExtension.bootstrap(template); 1745 TemplateBindExtension.bootstrap(template);
1671 template2 = templateBind(templateBind(template).content.nodes.first); 1746 template2 = templateBind(templateBind(template).content.nodes.first);
1672 expect(template2.content.nodes.length, 2); 1747 expect(template2.content.nodes.length, 2);
1673 var template3 = templateBind(template2.content.nodes.first.nextNode); 1748 var template3 = templateBind(template2.content.nodes.first.nextNode);
1674 expect(template3.content.nodes.length, 1); 1749 expect(template3.content.nodes.length, 1);
1675 expect(template3.content.nodes.first.text, 'Hello'); 1750 expect(template3.content.nodes.first.text, 'Hello');
1676 }); 1751 });
1752
1753 observeTest('issue-285', () {
1754 var div = createTestHtml(
1755 '<template>'
1756 '<template bind if="{{show}}">'
1757 '<template id=del repeat="{{items}}">'
1758 '{{}}'
1759 '</template>'
1760 '</template>'
1761 '</template>');
1762
1763 var template = div.firstChild;
1764
1765 var model = toObservable({
1766 'show': true,
1767 'items': [1]
1768 });
1769
1770 div.append(templateBind(template).createInstance(model,
1771 new Issue285Syntax()));
1772
1773 performMicrotaskCheckpoint();
1774 expect(template.nextNode.nextNode.nextNode.text, '2');
1775 model['show'] = false;
1776 performMicrotaskCheckpoint();
1777 model['show'] = true;
1778 performMicrotaskCheckpoint();
1779 expect(template.nextNode.nextNode.nextNode.text, '2');
1780 });
1781
1782 observeTest('issue-141', () {
1783 var div = createTestHtml(
1784 '<template bind>' +
1785 '<div foo="{{foo1}} {{foo2}}" bar="{{bar}}"></div>' +
1786 '</template>');
1787
1788 var model = toObservable({
1789 'foo1': 'foo1Value',
1790 'foo2': 'foo2Value',
1791 'bar': 'barValue'
1792 });
1793
1794 recursivelySetTemplateModel(div, model);
1795 performMicrotaskCheckpoint();
1796
1797 expect(div.lastChild.attributes['bar'], 'barValue');
1798 });
1799 }
1800
1801 compatTests() {
1802 observeTest('underbar bindings', () {
1803 var div = createTestHtml(
1804 '<template bind>'
1805 '<div _style="color: {{ color }};"></div>'
1806 '<img _src="{{ url }}">'
1807 '<a _href="{{ url2 }}">Link</a>'
1808 '<input type="number" _value="{{ number }}">'
1809 '</template>');
1810
1811 var model = toObservable({
1812 'color': 'red',
1813 'url': 'pic.jpg',
1814 'url2': 'link.html',
1815 'number': 4
1816 });
1817
1818 recursivelySetTemplateModel(div, model);
1819 performMicrotaskCheckpoint();
1820
1821 var subDiv = div.firstChild.nextNode;
1822 expect(subDiv.attributes['style'], 'color: red;');
1823
1824 var img = subDiv.nextNode;
1825 expect(img.attributes['src'], 'pic.jpg');
1826
1827 var a = img.nextNode;
1828 expect(a.attributes['href'], 'link.html');
1829
1830 var input = a.nextNode;
1831 expect(input.value, '4');
1832 });
1833 }
1834
1835 class Issue285Syntax extends BindingDelegate {
1836 prepareInstanceModel(template) {
1837 if (template.id == 'del') return (val) => val * 2;
1838 }
1677 } 1839 }
1678 1840
1679 class TestBindingSyntax extends BindingDelegate { 1841 class TestBindingSyntax extends BindingDelegate {
1680 getBinding(model, String path, name, node) { 1842 prepareBinding(String path, name, node) {
1681 if (path.trim() == 'replaceme') return new ObservableBox('replaced'); 1843 if (path.trim() == 'replaceme') {
1844 return (x, y) => new ObservableBox('replaced');
1845 }
1682 return null; 1846 return null;
1683 } 1847 }
1684 } 1848 }
1685 1849
1686 class UnbindingInNestedBindSyntax extends BindingDelegate { 1850 class UnbindingInNestedBindSyntax extends BindingDelegate {
1687 int expectedAge = 42; 1851 int expectedAge = 42;
1688 int count = 0; 1852 int count = 0;
1689 1853
1690 getBinding(model, path, name, node) { 1854 prepareBinding(path, name, node) {
1691 if (name != 'text' || path != 'age') 1855 if (name != 'text' || path != 'age') return null;
1692 return;
1693 1856
1694 expect(model['age'], expectedAge); 1857 return (model, node) {
1695 count++; 1858 expect(model['age'], expectedAge);
1859 count++;
1860 return model;
1861 };
1696 } 1862 }
1697 } 1863 }
OLDNEW
« no previous file with comments | « pkg/template_binding/test/node_bindings_test.dart ('k') | pkg/template_binding/test/template_element_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698