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 library dart2js.serialization_test; | 5 library dart2js.serialization_test; |
6 | 6 |
7 import 'dart:io'; | 7 import 'dart:io'; |
8 import '../memory_compiler.dart'; | 8 import '../memory_compiler.dart'; |
9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
10 import 'package:compiler/src/commandline_options.dart'; | 10 import 'package:compiler/src/commandline_options.dart'; |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 | 241 |
242 /// Check the equivalence of the two lists of elements, [list1] and [list2]. | 242 /// Check the equivalence of the two lists of elements, [list1] and [list2]. |
243 /// | 243 /// |
244 /// Uses [object1], [object2] and [property] to provide context for failures. | 244 /// Uses [object1], [object2] and [property] to provide context for failures. |
245 checkElementLists(Object object1, Object object2, String property, | 245 checkElementLists(Object object1, Object object2, String property, |
246 Iterable<Element> list1, Iterable<Element> list2) { | 246 Iterable<Element> list1, Iterable<Element> list2) { |
247 checkListEquivalence(object1, object2, property, | 247 checkListEquivalence(object1, object2, property, |
248 list1, list2, checkElementProperties); | 248 list1, list2, checkElementProperties); |
249 } | 249 } |
250 | 250 |
| 251 /// Check the equivalence of the two metadata annotations, [metadata1] and |
| 252 /// [metadata2]. |
| 253 /// |
| 254 /// Uses [object1], [object2] and [property] to provide context for failures. |
| 255 checkMetadata(Object object1, Object object2, String property, |
| 256 MetadataAnnotation metadata1, MetadataAnnotation metadata2) { |
| 257 check(object1, object2, property, |
| 258 metadata1, metadata2, areMetadataAnnotationsEquivalent); |
| 259 } |
| 260 |
251 /// Visitor that checks for equivalence of [Element] properties. | 261 /// Visitor that checks for equivalence of [Element] properties. |
252 class ElementPropertyEquivalence extends BaseElementVisitor<dynamic, Element> { | 262 class ElementPropertyEquivalence extends BaseElementVisitor<dynamic, Element> { |
253 const ElementPropertyEquivalence(); | 263 const ElementPropertyEquivalence(); |
254 | 264 |
255 void visit(Element element1, Element element2) { | 265 void visit(Element element1, Element element2) { |
256 if (element1 == null && element2 == null) return; | 266 if (element1 == null && element2 == null) return; |
257 element1 = element1.declaration; | 267 element1 = element1.declaration; |
258 element2 = element2.declaration; | 268 element2 = element2.declaration; |
259 if (element1 == element2) return; | 269 if (element1 == element2) return; |
260 check(element1, element2, 'kind', element1.kind, element2.kind); | 270 check(element1, element2, 'kind', element1.kind, element2.kind); |
261 element1.accept(this, element2); | 271 element1.accept(this, element2); |
262 check(element1, element2, 'isSynthesized', | 272 check(element1, element2, 'isSynthesized', |
263 element1.isSynthesized, element2.isSynthesized); | 273 element1.isSynthesized, element2.isSynthesized); |
264 check(element1, element2, 'isLocal', | 274 check(element1, element2, 'isLocal', |
265 element1.isLocal, element2.isLocal); | 275 element1.isLocal, element2.isLocal); |
266 check(element1, element2, 'isFinal', | 276 check(element1, element2, 'isFinal', |
267 element1.isFinal, element2.isFinal); | 277 element1.isFinal, element2.isFinal); |
268 check(element1, element2, 'isConst', | 278 check(element1, element2, 'isConst', |
269 element1.isConst, element2.isConst); | 279 element1.isConst, element2.isConst); |
270 check(element1, element2, 'isAbstract', | 280 check(element1, element2, 'isAbstract', |
271 element1.isAbstract, element2.isAbstract); | 281 element1.isAbstract, element2.isAbstract); |
272 check(element1, element2, 'isStatic', | 282 check(element1, element2, 'isStatic', |
273 element1.isStatic, element2.isStatic); | 283 element1.isStatic, element2.isStatic); |
274 check(element1, element2, 'isTopLevel', | 284 check(element1, element2, 'isTopLevel', |
275 element1.isTopLevel, element2.isTopLevel); | 285 element1.isTopLevel, element2.isTopLevel); |
276 check(element1, element2, 'isClassMember', | 286 check(element1, element2, 'isClassMember', |
277 element1.isClassMember, element2.isClassMember); | 287 element1.isClassMember, element2.isClassMember); |
278 check(element1, element2, 'isInstanceMember', | 288 check(element1, element2, 'isInstanceMember', |
279 element1.isInstanceMember, element2.isInstanceMember); | 289 element1.isInstanceMember, element2.isInstanceMember); |
| 290 checkListEquivalence(element1, element2, 'metadata', |
| 291 element1.metadata, element2.metadata, checkMetadata); |
280 } | 292 } |
281 | 293 |
282 @override | 294 @override |
283 void visitElement(Element e, Element arg) { | 295 void visitElement(Element e, Element arg) { |
284 throw new UnsupportedError("Unsupported element $e"); | 296 throw new UnsupportedError("Unsupported element $e"); |
285 } | 297 } |
286 | 298 |
287 @override | 299 @override |
288 void visitLibraryElement(LibraryElement element1, LibraryElement element2) { | 300 void visitLibraryElement(LibraryElement element1, LibraryElement element2) { |
289 checkElementIdentities(null, null, null, element1, element2); | 301 checkElementIdentities(null, null, null, element1, element2); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 element1, element2, 'rawType', | 435 element1, element2, 'rawType', |
424 element1.rawType, element2.rawType); | 436 element1.rawType, element2.rawType); |
425 check(element1, element2, 'isObject', | 437 check(element1, element2, 'isObject', |
426 element1.isObject, element2.isObject); | 438 element1.isObject, element2.isObject); |
427 checkTypeLists(element1, element2, 'typeVariables', | 439 checkTypeLists(element1, element2, 'typeVariables', |
428 element1.typeVariables, element2.typeVariables); | 440 element1.typeVariables, element2.typeVariables); |
429 check(element1, element2, 'isAbstract', | 441 check(element1, element2, 'isAbstract', |
430 element1.isAbstract, element2.isAbstract); | 442 element1.isAbstract, element2.isAbstract); |
431 check(element1, element2, 'isUnnamedMixinApplication', | 443 check(element1, element2, 'isUnnamedMixinApplication', |
432 element1.isUnnamedMixinApplication, element2.isUnnamedMixinApplication); | 444 element1.isUnnamedMixinApplication, element2.isUnnamedMixinApplication); |
| 445 check(element1, element2, 'isProxy', |
| 446 element1.isProxy, element2.isProxy); |
| 447 check(element1, element2, 'isInjected', |
| 448 element1.isInjected, element2.isInjected); |
433 check(element1, element2, 'isEnumClass', | 449 check(element1, element2, 'isEnumClass', |
434 element1.isEnumClass, element2.isEnumClass); | 450 element1.isEnumClass, element2.isEnumClass); |
435 if (element1.isEnumClass) { | 451 if (element1.isEnumClass) { |
436 EnumClassElement enum1 = element1; | 452 EnumClassElement enum1 = element1; |
437 EnumClassElement enum2 = element2; | 453 EnumClassElement enum2 = element2; |
438 checkElementLists(enum1, enum2, 'enumValues', | 454 checkElementLists(enum1, enum2, 'enumValues', |
439 enum1.enumValues, enum2.enumValues); | 455 enum1.enumValues, enum2.enumValues); |
440 } | 456 } |
441 if (!element1.isObject) { | 457 if (!element1.isObject) { |
442 checkTypes(element1, element2, 'supertype', | 458 checkTypes(element1, element2, 'supertype', |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 element1.type, element2.type); | 524 element1.type, element2.type); |
509 checkConstants( | 525 checkConstants( |
510 element1, element2, 'constant', | 526 element1, element2, 'constant', |
511 element1.constant, element2.constant); | 527 element1.constant, element2.constant); |
512 check(element1, element2, 'isTopLevel', | 528 check(element1, element2, 'isTopLevel', |
513 element1.isTopLevel, element2.isTopLevel); | 529 element1.isTopLevel, element2.isTopLevel); |
514 check(element1, element2, 'isStatic', | 530 check(element1, element2, 'isStatic', |
515 element1.isStatic, element2.isStatic); | 531 element1.isStatic, element2.isStatic); |
516 check(element1, element2, 'isInstanceMember', | 532 check(element1, element2, 'isInstanceMember', |
517 element1.isInstanceMember, element2.isInstanceMember); | 533 element1.isInstanceMember, element2.isInstanceMember); |
| 534 check(element1, element2, 'isInjected', |
| 535 element1.isInjected, element2.isInjected); |
518 | 536 |
519 checkElementIdentities( | 537 checkElementIdentities( |
520 element1, element2, 'library', | 538 element1, element2, 'library', |
521 element1.library, element2.library); | 539 element1.library, element2.library); |
522 checkElementIdentities( | 540 checkElementIdentities( |
523 element1, element2, 'compilationUnit', | 541 element1, element2, 'compilationUnit', |
524 element1.compilationUnit, element2.compilationUnit); | 542 element1.compilationUnit, element2.compilationUnit); |
525 checkElementIdentities( | 543 checkElementIdentities( |
526 element1, element2, 'enclosingClass', | 544 element1, element2, 'enclosingClass', |
527 element1.enclosingClass, element2.enclosingClass); | 545 element1.enclosingClass, element2.enclosingClass); |
(...skipping 13 matching lines...) Expand all Loading... |
541 checkListEquivalence( | 559 checkListEquivalence( |
542 element1, element2, 'parameters', | 560 element1, element2, 'parameters', |
543 element1.parameters, element2.parameters, | 561 element1.parameters, element2.parameters, |
544 checkElementProperties); | 562 checkElementProperties); |
545 check(element1, element2, 'isOperator', | 563 check(element1, element2, 'isOperator', |
546 element1.isOperator, element2.isOperator); | 564 element1.isOperator, element2.isOperator); |
547 check( | 565 check( |
548 element1, element2, 'asyncMarker', | 566 element1, element2, 'asyncMarker', |
549 element1.asyncMarker, | 567 element1.asyncMarker, |
550 element2.asyncMarker); | 568 element2.asyncMarker); |
| 569 check(element1, element2, 'isInjected', |
| 570 element1.isInjected, element2.isInjected); |
551 | 571 |
552 checkElementIdentities( | 572 checkElementIdentities( |
553 element1, element2, 'library', | 573 element1, element2, 'library', |
554 element1.library, element2.library); | 574 element1.library, element2.library); |
555 checkElementIdentities( | 575 checkElementIdentities( |
556 element1, element2, 'compilationUnit', | 576 element1, element2, 'compilationUnit', |
557 element1.compilationUnit, element2.compilationUnit); | 577 element1.compilationUnit, element2.compilationUnit); |
558 checkElementIdentities( | 578 checkElementIdentities( |
559 element1, element2, 'enclosingClass', | 579 element1, element2, 'enclosingClass', |
560 element1.enclosingClass, element2.enclosingClass); | 580 element1.enclosingClass, element2.enclosingClass); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
645 check( | 665 check( |
646 element1, element2, 'effectiveTargetType.raw', | 666 element1, element2, 'effectiveTargetType.raw', |
647 element1.computeEffectiveTargetType(element1.enclosingClass.rawType), | 667 element1.computeEffectiveTargetType(element1.enclosingClass.rawType), |
648 element2.computeEffectiveTargetType(element2.enclosingClass.rawType), | 668 element2.computeEffectiveTargetType(element2.enclosingClass.rawType), |
649 areTypesEquivalent); | 669 areTypesEquivalent); |
650 checkElementIdentities(element1, element2, 'immediateRedirectionTarget', | 670 checkElementIdentities(element1, element2, 'immediateRedirectionTarget', |
651 element1.immediateRedirectionTarget, | 671 element1.immediateRedirectionTarget, |
652 element2.immediateRedirectionTarget); | 672 element2.immediateRedirectionTarget); |
653 checkElementIdentities(element1, element2, 'redirectionDeferredPrefix', | 673 checkElementIdentities(element1, element2, 'redirectionDeferredPrefix', |
654 element1.redirectionDeferredPrefix, element2.redirectionDeferredPrefix); | 674 element1.redirectionDeferredPrefix, element2.redirectionDeferredPrefix); |
| 675 check(element1, element2, 'isInjected', |
| 676 element1.isInjected, element2.isInjected); |
655 } | 677 } |
656 | 678 |
657 @override | 679 @override |
658 void visitAbstractFieldElement(AbstractFieldElement element1, | 680 void visitAbstractFieldElement(AbstractFieldElement element1, |
659 AbstractFieldElement element2) { | 681 AbstractFieldElement element2) { |
660 visit(element1.getter, element2.getter); | 682 visit(element1.getter, element2.getter); |
661 visit(element1.setter, element2.setter); | 683 visit(element1.setter, element2.setter); |
662 } | 684 } |
663 | 685 |
664 @override | 686 @override |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 void visitPrefixElement(PrefixElement element1, PrefixElement element2) { | 786 void visitPrefixElement(PrefixElement element1, PrefixElement element2) { |
765 check( | 787 check( |
766 element1, element2, 'isDeferred', | 788 element1, element2, 'isDeferred', |
767 element1.isDeferred, element2.isDeferred); | 789 element1.isDeferred, element2.isDeferred); |
768 checkElementIdentities( | 790 checkElementIdentities( |
769 element1, element2, 'importedLibrary', | 791 element1, element2, 'importedLibrary', |
770 element1.deferredImport, element2.deferredImport); | 792 element1.deferredImport, element2.deferredImport); |
771 // TODO(johnniwinther): Check members. | 793 // TODO(johnniwinther): Check members. |
772 } | 794 } |
773 } | 795 } |
OLD | NEW |