| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013, 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 node_model_test; | |
| 6 import 'dart:async'; | |
| 7 import 'dart:html'; | |
| 8 import '../../pkg/unittest/lib/unittest.dart'; | |
| 9 import '../../pkg/unittest/lib/html_config.dart'; | |
| 10 | |
| 11 var stepDuration; | |
| 12 Future get nextStep { | |
| 13 return new Future.delayed(stepDuration); | |
| 14 } | |
| 15 | |
| 16 class ModelTracker { | |
| 17 Element element = new DivElement(); | |
| 18 List models = []; | |
| 19 | |
| 20 ModelTracker() { | |
| 21 element.onModelChanged.listen((node) { | |
| 22 models.add(node.model); | |
| 23 }); | |
| 24 } | |
| 25 | |
| 26 void append(ModelTracker other) { | |
| 27 element.append(other.element); | |
| 28 } | |
| 29 | |
| 30 get model => element.model; | |
| 31 void set model(value) { | |
| 32 element.model = value; | |
| 33 } | |
| 34 | |
| 35 void clearModel() { | |
| 36 element.clearModel(); | |
| 37 } | |
| 38 | |
| 39 void remove() { | |
| 40 element.remove(); | |
| 41 } | |
| 42 } | |
| 43 | |
| 44 main() { | |
| 45 useHtmlConfiguration(); | |
| 46 | |
| 47 if (MutationObserver.supported) { | |
| 48 stepDuration = new Duration(); | |
| 49 } else { | |
| 50 // Need to step after the tree update notifications, but on IE9 these may | |
| 51 // get polyfilled to use setTimeout(0). So use a longer timer to try to | |
| 52 // get a later callback. | |
| 53 stepDuration = new Duration(milliseconds: 15); | |
| 54 } | |
| 55 | |
| 56 test('basic top down', () { | |
| 57 var a = new DivElement(); | |
| 58 var b = new SpanElement(); | |
| 59 var c = new DivElement(); | |
| 60 var d = new DivElement(); | |
| 61 var e = new DivElement(); | |
| 62 var model = {}; | |
| 63 var model2 = {}; | |
| 64 var model3 = {}; | |
| 65 | |
| 66 document.body.append(a); | |
| 67 a.append(b); | |
| 68 | |
| 69 a.model = model; | |
| 70 expect(a.model, model); | |
| 71 expect(b.model, model); | |
| 72 | |
| 73 b.append(c); | |
| 74 | |
| 75 return nextStep.then((_) { | |
| 76 expect(c.model, model); | |
| 77 | |
| 78 d.append(e); | |
| 79 c.append(d); | |
| 80 | |
| 81 return nextStep; | |
| 82 }).then((_) { | |
| 83 expect(e.model, model); | |
| 84 | |
| 85 b.remove(); | |
| 86 return nextStep; | |
| 87 }).then((_) { | |
| 88 expect(b.model, isNull); | |
| 89 expect(e.model, isNull); | |
| 90 | |
| 91 return nextStep; | |
| 92 }).then((_) { | |
| 93 a.append(b); | |
| 94 a.model = model2; | |
| 95 | |
| 96 return nextStep; | |
| 97 }).then((_) { | |
| 98 expect(e.model, model2); | |
| 99 | |
| 100 c.model = model3; | |
| 101 expect(c.model, model3); | |
| 102 expect(b.model, model2); | |
| 103 expect(e.model, model3); | |
| 104 | |
| 105 return nextStep; | |
| 106 }).then((_) { | |
| 107 d.remove(); | |
| 108 c.append(d); | |
| 109 | |
| 110 return nextStep; | |
| 111 }).then((_) { | |
| 112 expect(d.model, model3); | |
| 113 | |
| 114 c.clearModel(); | |
| 115 expect(d.model, model2); | |
| 116 | |
| 117 a.remove(); | |
| 118 return nextStep; | |
| 119 }); | |
| 120 }); | |
| 121 | |
| 122 test('changes', () { | |
| 123 var a = new ModelTracker(); | |
| 124 var b = new ModelTracker(); | |
| 125 var c = new ModelTracker(); | |
| 126 var d = new ModelTracker(); | |
| 127 | |
| 128 var model = {}; | |
| 129 var cModel = {}; | |
| 130 | |
| 131 document.body.append(a.element); | |
| 132 | |
| 133 a.append(b); | |
| 134 | |
| 135 return nextStep.then((_) { | |
| 136 expect(a.models, []); | |
| 137 expect(b.models.length, 0); | |
| 138 | |
| 139 a.model = model; | |
| 140 | |
| 141 expect(a.models, [model]); | |
| 142 expect(b.models, [model]); | |
| 143 | |
| 144 b.append(c); | |
| 145 return nextStep; | |
| 146 }).then((_) { | |
| 147 expect(c.models, [model]); | |
| 148 | |
| 149 c.append(d); | |
| 150 return nextStep; | |
| 151 }).then((_) { | |
| 152 c.model = cModel; | |
| 153 expect(b.models, [model]); | |
| 154 expect(c.models, [model, cModel]); | |
| 155 expect(d.models, [model, cModel]); | |
| 156 | |
| 157 c.clearModel(); | |
| 158 expect(c.models, [model, cModel, model]); | |
| 159 expect(d.models, [model, cModel, model]); | |
| 160 | |
| 161 a.remove(); | |
| 162 return nextStep; | |
| 163 }); | |
| 164 }); | |
| 165 | |
| 166 test('bottom up', () { | |
| 167 var a = new ModelTracker(); | |
| 168 var b = new ModelTracker(); | |
| 169 var c = new ModelTracker(); | |
| 170 var d = new ModelTracker(); | |
| 171 | |
| 172 var aModel = {}; | |
| 173 var cModel = {}; | |
| 174 | |
| 175 c.append(d); | |
| 176 c.model = cModel; | |
| 177 b.append(c); | |
| 178 a.append(b); | |
| 179 a.model = aModel; | |
| 180 document.body.append(a.element); | |
| 181 | |
| 182 return nextStep.then((_) { | |
| 183 expect(a.models, [aModel]); | |
| 184 expect(b.models, [aModel]); | |
| 185 expect(c.models, [cModel]); | |
| 186 expect(d.models, [cModel]); | |
| 187 | |
| 188 a.remove(); | |
| 189 return nextStep; | |
| 190 }); | |
| 191 }); | |
| 192 } | |
| OLD | NEW |