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

Side by Side Diff: tests/html/node_model_test.dart

Issue 12899003: Attempting to stabilize node_model_test on IE9 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 9 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 | « no previous file | 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 node_model_test; 5 library node_model_test;
6 import 'dart:async'; 6 import 'dart:async';
7 import 'dart:html'; 7 import 'dart:html';
8 import '../../pkg/unittest/lib/unittest.dart'; 8 import '../../pkg/unittest/lib/unittest.dart';
9 import '../../pkg/unittest/lib/html_config.dart'; 9 import '../../pkg/unittest/lib/html_config.dart';
10 10
11 var stepDuration;
11 Future get nextStep { 12 Future get nextStep {
12 return new Future.delayed(new Duration()); 13 return new Future.delayed(stepDuration);
13 } 14 }
14 15
15 class ModelTracker { 16 class ModelTracker {
16 Element element = new DivElement(); 17 Element element = new DivElement();
17 List models = []; 18 List models = [];
18 19
19 ModelTracker() { 20 ModelTracker() {
20 element.onModelChanged.listen((node) { 21 element.onModelChanged.listen((node) {
21 models.add(node.model); 22 models.add(node.model);
22 }); 23 });
23 } 24 }
24 25
25 void append(ModelTracker other) { 26 void append(ModelTracker other) {
26 element.append(other.element); 27 element.append(other.element);
27 } 28 }
28 29
29 get model => element.model; 30 get model => element.model;
30 void set model(value) { 31 void set model(value) {
31 element.model = value; 32 element.model = value;
32 } 33 }
33 34
34 void clearModel() { 35 void clearModel() {
35 element.clearModel(); 36 element.clearModel();
36 } 37 }
38
39 void remove() {
40 element.remove();
41 }
37 } 42 }
38 43
39 main() { 44 main() {
40 useHtmlConfiguration(); 45 useHtmlConfiguration();
41 46
47 if (MutationObserver.supported) {
48 stepDuration = new Duration();
49 } else {
50 // Need to step after the tree update notifications, but on IE9 these may
51 // get polyfilled to use setTimeout(0). So use a longer timer to try to
52 // get a later callback.
53 stepDuration = new Duration(milliseconds: 15);
54 }
55
42 test('basic top down', () { 56 test('basic top down', () {
43 var a = new DivElement(); 57 var a = new DivElement();
44 var b = new SpanElement(); 58 var b = new SpanElement();
45 var c = new DivElement(); 59 var c = new DivElement();
46 var d = new DivElement(); 60 var d = new DivElement();
47 var e = new DivElement(); 61 var e = new DivElement();
48 var model = {}; 62 var model = {};
49 var model2 = {}; 63 var model2 = {};
50 var model3 = {}; 64 var model3 = {};
51 65
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 }).then((_) { 106 }).then((_) {
93 d.remove(); 107 d.remove();
94 c.append(d); 108 c.append(d);
95 109
96 return nextStep; 110 return nextStep;
97 }).then((_) { 111 }).then((_) {
98 expect(d.model, model3); 112 expect(d.model, model3);
99 113
100 c.clearModel(); 114 c.clearModel();
101 expect(d.model, model2); 115 expect(d.model, model2);
116
117 a.remove();
118 return nextStep;
102 }); 119 });
103 }); 120 });
104 121
105 test('changes', () { 122 test('changes', () {
106 var a = new ModelTracker(); 123 var a = new ModelTracker();
107 var b = new ModelTracker(); 124 var b = new ModelTracker();
108 var c = new ModelTracker(); 125 var c = new ModelTracker();
109 var d = new ModelTracker(); 126 var d = new ModelTracker();
110 127
111 var model = {}; 128 var model = {};
(...skipping 21 matching lines...) Expand all
133 return nextStep; 150 return nextStep;
134 }).then((_) { 151 }).then((_) {
135 c.model = cModel; 152 c.model = cModel;
136 expect(b.models, [model]); 153 expect(b.models, [model]);
137 expect(c.models, [model, cModel]); 154 expect(c.models, [model, cModel]);
138 expect(d.models, [model, cModel]); 155 expect(d.models, [model, cModel]);
139 156
140 c.clearModel(); 157 c.clearModel();
141 expect(c.models, [model, cModel, model]); 158 expect(c.models, [model, cModel, model]);
142 expect(d.models, [model, cModel, model]); 159 expect(d.models, [model, cModel, model]);
160
161 a.remove();
162 return nextStep;
143 }); 163 });
144 }); 164 });
145 165
146 test('bottom up', () { 166 test('bottom up', () {
147 var a = new ModelTracker(); 167 var a = new ModelTracker();
148 var b = new ModelTracker(); 168 var b = new ModelTracker();
149 var c = new ModelTracker(); 169 var c = new ModelTracker();
150 var d = new ModelTracker(); 170 var d = new ModelTracker();
151 171
152 var aModel = {}; 172 var aModel = {};
153 var cModel = {}; 173 var cModel = {};
154 174
155 c.append(d); 175 c.append(d);
156 c.model = cModel; 176 c.model = cModel;
157 b.append(c); 177 b.append(c);
158 a.append(b); 178 a.append(b);
159 a.model = aModel; 179 a.model = aModel;
160 document.body.append(a.element); 180 document.body.append(a.element);
161 181
162 return nextStep.then((_) { 182 return nextStep.then((_) {
163 expect(a.models, [aModel]); 183 expect(a.models, [aModel]);
164 expect(b.models, [aModel]); 184 expect(b.models, [aModel]);
165 expect(c.models, [cModel]); 185 expect(c.models, [cModel]);
166 expect(d.models, [cModel]); 186 expect(d.models, [cModel]);
187
188 a.remove();
189 return nextStep;
167 }); 190 });
168 }); 191 });
169 } 192 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698