| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 // This code was auto-generated, is not intended to be edited, and is subject to | 5 // This code was auto-generated, is not intended to be edited, and is subject to |
| 6 // significant change. Please see the README file for more information. | 6 // significant change. Please see the README file for more information. |
| 7 | 7 |
| 8 library engine.all_the_rest_test; | 8 library engine.all_the_rest_test; |
| 9 | 9 |
| 10 import 'dart:collection'; | 10 import 'dart:collection'; |
| (...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 844 ConstantEvaluator evaluator = | 844 ConstantEvaluator evaluator = |
| 845 new ConstantEvaluator(source, analysisContext.typeProvider); | 845 new ConstantEvaluator(source, analysisContext.typeProvider); |
| 846 return evaluator.evaluate(variables[0].initializer); | 846 return evaluator.evaluate(variables[0].initializer); |
| 847 } | 847 } |
| 848 } | 848 } |
| 849 | 849 |
| 850 @reflectiveTest | 850 @reflectiveTest |
| 851 class ConstantFinderTest extends EngineTestCase { | 851 class ConstantFinderTest extends EngineTestCase { |
| 852 AstNode _node; | 852 AstNode _node; |
| 853 | 853 |
| 854 TypeProvider _typeProvider; |
| 855 |
| 856 void setUp() { |
| 857 super.setUp(); |
| 858 _typeProvider = new TestTypeProvider(); |
| 859 } |
| 860 |
| 854 /** | 861 /** |
| 855 * Test an annotation that consists solely of an identifier (and hence | 862 * Test an annotation that consists solely of an identifier (and hence |
| 856 * represents a reference to a compile-time constant variable). | 863 * represents a reference to a compile-time constant variable). |
| 857 */ | 864 */ |
| 858 void test_visitAnnotation_constantVariable() { | 865 void test_visitAnnotation_constantVariable() { |
| 859 _node = AstFactory.annotation(AstFactory.identifier3('x')); | 866 _node = AstFactory.annotation(AstFactory.identifier3('x')); |
| 860 expect(_findAnnotations(), contains(_node)); | 867 expect(_findAnnotations(), contains(_node)); |
| 861 } | 868 } |
| 862 | 869 |
| 863 /** | 870 /** |
| (...skipping 24 matching lines...) Expand all Loading... |
| 888 void test_visitInstanceCreationExpression_nonConst() { | 895 void test_visitInstanceCreationExpression_nonConst() { |
| 889 _setupInstanceCreationExpression("A", false); | 896 _setupInstanceCreationExpression("A", false); |
| 890 expect(_findConstructorInvocations().isEmpty, isTrue); | 897 expect(_findConstructorInvocations().isEmpty, isTrue); |
| 891 } | 898 } |
| 892 | 899 |
| 893 void test_visitVariableDeclaration_const() { | 900 void test_visitVariableDeclaration_const() { |
| 894 VariableElement element = _setupVariableDeclaration("v", true, true); | 901 VariableElement element = _setupVariableDeclaration("v", true, true); |
| 895 expect(_findVariableDeclarations()[element], same(_node)); | 902 expect(_findVariableDeclarations()[element], same(_node)); |
| 896 } | 903 } |
| 897 | 904 |
| 905 void test_visitVariableDeclaration_final_inClass() { |
| 906 _setupFieldDeclaration('C', 'f', Keyword.FINAL); |
| 907 expect(_findVariableDeclarations(), isEmpty); |
| 908 } |
| 909 |
| 910 void test_visitVariableDeclaration_final_inClassWithConstConstructor() { |
| 911 VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.FINAL, |
| 912 hasConstConstructor: true); |
| 913 expect(_findVariableDeclarations()[field.element], same(field)); |
| 914 } |
| 915 |
| 916 void test_visitVariableDeclaration_final_outsideClass() { |
| 917 _setupVariableDeclaration('v', false, true, isFinal: true); |
| 918 expect(_findVariableDeclarations(), isEmpty); |
| 919 } |
| 920 |
| 898 void test_visitVariableDeclaration_noInitializer() { | 921 void test_visitVariableDeclaration_noInitializer() { |
| 899 _setupVariableDeclaration("v", true, false); | 922 _setupVariableDeclaration("v", true, false); |
| 900 expect(_findVariableDeclarations().isEmpty, isTrue); | 923 expect(_findVariableDeclarations().isEmpty, isTrue); |
| 901 } | 924 } |
| 902 | 925 |
| 903 void test_visitVariableDeclaration_nonConst() { | 926 void test_visitVariableDeclaration_nonConst() { |
| 904 _setupVariableDeclaration("v", false, true); | 927 _setupVariableDeclaration("v", false, true); |
| 905 expect(_findVariableDeclarations().isEmpty, isTrue); | 928 expect(_findVariableDeclarations().isEmpty, isTrue); |
| 906 } | 929 } |
| 907 | 930 |
| 931 void test_visitVariableDeclaration_static_const_inClass() { |
| 932 VariableDeclaration field = |
| 933 _setupFieldDeclaration('C', 'f', Keyword.CONST, isStatic: true); |
| 934 expect(_findVariableDeclarations()[field.element], same(field)); |
| 935 } |
| 936 |
| 937 void test_visitVariableDeclaration_static_const_inClassWithConstConstructor()
{ |
| 938 VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.CONST, |
| 939 isStatic: true, hasConstConstructor: true); |
| 940 expect(_findVariableDeclarations()[field.element], same(field)); |
| 941 } |
| 942 |
| 943 void test_visitVariableDeclaration_static_final_inClassWithConstConstructor()
{ |
| 944 _setupFieldDeclaration('C', 'f', Keyword.FINAL, |
| 945 isStatic: true, hasConstConstructor: true); |
| 946 expect(_findVariableDeclarations(), isEmpty); |
| 947 } |
| 948 |
| 949 void test_visitVariableDeclaration_uninitialized_final_inClassWithConstConstru
ctor() { |
| 950 _setupFieldDeclaration('C', 'f', Keyword.FINAL, |
| 951 isInitialized: false, hasConstConstructor: true); |
| 952 expect(_findVariableDeclarations(), isEmpty); |
| 953 } |
| 954 |
| 955 void test_visitVariableDeclaration_uninitialized_static_const_inClass() { |
| 956 _setupFieldDeclaration('C', 'f', Keyword.CONST, |
| 957 isStatic: true, isInitialized: false); |
| 958 expect(_findVariableDeclarations(), isEmpty); |
| 959 } |
| 960 |
| 908 List<Annotation> _findAnnotations() { | 961 List<Annotation> _findAnnotations() { |
| 909 ConstantFinder finder = new ConstantFinder(); | 962 ConstantFinder finder = new ConstantFinder(); |
| 910 _node.accept(finder); | 963 _node.accept(finder); |
| 911 List<Annotation> annotations = finder.annotations; | 964 List<Annotation> annotations = finder.annotations; |
| 912 expect(annotations, isNotNull); | 965 expect(annotations, isNotNull); |
| 913 return annotations; | 966 return annotations; |
| 914 } | 967 } |
| 915 | 968 |
| 916 Map<ConstructorElement, ConstructorDeclaration> _findConstantDeclarations() { | 969 Map<ConstructorElement, ConstructorDeclaration> _findConstantDeclarations() { |
| 917 ConstantFinder finder = new ConstantFinder(); | 970 ConstantFinder finder = new ConstantFinder(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 947 AstFactory.formalParameterList(), null, | 1000 AstFactory.formalParameterList(), null, |
| 948 AstFactory.blockFunctionBody2()); | 1001 AstFactory.blockFunctionBody2()); |
| 949 ClassElement classElement = ElementFactory.classElement2(name); | 1002 ClassElement classElement = ElementFactory.classElement2(name); |
| 950 ConstructorElement element = | 1003 ConstructorElement element = |
| 951 ElementFactory.constructorElement(classElement, name, isConst); | 1004 ElementFactory.constructorElement(classElement, name, isConst); |
| 952 constructorDeclaration.element = element; | 1005 constructorDeclaration.element = element; |
| 953 _node = constructorDeclaration; | 1006 _node = constructorDeclaration; |
| 954 return element; | 1007 return element; |
| 955 } | 1008 } |
| 956 | 1009 |
| 1010 VariableDeclaration _setupFieldDeclaration( |
| 1011 String className, String fieldName, Keyword keyword, |
| 1012 {bool isInitialized: true, bool isStatic: false, |
| 1013 bool hasConstConstructor: false}) { |
| 1014 VariableDeclaration variableDeclaration = isInitialized |
| 1015 ? AstFactory.variableDeclaration2(fieldName, AstFactory.integer(0)) |
| 1016 : AstFactory.variableDeclaration(fieldName); |
| 1017 VariableElement fieldElement = ElementFactory.fieldElement(fieldName, |
| 1018 isStatic, keyword == Keyword.FINAL, keyword == Keyword.CONST, |
| 1019 _typeProvider.intType); |
| 1020 variableDeclaration.name.staticElement = fieldElement; |
| 1021 FieldDeclaration fieldDeclaration = AstFactory.fieldDeclaration2( |
| 1022 isStatic, keyword, <VariableDeclaration>[variableDeclaration]); |
| 1023 ClassDeclaration classDeclaration = |
| 1024 AstFactory.classDeclaration(null, className, null, null, null, null); |
| 1025 classDeclaration.members.add(fieldDeclaration); |
| 1026 _node = classDeclaration; |
| 1027 ClassElementImpl classElement = ElementFactory.classElement2(className); |
| 1028 classElement.fields = <FieldElement>[fieldElement]; |
| 1029 classDeclaration.name.staticElement = classElement; |
| 1030 if (hasConstConstructor) { |
| 1031 ConstructorDeclaration constructorDeclaration = AstFactory |
| 1032 .constructorDeclaration2(Keyword.CONST, null, |
| 1033 AstFactory.identifier3(className), null, |
| 1034 AstFactory.formalParameterList(), null, |
| 1035 AstFactory.blockFunctionBody2()); |
| 1036 classDeclaration.members.add(constructorDeclaration); |
| 1037 ConstructorElement constructorElement = |
| 1038 ElementFactory.constructorElement(classElement, '', true); |
| 1039 constructorDeclaration.element = constructorElement; |
| 1040 classElement.constructors = <ConstructorElement>[constructorElement]; |
| 1041 } |
| 1042 return variableDeclaration; |
| 1043 } |
| 1044 |
| 957 void _setupInstanceCreationExpression(String name, bool isConst) { | 1045 void _setupInstanceCreationExpression(String name, bool isConst) { |
| 958 _node = AstFactory.instanceCreationExpression2( | 1046 _node = AstFactory.instanceCreationExpression2( |
| 959 isConst ? Keyword.CONST : null, | 1047 isConst ? Keyword.CONST : null, |
| 960 AstFactory.typeName3(AstFactory.identifier3(name))); | 1048 AstFactory.typeName3(AstFactory.identifier3(name))); |
| 961 } | 1049 } |
| 962 | 1050 |
| 963 VariableElement _setupVariableDeclaration( | 1051 VariableElement _setupVariableDeclaration( |
| 964 String name, bool isConst, bool isInitialized) { | 1052 String name, bool isConst, bool isInitialized, {isFinal: false}) { |
| 965 VariableDeclaration variableDeclaration = isInitialized | 1053 VariableDeclaration variableDeclaration = isInitialized |
| 966 ? AstFactory.variableDeclaration2(name, AstFactory.integer(0)) | 1054 ? AstFactory.variableDeclaration2(name, AstFactory.integer(0)) |
| 967 : AstFactory.variableDeclaration(name); | 1055 : AstFactory.variableDeclaration(name); |
| 968 SimpleIdentifier identifier = variableDeclaration.name; | 1056 SimpleIdentifier identifier = variableDeclaration.name; |
| 969 VariableElement element = ElementFactory.localVariableElement(identifier); | 1057 VariableElement element = ElementFactory.localVariableElement(identifier); |
| 970 identifier.staticElement = element; | 1058 identifier.staticElement = element; |
| 971 AstFactory.variableDeclarationList2( | 1059 Keyword keyword = isConst ? Keyword.CONST : isFinal ? Keyword.FINAL : null; |
| 972 isConst ? Keyword.CONST : null, [variableDeclaration]); | 1060 AstFactory.variableDeclarationList2(keyword, [variableDeclaration]); |
| 973 _node = variableDeclaration; | 1061 _node = variableDeclaration; |
| 974 return element; | 1062 return element; |
| 975 } | 1063 } |
| 976 } | 1064 } |
| 977 | 1065 |
| 978 @reflectiveTest | 1066 @reflectiveTest |
| 979 class ConstantValueComputerTest extends ResolverTestCase { | 1067 class ConstantValueComputerTest extends ResolverTestCase { |
| 980 void test_annotation_constConstructor() { | 1068 void test_annotation_constConstructor() { |
| 981 CompilationUnit compilationUnit = resolveSource(r''' | 1069 CompilationUnit compilationUnit = resolveSource(r''' |
| 982 class A { | 1070 class A { |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1338 class A { | 1426 class A { |
| 1339 const A() : x = 5; | 1427 const A() : x = 5; |
| 1340 final int x; | 1428 final int x; |
| 1341 } | 1429 } |
| 1342 class B extends A { | 1430 class B extends A { |
| 1343 const B(); | 1431 const B(); |
| 1344 } | 1432 } |
| 1345 const B b = const B();'''); | 1433 const B b = const B();'''); |
| 1346 } | 1434 } |
| 1347 | 1435 |
| 1436 void test_dependencyOnInitializedNonStaticConst() { |
| 1437 // Even though non-static consts are not allowed by the language, we need |
| 1438 // to handle them for error recovery purposes. |
| 1439 // a depends on A() depends on A.x |
| 1440 _assertProperDependencies(''' |
| 1441 class A { |
| 1442 const A(); |
| 1443 const int x = 1; |
| 1444 } |
| 1445 const A a = const A(); |
| 1446 ''', [CompileTimeErrorCode.CONST_INSTANCE_FIELD]); |
| 1447 } |
| 1448 |
| 1449 void test_dependencyOnInitializedFinal() { |
| 1450 // a depends on A() depends on A.x |
| 1451 _assertProperDependencies(''' |
| 1452 class A { |
| 1453 const A(); |
| 1454 final int x = 1; |
| 1455 } |
| 1456 const A a = const A(); |
| 1457 '''); |
| 1458 } |
| 1459 |
| 1348 void test_dependencyOnNonFactoryRedirect() { | 1460 void test_dependencyOnNonFactoryRedirect() { |
| 1349 // a depends on A.foo() depends on A.bar() | 1461 // a depends on A.foo() depends on A.bar() |
| 1350 _assertProperDependencies(r''' | 1462 _assertProperDependencies(r''' |
| 1351 const A a = const A.foo(); | 1463 const A a = const A.foo(); |
| 1352 class A { | 1464 class A { |
| 1353 const A.foo() : this.bar(); | 1465 const A.foo() : this.bar(); |
| 1354 const A.bar(); | 1466 const A.bar(); |
| 1355 }'''); | 1467 }'''); |
| 1356 } | 1468 } |
| 1357 | 1469 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1423 const A a = const A();'''); | 1535 const A a = const A();'''); |
| 1424 } | 1536 } |
| 1425 | 1537 |
| 1426 void test_dependencyOnVariable() { | 1538 void test_dependencyOnVariable() { |
| 1427 // x depends on y | 1539 // x depends on y |
| 1428 _assertProperDependencies(r''' | 1540 _assertProperDependencies(r''' |
| 1429 const x = y + 1; | 1541 const x = y + 1; |
| 1430 const y = 2;'''); | 1542 const y = 2;'''); |
| 1431 } | 1543 } |
| 1432 | 1544 |
| 1545 void test_final_initialized_at_declaration() { |
| 1546 CompilationUnit compilationUnit = resolveSource(''' |
| 1547 class A { |
| 1548 final int i = 123; |
| 1549 const A(); |
| 1550 } |
| 1551 |
| 1552 const A a = const A(); |
| 1553 '''); |
| 1554 EvaluationResultImpl result = |
| 1555 _evaluateInstanceCreationExpression(compilationUnit, 'a'); |
| 1556 Map<String, DartObjectImpl> fields = _assertType(result, "A"); |
| 1557 expect(fields, hasLength(1)); |
| 1558 _assertIntField(fields, "i", 123); |
| 1559 } |
| 1560 |
| 1561 void test_non_static_const_initialized_at_declaration() { |
| 1562 // Even though non-static consts are not allowed by the language, we need |
| 1563 // to handle them for error recovery purposes. |
| 1564 CompilationUnit compilationUnit = resolveSource(''' |
| 1565 class A { |
| 1566 const int i = 123; |
| 1567 const A(); |
| 1568 } |
| 1569 |
| 1570 const A a = const A(); |
| 1571 '''); |
| 1572 EvaluationResultImpl result = |
| 1573 _evaluateInstanceCreationExpression(compilationUnit, 'a'); |
| 1574 Map<String, DartObjectImpl> fields = _assertType(result, "A"); |
| 1575 expect(fields, hasLength(1)); |
| 1576 _assertIntField(fields, "i", 123); |
| 1577 } |
| 1578 |
| 1433 void test_fromEnvironment_bool_default_false() { | 1579 void test_fromEnvironment_bool_default_false() { |
| 1434 expect(_assertValidBool(_check_fromEnvironment_bool(null, "false")), false); | 1580 expect(_assertValidBool(_check_fromEnvironment_bool(null, "false")), false); |
| 1435 } | 1581 } |
| 1436 | 1582 |
| 1437 void test_fromEnvironment_bool_default_overridden() { | 1583 void test_fromEnvironment_bool_default_overridden() { |
| 1438 expect( | 1584 expect( |
| 1439 _assertValidBool(_check_fromEnvironment_bool("false", "true")), false); | 1585 _assertValidBool(_check_fromEnvironment_bool("false", "true")), false); |
| 1440 } | 1586 } |
| 1441 | 1587 |
| 1442 void test_fromEnvironment_bool_default_parseError() { | 1588 void test_fromEnvironment_bool_default_parseError() { |
| (...skipping 6859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8302 TypeProvider typeProvider, DeclaredVariables declaredVariables) | 8448 TypeProvider typeProvider, DeclaredVariables declaredVariables) |
| 8303 : super(typeProvider, declaredVariables); | 8449 : super(typeProvider, declaredVariables); |
| 8304 | 8450 |
| 8305 @override | 8451 @override |
| 8306 void beforeComputeValue(AstNode constNode) { | 8452 void beforeComputeValue(AstNode constNode) { |
| 8307 super.beforeComputeValue(constNode); | 8453 super.beforeComputeValue(constNode); |
| 8308 _nodeBeingEvaluated = constNode; | 8454 _nodeBeingEvaluated = constNode; |
| 8309 } | 8455 } |
| 8310 | 8456 |
| 8311 @override | 8457 @override |
| 8458 void beforeGetFieldEvaluationResult(FieldElementImpl field) { |
| 8459 super.beforeGetFieldEvaluationResult(field); |
| 8460 // If we are getting the constant value for a node in the graph, make sure |
| 8461 // we properly recorded the dependency. |
| 8462 VariableDeclaration node = findVariableDeclaration(field); |
| 8463 if (node != null && referenceGraph.nodes.contains(node)) { |
| 8464 expect(referenceGraph.containsPath(_nodeBeingEvaluated, node), isTrue); |
| 8465 } |
| 8466 } |
| 8467 |
| 8468 @override |
| 8312 void beforeGetConstantInitializers(ConstructorElement constructor) { | 8469 void beforeGetConstantInitializers(ConstructorElement constructor) { |
| 8313 super.beforeGetConstantInitializers(constructor); | 8470 super.beforeGetConstantInitializers(constructor); |
| 8314 // If we are getting the constant initializers for a node in the graph, | 8471 // If we are getting the constant initializers for a node in the graph, |
| 8315 // make sure we properly recorded the dependency. | 8472 // make sure we properly recorded the dependency. |
| 8316 ConstructorDeclaration node = findConstructorDeclaration(constructor); | 8473 ConstructorDeclaration node = findConstructorDeclaration(constructor); |
| 8317 if (node != null && referenceGraph.nodes.contains(node)) { | 8474 if (node != null && referenceGraph.nodes.contains(node)) { |
| 8318 expect(referenceGraph.containsPath(_nodeBeingEvaluated, node), isTrue); | 8475 expect(referenceGraph.containsPath(_nodeBeingEvaluated, node), isTrue); |
| 8319 } | 8476 } |
| 8320 } | 8477 } |
| 8321 | 8478 |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8621 if (_expectedExternalScriptName == null) { | 8778 if (_expectedExternalScriptName == null) { |
| 8622 expect(scriptSource, isNull, reason: "script $scriptIndex"); | 8779 expect(scriptSource, isNull, reason: "script $scriptIndex"); |
| 8623 } else { | 8780 } else { |
| 8624 expect(scriptSource, isNotNull, reason: "script $scriptIndex"); | 8781 expect(scriptSource, isNotNull, reason: "script $scriptIndex"); |
| 8625 String actualExternalScriptName = scriptSource.shortName; | 8782 String actualExternalScriptName = scriptSource.shortName; |
| 8626 expect(actualExternalScriptName, _expectedExternalScriptName, | 8783 expect(actualExternalScriptName, _expectedExternalScriptName, |
| 8627 reason: "script $scriptIndex"); | 8784 reason: "script $scriptIndex"); |
| 8628 } | 8785 } |
| 8629 } | 8786 } |
| 8630 } | 8787 } |
| OLD | NEW |