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('../../../../ui_lib/base/base.dart'); | 8 #import('../../../../ui_lib/base/base.dart'); |
9 #import('../../../../ui_lib/view/view.dart'); | 9 #import('../../../../ui_lib/view/view.dart'); |
10 #import('../../../../../lib/unittest/unittest.dart'); | 10 #import('../../../../../lib/unittest/unittest.dart'); |
11 #import('../../../../../lib/unittest/html_config.dart'); | 11 #import('../../../../../lib/unittest/html_config.dart'); |
12 | 12 |
13 void main() { | 13 void main() { |
14 useHtmlConfiguration(); | 14 useHtmlConfiguration(); |
15 test('does not render immediately', () { | 15 test('does not render immediately', () { |
16 final view = new TestView(); | 16 final view = new TestView(); |
17 expect(view.isRendered).isFalse(); | 17 expect(view.isRendered, isFalse); |
18 | 18 |
19 view.addToDocument(document.body); | 19 view.addToDocument(document.body); |
20 expect(view.isRendered).isTrue(); | 20 expect(view.isRendered, isTrue); |
21 }); | 21 }); |
22 | 22 |
23 group('addToDocument()', () { | 23 group('addToDocument()', () { |
24 test('causes view to render', () { | 24 test('causes view to render', () { |
25 final view = new TestView(); | 25 final view = new TestView(); |
26 view.addToDocument(document.body); | 26 view.addToDocument(document.body); |
27 expect(view.isRendered).isTrue(); | 27 expect(view.isRendered, isTrue); |
28 }); | 28 }); |
29 | 29 |
30 test('calls afterRender()', () { | 30 test('calls afterRender()', () { |
31 var result = ''; | 31 var result = ''; |
32 final view = new TestView(); | 32 final view = new TestView(); |
33 view.renderFn = () { | 33 view.renderFn = () { |
34 result += 'render'; | 34 result += 'render'; |
35 return new Element.html('<div class="test"></div>'); | 35 return new Element.html('<div class="test"></div>'); |
36 }; | 36 }; |
37 | 37 |
38 view.afterRenderFn = (node) { result += 'after'; }; | 38 view.afterRenderFn = (node) { result += 'after'; }; |
39 | 39 |
40 | 40 |
41 view.addToDocument(document.body); | 41 view.addToDocument(document.body); |
42 expect(result).equals('renderafter'); | 42 expect(result, equals('renderafter')); |
43 }); | 43 }); |
44 | 44 |
45 test('calls enterDocument()', () { | 45 test('calls enterDocument()', () { |
46 final view = new TestView(); | 46 final view = new TestView(); |
47 bool entered = false; | 47 bool entered = false; |
48 view.enterDocumentFn = () { entered = true; }; | 48 view.enterDocumentFn = () { entered = true; }; |
49 | 49 |
50 view.addToDocument(document.body); | 50 view.addToDocument(document.body); |
51 expect(entered).isTrue(); | 51 expect(entered, isTrue); |
52 }); | 52 }); |
53 }); | 53 }); |
54 | 54 |
55 group('afterRender()', () { | 55 group('afterRender()', () { |
56 test('passes rendered node', () { | 56 test('passes rendered node', () { |
57 final rendered = new Element.html('<div class="node"></div>'); | 57 final rendered = new Element.html('<div class="node"></div>'); |
58 final view = new TestView(); | 58 final view = new TestView(); |
59 view.renderFn = () => rendered; | 59 view.renderFn = () => rendered; |
60 view.afterRenderFn = (node) { expect(node).equals(rendered); }; | 60 view.afterRenderFn = (node) { expect(node, equals(rendered)); }; |
61 | 61 |
62 view.addToDocument(document.body); | 62 view.addToDocument(document.body); |
63 }); | 63 }); |
64 }); | 64 }); |
65 | 65 |
66 group('childViewAdded()', () { | 66 group('childViewAdded()', () { |
67 test('calls enterDocument() if parent is in document', () { | 67 test('calls enterDocument() if parent is in document', () { |
68 final parent = new TestView(); | 68 final parent = new TestView(); |
69 parent.addToDocument(document.body); | 69 parent.addToDocument(document.body); |
70 | 70 |
71 bool entered = false; | 71 bool entered = false; |
72 final child = new TestView(); | 72 final child = new TestView(); |
73 child.enterDocumentFn = () { entered = true; }; | 73 child.enterDocumentFn = () { entered = true; }; |
74 | 74 |
75 // Add the child. | 75 // Add the child. |
76 parent.childViews = [child]; | 76 parent.childViews = [child]; |
77 parent.childViewAdded(child); | 77 parent.childViewAdded(child); |
78 | 78 |
79 expect(entered).isTrue(); | 79 expect(entered, isTrue); |
80 }); | 80 }); |
81 | 81 |
82 test('does not call enterDocument() if parent is not in document', () { | 82 test('does not call enterDocument() if parent is not in document', () { |
83 final parent = new TestView(); | 83 final parent = new TestView(); |
84 | 84 |
85 bool entered = false; | 85 bool entered = false; |
86 final child = new TestView(); | 86 final child = new TestView(); |
87 child.enterDocumentFn = () { entered = true; }; | 87 child.enterDocumentFn = () { entered = true; }; |
88 | 88 |
89 // Add the child. | 89 // Add the child. |
90 parent.childViews = [child]; | 90 parent.childViews = [child]; |
91 parent.childViewAdded(child); | 91 parent.childViewAdded(child); |
92 | 92 |
93 expect(entered).isFalse(); | 93 expect(entered, isFalse); |
94 }); | 94 }); |
95 | 95 |
96 test('calls enterDocument() each time added', () { | 96 test('calls enterDocument() each time added', () { |
97 final parent = new TestView(); | 97 final parent = new TestView(); |
98 parent.addToDocument(document.body); | 98 parent.addToDocument(document.body); |
99 | 99 |
100 var entered = 0; | 100 var entered = 0; |
101 final child = new TestView(); | 101 final child = new TestView(); |
102 child.enterDocumentFn = () { entered++; }; | 102 child.enterDocumentFn = () { entered++; }; |
103 | 103 |
104 // Add the child. | 104 // Add the child. |
105 parent.childViews = [child]; | 105 parent.childViews = [child]; |
106 parent.childViewAdded(child); | 106 parent.childViewAdded(child); |
107 parent.childViewRemoved(child); | 107 parent.childViewRemoved(child); |
108 parent.childViewAdded(child); | 108 parent.childViewAdded(child); |
109 parent.childViewRemoved(child); | 109 parent.childViewRemoved(child); |
110 parent.childViewAdded(child); | 110 parent.childViewAdded(child); |
111 parent.childViewRemoved(child); | 111 parent.childViewRemoved(child); |
112 | 112 |
113 expect(entered).equals(3); | 113 expect(entered, equals(3)); |
114 }); | 114 }); |
115 }); | 115 }); |
116 | 116 |
117 group('childViewRemoved()', () { | 117 group('childViewRemoved()', () { |
118 test('calls exitDocument() if parent is in document', () { | 118 test('calls exitDocument() if parent is in document', () { |
119 final parent = new TestView(); | 119 final parent = new TestView(); |
120 parent.addToDocument(document.body); | 120 parent.addToDocument(document.body); |
121 | 121 |
122 bool exited = false; | 122 bool exited = false; |
123 final child = new TestView(); | 123 final child = new TestView(); |
124 child.exitDocumentFn = () { exited = true; }; | 124 child.exitDocumentFn = () { exited = true; }; |
125 | 125 |
126 // Remove the child. | 126 // Remove the child. |
127 parent.childViews = []; | 127 parent.childViews = []; |
128 parent.childViewRemoved(child); | 128 parent.childViewRemoved(child); |
129 | 129 |
130 expect(exited).isTrue(); | 130 expect(exited, isTrue); |
131 }); | 131 }); |
132 | 132 |
133 test('does not call exitDocument() if parent is not in document', () { | 133 test('does not call exitDocument() if parent is not in document', () { |
134 final parent = new TestView(); | 134 final parent = new TestView(); |
135 | 135 |
136 bool exited = false; | 136 bool exited = false; |
137 final child = new TestView(); | 137 final child = new TestView(); |
138 child.exitDocumentFn = () { exited = true; }; | 138 child.exitDocumentFn = () { exited = true; }; |
139 | 139 |
140 // Remove the child. | 140 // Remove the child. |
141 parent.childViews = []; | 141 parent.childViews = []; |
142 parent.childViewRemoved(child); | 142 parent.childViewRemoved(child); |
143 | 143 |
144 expect(exited).isFalse(); | 144 expect(exited, isFalse); |
145 }); | 145 }); |
146 | 146 |
147 test('calls exitDocument() each time removed', () { | 147 test('calls exitDocument() each time removed', () { |
148 final parent = new TestView(); | 148 final parent = new TestView(); |
149 parent.addToDocument(document.body); | 149 parent.addToDocument(document.body); |
150 | 150 |
151 var exited = 0; | 151 var exited = 0; |
152 final child = new TestView(); | 152 final child = new TestView(); |
153 child.exitDocumentFn = () { exited++; }; | 153 child.exitDocumentFn = () { exited++; }; |
154 | 154 |
155 // Add the child. | 155 // Add the child. |
156 parent.childViews = [child]; | 156 parent.childViews = [child]; |
157 parent.childViewAdded(child); | 157 parent.childViewAdded(child); |
158 parent.childViewRemoved(child); | 158 parent.childViewRemoved(child); |
159 parent.childViewAdded(child); | 159 parent.childViewAdded(child); |
160 parent.childViewRemoved(child); | 160 parent.childViewRemoved(child); |
161 parent.childViewAdded(child); | 161 parent.childViewAdded(child); |
162 parent.childViewRemoved(child); | 162 parent.childViewRemoved(child); |
163 | 163 |
164 expect(exited).equals(3); | 164 expect(exited, equals(3)); |
165 }); | 165 }); |
166 }); | 166 }); |
167 | 167 |
168 group('enterDocument()', () { | 168 group('enterDocument()', () { |
169 test('children are called before parents', () { | 169 test('children are called before parents', () { |
170 var result = ''; | 170 var result = ''; |
171 | 171 |
172 final parent = new TestView(); | 172 final parent = new TestView(); |
173 parent.enterDocumentFn = () { result += 'parent'; }; | 173 parent.enterDocumentFn = () { result += 'parent'; }; |
174 | 174 |
175 final child = new TestView(); | 175 final child = new TestView(); |
176 child.enterDocumentFn = () { result += 'child'; }; | 176 child.enterDocumentFn = () { result += 'child'; }; |
177 | 177 |
178 parent.childViews = [child]; | 178 parent.childViews = [child]; |
179 | 179 |
180 parent.addToDocument(document.body); | 180 parent.addToDocument(document.body); |
181 expect(result).equals('childparent'); | 181 expect(result, equals('childparent')); |
182 }); | 182 }); |
183 }); | 183 }); |
184 } | 184 } |
185 | 185 |
186 class TestView extends View { | 186 class TestView extends View { |
187 Function renderFn; | 187 Function renderFn; |
188 Function afterRenderFn; | 188 Function afterRenderFn; |
189 Function enterDocumentFn; | 189 Function enterDocumentFn; |
190 Function exitDocumentFn; | 190 Function exitDocumentFn; |
191 List<View> childViews; | 191 List<View> childViews; |
192 | 192 |
193 TestView() : super(), childViews = [] { | 193 TestView() : super(), childViews = [] { |
194 // Default behavior. | 194 // Default behavior. |
195 renderFn = () => new Element.html('<div class="test"></div>'); | 195 renderFn = () => new Element.html('<div class="test"></div>'); |
196 afterRenderFn = (node) {}; | 196 afterRenderFn = (node) {}; |
197 enterDocumentFn = () {}; | 197 enterDocumentFn = () {}; |
198 exitDocumentFn = () {}; | 198 exitDocumentFn = () {}; |
199 } | 199 } |
200 | 200 |
201 Element render() => renderFn(); | 201 Element render() => renderFn(); |
202 void afterRender(Element node) { afterRenderFn(node); } | 202 void afterRender(Element node) { afterRenderFn(node); } |
203 void enterDocument() { enterDocumentFn(); } | 203 void enterDocument() { enterDocumentFn(); } |
204 void exitDocument() { exitDocumentFn(); } | 204 void exitDocument() { exitDocumentFn(); } |
205 } | 205 } |
OLD | NEW |