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 test.src.task.dart_test; | 5 library test.src.task.dart_test; |
6 | 6 |
7 import 'package:analyzer/src/context/cache.dart'; | 7 import 'package:analyzer/src/context/cache.dart'; |
8 import 'package:analyzer/src/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
9 import 'package:analyzer/src/generated/constant.dart'; | 9 import 'package:analyzer/src/generated/constant.dart'; |
10 import 'package:analyzer/src/generated/element.dart'; | 10 import 'package:analyzer/src/generated/element.dart'; |
(...skipping 29 matching lines...) Expand all Loading... |
40 runReflectiveTests(BuildTypeProviderTaskTest); | 40 runReflectiveTests(BuildTypeProviderTaskTest); |
41 runReflectiveTests(ComputeConstantDependenciesTaskTest); | 41 runReflectiveTests(ComputeConstantDependenciesTaskTest); |
42 runReflectiveTests(ComputeConstantValueTaskTest); | 42 runReflectiveTests(ComputeConstantValueTaskTest); |
43 runReflectiveTests(ComputeInferableStaticVariableDependenciesTaskTest); | 43 runReflectiveTests(ComputeInferableStaticVariableDependenciesTaskTest); |
44 runReflectiveTests(ContainingLibrariesTaskTest); | 44 runReflectiveTests(ContainingLibrariesTaskTest); |
45 runReflectiveTests(DartErrorsTaskTest); | 45 runReflectiveTests(DartErrorsTaskTest); |
46 runReflectiveTests(EvaluateUnitConstantsTaskTest); | 46 runReflectiveTests(EvaluateUnitConstantsTaskTest); |
47 runReflectiveTests(GatherUsedImportedElementsTaskTest); | 47 runReflectiveTests(GatherUsedImportedElementsTaskTest); |
48 runReflectiveTests(GatherUsedLocalElementsTaskTest); | 48 runReflectiveTests(GatherUsedLocalElementsTaskTest); |
49 runReflectiveTests(GenerateHintsTaskTest); | 49 runReflectiveTests(GenerateHintsTaskTest); |
| 50 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest); |
| 51 runReflectiveTests(InferStaticVariableTypeTaskTest); |
50 runReflectiveTests(LibraryErrorsReadyTaskTest); | 52 runReflectiveTests(LibraryErrorsReadyTaskTest); |
51 runReflectiveTests(LibraryUnitErrorsTaskTest); | 53 runReflectiveTests(LibraryUnitErrorsTaskTest); |
52 runReflectiveTests(ParseDartTaskTest); | 54 runReflectiveTests(ParseDartTaskTest); |
53 runReflectiveTests(PartiallyResolveReferencesTaskTest); | 55 runReflectiveTests(PartiallyResolveReferencesTaskTest); |
54 runReflectiveTests(ResolveUnitTypeNamesTaskTest); | 56 runReflectiveTests(ResolveUnitTypeNamesTaskTest); |
55 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); | 57 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); |
56 runReflectiveTests(ResolveReferencesTaskTest); | 58 runReflectiveTests(ResolveReferencesTaskTest); |
57 runReflectiveTests(ResolveVariableReferencesTaskTest); | 59 runReflectiveTests(ResolveVariableReferencesTaskTest); |
58 runReflectiveTests(ScanDartTaskTest); | 60 runReflectiveTests(ScanDartTaskTest); |
59 runReflectiveTests(VerifyUnitTaskTest); | 61 runReflectiveTests(VerifyUnitTaskTest); |
(...skipping 1442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1502 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1504 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1503 computeResult(target, RESOLVED_UNIT5); | 1505 computeResult(target, RESOLVED_UNIT5); |
1504 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 1506 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
1505 TopLevelVariableElement elementA = unit.element.topLevelVariables[0]; | 1507 TopLevelVariableElement elementA = unit.element.topLevelVariables[0]; |
1506 TopLevelVariableElement elementB = unit.element.topLevelVariables[1]; | 1508 TopLevelVariableElement elementB = unit.element.topLevelVariables[1]; |
1507 | 1509 |
1508 computeResult(elementA, INFERABLE_STATIC_VARIABLE_DEPENDENCIES); | 1510 computeResult(elementA, INFERABLE_STATIC_VARIABLE_DEPENDENCIES); |
1509 expect(task, | 1511 expect(task, |
1510 new isInstanceOf<ComputeInferableStaticVariableDependenciesTask>()); | 1512 new isInstanceOf<ComputeInferableStaticVariableDependenciesTask>()); |
1511 expect(outputs, hasLength(1)); | 1513 expect(outputs, hasLength(1)); |
1512 Set<VariableElement> dependencies = | 1514 List<VariableElement> dependencies = |
1513 outputs[INFERABLE_STATIC_VARIABLE_DEPENDENCIES]; | 1515 outputs[INFERABLE_STATIC_VARIABLE_DEPENDENCIES]; |
1514 expect(dependencies, unorderedEquals([elementB])); | 1516 expect(dependencies, unorderedEquals([elementB])); |
1515 } | 1517 } |
1516 } | 1518 } |
1517 | 1519 |
1518 @reflectiveTest | 1520 @reflectiveTest |
1519 class ContainingLibrariesTaskTest extends _AbstractDartTaskTest { | 1521 class ContainingLibrariesTaskTest extends _AbstractDartTaskTest { |
1520 test_buildInputs() { | 1522 test_buildInputs() { |
1521 Map<String, TaskInput> inputs = | 1523 Map<String, TaskInput> inputs = |
1522 ContainingLibrariesTask.buildInputs(emptySource); | 1524 ContainingLibrariesTask.buildInputs(emptySource); |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2025 computeResult(target, HINTS); | 2027 computeResult(target, HINTS); |
2026 expect(task, new isInstanceOf<GenerateHintsTask>()); | 2028 expect(task, new isInstanceOf<GenerateHintsTask>()); |
2027 // validate | 2029 // validate |
2028 _fillErrorListener(HINTS); | 2030 _fillErrorListener(HINTS); |
2029 errorListener.assertErrorsWithCodes( | 2031 errorListener.assertErrorsWithCodes( |
2030 <ErrorCode>[HintCode.UNUSED_ELEMENT, HintCode.UNUSED_ELEMENT]); | 2032 <ErrorCode>[HintCode.UNUSED_ELEMENT, HintCode.UNUSED_ELEMENT]); |
2031 } | 2033 } |
2032 } | 2034 } |
2033 | 2035 |
2034 @reflectiveTest | 2036 @reflectiveTest |
| 2037 class InferStaticVariableTypesInUnitTaskTest extends _AbstractDartTaskTest { |
| 2038 void test_perform() { |
| 2039 enableStrongMode(); |
| 2040 AnalysisTarget firstSource = newSource( |
| 2041 '/first.dart', |
| 2042 ''' |
| 2043 import 'second.dart'; |
| 2044 |
| 2045 var a = new M(); |
| 2046 var c = b; |
| 2047 '''); |
| 2048 AnalysisTarget secondSource = newSource( |
| 2049 '/second.dart', |
| 2050 ''' |
| 2051 import 'first.dart'; |
| 2052 |
| 2053 var b = a; |
| 2054 class M {} |
| 2055 '''); |
| 2056 computeResult(new LibrarySpecificUnit(firstSource, firstSource), |
| 2057 RESOLVED_UNIT6); // new isInstanceOf<InferStaticVariableTypesInUnitTask
>() |
| 2058 CompilationUnit firstUnit = outputs[RESOLVED_UNIT6]; |
| 2059 computeResult( |
| 2060 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT6); |
| 2061 CompilationUnit secondUnit = outputs[RESOLVED_UNIT6]; |
| 2062 |
| 2063 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a'); |
| 2064 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b'); |
| 2065 VariableDeclaration variableC = getTopLevelVariable(firstUnit, 'c'); |
| 2066 ClassDeclaration classM = getClass(secondUnit, 'M'); |
| 2067 DartType typeM = classM.element.type; |
| 2068 |
| 2069 expect(variableA.element.type, typeM); |
| 2070 expect(variableB.element.type, typeM); |
| 2071 expect(variableB.initializer.staticType, typeM); |
| 2072 expect(variableC.element.type, typeM); |
| 2073 expect(variableC.initializer.staticType, typeM); |
| 2074 } |
| 2075 } |
| 2076 |
| 2077 @reflectiveTest |
| 2078 class InferStaticVariableTypeTaskTest extends _AbstractDartTaskTest { |
| 2079 void test_getDeclaration_staticField() { |
| 2080 AnalysisTarget source = newSource( |
| 2081 '/test.dart', |
| 2082 ''' |
| 2083 class C { |
| 2084 var field = ''; |
| 2085 } |
| 2086 '''); |
| 2087 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2088 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2089 VariableDeclaration declaration = getFieldInClass(unit, 'C', 'field'); |
| 2090 VariableElement variable = declaration.name.staticElement; |
| 2091 InferStaticVariableTypeTask inferTask = |
| 2092 new InferStaticVariableTypeTask(task.context, variable); |
| 2093 expect(inferTask.getDeclaration(unit), declaration); |
| 2094 } |
| 2095 |
| 2096 void test_getDeclaration_topLevel() { |
| 2097 AnalysisTarget source = newSource( |
| 2098 '/test.dart', |
| 2099 ''' |
| 2100 var topLevel = ''; |
| 2101 '''); |
| 2102 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2103 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2104 VariableDeclaration declaration = getTopLevelVariable(unit, 'topLevel'); |
| 2105 VariableElement variable = declaration.name.staticElement; |
| 2106 InferStaticVariableTypeTask inferTask = |
| 2107 new InferStaticVariableTypeTask(task.context, variable); |
| 2108 expect(inferTask.getDeclaration(unit), declaration); |
| 2109 } |
| 2110 |
| 2111 void test_perform() { |
| 2112 AnalysisTarget source = newSource( |
| 2113 '/test.dart', |
| 2114 ''' |
| 2115 var topLevel = ''; |
| 2116 class C { |
| 2117 var field = topLevel; |
| 2118 } |
| 2119 '''); |
| 2120 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
| 2121 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
| 2122 VariableElement topLevel = |
| 2123 getTopLevelVariable(unit, 'topLevel').name.staticElement; |
| 2124 VariableElement field = |
| 2125 getFieldInClass(unit, 'C', 'field').name.staticElement; |
| 2126 |
| 2127 computeResult(field, INFERRED_STATIC_VARIABLE); |
| 2128 InterfaceType stringType = context.typeProvider.stringType; |
| 2129 expect(topLevel.type, stringType); |
| 2130 expect(field.type, stringType); |
| 2131 } |
| 2132 } |
| 2133 |
| 2134 @reflectiveTest |
2035 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { | 2135 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { |
2036 test_perform() { | 2136 test_perform() { |
2037 Source library = newSource( | 2137 Source library = newSource( |
2038 '/lib.dart', | 2138 '/lib.dart', |
2039 r''' | 2139 r''' |
2040 library lib; | 2140 library lib; |
2041 part 'part1.dart'; | 2141 part 'part1.dart'; |
2042 part 'part2.dart'; | 2142 part 'part2.dart'; |
2043 X v1; | 2143 X v1; |
2044 '''); | 2144 '''); |
(...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2874 | 2974 |
2875 /** | 2975 /** |
2876 * Enable strong mode in the current analysis context. | 2976 * Enable strong mode in the current analysis context. |
2877 */ | 2977 */ |
2878 void enableStrongMode() { | 2978 void enableStrongMode() { |
2879 AnalysisOptionsImpl options = context.analysisOptions; | 2979 AnalysisOptionsImpl options = context.analysisOptions; |
2880 options.strongMode = true; | 2980 options.strongMode = true; |
2881 context.analysisOptions = options; | 2981 context.analysisOptions = options; |
2882 } | 2982 } |
2883 | 2983 |
| 2984 /** |
| 2985 * Return the declaration of the class with the given [className] in the given |
| 2986 * compilation [unit]. |
| 2987 */ |
| 2988 ClassDeclaration getClass(CompilationUnit unit, String className) { |
| 2989 NodeList<CompilationUnitMember> unitMembers = unit.declarations; |
| 2990 for (CompilationUnitMember unitMember in unitMembers) { |
| 2991 if (unitMember is ClassDeclaration && unitMember.name.name == className) { |
| 2992 return unitMember; |
| 2993 } |
| 2994 } |
| 2995 return null; |
| 2996 } |
| 2997 |
| 2998 /** |
| 2999 * Return the declaration of the field with the given [fieldName] in the class |
| 3000 * with the given [className] in the given compilation [unit]. |
| 3001 */ |
| 3002 VariableDeclaration getFieldInClass( |
| 3003 CompilationUnit unit, String className, String fieldName) { |
| 3004 ClassDeclaration unitMember = getClass(unit, className); |
| 3005 if (unitMember == null) { |
| 3006 return null; |
| 3007 } |
| 3008 NodeList<ClassMember> classMembers = unitMember.members; |
| 3009 for (ClassMember classMember in classMembers) { |
| 3010 if (classMember is FieldDeclaration) { |
| 3011 NodeList<VariableDeclaration> fields = classMember.fields.variables; |
| 3012 for (VariableDeclaration field in fields) { |
| 3013 if (field.name.name == fieldName) { |
| 3014 return field; |
| 3015 } |
| 3016 } |
| 3017 } |
| 3018 } |
| 3019 return null; |
| 3020 } |
| 3021 |
| 3022 /** |
| 3023 * Return the declaration of the top-level variable with the given |
| 3024 * [variableName] in the given compilation [unit]. |
| 3025 */ |
| 3026 VariableDeclaration getTopLevelVariable( |
| 3027 CompilationUnit unit, String variableName) { |
| 3028 NodeList<CompilationUnitMember> unitMembers = unit.declarations; |
| 3029 for (CompilationUnitMember unitMember in unitMembers) { |
| 3030 if (unitMember is TopLevelVariableDeclaration) { |
| 3031 NodeList<VariableDeclaration> variables = |
| 3032 unitMember.variables.variables; |
| 3033 for (VariableDeclaration variable in variables) { |
| 3034 if (variable.name.name == variableName) { |
| 3035 return variable; |
| 3036 } |
| 3037 } |
| 3038 } |
| 3039 } |
| 3040 return null; |
| 3041 } |
| 3042 |
2884 void setUp() { | 3043 void setUp() { |
2885 super.setUp(); | 3044 super.setUp(); |
2886 emptySource = newSource('/test.dart'); | 3045 emptySource = newSource('/test.dart'); |
2887 } | 3046 } |
2888 | 3047 |
2889 /** | 3048 /** |
2890 * Fill [errorListener] with [result] errors in the current [task]. | 3049 * Fill [errorListener] with [result] errors in the current [task]. |
2891 */ | 3050 */ |
2892 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { | 3051 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { |
2893 List<AnalysisError> errors = task.outputs[result]; | 3052 List<AnalysisError> errors = task.outputs[result]; |
2894 expect(errors, isNotNull, reason: result.name); | 3053 expect(errors, isNotNull, reason: result.name); |
2895 errorListener = new GatheringErrorListener(); | 3054 errorListener = new GatheringErrorListener(); |
2896 errorListener.addAll(errors); | 3055 errorListener.addAll(errors); |
2897 } | 3056 } |
2898 } | 3057 } |
OLD | NEW |