Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Side by Side Diff: pkg/analyzer/test/src/summary/resynthesize_test.dart

Issue 1714463002: Compare variable initializers as functions, skip the return type. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 test.src.serialization.elements_test; 5 library test.src.serialization.elements_test;
6 6
7 import 'dart:convert'; 7 import 'dart:convert';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/element/element.dart'; 10 import 'package:analyzer/dart/element/element.dart';
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 reason: 'Mismatch in $desc.$modifier: got $got, want $want'); 541 reason: 'Mismatch in $desc.$modifier: got $got, want $want');
542 } 542 }
543 // Validate members. 543 // Validate members.
544 if (oImpl is Member) { 544 if (oImpl is Member) {
545 expect(rImpl, new isInstanceOf<Member>(), reason: desc); 545 expect(rImpl, new isInstanceOf<Member>(), reason: desc);
546 } else { 546 } else {
547 expect(rImpl, isNot(new isInstanceOf<Member>()), reason: desc); 547 expect(rImpl, isNot(new isInstanceOf<Member>()), reason: desc);
548 } 548 }
549 } 549 }
550 550
551 void compareExecutableElements(ExecutableElement resynthesized, 551 void compareExecutableElements(
552 ExecutableElement original, String desc) { 552 ExecutableElement resynthesized, ExecutableElement original, String desc,
553 {bool compareReturnTypes: true}) {
553 compareElements(resynthesized, original, desc); 554 compareElements(resynthesized, original, desc);
554 expect(resynthesized.parameters.length, original.parameters.length); 555 compareParameterElementLists(
555 for (int i = 0; i < resynthesized.parameters.length; i++) { 556 resynthesized.parameters, original.parameters, desc);
556 compareParameterElements( 557 // TODO(scheglov) remove the condition once initializers have return types.
557 resynthesized.parameters[i], 558 if (compareReturnTypes) {
558 original.parameters[i], 559 compareTypes(
559 '$desc parameter ${original.parameters[i].name}'); 560 resynthesized.returnType, original.returnType, '$desc return type');
560 } 561 }
561 compareTypes(
562 resynthesized.returnType, original.returnType, '$desc return type');
563 compareTypes(resynthesized.type, original.type, desc); 562 compareTypes(resynthesized.type, original.type, desc);
564 expect(resynthesized.typeParameters.length, original.typeParameters.length); 563 expect(resynthesized.typeParameters.length, original.typeParameters.length);
565 for (int i = 0; i < resynthesized.typeParameters.length; i++) { 564 for (int i = 0; i < resynthesized.typeParameters.length; i++) {
566 compareTypeParameterElements( 565 compareTypeParameterElements(
567 resynthesized.typeParameters[i], 566 resynthesized.typeParameters[i],
568 original.typeParameters[i], 567 original.typeParameters[i],
569 '$desc type parameter ${original.typeParameters[i].name}'); 568 '$desc type parameter ${original.typeParameters[i].name}');
570 } 569 }
571 if (original is! Member) { 570 if (original is! Member) {
572 List<FunctionElement> rFunctions = resynthesized.functions; 571 List<FunctionElement> rFunctions = resynthesized.functions;
(...skipping 26 matching lines...) Expand all
599 resynthesized.combinators[i], original.combinators[i]); 598 resynthesized.combinators[i], original.combinators[i]);
600 } 599 }
601 } 600 }
602 601
603 void compareFieldElements( 602 void compareFieldElements(
604 FieldElementImpl resynthesized, FieldElementImpl original, String desc) { 603 FieldElementImpl resynthesized, FieldElementImpl original, String desc) {
605 comparePropertyInducingElements(resynthesized, original, desc); 604 comparePropertyInducingElements(resynthesized, original, desc);
606 } 605 }
607 606
608 void compareFunctionElements( 607 void compareFunctionElements(
609 FunctionElement resynthesized, FunctionElement original, String desc) { 608 FunctionElement resynthesized, FunctionElement original, String desc,
610 compareExecutableElements(resynthesized, original, desc); 609 {bool compareReturnTypes: true}) {
610 if (original == null && resynthesized == null) {
611 return;
612 }
613 expect(resynthesized, isNotNull, reason: desc);
614 compareExecutableElements(resynthesized, original, desc,
615 compareReturnTypes: compareReturnTypes);
611 checkPossibleLocalElements(resynthesized, original); 616 checkPossibleLocalElements(resynthesized, original);
612 } 617 }
613 618
614 void compareFunctionTypeAliasElements( 619 void compareFunctionTypeAliasElements(
615 FunctionTypeAliasElementImpl resynthesized, 620 FunctionTypeAliasElementImpl resynthesized,
616 FunctionTypeAliasElementImpl original, 621 FunctionTypeAliasElementImpl original,
617 String desc) { 622 String desc) {
618 compareElements(resynthesized, original, desc); 623 compareElements(resynthesized, original, desc);
619 expect(resynthesized.parameters.length, original.parameters.length); 624 compareParameterElementLists(
620 for (int i = 0; i < resynthesized.parameters.length; i++) { 625 resynthesized.parameters, original.parameters, desc);
621 compareParameterElements(
622 resynthesized.parameters[i],
623 original.parameters[i],
624 '$desc parameter ${original.parameters[i].name}');
625 }
626 compareTypes( 626 compareTypes(
627 resynthesized.returnType, original.returnType, '$desc return type'); 627 resynthesized.returnType, original.returnType, '$desc return type');
628 compareTypes(resynthesized.type, original.type, desc); 628 compareTypes(resynthesized.type, original.type, desc);
629 expect(resynthesized.typeParameters.length, original.typeParameters.length); 629 expect(resynthesized.typeParameters.length, original.typeParameters.length);
630 for (int i = 0; i < resynthesized.typeParameters.length; i++) { 630 for (int i = 0; i < resynthesized.typeParameters.length; i++) {
631 compareTypeParameterElements( 631 compareTypeParameterElements(
632 resynthesized.typeParameters[i], 632 resynthesized.typeParameters[i],
633 original.typeParameters[i], 633 original.typeParameters[i],
634 '$desc type parameter ${original.typeParameters[i].name}'); 634 '$desc type parameter ${original.typeParameters[i].name}');
635 } 635 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 Map<String, Element> originalMap = original.definedNames; 692 Map<String, Element> originalMap = original.definedNames;
693 expect(resynthesizedMap.keys.toSet(), originalMap.keys.toSet(), 693 expect(resynthesizedMap.keys.toSet(), originalMap.keys.toSet(),
694 reason: desc); 694 reason: desc);
695 for (String key in originalMap.keys) { 695 for (String key in originalMap.keys) {
696 Element resynthesizedElement = resynthesizedMap[key]; 696 Element resynthesizedElement = resynthesizedMap[key];
697 Element originalElement = originalMap[key]; 697 Element originalElement = originalMap[key];
698 compareElements(resynthesizedElement, originalElement, key); 698 compareElements(resynthesizedElement, originalElement, key);
699 } 699 }
700 } 700 }
701 701
702 void compareParameterElementLists(
703 List<ParameterElement> resynthesizedParameters,
704 List<ParameterElement> originalParameters,
705 String desc) {
706 expect(resynthesizedParameters.length, originalParameters.length);
707 for (int i = 0; i < resynthesizedParameters.length; i++) {
708 compareParameterElements(
709 resynthesizedParameters[i],
710 originalParameters[i],
711 '$desc parameter ${originalParameters[i].name}');
712 }
713 }
714
702 void compareParameterElements( 715 void compareParameterElements(
703 ParameterElement resynthesized, ParameterElement original, String desc) { 716 ParameterElement resynthesized, ParameterElement original, String desc) {
704 compareVariableElements(resynthesized, original, desc); 717 compareVariableElements(resynthesized, original, desc);
705 expect(resynthesized.parameters.length, original.parameters.length); 718 compareParameterElementLists(
706 for (int i = 0; i < resynthesized.parameters.length; i++) { 719 resynthesized.parameters, original.parameters, desc);
707 compareParameterElements(
708 resynthesized.parameters[i],
709 original.parameters[i],
710 '$desc parameter ${original.parameters[i].name}');
711 }
712 expect(resynthesized.parameterKind, original.parameterKind); 720 expect(resynthesized.parameterKind, original.parameterKind);
713 expect(resynthesized.isInitializingFormal, original.isInitializingFormal, 721 expect(resynthesized.isInitializingFormal, original.isInitializingFormal,
714 reason: desc); 722 reason: desc);
715 expect(resynthesized is FieldFormalParameterElementImpl, 723 expect(resynthesized is FieldFormalParameterElementImpl,
716 original is FieldFormalParameterElementImpl); 724 original is FieldFormalParameterElementImpl);
717 if (resynthesized is FieldFormalParameterElementImpl && 725 if (resynthesized is FieldFormalParameterElementImpl &&
718 original is FieldFormalParameterElementImpl) { 726 original is FieldFormalParameterElementImpl) {
719 if (original.field == null) { 727 if (original.field == null) {
720 expect(resynthesized.field, isNull, reason: '$desc field'); 728 expect(resynthesized.field, isNull, reason: '$desc field');
721 } else { 729 } else {
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 expect(resynthesized.uriOffset, original.uriOffset, reason: desc); 868 expect(resynthesized.uriOffset, original.uriOffset, reason: desc);
861 expect(resynthesized.uriEnd, original.uriEnd, reason: desc); 869 expect(resynthesized.uriEnd, original.uriEnd, reason: desc);
862 } 870 }
863 871
864 void compareVariableElements( 872 void compareVariableElements(
865 VariableElement resynthesized, VariableElement original, String desc) { 873 VariableElement resynthesized, VariableElement original, String desc) {
866 compareElements(resynthesized, original, desc); 874 compareElements(resynthesized, original, desc);
867 compareTypes(resynthesized.type, original.type, desc); 875 compareTypes(resynthesized.type, original.type, desc);
868 // TODO(scheglov) VariableMember.initializer is not implemented 876 // TODO(scheglov) VariableMember.initializer is not implemented
869 if (original is! VariableMember) { 877 if (original is! VariableMember) {
870 compareVariableInitializers( 878 compareFunctionElements(
871 resynthesized.initializer, original.initializer, desc); 879 resynthesized.initializer, original.initializer, desc,
880 compareReturnTypes: false);
872 } 881 }
873 VariableElementImpl originalActual = getActualElement(original, desc); 882 VariableElementImpl originalActual = getActualElement(original, desc);
874 if (originalActual is ConstVariableElement) { 883 if (originalActual is ConstVariableElement) {
875 VariableElementImpl resynthesizedActual = 884 VariableElementImpl resynthesizedActual =
876 getActualElement(resynthesized, desc); 885 getActualElement(resynthesized, desc);
877 Expression initializer = resynthesizedActual.constantInitializer; 886 Expression initializer = resynthesizedActual.constantInitializer;
878 if (constantInitializersAreInvalid) { 887 if (constantInitializersAreInvalid) {
879 _assertUnresolvedIdentifier(initializer, desc); 888 _assertUnresolvedIdentifier(initializer, desc);
880 } else { 889 } else {
881 compareConstAsts(initializer, originalActual.constantInitializer, 890 compareConstAsts(initializer, originalActual.constantInitializer,
882 '$desc initializer'); 891 '$desc initializer');
883 } 892 }
884 } 893 }
885 checkPossibleMember(resynthesized, original, desc); 894 checkPossibleMember(resynthesized, original, desc);
886 checkPossibleLocalElements(resynthesized, original); 895 checkPossibleLocalElements(resynthesized, original);
887 } 896 }
888 897
889 void compareVariableInitializers(
890 FunctionElement resynthesized, FunctionElement original, String desc) {
891 if (original == null && resynthesized == null) {
892 return;
893 }
894 expect(resynthesized, isNotNull, reason: desc);
895 expect(resynthesized.nameOffset, original.nameOffset, reason: desc);
896 expect(resynthesized.name, original.name, reason: desc);
897 expect(resynthesized.isSynthetic, original.isSynthetic, reason: desc);
898 // TODO(scheglov) replace this method with compareFunctionElements()
899 // once we resynthesize initializers return types.
900 }
901
902 /** 898 /**
903 * Serialize the given [library] into a summary. Then create a 899 * Serialize the given [library] into a summary. Then create a
904 * [_TestSummaryResynthesizer] which can deserialize it, along with any 900 * [_TestSummaryResynthesizer] which can deserialize it, along with any
905 * references it makes to `dart:core`. 901 * references it makes to `dart:core`.
906 * 902 *
907 * Errors will lead to a test failure unless [allowErrors] is `true`. 903 * Errors will lead to a test failure unless [allowErrors] is `true`.
908 */ 904 */
909 _TestSummaryResynthesizer encodeLibrary(LibraryElementImpl library, 905 _TestSummaryResynthesizer encodeLibrary(LibraryElementImpl library,
910 {bool allowErrors: false, bool dumpSummaries: false}) { 906 {bool allowErrors: false, bool dumpSummaries: false}) {
911 if (!allowErrors) { 907 if (!allowErrors) {
(...skipping 2784 matching lines...) Expand 10 before | Expand all | Expand 10 after
3696 fail('Unexpectedly tried to get unlinked summary for $uri'); 3692 fail('Unexpectedly tried to get unlinked summary for $uri');
3697 } 3693 }
3698 return serializedUnit; 3694 return serializedUnit;
3699 } 3695 }
3700 3696
3701 @override 3697 @override
3702 bool hasLibrarySummary(String uri) { 3698 bool hasLibrarySummary(String uri) {
3703 return true; 3699 return true;
3704 } 3700 }
3705 } 3701 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698