| 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 |