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