| Index: pkg/polymer_expressions/test/bindings_test.dart
|
| diff --git a/pkg/polymer_expressions/test/bindings_test.dart b/pkg/polymer_expressions/test/bindings_test.dart
|
| index 8fb04dc0387917f861689e977814e842b0ca6689..cf37e1d26058ba8f8d7a76d335711c3a68c20a06 100644
|
| --- a/pkg/polymer_expressions/test/bindings_test.dart
|
| +++ b/pkg/polymer_expressions/test/bindings_test.dart
|
| @@ -5,6 +5,8 @@
|
| library bindings_test;
|
|
|
| import 'dart:html';
|
| +
|
| +import 'package:logging/logging.dart';
|
| import 'package:mdv/mdv.dart' as mdv;
|
| import 'package:observe/observe.dart';
|
| import 'package:observe/src/microtask.dart';
|
| @@ -16,18 +18,63 @@ main() {
|
| mdv.initialize();
|
| useHtmlConfiguration();
|
|
|
| - group('cursor position tests', () {
|
| + group('bindings', () {
|
| + var stop = null;
|
| + var messages = [];
|
| var testDiv;
|
| setUp(() {
|
| + stop = Logger.root.onRecord.listen((r) => messages.add(r));
|
| document.body.append(testDiv = new DivElement());
|
| });
|
|
|
| tearDown(() {
|
| testDiv.remove();
|
| testDiv = null;
|
| + stop.cancel();
|
| + stop = null;
|
| + messages = [];
|
| + });
|
| +
|
| + observeTest('should update binding when data changes', () {
|
| + var model = new NotifyModel();
|
| + var binding = new PolymerExpressions()
|
| + .getBinding(model, 'x', null, null);
|
| + expect(binding.value, isNull);
|
| + model.x = "hi";
|
| + performMicrotaskCheckpoint();
|
| + expect(binding.value, 'hi');
|
| + expect(messages.length, 0);
|
| + });
|
| +
|
| + observeTest('should update text content when data changes', () {
|
| + var model = new NotifyModel('abcde');
|
| + var template = new Element.html(
|
| + '<template><span>{{x}}</span></template>');
|
| + testDiv.append(template.createInstance(model, new PolymerExpressions()));
|
| +
|
| + performMicrotaskCheckpoint();
|
| + var el = testDiv.query("span");
|
| + expect(el.text, 'abcde');
|
| + expect(model.x, 'abcde');
|
| + model.x = '___';
|
| +
|
| + performMicrotaskCheckpoint();
|
| + expect(model.x, '___');
|
| + expect(el.text, '___');
|
| });
|
|
|
| - test('cursor position test', wrapMicrotask(() {
|
| + observeTest('should log eval exceptions', () {
|
| + var model = new NotifyModel('abcde');
|
| + var template = new Element.html(
|
| + '<template><span>{{foo}}</span></template>');
|
| + testDiv.append(template.createInstance(model, new PolymerExpressions()));
|
| + performMicrotaskCheckpoint();
|
| + expect(messages.length, 1);
|
| + expect(messages[0].message,
|
| + "Error evaluating expression 'foo': variable 'foo' not found");
|
| + });
|
| +
|
| + observeTest('should preserve the cursor position', () {
|
| var model = new NotifyModel('abcde');
|
| var template = new Element.html(
|
| '<template><input id="i1" value={{x}}></template>');
|
| @@ -68,7 +115,7 @@ main() {
|
| expect(el.selectionEnd, 4);
|
|
|
| subscription.cancel();
|
| - }));
|
| + });
|
| });
|
| }
|
|
|
| @@ -79,6 +126,8 @@ class NotifyModel extends ChangeNotifier {
|
|
|
| get x => _x;
|
| set x(value) {
|
| - _x = notifyPropertyChange(const Symbol('x'), _x, value);
|
| + _x = notifyPropertyChange(#x, _x, value);
|
| }
|
| }
|
| +
|
| +observeTest(name, testCase) => test(name, wrapMicrotask(testCase));
|
|
|