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

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

Issue 12754013: Adding an inheriting data model to Node (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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library node_model_test;
6 import 'dart:async';
7 import 'dart:html';
8 import '../../pkg/unittest/lib/unittest.dart';
9 import '../../pkg/unittest/lib/html_config.dart';
10
11 Future get nextStep {
12 return new Future.delayed(new Duration());
13 }
14
15 class ModelTracker {
16 Element element = new DivElement();
17 List models = [];
18
19 ModelTracker() {
20 element.onModelChanged.listen((model) {
21 models.add(model);
22 });
23 }
24
25 void append(ModelTracker other) {
26 element.append(other.element);
27 }
28
29 get model => element.model;
30 void set model(value) {
31 element.model = value;
32 }
33
34 void clearModel() {
35 element.clearModel();
36 }
37 }
38
39 main() {
40 useHtmlConfiguration();
41
42 test('basic top down', () {
43 var a = new DivElement();
44 var b = new SpanElement();
45 var c = new DivElement();
46 var d = new DivElement();
47 var e = new DivElement();
48 var model = {};
49 var model2 = {};
50 var model3 = {};
51
52 document.body.append(a);
53 a.append(b);
54
55 a.model = model;
56 expect(a.model, model);
57 expect(b.model, model);
58
59 b.append(c);
60
61 return nextStep.then((_) {
62 expect(c.model, model);
63
64 d.append(e);
65 c.append(d);
66
67 return nextStep;
68 }).then((_) {
69 expect(e.model, model);
70
71 b.remove();
72 return nextStep;
73 }).then((_) {
74 expect(b.model, isNull);
75 expect(e.model, isNull);
76
77 return nextStep;
78 }).then((_) {
79 a.append(b);
80 a.model = model2;
81
82 return nextStep;
83 }).then((_) {
84 expect(e.model, model2);
85
86 c.model = model3;
87 expect(c.model, model3);
88 expect(b.model, model2);
89 expect(e.model, model3);
90
91 return nextStep;
92 }).then((_) {
93 d.remove();
94 c.append(d);
95
96 return nextStep;
97 }).then((_) {
98 expect(d.model, model3);
99
100 c.clearModel();
101 expect(d.model, model2);
102 });
103 });
104
105 test('changes', () {
106 var a = new ModelTracker();
107 var b = new ModelTracker();
108 var c = new ModelTracker();
109 var d = new ModelTracker();
110
111 var model = {};
112 var cModel = {};
113
114 document.body.append(a.element);
115
116 a.append(b);
117
118 return nextStep.then((_) {
119 expect(a.models, []);
120 expect(b.models.length, 0);
121
122 a.model = model;
123
124 expect(a.models, [model]);
125 expect(b.models, [model]);
126
127 b.append(c);
128 return nextStep;
129 }).then((_) {
130 expect(c.models, [model]);
131
132 c.append(d);
133 return nextStep;
134 }).then((_) {
135 c.model = cModel;
136 expect(b.models, [model]);
137 expect(c.models, [model, cModel]);
138 expect(d.models, [model, cModel]);
139
140 c.clearModel();
141 expect(c.models, [model, cModel, model]);
142 expect(d.models, [model, cModel, model]);
143 });
144 });
145
146 test('bottom up', () {
147 var a = new ModelTracker();
148 var b = new ModelTracker();
149 var c = new ModelTracker();
150 var d = new ModelTracker();
151
152 var aModel = {};
153 var cModel = {};
154
155 c.append(d);
156 c.model = cModel;
157 b.append(c);
158 a.append(b);
159 a.model = aModel;
160 document.body.append(a.element);
161
162 return nextStep.then((_) {
163 expect(a.models, [aModel]);
164 expect(b.models, [aModel]);
165 expect(c.models, [cModel]);
166 expect(d.models, [cModel]);
167 });
168 });
169 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698