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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
48 runReflectiveTests(GatherUsedImportedElementsTaskTest); | 48 runReflectiveTests(GatherUsedImportedElementsTaskTest); |
49 runReflectiveTests(GatherUsedLocalElementsTaskTest); | 49 runReflectiveTests(GatherUsedLocalElementsTaskTest); |
50 runReflectiveTests(GenerateHintsTaskTest); | 50 runReflectiveTests(GenerateHintsTaskTest); |
51 runReflectiveTests(InferInstanceMembersInUnitTaskTest); | 51 runReflectiveTests(InferInstanceMembersInUnitTaskTest); |
52 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest); | 52 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest); |
53 runReflectiveTests(InferStaticVariableTypeTaskTest); | 53 runReflectiveTests(InferStaticVariableTypeTaskTest); |
54 runReflectiveTests(LibraryErrorsReadyTaskTest); | 54 runReflectiveTests(LibraryErrorsReadyTaskTest); |
55 runReflectiveTests(LibraryUnitErrorsTaskTest); | 55 runReflectiveTests(LibraryUnitErrorsTaskTest); |
56 runReflectiveTests(ParseDartTaskTest); | 56 runReflectiveTests(ParseDartTaskTest); |
57 runReflectiveTests(PartiallyResolveUnitReferencesTaskTest); | 57 runReflectiveTests(PartiallyResolveUnitReferencesTaskTest); |
58 runReflectiveTests(ResolveFunctionBodiesInUnitTaskTest); | |
59 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); | 58 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); |
59 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); | |
Brian Wilkerson
2015/10/06 19:04:47
Duplicated line. (Probably copied and pasted in pr
Leaf
2015/10/07 18:53:55
Done.
| |
60 runReflectiveTests(ResolveUnitTaskTest); | |
60 runReflectiveTests(ResolveUnitTypeNamesTaskTest); | 61 runReflectiveTests(ResolveUnitTypeNamesTaskTest); |
61 runReflectiveTests(ResolveVariableReferencesTaskTest); | 62 runReflectiveTests(ResolveVariableReferencesTaskTest); |
62 runReflectiveTests(ScanDartTaskTest); | 63 runReflectiveTests(ScanDartTaskTest); |
63 runReflectiveTests(StrongModeInferenceTest); | 64 runReflectiveTests(StrongModeInferenceTest); |
64 runReflectiveTests(VerifyUnitTaskTest); | 65 runReflectiveTests(VerifyUnitTaskTest); |
Brian Wilkerson
2015/10/06 19:04:47
We appear to be missing tests for ComputeLibraryCy
Leaf
2015/10/07 18:53:55
Done.
| |
65 } | 66 } |
66 | 67 |
67 isInstanceOf isBuildCompilationUnitElementTask = | 68 isInstanceOf isBuildCompilationUnitElementTask = |
68 new isInstanceOf<BuildCompilationUnitElementTask>(); | 69 new isInstanceOf<BuildCompilationUnitElementTask>(); |
69 isInstanceOf isBuildDirectiveElementsTask = | 70 isInstanceOf isBuildDirectiveElementsTask = |
70 new isInstanceOf<BuildDirectiveElementsTask>(); | 71 new isInstanceOf<BuildDirectiveElementsTask>(); |
71 isInstanceOf isBuildEnumMemberElementsTask = | 72 isInstanceOf isBuildEnumMemberElementsTask = |
72 new isInstanceOf<BuildEnumMemberElementsTask>(); | 73 new isInstanceOf<BuildEnumMemberElementsTask>(); |
73 isInstanceOf isBuildExportNamespaceTask = | 74 isInstanceOf isBuildExportNamespaceTask = |
74 new isInstanceOf<BuildExportNamespaceTask>(); | 75 new isInstanceOf<BuildExportNamespaceTask>(); |
(...skipping 29 matching lines...) Expand all Loading... | |
104 new isInstanceOf<InferStaticVariableTypesInUnitTask>(); | 105 new isInstanceOf<InferStaticVariableTypesInUnitTask>(); |
105 isInstanceOf isInferStaticVariableTypeTask = | 106 isInstanceOf isInferStaticVariableTypeTask = |
106 new isInstanceOf<InferStaticVariableTypeTask>(); | 107 new isInstanceOf<InferStaticVariableTypeTask>(); |
107 isInstanceOf isLibraryErrorsReadyTask = | 108 isInstanceOf isLibraryErrorsReadyTask = |
108 new isInstanceOf<LibraryErrorsReadyTask>(); | 109 new isInstanceOf<LibraryErrorsReadyTask>(); |
109 isInstanceOf isLibraryUnitErrorsTask = | 110 isInstanceOf isLibraryUnitErrorsTask = |
110 new isInstanceOf<LibraryUnitErrorsTask>(); | 111 new isInstanceOf<LibraryUnitErrorsTask>(); |
111 isInstanceOf isParseDartTask = new isInstanceOf<ParseDartTask>(); | 112 isInstanceOf isParseDartTask = new isInstanceOf<ParseDartTask>(); |
112 isInstanceOf isPartiallyResolveUnitReferencesTask = | 113 isInstanceOf isPartiallyResolveUnitReferencesTask = |
113 new isInstanceOf<PartiallyResolveUnitReferencesTask>(); | 114 new isInstanceOf<PartiallyResolveUnitReferencesTask>(); |
114 isInstanceOf isResolveFunctionBodiesInUnitTask = | |
115 new isInstanceOf<ResolveFunctionBodiesInUnitTask>(); | |
116 isInstanceOf isResolveLibraryTypeNamesTask = | 115 isInstanceOf isResolveLibraryTypeNamesTask = |
117 new isInstanceOf<ResolveLibraryTypeNamesTask>(); | 116 new isInstanceOf<ResolveLibraryTypeNamesTask>(); |
117 isInstanceOf isResolveUnitTask = new isInstanceOf<ResolveUnitTask>(); | |
118 isInstanceOf isResolveUnitTypeNamesTask = | 118 isInstanceOf isResolveUnitTypeNamesTask = |
119 new isInstanceOf<ResolveUnitTypeNamesTask>(); | 119 new isInstanceOf<ResolveUnitTypeNamesTask>(); |
120 isInstanceOf isResolveVariableReferencesTask = | 120 isInstanceOf isResolveVariableReferencesTask = |
121 new isInstanceOf<ResolveVariableReferencesTask>(); | 121 new isInstanceOf<ResolveVariableReferencesTask>(); |
122 isInstanceOf isScanDartTask = new isInstanceOf<ScanDartTask>(); | 122 isInstanceOf isScanDartTask = new isInstanceOf<ScanDartTask>(); |
123 isInstanceOf isVerifyUnitTask = new isInstanceOf<VerifyUnitTask>(); | 123 isInstanceOf isVerifyUnitTask = new isInstanceOf<VerifyUnitTask>(); |
124 | 124 |
125 @reflectiveTest | 125 @reflectiveTest |
126 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest { | 126 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest { |
127 Source source; | 127 Source source; |
(...skipping 1759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1887 Y m(Z x) {} | 1887 Y m(Z x) {} |
1888 } | 1888 } |
1889 class B extends A { | 1889 class B extends A { |
1890 var f; | 1890 var f; |
1891 m(x) {} | 1891 m(x) {} |
1892 } | 1892 } |
1893 class X {} | 1893 class X {} |
1894 class Y {} | 1894 class Y {} |
1895 class Z {} | 1895 class Z {} |
1896 '''); | 1896 '''); |
1897 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7, | 1897 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, |
1898 matcher: isInferInstanceMembersInUnitTask); | 1898 matcher: isInferInstanceMembersInUnitTask); |
1899 CompilationUnit unit = outputs[RESOLVED_UNIT7]; | 1899 CompilationUnit unit = outputs[RESOLVED_UNIT8]; |
1900 VariableDeclaration field = getFieldInClass(unit, 'B', 'f'); | 1900 VariableDeclaration field = getFieldInClass(unit, 'B', 'f'); |
1901 MethodDeclaration method = getMethodInClass(unit, 'B', 'm'); | 1901 MethodDeclaration method = getMethodInClass(unit, 'B', 'm'); |
1902 DartType typeX = getClass(unit, 'X').element.type; | 1902 DartType typeX = getClass(unit, 'X').element.type; |
1903 DartType typeY = getClass(unit, 'Y').element.type; | 1903 DartType typeY = getClass(unit, 'Y').element.type; |
1904 DartType typeZ = getClass(unit, 'Z').element.type; | 1904 DartType typeZ = getClass(unit, 'Z').element.type; |
1905 | 1905 |
1906 expect(field.element.type, typeX); | 1906 expect(field.element.type, typeX); |
1907 expect(method.element.returnType, typeY); | 1907 expect(method.element.returnType, typeY); |
1908 expect(method.element.parameters[0].type, typeZ); | 1908 expect(method.element.parameters[0].type, typeZ); |
1909 } | 1909 } |
(...skipping 11 matching lines...) Expand all Loading... | |
1921 '/second.dart', | 1921 '/second.dart', |
1922 ''' | 1922 ''' |
1923 import 'first.dart'; | 1923 import 'first.dart'; |
1924 | 1924 |
1925 const b = a; | 1925 const b = a; |
1926 class M { | 1926 class M { |
1927 String c = a; | 1927 String c = a; |
1928 } | 1928 } |
1929 '''); | 1929 '''); |
1930 computeResult( | 1930 computeResult( |
1931 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT7, | 1931 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8, |
1932 matcher: isInferInstanceMembersInUnitTask); | 1932 matcher: isInferInstanceMembersInUnitTask); |
1933 CompilationUnit firstUnit = outputs[RESOLVED_UNIT7]; | 1933 CompilationUnit firstUnit = outputs[RESOLVED_UNIT8]; |
1934 computeResult( | 1934 computeResult( |
1935 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT7); | 1935 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8); |
1936 CompilationUnit secondUnit = outputs[RESOLVED_UNIT7]; | 1936 CompilationUnit secondUnit = outputs[RESOLVED_UNIT8]; |
1937 | 1937 |
1938 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a'); | 1938 VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a'); |
1939 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b'); | 1939 VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b'); |
1940 VariableDeclaration variableC = getFieldInClass(secondUnit, 'M', 'c'); | 1940 VariableDeclaration variableC = getFieldInClass(secondUnit, 'M', 'c'); |
1941 InterfaceType stringType = context.typeProvider.stringType; | 1941 InterfaceType stringType = context.typeProvider.stringType; |
1942 | 1942 |
1943 expect(variableA.element.type, stringType); | 1943 expect(variableA.element.type, stringType); |
1944 expect(variableB.element.type, stringType); | 1944 expect(variableB.element.type, stringType); |
1945 expect(variableB.initializer.staticType, stringType); | 1945 expect(variableB.initializer.staticType, stringType); |
1946 expect(variableC.element.type, stringType); | 1946 expect(variableC.element.type, stringType); |
1947 expect(variableC.initializer.staticType, stringType); | 1947 expect(variableC.initializer.staticType, stringType); |
1948 } | 1948 } |
1949 | 1949 |
1950 void test_perform_reresolution() { | 1950 void test_perform_reresolution() { |
1951 enableStrongMode(); | 1951 enableStrongMode(); |
1952 AnalysisTarget source = newSource( | 1952 AnalysisTarget source = newSource( |
1953 '/test.dart', | 1953 '/test.dart', |
1954 ''' | 1954 ''' |
1955 const topLevel = ''; | 1955 const topLevel = ''; |
1956 class C { | 1956 class C { |
1957 String field = topLevel; | 1957 String field = topLevel; |
1958 } | 1958 } |
1959 '''); | 1959 '''); |
1960 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7); | 1960 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); |
1961 CompilationUnit unit = outputs[RESOLVED_UNIT7]; | 1961 CompilationUnit unit = outputs[RESOLVED_UNIT8]; |
1962 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel'); | 1962 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel'); |
1963 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field'); | 1963 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field'); |
1964 VariableElement topLevel = topLevelDecl.name.staticElement; | 1964 VariableElement topLevel = topLevelDecl.name.staticElement; |
1965 VariableElement field = fieldDecl.name.staticElement; | 1965 VariableElement field = fieldDecl.name.staticElement; |
1966 | 1966 |
1967 InterfaceType stringType = context.typeProvider.stringType; | 1967 InterfaceType stringType = context.typeProvider.stringType; |
1968 expect(topLevel.type, stringType); | 1968 expect(topLevel.type, stringType); |
1969 expect(field.type, stringType); | 1969 expect(field.type, stringType); |
1970 expect(fieldDecl.initializer.staticType, stringType); | 1970 expect(fieldDecl.initializer.staticType, stringType); |
1971 } | 1971 } |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2118 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field3'); | 2118 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field3'); |
2119 VariableElement topLevel = topLevelDecl.name.staticElement; | 2119 VariableElement topLevel = topLevelDecl.name.staticElement; |
2120 VariableElement field = fieldDecl.name.staticElement; | 2120 VariableElement field = fieldDecl.name.staticElement; |
2121 | 2121 |
2122 computeResult(field, INFERRED_STATIC_VARIABLE, | 2122 computeResult(field, INFERRED_STATIC_VARIABLE, |
2123 matcher: isInferStaticVariableTypeTask); | 2123 matcher: isInferStaticVariableTypeTask); |
2124 InterfaceType stringType = context.typeProvider.stringType; | 2124 InterfaceType stringType = context.typeProvider.stringType; |
2125 expect(topLevel.type, stringType); | 2125 expect(topLevel.type, stringType); |
2126 expect(field.type, stringType); | 2126 expect(field.type, stringType); |
2127 expect(fieldDecl.initializer.staticType, stringType); | 2127 expect(fieldDecl.initializer.staticType, stringType); |
2128 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0)); | |
2129 } | |
2130 | |
2131 void test_perform_reresolution() { | |
Brian Wilkerson
2015/10/06 19:04:47
Out of curiosity, why was this test removed?
Leaf
2015/10/06 20:30:55
The thing it's testing for (re-resolution of field
| |
2132 AnalysisTarget source = newSource( | |
2133 '/test.dart', | |
2134 ''' | |
2135 const topLevel = ''; | |
2136 class C { | |
2137 String field = topLevel; | |
2138 } | |
2139 '''); | |
2140 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | |
2141 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | |
2142 VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel'); | |
2143 VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field'); | |
2144 VariableElement topLevel = topLevelDecl.name.staticElement; | |
2145 VariableElement field = fieldDecl.name.staticElement; | |
2146 | |
2147 computeResult(field, INFERRED_STATIC_VARIABLE, | |
2148 matcher: isInferStaticVariableTypeTask); | |
2149 InterfaceType stringType = context.typeProvider.stringType; | |
2150 expect(topLevel.type, stringType); | |
2151 expect(field.type, stringType); | |
2152 expect(fieldDecl.initializer.staticType, stringType); | |
2153 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0)); | |
2154 } | 2128 } |
2155 | 2129 |
2156 void test_perform_const() { | 2130 void test_perform_const() { |
2157 AnalysisTarget source = newSource( | 2131 AnalysisTarget source = newSource( |
2158 '/test.dart', | 2132 '/test.dart', |
2159 ''' | 2133 ''' |
2160 const topLevel = "hello"; | 2134 const topLevel = "hello"; |
2161 class C { | 2135 class C { |
2162 var field = topLevel; | 2136 var field = topLevel; |
2163 } | 2137 } |
2164 '''); | 2138 '''); |
2165 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2139 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
2166 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2140 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2167 VariableElement topLevel = | 2141 VariableElement topLevel = |
2168 getTopLevelVariable(unit, 'topLevel').name.staticElement; | 2142 getTopLevelVariable(unit, 'topLevel').name.staticElement; |
2169 VariableElement field = | 2143 VariableElement field = |
2170 getFieldInClass(unit, 'C', 'field').name.staticElement; | 2144 getFieldInClass(unit, 'C', 'field').name.staticElement; |
2171 | 2145 |
2172 computeResult(field, INFERRED_STATIC_VARIABLE, | 2146 computeResult(field, INFERRED_STATIC_VARIABLE, |
2173 matcher: isInferStaticVariableTypeTask); | 2147 matcher: isInferStaticVariableTypeTask); |
2174 InterfaceType stringType = context.typeProvider.stringType; | 2148 InterfaceType stringType = context.typeProvider.stringType; |
2175 expect(topLevel.type, stringType); | 2149 expect(topLevel.type, stringType); |
2176 expect(field.type, stringType); | 2150 expect(field.type, stringType); |
2177 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0)); | |
2178 } | 2151 } |
2179 | 2152 |
2180 void test_perform_cycle() { | 2153 void test_perform_cycle() { |
2181 AnalysisTarget source = newSource( | 2154 AnalysisTarget source = newSource( |
2182 '/test.dart', | 2155 '/test.dart', |
2183 ''' | 2156 ''' |
2184 var piFirst = true; | 2157 var piFirst = true; |
2185 var pi = piFirst ? 3.14 : tau / 2; | 2158 var pi = piFirst ? 3.14 : tau / 2; |
2186 var tau = piFirst ? pi * 2 : 6.28; | 2159 var tau = piFirst ? pi * 2 : 6.28; |
2187 '''); | 2160 '''); |
2188 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2161 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
2189 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2162 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2190 VariableElement piFirst = | 2163 VariableElement piFirst = |
2191 getTopLevelVariable(unit, 'piFirst').name.staticElement; | 2164 getTopLevelVariable(unit, 'piFirst').name.staticElement; |
2192 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; | 2165 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; |
2193 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; | 2166 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; |
2194 | 2167 |
2195 computeResult(piFirst, INFERRED_STATIC_VARIABLE, | 2168 computeResult(piFirst, INFERRED_STATIC_VARIABLE, |
2196 matcher: isInferStaticVariableTypeTask); | 2169 matcher: isInferStaticVariableTypeTask); |
2197 expect(piFirst.type, context.typeProvider.boolType); | 2170 expect(piFirst.type, context.typeProvider.boolType); |
2198 expect(pi.type.isDynamic, isTrue); | 2171 expect(pi.type.isDynamic, isTrue); |
2199 expect(tau.type.isDynamic, isTrue); | 2172 expect(tau.type.isDynamic, isTrue); |
2200 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0)); | |
2201 } | 2173 } |
2202 | 2174 |
2203 void test_perform_error() { | 2175 void test_perform_error() { |
2204 AnalysisTarget source = newSource( | 2176 AnalysisTarget source = newSource( |
2205 '/test.dart', | 2177 '/test.dart', |
2206 ''' | 2178 ''' |
2207 var a = '' / null; | 2179 var a = '' / null; |
2208 '''); | 2180 '''); |
2209 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2181 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
2210 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2182 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2211 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; | 2183 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; |
2212 | 2184 |
2213 computeResult(a, INFERRED_STATIC_VARIABLE, | 2185 computeResult(a, INFERRED_STATIC_VARIABLE, |
2214 matcher: isInferStaticVariableTypeTask); | 2186 matcher: isInferStaticVariableTypeTask); |
2215 expect(a.type.isDynamic, isTrue); | 2187 expect(a.type.isDynamic, isTrue); |
2216 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(1)); | |
2217 } | 2188 } |
2218 | 2189 |
2219 void test_perform_null() { | 2190 void test_perform_null() { |
2220 AnalysisTarget source = newSource( | 2191 AnalysisTarget source = newSource( |
2221 '/test.dart', | 2192 '/test.dart', |
2222 ''' | 2193 ''' |
2223 var a = null; | 2194 var a = null; |
2224 '''); | 2195 '''); |
2225 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2196 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
2226 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2197 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2227 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; | 2198 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; |
2228 | 2199 |
2229 computeResult(a, INFERRED_STATIC_VARIABLE, | 2200 computeResult(a, INFERRED_STATIC_VARIABLE, |
2230 matcher: isInferStaticVariableTypeTask); | 2201 matcher: isInferStaticVariableTypeTask); |
2231 expect(a.type.isDynamic, isTrue); | 2202 expect(a.type.isDynamic, isTrue); |
2232 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0)); | |
2233 } | 2203 } |
2234 } | 2204 } |
2235 | 2205 |
2236 @reflectiveTest | 2206 @reflectiveTest |
2237 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { | 2207 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { |
2238 test_perform() { | 2208 test_perform() { |
2239 Source library = newSource( | 2209 Source library = newSource( |
2240 '/lib.dart', | 2210 '/lib.dart', |
2241 r''' | 2211 r''' |
2242 library lib; | 2212 library lib; |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2430 class A {} | 2400 class A {} |
2431 class C { | 2401 class C { |
2432 static final f = ''; | 2402 static final f = ''; |
2433 var g = 0; | 2403 var g = 0; |
2434 } | 2404 } |
2435 '''); | 2405 '''); |
2436 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2406 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2437 computeResult(target, RESOLVED_UNIT5, | 2407 computeResult(target, RESOLVED_UNIT5, |
2438 matcher: isPartiallyResolveUnitReferencesTask); | 2408 matcher: isPartiallyResolveUnitReferencesTask); |
2439 // Test the outputs | 2409 // Test the outputs |
2440 expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(5)); | 2410 expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(4)); |
2441 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2411 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2442 expect(unit, same(outputs[RESOLVED_UNIT5])); | 2412 expect(unit, same(outputs[RESOLVED_UNIT5])); |
2443 // Test the state of the AST | 2413 // Test the state of the AST |
2444 TopLevelVariableDeclaration a = unit.declarations[0]; | 2414 TopLevelVariableDeclaration a = unit.declarations[0]; |
2445 VariableDeclaration variableA = a.variables.variables[0]; | 2415 VariableDeclaration variableA = a.variables.variables[0]; |
2446 SimpleIdentifier initializer = variableA.initializer; | 2416 SimpleIdentifier initializer = variableA.initializer; |
2447 expect(initializer.staticElement, isNotNull); | 2417 expect(initializer.staticElement, isNotNull); |
2448 // Test the error generation | |
2449 _fillErrorListener(PARTIALLY_RESOLVE_REFERENCES_ERRORS); | |
2450 errorListener.assertNoErrors(); | |
2451 } | 2418 } |
2452 | 2419 |
2453 test_perform_importExport() { | 2420 test_perform_importExport() { |
2454 newSource( | 2421 newSource( |
2455 '/a.dart', | 2422 '/a.dart', |
2456 ''' | 2423 ''' |
2457 library a; | 2424 library a; |
2458 class A<T> { | 2425 class A<T> { |
2459 T m() {} | 2426 T m() {} |
2460 } | 2427 } |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2551 | 2518 |
2552 ConstructorDeclaration constructor = members[0]; | 2519 ConstructorDeclaration constructor = members[0]; |
2553 expectReference(constructor.body, false); | 2520 expectReference(constructor.body, false); |
2554 | 2521 |
2555 MethodDeclaration method = members[1]; | 2522 MethodDeclaration method = members[1]; |
2556 expectReference(method.body, false); | 2523 expectReference(method.body, false); |
2557 } | 2524 } |
2558 } | 2525 } |
2559 | 2526 |
2560 @reflectiveTest | 2527 @reflectiveTest |
2561 class ResolveFunctionBodiesInUnitTaskTest extends _AbstractDartTaskTest { | 2528 class ResolveUnitTaskTest extends _AbstractDartTaskTest { |
2562 void test_perform() { | 2529 void test_perform() { |
2563 AnalysisTarget source = newSource( | 2530 AnalysisTarget source = newSource( |
2564 '/test.dart', | 2531 '/test.dart', |
2565 ''' | 2532 ''' |
2566 void f() { | 2533 void f() { |
2567 var c = new C(); | 2534 var c = new C(); |
2568 c.m(); | 2535 c.m(); |
2569 } | 2536 } |
2570 class C { | 2537 class C { |
2571 void m() { | 2538 void m() { |
2572 f(); | 2539 f(); |
2573 } | 2540 } |
2574 } | 2541 } |
2575 '''); | 2542 '''); |
2576 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, | 2543 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9, |
2577 matcher: isResolveFunctionBodiesInUnitTask); | 2544 matcher: isResolveUnitTask); |
2578 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2545 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
2579 | 2546 |
2580 FunctionDeclaration f = unit.declarations[0]; | 2547 FunctionDeclaration f = unit.declarations[0]; |
2581 _assertResolved(f.functionExpression.body); | 2548 _assertResolved(f.functionExpression.body); |
2582 | 2549 |
2583 MethodDeclaration m = (unit.declarations[1] as ClassDeclaration).members[0]; | 2550 MethodDeclaration m = (unit.declarations[1] as ClassDeclaration).members[0]; |
2584 _assertResolved(m.body); | 2551 _assertResolved(m.body); |
2585 | 2552 |
2586 expect(outputs[RESOLVE_FUNCTION_BODIES_ERRORS], hasLength(0)); | 2553 expect(outputs[RESOLVE_UNIT_ERRORS], hasLength(0)); |
2587 } | 2554 } |
2588 | 2555 |
2589 void _assertResolved(FunctionBody body) { | 2556 void _assertResolved(FunctionBody body) { |
2590 ResolutionVerifier verifier = new ResolutionVerifier(); | 2557 ResolutionVerifier verifier = new ResolutionVerifier(); |
2591 body.accept(verifier); | 2558 body.accept(verifier); |
2592 verifier.assertResolved(); | 2559 verifier.assertResolved(); |
2593 } | 2560 } |
2594 } | 2561 } |
2595 | 2562 |
2596 @reflectiveTest | 2563 @reflectiveTest |
2597 class StrongModeInferenceTest extends _AbstractDartTaskTest { | 2564 class StrongModeInferenceTest extends _AbstractDartTaskTest { |
2598 | |
2599 @override | 2565 @override |
2600 void setUp() { | 2566 void setUp() { |
2601 super.setUp(); | 2567 super.setUp(); |
2602 enableStrongMode(); | 2568 enableStrongMode(); |
2603 } | 2569 } |
2604 | 2570 |
2571 void test_library_cycle_singleton() { | |
Brian Wilkerson
2015/10/06 19:04:47
These tests look like they're testing the results
Leaf
2015/10/07 18:53:55
Done.
| |
2572 Source source = newSource( | |
2573 '/test.dart', | |
2574 ''' | |
2575 import 'dart:core'; | |
2576 '''); | |
2577 computeResult(new LibrarySpecificUnit(source, source), LIBRARY_CYCLE); | |
2578 List<LibraryElement> component = outputs[LIBRARY_CYCLE]; | |
2579 List<CompilationUnitElement> units = outputs[LIBRARY_CYCLE_UNITS]; | |
2580 expect(component, hasLength(1)); | |
2581 expect(units, hasLength(1)); | |
2582 | |
2583 computeResult( | |
2584 new LibrarySpecificUnit(source, source), LIBRARY_CYCLE_DEPENDENCIES); | |
2585 List<CompilationUnitElement> deps = outputs[LIBRARY_CYCLE_DEPENDENCIES]; | |
2586 expect(deps, hasLength(1)); | |
2587 } | |
2588 | |
2589 void test_library_cycle_linear() { | |
2590 List<Source> sources = newSources({ | |
2591 '/a.dart': ''' | |
2592 ''', | |
2593 '/b.dart': ''' | |
2594 import 'a.dart'; | |
2595 ''' | |
2596 }); | |
2597 List<List<LibraryElement>> components = | |
2598 computeLibraryResults(sources, LIBRARY_CYCLE).toList(); | |
2599 List<LibraryElement> component0 = components[0]; | |
2600 List<LibraryElement> component1 = components[1]; | |
2601 expect(component0, hasLength(1)); | |
2602 expect(component1, hasLength(1)); | |
2603 | |
2604 List<List<CompilationUnitElement>> deps = | |
2605 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList(); | |
2606 List<CompilationUnitElement> dep0 = deps[0]; | |
2607 List<CompilationUnitElement> dep1 = deps[1]; | |
2608 expect(dep0, hasLength(1)); // dart:core | |
2609 expect(dep1, hasLength(2)); // dart:core, a.dart | |
2610 } | |
2611 | |
2612 void test_library_cycle_tree() { | |
2613 List<Source> sources = newSources({ | |
2614 '/a.dart': ''' | |
2615 ''', | |
2616 '/b.dart': ''' | |
2617 ''', | |
2618 '/c.dart': ''' | |
2619 import 'a.dart'; | |
2620 import 'b.dart'; | |
2621 ''' | |
2622 }); | |
2623 List<List<LibraryElement>> components = | |
2624 computeLibraryResults(sources, LIBRARY_CYCLE).toList(); | |
2625 List<LibraryElement> component0 = components[0]; | |
2626 List<LibraryElement> component1 = components[1]; | |
2627 List<LibraryElement> component2 = components[2]; | |
2628 expect(component0, hasLength(1)); | |
2629 expect(component1, hasLength(1)); | |
2630 expect(component2, hasLength(1)); | |
2631 | |
2632 List<List<CompilationUnitElement>> deps = | |
2633 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList(); | |
2634 List<CompilationUnitElement> dep0 = deps[0]; | |
2635 List<CompilationUnitElement> dep1 = deps[1]; | |
2636 List<CompilationUnitElement> dep2 = deps[2]; | |
2637 expect(dep0, hasLength(1)); // dart:core | |
2638 expect(dep1, hasLength(1)); // dart:core, | |
2639 expect(dep2, hasLength(3)); // dart:core, a.dart, b.dart | |
2640 } | |
2641 | |
2642 void test_library_cycle_loop() { | |
2643 List<Source> sources = newSources({ | |
2644 '/a.dart': ''' | |
2645 import 'c.dart'; | |
2646 ''', | |
2647 '/b.dart': ''' | |
2648 import 'a.dart'; | |
2649 ''', | |
2650 '/c.dart': ''' | |
2651 import 'b.dart'; | |
2652 ''' | |
2653 }); | |
2654 List<List<LibraryElement>> components = | |
2655 computeLibraryResults(sources, LIBRARY_CYCLE).toList(); | |
2656 List<LibraryElement> component0 = components[0]; | |
2657 List<LibraryElement> component1 = components[1]; | |
2658 List<LibraryElement> component2 = components[2]; | |
2659 | |
2660 expect(component0, hasLength(3)); | |
2661 expect(component1, hasLength(3)); | |
2662 expect(component2, hasLength(3)); | |
2663 | |
2664 List<List<CompilationUnitElement>> deps = | |
2665 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList(); | |
2666 List<CompilationUnitElement> dep0 = deps[0]; | |
2667 List<CompilationUnitElement> dep1 = deps[1]; | |
2668 List<CompilationUnitElement> dep2 = deps[2]; | |
2669 expect(dep0, hasLength(1)); // dart:core | |
2670 expect(dep1, hasLength(1)); // dart:core | |
2671 expect(dep2, hasLength(1)); // dart:core | |
2672 } | |
2673 | |
2674 void test_library_cycle_self_loop() { | |
2675 List<Source> sources = newSources({ | |
2676 '/a.dart': ''' | |
2677 import 'a.dart'; | |
2678 ''' | |
2679 }); | |
2680 List<List<LibraryElement>> components = | |
2681 computeLibraryResults(sources, LIBRARY_CYCLE).toList(); | |
2682 List<LibraryElement> component0 = components[0]; | |
2683 | |
2684 expect(component0, hasLength(1)); | |
2685 | |
2686 List<List<CompilationUnitElement>> deps = | |
2687 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList(); | |
2688 List<CompilationUnitElement> dep0 = deps[0]; | |
2689 expect(dep0, hasLength(1)); // dart:core | |
2690 } | |
2691 | |
2692 void test_library_double_loop() { | |
2693 List<Source> sources = newSources({ | |
2694 '/a.dart': ''' | |
2695 import 'b.dart'; | |
2696 ''', | |
2697 '/b.dart': ''' | |
2698 import 'a.dart'; | |
2699 ''', | |
2700 '/c.dart': ''' | |
2701 import 'd.dart' as foo; | |
2702 import 'a.dart' as bar; | |
2703 export 'b.dart'; | |
2704 ''', | |
2705 '/d.dart': ''' | |
2706 import 'c.dart' as foo; | |
2707 import 'b.dart' as bar; | |
2708 export 'a.dart'; | |
2709 ''' | |
2710 }); | |
2711 List<List<LibraryElement>> components = | |
2712 computeLibraryResults(sources, LIBRARY_CYCLE).toList(); | |
2713 List<LibraryElement> component0 = components[0]; | |
2714 List<LibraryElement> component1 = components[1]; | |
2715 List<LibraryElement> component2 = components[2]; | |
2716 List<LibraryElement> component3 = components[3]; | |
2717 | |
2718 expect(component0, hasLength(2)); | |
2719 expect(component1, hasLength(2)); | |
2720 expect(component2, hasLength(2)); | |
2721 expect(component3, hasLength(2)); | |
2722 | |
2723 List<List<CompilationUnitElement>> deps = | |
2724 computeLibraryResults(sources, LIBRARY_CYCLE_DEPENDENCIES).toList(); | |
2725 List<CompilationUnitElement> dep0 = deps[0]; | |
2726 List<CompilationUnitElement> dep1 = deps[1]; | |
2727 List<CompilationUnitElement> dep2 = deps[2]; | |
2728 List<CompilationUnitElement> dep3 = deps[3]; | |
2729 expect(dep0, hasLength(1)); // dart:core | |
2730 expect(dep1, hasLength(1)); // dart:core | |
2731 expect(dep3, hasLength(3)); // dart:core, a.dart, b.dart | |
2732 expect(dep3, hasLength(3)); // dart:core, a.dart, b.dart | |
2733 } | |
2734 | |
2605 // Check that even within a static variable cycle, inferred | 2735 // Check that even within a static variable cycle, inferred |
2606 // types get propagated to the members of the cycle. | 2736 // types get propagated to the members of the cycle. |
2607 void test_perform_cycle() { | 2737 void test_perform_cycle() { |
2608 AnalysisTarget source = newSource( | 2738 AnalysisTarget source = newSource( |
2609 '/test.dart', | 2739 '/test.dart', |
2610 ''' | 2740 ''' |
2611 var piFirst = true; | 2741 var piFirst = true; |
2612 var pi = piFirst ? 3.14 : tau / 2; | 2742 var pi = piFirst ? 3.14 : tau / 2; |
2613 var tau = piFirst ? pi * 2 : 6.28; | 2743 var tau = piFirst ? pi * 2 : 6.28; |
2614 '''); | 2744 '''); |
2615 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); | 2745 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
2616 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2746 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
2617 VariableElement piFirst = | 2747 VariableElement piFirst = |
2618 getTopLevelVariable(unit, 'piFirst').name.staticElement; | 2748 getTopLevelVariable(unit, 'piFirst').name.staticElement; |
2619 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; | 2749 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; |
2620 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; | 2750 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; |
2621 Expression piFirstUse = (getTopLevelVariable(unit, 'tau').initializer | 2751 Expression piFirstUse = (getTopLevelVariable(unit, 'tau').initializer |
2622 as ConditionalExpression).condition; | 2752 as ConditionalExpression).condition; |
2623 | 2753 |
2624 expect(piFirstUse.staticType, context.typeProvider.boolType); | 2754 expect(piFirstUse.staticType, context.typeProvider.boolType); |
2625 expect(piFirst.type, context.typeProvider.boolType); | 2755 expect(piFirst.type, context.typeProvider.boolType); |
2626 expect(pi.type.isDynamic, isTrue); | 2756 expect(pi.type.isDynamic, isTrue); |
2627 expect(tau.type.isDynamic, isTrue); | 2757 expect(tau.type.isDynamic, isTrue); |
2628 } | 2758 } |
2629 | 2759 |
2630 void test_perform_local_explicit_disabled() { | 2760 void test_perform_local_explicit_disabled() { |
2631 AnalysisTarget source = newSource( | 2761 AnalysisTarget source = newSource( |
2632 '/test.dart', | 2762 '/test.dart', |
2633 ''' | 2763 ''' |
2634 test() { | 2764 test() { |
2635 int x = 3; | 2765 int x = 3; |
2636 x = "hi"; | 2766 x = "hi"; |
2637 } | 2767 } |
2638 '''); | 2768 '''); |
2639 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); | 2769 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
2640 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2770 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
2641 | 2771 |
2642 InterfaceType intType = context.typeProvider.intType; | 2772 InterfaceType intType = context.typeProvider.intType; |
2643 InterfaceType stringType = context.typeProvider.stringType; | 2773 InterfaceType stringType = context.typeProvider.stringType; |
2644 | 2774 |
2645 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); | 2775 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); |
2646 VariableDeclaration decl = | 2776 VariableDeclaration decl = |
2647 (statements[0] as VariableDeclarationStatement).variables.variables[0]; | 2777 (statements[0] as VariableDeclarationStatement).variables.variables[0]; |
2648 expect(decl.element.type, intType); | 2778 expect(decl.element.type, intType); |
2649 expect(decl.initializer.staticType, intType); | 2779 expect(decl.initializer.staticType, intType); |
2650 | 2780 |
(...skipping 28 matching lines...) Expand all Loading... | |
2679 AnalysisTarget source = newSource( | 2809 AnalysisTarget source = newSource( |
2680 '/test.dart', | 2810 '/test.dart', |
2681 ''' | 2811 ''' |
2682 test() { | 2812 test() { |
2683 int x = 3; | 2813 int x = 3; |
2684 x = "hi"; | 2814 x = "hi"; |
2685 var y = 3; | 2815 var y = 3; |
2686 y = "hi"; | 2816 y = "hi"; |
2687 } | 2817 } |
2688 '''); | 2818 '''); |
2689 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); | 2819 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
2690 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2820 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
2691 | 2821 |
2692 InterfaceType intType = context.typeProvider.intType; | 2822 InterfaceType intType = context.typeProvider.intType; |
2693 InterfaceType stringType = context.typeProvider.stringType; | 2823 InterfaceType stringType = context.typeProvider.stringType; |
2694 | 2824 |
2695 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); | 2825 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test"); |
2696 | 2826 |
2697 assertVariableDeclarationStatementTypes(statements[0], intType, intType); | 2827 assertVariableDeclarationStatementTypes(statements[0], intType, intType); |
2698 assertAssignmentStatementTypes(statements[1], intType, stringType); | 2828 assertAssignmentStatementTypes(statements[1], intType, stringType); |
2699 assertVariableDeclarationStatementTypes(statements[2], intType, intType); | 2829 assertVariableDeclarationStatementTypes(statements[2], intType, intType); |
2700 assertAssignmentStatementTypes(statements[3], intType, stringType); | 2830 assertAssignmentStatementTypes(statements[3], intType, stringType); |
(...skipping 16 matching lines...) Expand all Loading... | |
2717 b = 4; | 2847 b = 4; |
2718 var c = z; | 2848 var c = z; |
2719 c = "hi"; | 2849 c = "hi"; |
2720 c = 4; | 2850 c = 4; |
2721 } | 2851 } |
2722 | 2852 |
2723 int y; // field def after use | 2853 int y; // field def after use |
2724 final z = 42; // should infer `int` | 2854 final z = 42; // should infer `int` |
2725 } | 2855 } |
2726 '''); | 2856 '''); |
2727 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); | 2857 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
2728 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2858 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
2729 | 2859 |
2730 InterfaceType intType = context.typeProvider.intType; | 2860 InterfaceType intType = context.typeProvider.intType; |
2731 InterfaceType stringType = context.typeProvider.stringType; | 2861 InterfaceType stringType = context.typeProvider.stringType; |
2732 | 2862 |
2733 List<Statement> statements = getStatementsInMethod(unit, "A", "test1"); | 2863 List<Statement> statements = getStatementsInMethod(unit, "A", "test1"); |
2734 | 2864 |
2735 assertVariableDeclarationStatementTypes(statements[0], intType, intType); | 2865 assertVariableDeclarationStatementTypes(statements[0], intType, intType); |
2736 assertAssignmentStatementTypes(statements[1], intType, stringType); | 2866 assertAssignmentStatementTypes(statements[1], intType, stringType); |
2737 assertAssignmentStatementTypes(statements[2], intType, intType); | 2867 assertAssignmentStatementTypes(statements[2], intType, intType); |
2738 | 2868 |
(...skipping 27 matching lines...) Expand all Loading... | |
2766 b = /*severe:StaticTypeError*/"hi"; | 2896 b = /*severe:StaticTypeError*/"hi"; |
2767 b = 4; | 2897 b = 4; |
2768 var c = z; | 2898 var c = z; |
2769 c = /*severe:StaticTypeError*/"hi"; | 2899 c = /*severe:StaticTypeError*/"hi"; |
2770 c = 4; | 2900 c = 4; |
2771 } | 2901 } |
2772 | 2902 |
2773 int y = 0; // field def after use | 2903 int y = 0; // field def after use |
2774 final z = 42; // should infer `int` | 2904 final z = 42; // should infer `int` |
2775 '''); | 2905 '''); |
2776 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); | 2906 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
2777 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2907 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
2778 | 2908 |
2779 InterfaceType intType = context.typeProvider.intType; | 2909 InterfaceType intType = context.typeProvider.intType; |
2780 InterfaceType stringType = context.typeProvider.stringType; | 2910 InterfaceType stringType = context.typeProvider.stringType; |
2781 | 2911 |
2782 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test1"); | 2912 List<Statement> statements = getStatementsInTopLevelFunction(unit, "test1"); |
2783 | 2913 |
2784 assertVariableDeclarationStatementTypes(statements[0], intType, intType); | 2914 assertVariableDeclarationStatementTypes(statements[0], intType, intType); |
2785 assertAssignmentStatementTypes(statements[1], intType, stringType); | 2915 assertAssignmentStatementTypes(statements[1], intType, stringType); |
2786 assertAssignmentStatementTypes(statements[2], intType, intType); | 2916 assertAssignmentStatementTypes(statements[2], intType, intType); |
2787 | 2917 |
(...skipping 30 matching lines...) Expand all Loading... | |
2818 | 2948 |
2819 test() { | 2949 test() { |
2820 x = "hi"; | 2950 x = "hi"; |
2821 y = /*severe:StaticTypeError*/"hi"; | 2951 y = /*severe:StaticTypeError*/"hi"; |
2822 A.x = "hi"; | 2952 A.x = "hi"; |
2823 A.y = /*severe:StaticTypeError*/"hi"; | 2953 A.y = /*severe:StaticTypeError*/"hi"; |
2824 new A().x2 = "hi"; | 2954 new A().x2 = "hi"; |
2825 new A().y2 = /*severe:StaticTypeError*/"hi"; | 2955 new A().y2 = /*severe:StaticTypeError*/"hi"; |
2826 } | 2956 } |
2827 '''); | 2957 '''); |
2828 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8); | 2958 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT9); |
2829 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | 2959 CompilationUnit unit = outputs[RESOLVED_UNIT9]; |
2830 | 2960 |
2831 InterfaceType intType = context.typeProvider.intType; | 2961 InterfaceType intType = context.typeProvider.intType; |
2832 InterfaceType stringType = context.typeProvider.stringType; | 2962 InterfaceType stringType = context.typeProvider.stringType; |
2833 DartType bottomType = context.typeProvider.bottomType; | 2963 DartType bottomType = context.typeProvider.bottomType; |
2834 DartType dynamicType = context.typeProvider.dynamicType; | 2964 DartType dynamicType = context.typeProvider.dynamicType; |
2835 | 2965 |
2836 assertVariableDeclarationTypes( | 2966 assertVariableDeclarationTypes( |
2837 getTopLevelVariable(unit, "x"), dynamicType, bottomType); | 2967 getTopLevelVariable(unit, "x"), dynamicType, bottomType); |
2838 assertVariableDeclarationTypes( | 2968 assertVariableDeclarationTypes( |
2839 getTopLevelVariable(unit, "y"), intType, intType); | 2969 getTopLevelVariable(unit, "y"), intType, intType); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2872 class B { static var y = A.x; } | 3002 class B { static var y = A.x; } |
2873 | 3003 |
2874 test1() { | 3004 test1() { |
2875 x = /*severe:StaticTypeError*/"hi"; | 3005 x = /*severe:StaticTypeError*/"hi"; |
2876 y = /*severe:StaticTypeError*/"hi"; | 3006 y = /*severe:StaticTypeError*/"hi"; |
2877 A.x = /*severe:StaticTypeError*/"hi"; | 3007 A.x = /*severe:StaticTypeError*/"hi"; |
2878 B.y = /*severe:StaticTypeError*/"hi"; | 3008 B.y = /*severe:StaticTypeError*/"hi"; |
2879 } | 3009 } |
2880 '''); | 3010 '''); |
2881 computeResult( | 3011 computeResult( |
2882 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8); | 3012 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9); |
2883 CompilationUnit unit1 = outputs[RESOLVED_UNIT8]; | 3013 CompilationUnit unit1 = outputs[RESOLVED_UNIT9]; |
2884 computeResult( | 3014 computeResult( |
2885 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8); | 3015 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9); |
2886 CompilationUnit unit2 = outputs[RESOLVED_UNIT8]; | 3016 CompilationUnit unit2 = outputs[RESOLVED_UNIT9]; |
2887 | 3017 |
2888 InterfaceType intType = context.typeProvider.intType; | 3018 InterfaceType intType = context.typeProvider.intType; |
2889 InterfaceType stringType = context.typeProvider.stringType; | 3019 InterfaceType stringType = context.typeProvider.stringType; |
2890 | 3020 |
2891 assertVariableDeclarationTypes( | 3021 assertVariableDeclarationTypes( |
2892 getTopLevelVariable(unit1, "x"), intType, intType); | 3022 getTopLevelVariable(unit1, "x"), intType, intType); |
2893 assertVariableDeclarationTypes( | 3023 assertVariableDeclarationTypes( |
2894 getFieldInClass(unit1, "A", "x"), intType, intType); | 3024 getFieldInClass(unit1, "A", "x"), intType, intType); |
2895 | 3025 |
2896 assertVariableDeclarationTypes( | 3026 assertVariableDeclarationTypes( |
(...skipping 26 matching lines...) Expand all Loading... | |
2923 | 3053 |
2924 test1() { | 3054 test1() { |
2925 int t = 3; | 3055 int t = 3; |
2926 t = x; | 3056 t = x; |
2927 t = y; | 3057 t = y; |
2928 t = A.x; | 3058 t = A.x; |
2929 t = B.y; | 3059 t = B.y; |
2930 } | 3060 } |
2931 '''); | 3061 '''); |
2932 computeResult( | 3062 computeResult( |
2933 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8); | 3063 new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT9); |
2934 CompilationUnit unit1 = outputs[RESOLVED_UNIT8]; | 3064 CompilationUnit unit1 = outputs[RESOLVED_UNIT9]; |
2935 computeResult( | 3065 computeResult( |
2936 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8); | 3066 new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT9); |
2937 CompilationUnit unit2 = outputs[RESOLVED_UNIT8]; | 3067 CompilationUnit unit2 = outputs[RESOLVED_UNIT9]; |
2938 | 3068 |
2939 InterfaceType intType = context.typeProvider.intType; | 3069 InterfaceType intType = context.typeProvider.intType; |
2940 | 3070 |
2941 assertVariableDeclarationTypes( | 3071 assertVariableDeclarationTypes( |
2942 getTopLevelVariable(unit1, "x"), intType, intType); | 3072 getTopLevelVariable(unit1, "x"), intType, intType); |
2943 assertVariableDeclarationTypes( | 3073 assertVariableDeclarationTypes( |
2944 getFieldInClass(unit1, "A", "x"), intType, intType); | 3074 getFieldInClass(unit1, "A", "x"), intType, intType); |
2945 | 3075 |
2946 assertVariableDeclarationTypes( | 3076 assertVariableDeclarationTypes( |
2947 getTopLevelVariable(unit2, "y"), intType, intType); | 3077 getTopLevelVariable(unit2, "y"), intType, intType); |
2948 assertVariableDeclarationTypes( | 3078 assertVariableDeclarationTypes( |
2949 getFieldInClass(unit2, "B", "y"), intType, intType); | 3079 getFieldInClass(unit2, "B", "y"), intType, intType); |
2950 | 3080 |
2951 List<Statement> statements = | 3081 List<Statement> statements = |
2952 getStatementsInTopLevelFunction(unit2, "test1"); | 3082 getStatementsInTopLevelFunction(unit2, "test1"); |
2953 | 3083 |
2954 assertAssignmentStatementTypes(statements[1], intType, intType); | 3084 assertAssignmentStatementTypes(statements[1], intType, intType); |
2955 assertAssignmentStatementTypes(statements[2], intType, intType); | 3085 assertAssignmentStatementTypes(statements[2], intType, intType); |
2956 assertAssignmentStatementTypes(statements[3], intType, intType); | 3086 assertAssignmentStatementTypes(statements[3], intType, intType); |
2957 assertAssignmentStatementTypes(statements[4], intType, intType); | 3087 assertAssignmentStatementTypes(statements[4], intType, intType); |
2958 } | 3088 } |
2959 | 3089 |
2960 // Test inference of instance fields across units | 3090 // Test inference of instance fields across units |
2961 // TODO(leafp): Fix this | 3091 void test_perform_inference_cross_unit_instance() { |
2962 // https://github.com/dart-lang/dev_compiler/issues/354 | |
2963 void fail_perform_inference_cross_unit_instance() { | |
2964 List<Source> sources = newSources({ | 3092 List<Source> sources = newSources({ |
2965 '/a7.dart': ''' | 3093 '/a7.dart': ''' |
2966 import 'b7.dart'; | 3094 import 'b7.dart'; |
2967 class A { | 3095 class A { |
2968 final a2 = new B().b2; | 3096 final a2 = new B().b2; |
2969 } | 3097 } |
2970 ''', | 3098 ''', |
2971 '/b7.dart': ''' | 3099 '/b7.dart': ''' |
2972 class B { | 3100 class B { |
2973 final b2 = 1; | 3101 final b2 = 1; |
2974 } | 3102 } |
2975 ''', | 3103 ''', |
2976 '/main7.dart': ''' | 3104 '/main7.dart': ''' |
2977 import "a7.dart"; | 3105 import "a7.dart"; |
2978 | 3106 |
2979 test1() { | 3107 test1() { |
2980 int x = 0; | 3108 int x = 0; |
2981 x = new A().a2; | 3109 x = new A().a2; |
2982 } | 3110 } |
2983 ''' | 3111 ''' |
2984 }); | 3112 }); |
2985 List<dynamic> units = | 3113 List<dynamic> units = |
2986 computeLibraryResults(sources, RESOLVED_UNIT8).toList(); | 3114 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); |
2987 CompilationUnit unit0 = units[0]; | 3115 CompilationUnit unit0 = units[0]; |
2988 CompilationUnit unit1 = units[1]; | 3116 CompilationUnit unit1 = units[1]; |
2989 CompilationUnit unit2 = units[2]; | 3117 CompilationUnit unit2 = units[2]; |
2990 | 3118 |
2991 InterfaceType intType = context.typeProvider.intType; | 3119 InterfaceType intType = context.typeProvider.intType; |
2992 | 3120 |
2993 assertVariableDeclarationTypes( | 3121 assertVariableDeclarationTypes( |
2994 getFieldInClass(unit0, "A", "a2"), intType, intType); | 3122 getFieldInClass(unit0, "A", "a2"), intType, intType); |
2995 | 3123 |
2996 assertVariableDeclarationTypes( | 3124 assertVariableDeclarationTypes( |
2997 getFieldInClass(unit1, "B", "b2"), intType, intType); | 3125 getFieldInClass(unit1, "B", "b2"), intType, intType); |
2998 | 3126 |
2999 List<Statement> statements = | 3127 List<Statement> statements = |
3000 getStatementsInTopLevelFunction(unit2, "test1"); | 3128 getStatementsInTopLevelFunction(unit2, "test1"); |
3001 | 3129 |
3002 assertAssignmentStatementTypes(statements[1], intType, intType); | 3130 assertAssignmentStatementTypes(statements[1], intType, intType); |
3003 } | 3131 } |
3004 | 3132 |
3005 // Test inference between static and instance fields | 3133 // Test inference between static and instance fields |
3006 // TODO(leafp): Fix this | 3134 void test_perform_inference_cross_unit_static_instance() { |
3007 // https://github.com/dart-lang/dev_compiler/issues/354 | |
3008 void fail_perform_inference_cross_unit_static_instance() { | |
3009 List<Source> sources = newSources({ | 3135 List<Source> sources = newSources({ |
3010 '/a.dart': ''' | 3136 '/a.dart': ''' |
3011 import 'b.dart'; | 3137 import 'b.dart'; |
3012 class A { | 3138 class A { |
3013 static final a1 = B.b1; | 3139 static final a1 = B.b1; |
3014 final a2 = new B().b2; | 3140 final a2 = new B().b2; |
3015 } | 3141 } |
3016 ''', | 3142 ''', |
3017 '/b.dart': ''' | 3143 '/b.dart': ''' |
3018 class B { | 3144 class B { |
3019 static final b1 = 1; | 3145 static final b1 = 1; |
3020 final b2 = 1; | 3146 final b2 = 1; |
3021 } | 3147 } |
3022 ''', | 3148 ''', |
3023 '/main.dart': ''' | 3149 '/main.dart': ''' |
3024 import "a.dart"; | 3150 import "a.dart"; |
3025 | 3151 |
3026 test1() { | 3152 test1() { |
3027 int x = 0; | 3153 int x = 0; |
3028 // inference in A now works. | 3154 // inference in A now works. |
3029 x = A.a1; | 3155 x = A.a1; |
3030 x = new A().a2; | 3156 x = new A().a2; |
3031 } | 3157 } |
3032 ''' | 3158 ''' |
3033 }); | 3159 }); |
3034 List<dynamic> units = | 3160 List<dynamic> units = |
3035 computeLibraryResults(sources, RESOLVED_UNIT8).toList(); | 3161 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); |
3036 CompilationUnit unit0 = units[0]; | 3162 CompilationUnit unit0 = units[0]; |
3037 CompilationUnit unit1 = units[1]; | 3163 CompilationUnit unit1 = units[1]; |
3038 CompilationUnit unit2 = units[2]; | 3164 CompilationUnit unit2 = units[2]; |
3039 | 3165 |
3040 InterfaceType intType = context.typeProvider.intType; | 3166 InterfaceType intType = context.typeProvider.intType; |
3041 | 3167 |
3042 assertVariableDeclarationTypes( | 3168 assertVariableDeclarationTypes( |
3043 getFieldInClass(unit0, "A", "a1"), intType, intType); | 3169 getFieldInClass(unit0, "A", "a1"), intType, intType); |
3044 assertVariableDeclarationTypes( | 3170 assertVariableDeclarationTypes( |
3045 getFieldInClass(unit0, "A", "a2"), intType, intType); | 3171 getFieldInClass(unit0, "A", "a2"), intType, intType); |
3046 | 3172 |
3047 assertVariableDeclarationTypes( | 3173 assertVariableDeclarationTypes( |
3048 getFieldInClass(unit1, "B", "b1"), intType, intType); | 3174 getFieldInClass(unit1, "B", "b1"), intType, intType); |
3049 assertVariableDeclarationTypes( | 3175 assertVariableDeclarationTypes( |
3050 getFieldInClass(unit1, "B", "b2"), intType, intType); | 3176 getFieldInClass(unit1, "B", "b2"), intType, intType); |
3051 | 3177 |
3052 List<Statement> statements = | 3178 List<Statement> statements = |
3053 getStatementsInTopLevelFunction(unit2, "test1"); | 3179 getStatementsInTopLevelFunction(unit2, "test1"); |
3054 | 3180 |
3055 assertAssignmentStatementTypes(statements[1], intType, intType); | 3181 assertAssignmentStatementTypes(statements[1], intType, intType); |
3056 assertAssignmentStatementTypes(statements[2], intType, intType); | 3182 assertAssignmentStatementTypes(statements[2], intType, intType); |
3057 } | 3183 } |
3184 | |
3185 // Test inference between fields and method bodies | |
3186 void test_perform_inference_cross_unit_instance_member() { | |
3187 List<Source> sources = newSources({ | |
3188 '/a.dart': ''' | |
3189 import 'b.dart'; | |
3190 var bar = new B(); | |
3191 void foo() { | |
3192 String x = bar.f.z; | |
3193 } | |
3194 ''', | |
3195 '/b.dart': ''' | |
3196 class C { | |
3197 var z = 3; | |
3198 } | |
3199 | |
3200 class B { | |
3201 var f = new C(); | |
3202 } | |
3203 ''', | |
3204 '/c.dart': ''' | |
3205 import 'b.dart'; | |
3206 var bar = new B(); | |
3207 void foo() { | |
3208 String x = bar.f.z; | |
3209 } | |
3210 ''' | |
3211 }); | |
3212 List<dynamic> units = | |
3213 computeLibraryResults(sources, RESOLVED_UNIT9).toList(); | |
3214 CompilationUnit unit0 = units[0]; | |
3215 CompilationUnit unit1 = units[1]; | |
3216 CompilationUnit unit2 = units[2]; | |
3217 | |
3218 InterfaceType intType = context.typeProvider.intType; | |
3219 InterfaceType stringType = context.typeProvider.stringType; | |
3220 | |
3221 assertVariableDeclarationStatementTypes( | |
3222 getStatementsInTopLevelFunction(unit0, "foo")[0], stringType, intType); | |
3223 assertVariableDeclarationStatementTypes( | |
3224 getStatementsInTopLevelFunction(unit2, "foo")[0], stringType, intType); | |
3225 } | |
3058 } | 3226 } |
3059 | 3227 |
3060 @reflectiveTest | 3228 @reflectiveTest |
3061 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { | 3229 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { |
3062 test_perform() { | 3230 test_perform() { |
3063 Source sourceLib = newSource( | 3231 Source sourceLib = newSource( |
3064 '/my_lib.dart', | 3232 '/my_lib.dart', |
3065 ''' | 3233 ''' |
3066 library my_lib; | 3234 library my_lib; |
3067 part 'my_part.dart'; | 3235 part 'my_part.dart'; |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3583 /** | 3751 /** |
3584 * Fill [errorListener] with [result] errors in the current [task]. | 3752 * Fill [errorListener] with [result] errors in the current [task]. |
3585 */ | 3753 */ |
3586 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { | 3754 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { |
3587 List<AnalysisError> errors = task.outputs[result]; | 3755 List<AnalysisError> errors = task.outputs[result]; |
3588 expect(errors, isNotNull, reason: result.name); | 3756 expect(errors, isNotNull, reason: result.name); |
3589 errorListener = new GatheringErrorListener(); | 3757 errorListener = new GatheringErrorListener(); |
3590 errorListener.addAll(errors); | 3758 errorListener.addAll(errors); |
3591 } | 3759 } |
3592 } | 3760 } |
OLD | NEW |