| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 // Test for iterators on for [SubclassNode]. | 5 // Test for iterators on for [SubclassNode]. |
| 6 | 6 |
| 7 library class_set_test; | 7 library class_set_test; |
| 8 | 8 |
| 9 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
| 10 import 'package:async_helper/async_helper.dart'; | 10 import 'package:async_helper/async_helper.dart'; |
| 11 import 'type_test_helper.dart'; | 11 import 'type_test_helper.dart'; |
| 12 import 'package:compiler/src/elements/elements.dart' | 12 import 'package:compiler/src/elements/elements.dart' |
| 13 show Element, ClassElement; | 13 show Element, ClassElement; |
| 14 import 'package:compiler/src/universe/class_set.dart'; | 14 import 'package:compiler/src/universe/class_set.dart'; |
| 15 import 'package:compiler/src/util/enumset.dart'; |
| 15 import 'package:compiler/src/util/util.dart'; | 16 import 'package:compiler/src/util/util.dart'; |
| 16 import 'package:compiler/src/world.dart'; | 17 import 'package:compiler/src/world.dart'; |
| 17 | 18 |
| 18 void main() { | 19 void main() { |
| 19 asyncTest(() => TypeEnvironment.create(r""" | 20 asyncTest(() => TypeEnvironment.create(r""" |
| 20 /// A | 21 /// A |
| 21 /// / \ | 22 /// / \ |
| 22 /// B C | 23 /// B C |
| 23 /// / /|\ | 24 /// / /|\ |
| 24 /// D E F G | 25 /// D E F G |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 } else { | 125 } else { |
| 125 Expect.isNotNull(foundStack, | 126 Expect.isNotNull(foundStack, |
| 126 "Expected non-null stack ${stack} in $sb."); | 127 "Expected non-null stack ${stack} in $sb."); |
| 127 Expect.listEquals(stack, foundStack, | 128 Expect.listEquals(stack, foundStack, |
| 128 "Expected stack ${stack}, " | 129 "Expected stack ${stack}, " |
| 129 "found ${foundStack} in $sb."); | 130 "found ${foundStack} in $sb."); |
| 130 } | 131 } |
| 131 } | 132 } |
| 132 | 133 |
| 133 iterator = new ClassHierarchyNodeIterable( | 134 iterator = new ClassHierarchyNodeIterable( |
| 134 world.getClassHierarchyNode(G)).iterator; | 135 world.getClassHierarchyNode(G), |
| 136 ClassHierarchyNode.ALL).iterator; |
| 135 checkState(G, currentNode: null, stack: null); | 137 checkState(G, currentNode: null, stack: null); |
| 136 Expect.isNull(iterator.current); | 138 Expect.isNull(iterator.current); |
| 137 Expect.isTrue(iterator.moveNext()); | 139 Expect.isTrue(iterator.moveNext()); |
| 138 checkState(G, currentNode: G, stack: []); | 140 checkState(G, currentNode: G, stack: []); |
| 139 Expect.equals(G, iterator.current); | 141 Expect.equals(G, iterator.current); |
| 140 Expect.isFalse(iterator.moveNext()); | 142 Expect.isFalse(iterator.moveNext()); |
| 141 checkState(G, currentNode: null, stack: []); | 143 checkState(G, currentNode: null, stack: []); |
| 142 Expect.isNull(iterator.current); | 144 Expect.isNull(iterator.current); |
| 143 | 145 |
| 144 iterator = new ClassHierarchyNodeIterable( | 146 iterator = new ClassHierarchyNodeIterable( |
| 145 world.getClassHierarchyNode(G), | 147 world.getClassHierarchyNode(G), |
| 148 ClassHierarchyNode.ALL, |
| 146 includeRoot: false).iterator; | 149 includeRoot: false).iterator; |
| 147 checkState(G, currentNode: null, stack: null); | 150 checkState(G, currentNode: null, stack: null); |
| 148 Expect.isNull(iterator.current); | 151 Expect.isNull(iterator.current); |
| 149 Expect.isFalse(iterator.moveNext()); | 152 Expect.isFalse(iterator.moveNext()); |
| 150 checkState(G, currentNode: null, stack: []); | 153 checkState(G, currentNode: null, stack: []); |
| 151 Expect.isNull(iterator.current); | 154 Expect.isNull(iterator.current); |
| 152 | 155 |
| 153 iterator = new ClassHierarchyNodeIterable( | 156 iterator = new ClassHierarchyNodeIterable( |
| 154 world.getClassHierarchyNode(C)).iterator; | 157 world.getClassHierarchyNode(C), |
| 158 ClassHierarchyNode.ALL).iterator; |
| 155 checkState(C, currentNode: null, stack: null); | 159 checkState(C, currentNode: null, stack: null); |
| 156 Expect.isNull(iterator.current); | 160 Expect.isNull(iterator.current); |
| 157 Expect.isTrue(iterator.moveNext()); | 161 Expect.isTrue(iterator.moveNext()); |
| 158 checkState(C, currentNode: C, stack: [E, F, G]); | 162 checkState(C, currentNode: C, stack: [E, F, G]); |
| 159 Expect.equals(C, iterator.current); | 163 Expect.equals(C, iterator.current); |
| 160 Expect.isTrue(iterator.moveNext()); | 164 Expect.isTrue(iterator.moveNext()); |
| 161 checkState(C, currentNode: E, stack: [F, G]); | 165 checkState(C, currentNode: E, stack: [F, G]); |
| 162 Expect.equals(E, iterator.current); | 166 Expect.equals(E, iterator.current); |
| 163 Expect.isTrue(iterator.moveNext()); | 167 Expect.isTrue(iterator.moveNext()); |
| 164 checkState(C, currentNode: F, stack: [G]); | 168 checkState(C, currentNode: F, stack: [G]); |
| 165 Expect.equals(F, iterator.current); | 169 Expect.equals(F, iterator.current); |
| 166 Expect.isTrue(iterator.moveNext()); | 170 Expect.isTrue(iterator.moveNext()); |
| 167 checkState(C, currentNode: G, stack: []); | 171 checkState(C, currentNode: G, stack: []); |
| 168 Expect.equals(G, iterator.current); | 172 Expect.equals(G, iterator.current); |
| 169 Expect.isFalse(iterator.moveNext()); | 173 Expect.isFalse(iterator.moveNext()); |
| 170 checkState(C, currentNode: null, stack: []); | 174 checkState(C, currentNode: null, stack: []); |
| 171 Expect.isNull(iterator.current); | 175 Expect.isNull(iterator.current); |
| 172 | 176 |
| 173 iterator = new ClassHierarchyNodeIterable( | 177 iterator = new ClassHierarchyNodeIterable( |
| 174 world.getClassHierarchyNode(D)).iterator; | 178 world.getClassHierarchyNode(D), |
| 179 ClassHierarchyNode.ALL).iterator; |
| 175 checkState(D, currentNode: null, stack: null); | 180 checkState(D, currentNode: null, stack: null); |
| 176 Expect.isNull(iterator.current); | 181 Expect.isNull(iterator.current); |
| 177 Expect.isTrue(iterator.moveNext()); | 182 Expect.isTrue(iterator.moveNext()); |
| 178 checkState(D, currentNode: D, stack: []); | 183 checkState(D, currentNode: D, stack: []); |
| 179 Expect.equals(D, iterator.current); | 184 Expect.equals(D, iterator.current); |
| 180 Expect.isFalse(iterator.moveNext()); | 185 Expect.isFalse(iterator.moveNext()); |
| 181 checkState(D, currentNode: null, stack: []); | 186 checkState(D, currentNode: null, stack: []); |
| 182 Expect.isNull(iterator.current); | 187 Expect.isNull(iterator.current); |
| 183 | 188 |
| 184 iterator = new ClassHierarchyNodeIterable( | 189 iterator = new ClassHierarchyNodeIterable( |
| 185 world.getClassHierarchyNode(B)).iterator; | 190 world.getClassHierarchyNode(B), |
| 191 ClassHierarchyNode.ALL).iterator; |
| 186 checkState(B, currentNode: null, stack: null); | 192 checkState(B, currentNode: null, stack: null); |
| 187 Expect.isNull(iterator.current); | 193 Expect.isNull(iterator.current); |
| 188 Expect.isTrue(iterator.moveNext()); | 194 Expect.isTrue(iterator.moveNext()); |
| 189 checkState(B, currentNode: B, stack: [D]); | 195 checkState(B, currentNode: B, stack: [D]); |
| 190 Expect.equals(B, iterator.current); | 196 Expect.equals(B, iterator.current); |
| 191 Expect.isTrue(iterator.moveNext()); | 197 Expect.isTrue(iterator.moveNext()); |
| 192 checkState(B, currentNode: D, stack: []); | 198 checkState(B, currentNode: D, stack: []); |
| 193 Expect.equals(D, iterator.current); | 199 Expect.equals(D, iterator.current); |
| 194 Expect.isFalse(iterator.moveNext()); | 200 Expect.isFalse(iterator.moveNext()); |
| 195 checkState(B, currentNode: null, stack: []); | 201 checkState(B, currentNode: null, stack: []); |
| 196 Expect.isNull(iterator.current); | 202 Expect.isNull(iterator.current); |
| 197 | 203 |
| 198 iterator = new ClassHierarchyNodeIterable( | 204 iterator = new ClassHierarchyNodeIterable( |
| 199 world.getClassHierarchyNode(B), | 205 world.getClassHierarchyNode(B), |
| 206 ClassHierarchyNode.ALL, |
| 200 includeRoot: false).iterator; | 207 includeRoot: false).iterator; |
| 201 checkState(B, currentNode: null, stack: null); | 208 checkState(B, currentNode: null, stack: null); |
| 202 Expect.isNull(iterator.current); | 209 Expect.isNull(iterator.current); |
| 203 Expect.isTrue(iterator.moveNext()); | 210 Expect.isTrue(iterator.moveNext()); |
| 204 checkState(B, currentNode: D, stack: []); | 211 checkState(B, currentNode: D, stack: []); |
| 205 Expect.equals(D, iterator.current); | 212 Expect.equals(D, iterator.current); |
| 206 Expect.isFalse(iterator.moveNext()); | 213 Expect.isFalse(iterator.moveNext()); |
| 207 checkState(B, currentNode: null, stack: []); | 214 checkState(B, currentNode: null, stack: []); |
| 208 Expect.isNull(iterator.current); | 215 Expect.isNull(iterator.current); |
| 209 | 216 |
| 210 iterator = new ClassHierarchyNodeIterable( | 217 iterator = new ClassHierarchyNodeIterable( |
| 211 world.getClassHierarchyNode(B), | 218 world.getClassHierarchyNode(B), |
| 212 includeIndirectlyInstantiated: false).iterator; | 219 new EnumSet<Instantiation>.fromValues(<Instantiation>[ |
| 220 Instantiation.DIRECTLY_INSTANTIATED, |
| 221 Instantiation.UNINSTANTIATED])).iterator; |
| 213 checkState(B, currentNode: null, stack: null); | 222 checkState(B, currentNode: null, stack: null); |
| 214 Expect.isNull(iterator.current); | 223 Expect.isNull(iterator.current); |
| 215 Expect.isTrue(iterator.moveNext()); | 224 Expect.isTrue(iterator.moveNext()); |
| 216 checkState(B, currentNode: D, stack: []); | 225 checkState(B, currentNode: D, stack: []); |
| 217 Expect.equals(D, iterator.current); | 226 Expect.equals(D, iterator.current); |
| 218 Expect.isFalse(iterator.moveNext()); | 227 Expect.isFalse(iterator.moveNext()); |
| 219 checkState(B, currentNode: null, stack: []); | 228 checkState(B, currentNode: null, stack: []); |
| 220 Expect.isNull(iterator.current); | 229 Expect.isNull(iterator.current); |
| 221 | 230 |
| 222 iterator = new ClassHierarchyNodeIterable( | 231 iterator = new ClassHierarchyNodeIterable( |
| 223 world.getClassHierarchyNode(A)).iterator; | 232 world.getClassHierarchyNode(A), |
| 233 ClassHierarchyNode.ALL).iterator; |
| 224 checkState(A, currentNode: null, stack: null); | 234 checkState(A, currentNode: null, stack: null); |
| 225 Expect.isNull(iterator.current); | 235 Expect.isNull(iterator.current); |
| 226 Expect.isTrue(iterator.moveNext()); | 236 Expect.isTrue(iterator.moveNext()); |
| 227 checkState(A, currentNode: A, stack: [C, B]); | 237 checkState(A, currentNode: A, stack: [C, B]); |
| 228 Expect.equals(A, iterator.current); | 238 Expect.equals(A, iterator.current); |
| 229 Expect.isTrue(iterator.moveNext()); | 239 Expect.isTrue(iterator.moveNext()); |
| 230 checkState(A, currentNode: C, stack: [E, F, G, B]); | 240 checkState(A, currentNode: C, stack: [E, F, G, B]); |
| 231 Expect.equals(C, iterator.current); | 241 Expect.equals(C, iterator.current); |
| 232 Expect.isTrue(iterator.moveNext()); | 242 Expect.isTrue(iterator.moveNext()); |
| 233 checkState(A, currentNode: E, stack: [F, G, B]); | 243 checkState(A, currentNode: E, stack: [F, G, B]); |
| 234 Expect.equals(E, iterator.current); | 244 Expect.equals(E, iterator.current); |
| 235 Expect.isTrue(iterator.moveNext()); | 245 Expect.isTrue(iterator.moveNext()); |
| 236 checkState(A, currentNode: F, stack: [G, B]); | 246 checkState(A, currentNode: F, stack: [G, B]); |
| 237 Expect.equals(F, iterator.current); | 247 Expect.equals(F, iterator.current); |
| 238 Expect.isTrue(iterator.moveNext()); | 248 Expect.isTrue(iterator.moveNext()); |
| 239 checkState(A, currentNode: G, stack: [B]); | 249 checkState(A, currentNode: G, stack: [B]); |
| 240 Expect.equals(G, iterator.current); | 250 Expect.equals(G, iterator.current); |
| 241 Expect.isTrue(iterator.moveNext()); | 251 Expect.isTrue(iterator.moveNext()); |
| 242 checkState(A, currentNode: B, stack: [D]); | 252 checkState(A, currentNode: B, stack: [D]); |
| 243 Expect.equals(B, iterator.current); | 253 Expect.equals(B, iterator.current); |
| 244 Expect.isTrue(iterator.moveNext()); | 254 Expect.isTrue(iterator.moveNext()); |
| 245 checkState(A, currentNode: D, stack: []); | 255 checkState(A, currentNode: D, stack: []); |
| 246 Expect.equals(D, iterator.current); | 256 Expect.equals(D, iterator.current); |
| 247 Expect.isFalse(iterator.moveNext()); | 257 Expect.isFalse(iterator.moveNext()); |
| 248 checkState(A, currentNode: null, stack: []); | 258 checkState(A, currentNode: null, stack: []); |
| 249 Expect.isNull(iterator.current); | 259 Expect.isNull(iterator.current); |
| 250 | 260 |
| 251 iterator = new ClassHierarchyNodeIterable( | 261 iterator = new ClassHierarchyNodeIterable( |
| 252 world.getClassHierarchyNode(A), | 262 world.getClassHierarchyNode(A), |
| 263 ClassHierarchyNode.ALL, |
| 253 includeRoot: false).iterator; | 264 includeRoot: false).iterator; |
| 254 checkState(A, currentNode: null, stack: null); | 265 checkState(A, currentNode: null, stack: null); |
| 255 Expect.isNull(iterator.current); | 266 Expect.isNull(iterator.current); |
| 256 Expect.isTrue(iterator.moveNext()); | 267 Expect.isTrue(iterator.moveNext()); |
| 257 checkState(A, currentNode: C, stack: [E, F, G, B]); | 268 checkState(A, currentNode: C, stack: [E, F, G, B]); |
| 258 Expect.equals(C, iterator.current); | 269 Expect.equals(C, iterator.current); |
| 259 Expect.isTrue(iterator.moveNext()); | 270 Expect.isTrue(iterator.moveNext()); |
| 260 checkState(A, currentNode: E, stack: [F, G, B]); | 271 checkState(A, currentNode: E, stack: [F, G, B]); |
| 261 Expect.equals(E, iterator.current); | 272 Expect.equals(E, iterator.current); |
| 262 Expect.isTrue(iterator.moveNext()); | 273 Expect.isTrue(iterator.moveNext()); |
| 263 checkState(A, currentNode: F, stack: [G, B]); | 274 checkState(A, currentNode: F, stack: [G, B]); |
| 264 Expect.equals(F, iterator.current); | 275 Expect.equals(F, iterator.current); |
| 265 Expect.isTrue(iterator.moveNext()); | 276 Expect.isTrue(iterator.moveNext()); |
| 266 checkState(A, currentNode: G, stack: [B]); | 277 checkState(A, currentNode: G, stack: [B]); |
| 267 Expect.equals(G, iterator.current); | 278 Expect.equals(G, iterator.current); |
| 268 Expect.isTrue(iterator.moveNext()); | 279 Expect.isTrue(iterator.moveNext()); |
| 269 checkState(A, currentNode: B, stack: [D]); | 280 checkState(A, currentNode: B, stack: [D]); |
| 270 Expect.equals(B, iterator.current); | 281 Expect.equals(B, iterator.current); |
| 271 Expect.isTrue(iterator.moveNext()); | 282 Expect.isTrue(iterator.moveNext()); |
| 272 checkState(A, currentNode: D, stack: []); | 283 checkState(A, currentNode: D, stack: []); |
| 273 Expect.equals(D, iterator.current); | 284 Expect.equals(D, iterator.current); |
| 274 Expect.isFalse(iterator.moveNext()); | 285 Expect.isFalse(iterator.moveNext()); |
| 275 checkState(A, currentNode: null, stack: []); | 286 checkState(A, currentNode: null, stack: []); |
| 276 Expect.isNull(iterator.current); | 287 Expect.isNull(iterator.current); |
| 277 | 288 |
| 278 iterator = new ClassHierarchyNodeIterable( | 289 iterator = new ClassHierarchyNodeIterable( |
| 279 world.getClassHierarchyNode(A), | 290 world.getClassHierarchyNode(A), |
| 280 includeIndirectlyInstantiated: false).iterator; | 291 new EnumSet<Instantiation>.fromValues(<Instantiation>[ |
| 292 Instantiation.DIRECTLY_INSTANTIATED, |
| 293 Instantiation.UNINSTANTIATED])).iterator; |
| 281 checkState(A, currentNode: null, stack: null); | 294 checkState(A, currentNode: null, stack: null); |
| 282 Expect.isNull(iterator.current); | 295 Expect.isNull(iterator.current); |
| 283 Expect.isTrue(iterator.moveNext()); | 296 Expect.isTrue(iterator.moveNext()); |
| 284 checkState(A, currentNode: A, stack: [C, B]); | 297 checkState(A, currentNode: A, stack: [C, B]); |
| 285 Expect.equals(A, iterator.current); | 298 Expect.equals(A, iterator.current); |
| 286 Expect.isTrue(iterator.moveNext()); | 299 Expect.isTrue(iterator.moveNext()); |
| 287 checkState(A, currentNode: C, stack: [E, F, G, B]); | 300 checkState(A, currentNode: C, stack: [E, F, G, B]); |
| 288 Expect.equals(C, iterator.current); | 301 Expect.equals(C, iterator.current); |
| 289 Expect.isTrue(iterator.moveNext()); | 302 Expect.isTrue(iterator.moveNext()); |
| 290 checkState(A, currentNode: E, stack: [F, G, B]); | 303 checkState(A, currentNode: E, stack: [F, G, B]); |
| 291 Expect.equals(E, iterator.current); | 304 Expect.equals(E, iterator.current); |
| 292 Expect.isTrue(iterator.moveNext()); | 305 Expect.isTrue(iterator.moveNext()); |
| 293 checkState(A, currentNode: F, stack: [G, B]); | 306 checkState(A, currentNode: F, stack: [G, B]); |
| 294 Expect.equals(F, iterator.current); | 307 Expect.equals(F, iterator.current); |
| 295 Expect.isTrue(iterator.moveNext()); | 308 Expect.isTrue(iterator.moveNext()); |
| 296 checkState(A, currentNode: G, stack: [B]); | 309 checkState(A, currentNode: G, stack: [B]); |
| 297 Expect.equals(G, iterator.current); | 310 Expect.equals(G, iterator.current); |
| 298 Expect.isTrue(iterator.moveNext()); | 311 Expect.isTrue(iterator.moveNext()); |
| 299 checkState(A, currentNode: D, stack: []); | 312 checkState(A, currentNode: D, stack: []); |
| 300 Expect.equals(D, iterator.current); | 313 Expect.equals(D, iterator.current); |
| 301 Expect.isFalse(iterator.moveNext()); | 314 Expect.isFalse(iterator.moveNext()); |
| 302 checkState(A, currentNode: null, stack: []); | 315 checkState(A, currentNode: null, stack: []); |
| 303 Expect.isNull(iterator.current); | 316 Expect.isNull(iterator.current); |
| 304 | 317 |
| 305 iterator = new ClassHierarchyNodeIterable( | 318 iterator = new ClassHierarchyNodeIterable( |
| 306 world.getClassHierarchyNode(A), | 319 world.getClassHierarchyNode(A), |
| 307 includeRoot: false, | 320 new EnumSet<Instantiation>.fromValues(<Instantiation>[ |
| 308 includeIndirectlyInstantiated: false).iterator; | 321 Instantiation.DIRECTLY_INSTANTIATED, |
| 322 Instantiation.UNINSTANTIATED]), |
| 323 includeRoot: false).iterator; |
| 309 checkState(A, currentNode: null, stack: null); | 324 checkState(A, currentNode: null, stack: null); |
| 310 Expect.isNull(iterator.current); | 325 Expect.isNull(iterator.current); |
| 311 Expect.isTrue(iterator.moveNext()); | 326 Expect.isTrue(iterator.moveNext()); |
| 312 checkState(A, currentNode: C, stack: [E, F, G, B]); | 327 checkState(A, currentNode: C, stack: [E, F, G, B]); |
| 313 Expect.equals(C, iterator.current); | 328 Expect.equals(C, iterator.current); |
| 314 Expect.isTrue(iterator.moveNext()); | 329 Expect.isTrue(iterator.moveNext()); |
| 315 checkState(A, currentNode: E, stack: [F, G, B]); | 330 checkState(A, currentNode: E, stack: [F, G, B]); |
| 316 Expect.equals(E, iterator.current); | 331 Expect.equals(E, iterator.current); |
| 317 Expect.isTrue(iterator.moveNext()); | 332 Expect.isTrue(iterator.moveNext()); |
| 318 checkState(A, currentNode: F, stack: [G, B]); | 333 checkState(A, currentNode: F, stack: [G, B]); |
| 319 Expect.equals(F, iterator.current); | 334 Expect.equals(F, iterator.current); |
| 320 Expect.isTrue(iterator.moveNext()); | 335 Expect.isTrue(iterator.moveNext()); |
| 321 checkState(A, currentNode: G, stack: [B]); | 336 checkState(A, currentNode: G, stack: [B]); |
| 322 Expect.equals(G, iterator.current); | 337 Expect.equals(G, iterator.current); |
| 323 Expect.isTrue(iterator.moveNext()); | 338 Expect.isTrue(iterator.moveNext()); |
| 324 checkState(A, currentNode: D, stack: []); | 339 checkState(A, currentNode: D, stack: []); |
| 325 Expect.equals(D, iterator.current); | 340 Expect.equals(D, iterator.current); |
| 326 Expect.isFalse(iterator.moveNext()); | 341 Expect.isFalse(iterator.moveNext()); |
| 327 checkState(A, currentNode: null, stack: []); | 342 checkState(A, currentNode: null, stack: []); |
| 328 Expect.isNull(iterator.current); | 343 Expect.isNull(iterator.current); |
| 329 })); | 344 })); |
| 330 } | 345 } |
| 346 |
| OLD | NEW |