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