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

Unified Diff: pkg/mdv/test/element_bindings_test.dart

Issue 19771010: implement dirty checking for @observable objects (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: logging for loops in dirty checking 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 side-by-side diff with in-line comments
Download patch
Index: pkg/mdv/test/element_bindings_test.dart
diff --git a/pkg/mdv/test/element_bindings_test.dart b/pkg/mdv/test/element_bindings_test.dart
index 912cb010c4f255a6e1b3cc475822bc6d90cffa5f..3de588bbeaa87087a08dfeb1ba0ebf586fc60bdd 100644
--- a/pkg/mdv/test/element_bindings_test.dart
+++ b/pkg/mdv/test/element_bindings_test.dart
@@ -10,7 +10,7 @@ import 'package:mdv/mdv.dart' as mdv;
import 'package:observe/observe.dart';
import 'package:unittest/html_config.dart';
import 'package:unittest/unittest.dart';
-import 'observe_utils.dart';
+import 'mdv_test_utils.dart';
// Note: this file ported from
// https://github.com/toolkitchen/mdv/blob/master/tests/element_bindings.js
@@ -41,70 +41,70 @@ elementBindingTests() {
target.dispatchEvent(new Event(type, cancelable: false));
}
- test('Text', () {
+ observeTest('Text', () {
var template = new Element.html('<template bind>{{a}} and {{b}}');
testDiv.append(template);
var model = toSymbolMap({'a': 1, 'b': 2});
template.model = model;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
var text = testDiv.nodes[1];
expect(text.text, '1 and 2');
model[sym('a')] = 3;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(text.text, '3 and 2');
});
- test('SimpleBinding', () {
+ observeTest('SimpleBinding', () {
var el = new DivElement();
var model = toSymbolMap({'a': '1'});
el.bind('foo', model, 'a');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo'], '1');
model[sym('a')] = '2';
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo'], '2');
model[sym('a')] = 232.2;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo'], '232.2');
model[sym('a')] = 232;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo'], '232');
model[sym('a')] = null;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo'], '');
});
- test('SimpleBindingWithDashes', () {
+ observeTest('SimpleBindingWithDashes', () {
var el = new DivElement();
var model = toSymbolMap({'a': '1'});
el.bind('foo-bar', model, 'a');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo-bar'], '1');
model[sym('a')] = '2';
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo-bar'], '2');
});
- test('SimpleBindingWithComment', () {
+ observeTest('SimpleBindingWithComment', () {
var el = new DivElement();
el.innerHtml = '<!-- Comment -->';
var model = toSymbolMap({'a': '1'});
el.bind('foo-bar', model, 'a');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo-bar'], '1');
model[sym('a')] = '2';
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.attributes['foo-bar'], '2');
});
- test('PlaceHolderBindingText', () {
+ observeTest('PlaceHolderBindingText', () {
var model = toSymbolMap({
'adj': 'cruel',
'noun': 'world'
@@ -118,21 +118,21 @@ elementBindingTests() {
testDiv.append(template);
template.model = model;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
el = testDiv.nodes[1].nodes.first;
expect(el.text, 'Hello cruel world!');
model[sym('adj')] = 'happy';
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.text, 'Hello happy world!');
});
- test('InputElementTextBinding', () {
+ observeTest('InputElementTextBinding', () {
var model = toSymbolMap({'val': 'ping'});
var el = new InputElement();
el.bind('value', model, 'val');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.value, 'ping');
el.value = 'pong';
@@ -143,7 +143,7 @@ elementBindingTests() {
model = toSymbolMap({'a': {'b': {'c': 'ping'}}});
el.bind('value', model, 'a.b.c');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.value, 'ping');
el.value = 'pong';
@@ -152,17 +152,17 @@ elementBindingTests() {
// Start with the model property being absent.
model[sym('a')][sym('b')].remove(sym('c'));
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.value, '');
el.value = 'pong';
dispatchEvent('input', el);
expect(observePath(model, 'a.b.c').value, 'pong');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
// Model property unreachable (and unsettable).
model[sym('a')].remove(sym('b'));
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.value, '');
el.value = 'pong';
@@ -170,18 +170,18 @@ elementBindingTests() {
expect(observePath(model, 'a.b.c').value, null);
});
- test('InputElementCheckbox', () {
+ observeTest('InputElementCheckbox', () {
var model = toSymbolMap({'val': true});
var el = new InputElement();
testDiv.append(el);
el.type = 'checkbox';
el.bind('checked', model, 'val');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.checked, true);
model[sym('val')] = false;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.checked, false);
el.click();
@@ -200,14 +200,14 @@ elementBindingTests() {
el.dispatchEvent(new MouseEvent('click', view: window));
});
- test('InputElementCheckbox - binding updated on click', () {
+ observeTest('InputElementCheckbox - binding updated on click', () {
var model = toSymbolMap({'val': true});
var el = new InputElement();
testDiv.append(el);
el.type = 'checkbox';
el.bind('checked', model, 'val');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.checked, true);
el.onClick.listen((_) {
@@ -217,14 +217,14 @@ elementBindingTests() {
el.dispatchEvent(new MouseEvent('click', view: window));
});
- test('InputElementCheckbox - binding updated on change', () {
+ observeTest('InputElementCheckbox - binding updated on change', () {
var model = toSymbolMap({'val': true});
var el = new InputElement();
testDiv.append(el);
el.type = 'checkbox';
el.bind('checked', model, 'val');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el.checked, true);
el.onChange.listen((_) {
@@ -234,10 +234,10 @@ elementBindingTests() {
el.dispatchEvent(new MouseEvent('click', view: window));
});
- test('InputElementRadio', () {
+ observeTest('InputElementRadio', () {
var model = toSymbolMap({'val1': true, 'val2': false, 'val3': false,
'val4': true});
- var RADIO_GROUP_NAME = 'test';
+ var RADIO_GROUP_NAME = 'observeTest';
var container = testDiv;
@@ -265,7 +265,7 @@ elementBindingTests() {
el4.name = 'othergroup';
el4.bind('checked', model, 'val4');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el1.checked, true);
expect(el2.checked, false);
expect(el3.checked, false);
@@ -273,7 +273,7 @@ elementBindingTests() {
model[sym('val1')] = false;
model[sym('val2')] = true;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el1.checked, false);
expect(el2.checked, true);
expect(el3.checked, false);
@@ -294,10 +294,10 @@ elementBindingTests() {
expect(model[sym('val4')], true);
});
- test('InputElementRadioMultipleForms', () {
+ observeTest('InputElementRadioMultipleForms', () {
var model = toSymbolMap({'val1': true, 'val2': false, 'val3': false,
'val4': true});
- var RADIO_GROUP_NAME = 'test';
+ var RADIO_GROUP_NAME = 'observeTest';
var form1 = new FormElement();
testDiv.append(form1);
@@ -328,7 +328,7 @@ elementBindingTests() {
el4.name = RADIO_GROUP_NAME;
el4.bind('checked', model, 'val4');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(el1.checked, true);
expect(el2.checked, false);
expect(el3.checked, false);
@@ -353,7 +353,7 @@ elementBindingTests() {
expect(model[sym('val2')], true);
});
- test('BindToChecked', () {
+ observeTest('BindToChecked', () {
var div = new DivElement();
testDiv.append(div);
var child = new DivElement();
@@ -372,7 +372,7 @@ elementBindingTests() {
expect(model[sym('a')][sym('b')], false);
});
- test('Select selectedIndex', () {
+ observeTest('Select selectedIndex', () {
var select = new SelectElement();
testDiv.append(select);
var option0 = select.append(new OptionElement());
@@ -382,7 +382,7 @@ elementBindingTests() {
var model = toSymbolMap({'val': 2});
select.bind('selectedIndex', model, 'val');
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
expect(select.selectedIndex, 2);
select.selectedIndex = 1;
@@ -390,7 +390,7 @@ elementBindingTests() {
expect(model[sym('val')], 1);
});
- test('MultipleReferences', () {
+ observeTest('MultipleReferences', () {
var el = new DivElement();
var template = new Element.html('<template bind>');
template.content.append(el);
@@ -400,7 +400,7 @@ elementBindingTests() {
el.attributes['foo'] = '{{foo}} {{foo}}';
template.model = model;
- deliverChangeRecords();
+ performMicrotaskCheckpoint();
el = testDiv.nodes[1];
expect(el.attributes['foo'], 'bar bar');
});

Powered by Google App Engine
This is Rietveld 408576698