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

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

Issue 213713002: Reapply change that makes path-observer more agressive with property lookups. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 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/template_binding/test/node_bind_test.dart ('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) 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_binding_test; 5 library template_binding.test.template_binding_test;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:html'; 8 import 'dart:html';
9 import 'dart:math' as math; 9 import 'dart:math' as math;
10 import 'package:observe/observe.dart'; 10 import 'package:observe/observe.dart';
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 var div = createTestHtml( 150 var div = createTestHtml(
151 '<template bind="{{ bound }}" if="{{ predicate }}">' 151 '<template bind="{{ bound }}" if="{{ predicate }}">'
152 'value:{{ value }}' 152 'value:{{ value }}'
153 '</template>'); 153 '</template>');
154 // Dart note: predicate changed from 0->null because 0 isn't falsey in Dart. 154 // Dart note: predicate changed from 0->null because 0 isn't falsey in Dart.
155 // See https://code.google.com/p/dart/issues/detail?id=11956 155 // See https://code.google.com/p/dart/issues/detail?id=11956
156 // Changed bound from null->1 since null is equivalent to JS undefined, 156 // Changed bound from null->1 since null is equivalent to JS undefined,
157 // and would cause the template to not be expanded. 157 // and would cause the template to not be expanded.
158 var m = toObservable({ 'predicate': null, 'bound': 1 }); 158 var m = toObservable({ 'predicate': null, 'bound': 1 });
159 var template = div.firstChild; 159 var template = div.firstChild;
160 templateBind(template).model = m; 160 bool errorSeen = false;
161 runZoned(() {
162 templateBind(template).model = m;
163 }, onError: (e, s) {
164 expect(e, isNoSuchMethodError);
165 errorSeen = true;
166 });
161 return new Future(() { 167 return new Future(() {
162 expect(div.nodes.length, 1); 168 expect(div.nodes.length, 1);
163 169
164 m['predicate'] = 1; 170 m['predicate'] = 1;
165 171
166 }).then(endOfMicrotask).then((_) { 172 expect(errorSeen, isFalse);
167 expect(div.nodes.length, 2); 173 }).then(nextMicrotask).then((_) {
168 expect(div.lastChild.text, 'value:'); 174 expect(errorSeen, isTrue);
175 expect(div.nodes.length, 1);
169 176
170 m['bound'] = toObservable({ 'value': 2 }); 177 m['bound'] = toObservable({ 'value': 2 });
171 178
172 }).then(endOfMicrotask).then((_) { 179 }).then(endOfMicrotask).then((_) {
173 expect(div.nodes.length, 2); 180 expect(div.nodes.length, 2);
174 expect(div.lastChild.text, 'value:2'); 181 expect(div.lastChild.text, 'value:2');
175 182
176 m['bound']['value'] = 3; 183 m['bound']['value'] = 3;
177 184
178 }).then(endOfMicrotask).then((_) { 185 }).then(endOfMicrotask).then((_) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 test('Bind oneTime-If - predicate true', () { 234 test('Bind oneTime-If - predicate true', () {
228 var div = createTestHtml( 235 var div = createTestHtml(
229 '<template bind="{{ bound }}" if="[[ predicate ]]">' 236 '<template bind="{{ bound }}" if="[[ predicate ]]">'
230 'value:{{ value }}' 237 'value:{{ value }}'
231 '</template>'); 238 '</template>');
232 239
233 // Dart note: changed bound from null->1 since null is equivalent to JS 240 // Dart note: changed bound from null->1 since null is equivalent to JS
234 // undefined, and would cause the template to not be expanded. 241 // undefined, and would cause the template to not be expanded.
235 var m = toObservable({ 'predicate': 1, 'bound': 1 }); 242 var m = toObservable({ 'predicate': 1, 'bound': 1 });
236 var template = div.firstChild; 243 var template = div.firstChild;
237 templateBind(template).model = m; 244 bool errorSeen = false;
245 runZoned(() {
246 templateBind(template).model = m;
247 }, onError: (e, s) {
248 expect(e, isNoSuchMethodError);
249 errorSeen = true;
250 });
238 251
239 return new Future(() { 252 return new Future(() {
240 expect(div.nodes.length, 2); 253 expect(div.nodes.length, 1);
241 expect(div.lastChild.text, 'value:');
242
243 m['bound'] = toObservable({ 'value': 2 }); 254 m['bound'] = toObservable({ 'value': 2 });
244 255 expect(errorSeen, isTrue);
245 }).then(endOfMicrotask).then((_) { 256 }).then(endOfMicrotask).then((_) {
246 expect(div.nodes.length, 2); 257 expect(div.nodes.length, 2);
247 expect(div.lastChild.text, 'value:2'); 258 expect(div.lastChild.text, 'value:2');
248 259
249 m['bound']['value'] = 3; 260 m['bound']['value'] = 3;
250 261
251 }).then(endOfMicrotask).then((_) { 262 }).then(endOfMicrotask).then((_) {
252 expect(div.nodes.length, 2); 263 expect(div.nodes.length, 2);
253 expect(div.lastChild.text, 'value:3'); 264 expect(div.lastChild.text, 'value:3');
254 265
(...skipping 1937 matching lines...) Expand 10 before | Expand all | Expand 10 after
2192 var instance = outer.createInstance(model, new TestBindingSyntax()); 2203 var instance = outer.createInstance(model, new TestBindingSyntax());
2193 expect(outer.content.nodes.first, 2204 expect(outer.content.nodes.first,
2194 templateBind(instance.nodes.first).ref); 2205 templateBind(instance.nodes.first).ref);
2195 2206
2196 host.append(instance); 2207 host.append(instance);
2197 return new Future(() { 2208 return new Future(() {
2198 expect(host.firstChild.nextNode.text, 'bar:replaced'); 2209 expect(host.firstChild.nextNode.text, 'bar:replaced');
2199 }); 2210 });
2200 }); 2211 });
2201 2212
2213 test('CreateInstance - sync error', () {
2214 var div = createTestHtml('<template bind="{{}}">{{foo}}</template>');
2215 var outer = templateBind(div.nodes.first);
2216 var model = 1; // model is missing 'foo' should throw.
2217 expect(() => outer.createInstance(model, new TestBindingSyntax()),
2218 throwsA(isNoSuchMethodError));
2219 });
2220
2221 test('CreateInstance - async error', () {
2222 var div = createTestHtml(
2223 '<template bind="{{a}}">'
2224 '<template bind="{{b}}">'
2225 '{{ foo }}:{{ replaceme }}'
2226 '</template>'
2227 '</template>');
2228 var outer = templateBind(div.nodes.first);
2229 var model = toObservable({'b': 1}); // missing 'foo' should throw.
2230
2231 bool seen = false;
2232 runZoned(() => outer.createInstance(model, new TestBindingSyntax()),
Siggi Cherem (dart-lang) 2014/03/26 22:36:17 I'm not 100% convinced about having some errors be
2233 onError: (e) {
2234 expect(e, isNoSuchMethodError);
2235 seen = true;
2236 });
2237 return new Future(() { expect(seen, isTrue); });
2238 });
2239
2202 test('Repeat - svg', () { 2240 test('Repeat - svg', () {
2203 var div = createTestHtml( 2241 var div = createTestHtml(
2204 '<svg width="400" height="110">' 2242 '<svg width="400" height="110">'
2205 '<template repeat>' 2243 '<template repeat>'
2206 '<rect width="{{ width }}" height="{{ height }}" />' 2244 '<rect width="{{ width }}" height="{{ height }}" />'
2207 '</template>' 2245 '</template>'
2208 '</svg>'); 2246 '</svg>');
2209 2247
2210 var model = toObservable([{ 'width': 10, 'height': 11 }, 2248 var model = toObservable([{ 'width': 10, 'height': 11 },
2211 { 'width': 20, 'height': 21 }]); 2249 { 'width': 20, 'height': 21 }]);
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
2395 } 2433 }
2396 } 2434 }
2397 2435
2398 class Issue18Syntax extends BindingDelegate { 2436 class Issue18Syntax extends BindingDelegate {
2399 prepareBinding(path, name, node) { 2437 prepareBinding(path, name, node) {
2400 if (name != 'class') return null; 2438 if (name != 'class') return null;
2401 2439
2402 return (model, _, oneTime) => new PathObserver(model, path); 2440 return (model, _, oneTime) => new PathObserver(model, path);
2403 } 2441 }
2404 } 2442 }
OLDNEW
« no previous file with comments | « pkg/template_binding/test/node_bind_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698