Chromium Code Reviews| Index: pkg/template_binding/test/template_binding_test.dart |
| diff --git a/pkg/template_binding/test/template_binding_test.dart b/pkg/template_binding/test/template_binding_test.dart |
| index 375d3d64e8e8d0e59af191952daf8fc6f3a07a05..0a8fef1033f498d4f9012898124c4225cf71cdca 100644 |
| --- a/pkg/template_binding/test/template_binding_test.dart |
| +++ b/pkg/template_binding/test/template_binding_test.dart |
| @@ -397,6 +397,59 @@ templateInstantiationTests() { |
| }); |
| }); |
| + test('Bind If minimal discardChanges', () { |
| + var div = createTestHtml( |
| + '<template bind="{{bound}}" if="{{predicate}}">value:{{ value }}' |
| + '</template>'); |
| + // Dart Note: bound changed from null->{}. |
| + var m = toObservable({ 'bound': {}, 'predicate': null }); |
| + var template = div.firstChild; |
| + |
| + var discardChangesCalled = { 'bound': 0, 'predicate': 0 }; |
| + templateBind(template) |
| + ..model = m |
| + ..bindingDelegate = |
| + new BindIfMinimalDiscardChanges(discardChangesCalled); |
| + |
| + return new Future(() { |
| + expect(discardChangesCalled['bound'], 0); |
| + expect(discardChangesCalled['predicate'], 0); |
| + expect(div.childNodes.length, 1); |
| + m['predicate'] = 1; |
| + }).then(endOfMicrotask).then((_) { |
| + expect(discardChangesCalled['bound'], 1); |
| + expect(discardChangesCalled['predicate'], 0); |
| + |
| + expect(div.nodes.length, 2); |
| + expect(div.lastChild.text, 'value:'); |
| + |
| + m['bound'] = toObservable({'value': 2}); |
| + }).then(endOfMicrotask).then((_) { |
| + expect(discardChangesCalled['bound'], 1); |
| + expect(discardChangesCalled['predicate'], 1); |
| + |
| + expect(div.nodes.length, 2); |
| + expect(div.lastChild.text, 'value:2'); |
| + |
| + m['bound']['value'] = 3; |
| + |
| + }).then(endOfMicrotask).then((_) { |
| + expect(discardChangesCalled['bound'], 1); |
| + expect(discardChangesCalled['predicate'], 1); |
| + |
| + expect(div.nodes.length, 2); |
| + expect(div.lastChild.text, 'value:3'); |
| + |
| + templateBind(template).model = null; |
| + }).then(endOfMicrotask).then((_) { |
| + expect(discardChangesCalled['bound'], 1); |
| + expect(discardChangesCalled['predicate'], 1); |
| + |
| + expect(div.nodes.length, 1); |
| + }); |
| + }); |
| + |
| + |
| test('Empty-If', () { |
| var div = createTestHtml('<template if>{{ value }}</template>'); |
| var template = div.firstChild; |
| @@ -2643,6 +2696,31 @@ class Issue18Syntax extends BindingDelegate { |
| } |
| } |
| +class BindIfMinimalDiscardChanges extends BindingDelegate { |
| + Map<String, int> discardChangesCalled; |
| + |
| + BindIfMinimalDiscardChanges(this.discardChangesCalled) : super() {} |
| + |
| + prepareBinding(path, name, node) { |
| + return (model, node, oneTime) => |
| + new DiscardCountingPathObserver(discardChangesCalled, model, path); |
| + } |
| +} |
| + |
| +class DiscardCountingPathObserver extends PathObserver { |
| + Map<String, int> discardChangesCalled; |
| + |
| + DiscardCountingPathObserver(this.discardChangesCalled, model, path) |
| + : super(model, path) {} |
| + |
| + get value => discardChanges(); |
|
Siggi Cherem (dart-lang)
2014/08/13 23:00:26
nit: I'd just combine this getter and the method b
jakemac
2014/08/14 18:00:49
Done.
|
| + |
| + discardChanges() { |
| + discardChangesCalled[path.toString()]++; |
| + return super.value; |
| + } |
| +} |
| + |
| class TestAccessorModel extends Observable { |
| @observable var value = 1; |
| var count = 0; |