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