OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 view_tests; | 5 library view_tests; |
6 | 6 |
7 import 'dart:html'; | 7 import 'dart:html'; |
8 import '../../../swarm_ui_lib/view/view.dart'; | 8 import '../../../swarm_ui_lib/view/view.dart'; |
9 import 'package:unittest/html_config.dart'; | 9 import 'package:unittest/html_config.dart'; |
10 import 'package:unittest/unittest.dart'; | 10 import 'package:unittest/unittest.dart'; |
(...skipping 16 matching lines...) Expand all Loading... |
27 }); | 27 }); |
28 | 28 |
29 test('calls afterRender()', () { | 29 test('calls afterRender()', () { |
30 var result = ''; | 30 var result = ''; |
31 final view = new TestView(); | 31 final view = new TestView(); |
32 view.renderFn = () { | 32 view.renderFn = () { |
33 result = '${result}render'; | 33 result = '${result}render'; |
34 return new Element.html('<div class="test"></div>'); | 34 return new Element.html('<div class="test"></div>'); |
35 }; | 35 }; |
36 | 36 |
37 view.afterRenderFn = (node) { result = '${result}after'; }; | 37 view.afterRenderFn = (node) { |
38 | 38 result = '${result}after'; |
| 39 }; |
39 | 40 |
40 view.addToDocument(document.body); | 41 view.addToDocument(document.body); |
41 expect(result, equals('renderafter')); | 42 expect(result, equals('renderafter')); |
42 }); | 43 }); |
43 | 44 |
44 test('calls enterDocument()', () { | 45 test('calls enterDocument()', () { |
45 final view = new TestView(); | 46 final view = new TestView(); |
46 bool entered = false; | 47 bool entered = false; |
47 view.enterDocumentFn = () { entered = true; }; | 48 view.enterDocumentFn = () { |
| 49 entered = true; |
| 50 }; |
48 | 51 |
49 view.addToDocument(document.body); | 52 view.addToDocument(document.body); |
50 expect(entered, isTrue); | 53 expect(entered, isTrue); |
51 }); | 54 }); |
52 }); | 55 }); |
53 | 56 |
54 group('afterRender()', () { | 57 group('afterRender()', () { |
55 test('passes rendered node', () { | 58 test('passes rendered node', () { |
56 final rendered = new Element.html('<div class="node"></div>'); | 59 final rendered = new Element.html('<div class="node"></div>'); |
57 final view = new TestView(); | 60 final view = new TestView(); |
58 view.renderFn = () => rendered; | 61 view.renderFn = () => rendered; |
59 view.afterRenderFn = (node) { expect(node, equals(rendered)); }; | 62 view.afterRenderFn = (node) { |
| 63 expect(node, equals(rendered)); |
| 64 }; |
60 | 65 |
61 view.addToDocument(document.body); | 66 view.addToDocument(document.body); |
62 }); | 67 }); |
63 }); | 68 }); |
64 | 69 |
65 group('childViewAdded()', () { | 70 group('childViewAdded()', () { |
66 test('calls enterDocument() if parent is in document', () { | 71 test('calls enterDocument() if parent is in document', () { |
67 final parent = new TestView(); | 72 final parent = new TestView(); |
68 parent.addToDocument(document.body); | 73 parent.addToDocument(document.body); |
69 | 74 |
70 bool entered = false; | 75 bool entered = false; |
71 final child = new TestView(); | 76 final child = new TestView(); |
72 child.enterDocumentFn = () { entered = true; }; | 77 child.enterDocumentFn = () { |
| 78 entered = true; |
| 79 }; |
73 | 80 |
74 // Add the child. | 81 // Add the child. |
75 parent.childViews = [child]; | 82 parent.childViews = [child]; |
76 parent.childViewAdded(child); | 83 parent.childViewAdded(child); |
77 | 84 |
78 expect(entered, isTrue); | 85 expect(entered, isTrue); |
79 }); | 86 }); |
80 | 87 |
81 test('does not call enterDocument() if parent is not in document', () { | 88 test('does not call enterDocument() if parent is not in document', () { |
82 final parent = new TestView(); | 89 final parent = new TestView(); |
83 | 90 |
84 bool entered = false; | 91 bool entered = false; |
85 final child = new TestView(); | 92 final child = new TestView(); |
86 child.enterDocumentFn = () { entered = true; }; | 93 child.enterDocumentFn = () { |
| 94 entered = true; |
| 95 }; |
87 | 96 |
88 // Add the child. | 97 // Add the child. |
89 parent.childViews = [child]; | 98 parent.childViews = [child]; |
90 parent.childViewAdded(child); | 99 parent.childViewAdded(child); |
91 | 100 |
92 expect(entered, isFalse); | 101 expect(entered, isFalse); |
93 }); | 102 }); |
94 | 103 |
95 test('calls enterDocument() each time added', () { | 104 test('calls enterDocument() each time added', () { |
96 final parent = new TestView(); | 105 final parent = new TestView(); |
97 parent.addToDocument(document.body); | 106 parent.addToDocument(document.body); |
98 | 107 |
99 var entered = 0; | 108 var entered = 0; |
100 final child = new TestView(); | 109 final child = new TestView(); |
101 child.enterDocumentFn = () { entered++; }; | 110 child.enterDocumentFn = () { |
| 111 entered++; |
| 112 }; |
102 | 113 |
103 // Add the child. | 114 // Add the child. |
104 parent.childViews = [child]; | 115 parent.childViews = [child]; |
105 parent.childViewAdded(child); | 116 parent.childViewAdded(child); |
106 parent.childViewRemoved(child); | 117 parent.childViewRemoved(child); |
107 parent.childViewAdded(child); | 118 parent.childViewAdded(child); |
108 parent.childViewRemoved(child); | 119 parent.childViewRemoved(child); |
109 parent.childViewAdded(child); | 120 parent.childViewAdded(child); |
110 parent.childViewRemoved(child); | 121 parent.childViewRemoved(child); |
111 | 122 |
112 expect(entered, equals(3)); | 123 expect(entered, equals(3)); |
113 }); | 124 }); |
114 }); | 125 }); |
115 | 126 |
116 group('childViewRemoved()', () { | 127 group('childViewRemoved()', () { |
117 test('calls exitDocument() if parent is in document', () { | 128 test('calls exitDocument() if parent is in document', () { |
118 final parent = new TestView(); | 129 final parent = new TestView(); |
119 parent.addToDocument(document.body); | 130 parent.addToDocument(document.body); |
120 | 131 |
121 bool exited = false; | 132 bool exited = false; |
122 final child = new TestView(); | 133 final child = new TestView(); |
123 child.exitDocumentFn = () { exited = true; }; | 134 child.exitDocumentFn = () { |
| 135 exited = true; |
| 136 }; |
124 | 137 |
125 // Remove the child. | 138 // Remove the child. |
126 parent.childViews = []; | 139 parent.childViews = []; |
127 parent.childViewRemoved(child); | 140 parent.childViewRemoved(child); |
128 | 141 |
129 expect(exited, isTrue); | 142 expect(exited, isTrue); |
130 }); | 143 }); |
131 | 144 |
132 test('does not call exitDocument() if parent is not in document', () { | 145 test('does not call exitDocument() if parent is not in document', () { |
133 final parent = new TestView(); | 146 final parent = new TestView(); |
134 | 147 |
135 bool exited = false; | 148 bool exited = false; |
136 final child = new TestView(); | 149 final child = new TestView(); |
137 child.exitDocumentFn = () { exited = true; }; | 150 child.exitDocumentFn = () { |
| 151 exited = true; |
| 152 }; |
138 | 153 |
139 // Remove the child. | 154 // Remove the child. |
140 parent.childViews = []; | 155 parent.childViews = []; |
141 parent.childViewRemoved(child); | 156 parent.childViewRemoved(child); |
142 | 157 |
143 expect(exited, isFalse); | 158 expect(exited, isFalse); |
144 }); | 159 }); |
145 | 160 |
146 test('calls exitDocument() each time removed', () { | 161 test('calls exitDocument() each time removed', () { |
147 final parent = new TestView(); | 162 final parent = new TestView(); |
148 parent.addToDocument(document.body); | 163 parent.addToDocument(document.body); |
149 | 164 |
150 var exited = 0; | 165 var exited = 0; |
151 final child = new TestView(); | 166 final child = new TestView(); |
152 child.exitDocumentFn = () { exited++; }; | 167 child.exitDocumentFn = () { |
| 168 exited++; |
| 169 }; |
153 | 170 |
154 // Add the child. | 171 // Add the child. |
155 parent.childViews = [child]; | 172 parent.childViews = [child]; |
156 parent.childViewAdded(child); | 173 parent.childViewAdded(child); |
157 parent.childViewRemoved(child); | 174 parent.childViewRemoved(child); |
158 parent.childViewAdded(child); | 175 parent.childViewAdded(child); |
159 parent.childViewRemoved(child); | 176 parent.childViewRemoved(child); |
160 parent.childViewAdded(child); | 177 parent.childViewAdded(child); |
161 parent.childViewRemoved(child); | 178 parent.childViewRemoved(child); |
162 | 179 |
163 expect(exited, equals(3)); | 180 expect(exited, equals(3)); |
164 }); | 181 }); |
165 }); | 182 }); |
166 | 183 |
167 group('enterDocument()', () { | 184 group('enterDocument()', () { |
168 test('children are called before parents', () { | 185 test('children are called before parents', () { |
169 var result = ''; | 186 var result = ''; |
170 | 187 |
171 final parent = new TestView(); | 188 final parent = new TestView(); |
172 parent.enterDocumentFn = () { result = '${result}parent'; }; | 189 parent.enterDocumentFn = () { |
| 190 result = '${result}parent'; |
| 191 }; |
173 | 192 |
174 final child = new TestView(); | 193 final child = new TestView(); |
175 child.enterDocumentFn = () { result = '${result}child'; }; | 194 child.enterDocumentFn = () { |
| 195 result = '${result}child'; |
| 196 }; |
176 | 197 |
177 parent.childViews = [child]; | 198 parent.childViews = [child]; |
178 | 199 |
179 parent.addToDocument(document.body); | 200 parent.addToDocument(document.body); |
180 expect(result, equals('childparent')); | 201 expect(result, equals('childparent')); |
181 }); | 202 }); |
182 }); | 203 }); |
183 } | 204 } |
184 | 205 |
185 class TestView extends View { | 206 class TestView extends View { |
186 Function renderFn; | 207 Function renderFn; |
187 Function afterRenderFn; | 208 Function afterRenderFn; |
188 Function enterDocumentFn; | 209 Function enterDocumentFn; |
189 Function exitDocumentFn; | 210 Function exitDocumentFn; |
190 List<View> childViews; | 211 List<View> childViews; |
191 | 212 |
192 TestView() : super(), childViews = [] { | 213 TestView() |
| 214 : super(), |
| 215 childViews = [] { |
193 // Default behavior. | 216 // Default behavior. |
194 renderFn = () => new Element.html('<div class="test"></div>'); | 217 renderFn = () => new Element.html('<div class="test"></div>'); |
195 afterRenderFn = (node) {}; | 218 afterRenderFn = (node) {}; |
196 enterDocumentFn = () {}; | 219 enterDocumentFn = () {}; |
197 exitDocumentFn = () {}; | 220 exitDocumentFn = () {}; |
198 } | 221 } |
199 | 222 |
200 Element render() => renderFn(); | 223 Element render() => renderFn(); |
201 void afterRender(Element node) { afterRenderFn(node); } | 224 void afterRender(Element node) { |
202 void enterDocument() { enterDocumentFn(); } | 225 afterRenderFn(node); |
203 void exitDocument() { exitDocumentFn(); } | 226 } |
| 227 |
| 228 void enterDocument() { |
| 229 enterDocumentFn(); |
| 230 } |
| 231 |
| 232 void exitDocument() { |
| 233 exitDocumentFn(); |
| 234 } |
204 } | 235 } |
OLD | NEW |