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'; |
11 import 'package:analyzer/src/generated/engine.dart' | 11 import 'package:analyzer/src/generated/engine.dart' |
12 show AnalysisOptionsImpl, CacheState; | 12 show AnalysisOptionsImpl, CacheState; |
13 import 'package:analyzer/src/generated/error.dart'; | 13 import 'package:analyzer/src/generated/error.dart'; |
14 import 'package:analyzer/src/generated/resolver.dart'; | 14 import 'package:analyzer/src/generated/resolver.dart'; |
15 import 'package:analyzer/src/generated/scanner.dart'; | 15 import 'package:analyzer/src/generated/scanner.dart'; |
16 import 'package:analyzer/src/generated/sdk.dart'; | 16 import 'package:analyzer/src/generated/sdk.dart'; |
17 import 'package:analyzer/src/generated/source.dart'; | 17 import 'package:analyzer/src/generated/source.dart'; |
18 import 'package:analyzer/src/task/dart.dart'; | 18 import 'package:analyzer/src/task/dart.dart'; |
19 import 'package:analyzer/src/task/html.dart'; | 19 import 'package:analyzer/src/task/html.dart'; |
20 import 'package:analyzer/task/dart.dart'; | 20 import 'package:analyzer/task/dart.dart'; |
21 import 'package:analyzer/task/general.dart'; | 21 import 'package:analyzer/task/general.dart'; |
22 import 'package:analyzer/task/model.dart'; | 22 import 'package:analyzer/task/model.dart'; |
23 import 'package:unittest/unittest.dart'; | 23 import 'package:unittest/unittest.dart'; |
24 | 24 |
25 import '../../generated/resolver_test.dart'; | |
25 import '../../generated/test_support.dart'; | 26 import '../../generated/test_support.dart'; |
26 import '../../reflective_tests.dart'; | 27 import '../../reflective_tests.dart'; |
27 import '../../utils.dart'; | 28 import '../../utils.dart'; |
28 import '../context/abstract_context.dart'; | 29 import '../context/abstract_context.dart'; |
29 | 30 |
30 main() { | 31 main() { |
31 initializeTestEnvironment(); | 32 initializeTestEnvironment(); |
32 runReflectiveTests(BuildCompilationUnitElementTaskTest); | 33 runReflectiveTests(BuildCompilationUnitElementTaskTest); |
33 runReflectiveTests(BuildDirectiveElementsTaskTest); | 34 runReflectiveTests(BuildDirectiveElementsTaskTest); |
34 runReflectiveTests(BuildEnumMemberElementsTaskTest); | 35 runReflectiveTests(BuildEnumMemberElementsTaskTest); |
(...skipping 12 matching lines...) Expand all Loading... | |
47 runReflectiveTests(GatherUsedImportedElementsTaskTest); | 48 runReflectiveTests(GatherUsedImportedElementsTaskTest); |
48 runReflectiveTests(GatherUsedLocalElementsTaskTest); | 49 runReflectiveTests(GatherUsedLocalElementsTaskTest); |
49 runReflectiveTests(GenerateHintsTaskTest); | 50 runReflectiveTests(GenerateHintsTaskTest); |
50 runReflectiveTests(InferInstanceMembersInUnitTaskTest); | 51 runReflectiveTests(InferInstanceMembersInUnitTaskTest); |
51 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest); | 52 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest); |
52 runReflectiveTests(InferStaticVariableTypeTaskTest); | 53 runReflectiveTests(InferStaticVariableTypeTaskTest); |
53 runReflectiveTests(LibraryErrorsReadyTaskTest); | 54 runReflectiveTests(LibraryErrorsReadyTaskTest); |
54 runReflectiveTests(LibraryUnitErrorsTaskTest); | 55 runReflectiveTests(LibraryUnitErrorsTaskTest); |
55 runReflectiveTests(ParseDartTaskTest); | 56 runReflectiveTests(ParseDartTaskTest); |
56 runReflectiveTests(PartiallyResolveUnitReferencesTaskTest); | 57 runReflectiveTests(PartiallyResolveUnitReferencesTaskTest); |
58 runReflectiveTests(ResolveFunctionBodiesInUnitTaskTest); | |
57 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); | 59 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); |
58 runReflectiveTests(ResolveUnitReferencesTaskTest); | 60 // runReflectiveTests(ResolveUnitReferencesTaskTest); |
Paul Berry
2015/09/02 17:10:08
I'd prefer to delete this as well (and delete the
| |
59 runReflectiveTests(ResolveUnitTypeNamesTaskTest); | 61 runReflectiveTests(ResolveUnitTypeNamesTaskTest); |
60 runReflectiveTests(ResolveVariableReferencesTaskTest); | 62 runReflectiveTests(ResolveVariableReferencesTaskTest); |
61 runReflectiveTests(ScanDartTaskTest); | 63 runReflectiveTests(ScanDartTaskTest); |
62 runReflectiveTests(VerifyUnitTaskTest); | 64 runReflectiveTests(VerifyUnitTaskTest); |
63 } | 65 } |
64 | 66 |
65 isInstanceOf isBuildCompilationUnitElementTask = | 67 isInstanceOf isBuildCompilationUnitElementTask = |
66 new isInstanceOf<BuildCompilationUnitElementTask>(); | 68 new isInstanceOf<BuildCompilationUnitElementTask>(); |
67 isInstanceOf isBuildDirectiveElementsTask = | 69 isInstanceOf isBuildDirectiveElementsTask = |
68 new isInstanceOf<BuildDirectiveElementsTask>(); | 70 new isInstanceOf<BuildDirectiveElementsTask>(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
102 new isInstanceOf<InferStaticVariableTypesInUnitTask>(); | 104 new isInstanceOf<InferStaticVariableTypesInUnitTask>(); |
103 isInstanceOf isInferStaticVariableTypeTask = | 105 isInstanceOf isInferStaticVariableTypeTask = |
104 new isInstanceOf<InferStaticVariableTypeTask>(); | 106 new isInstanceOf<InferStaticVariableTypeTask>(); |
105 isInstanceOf isLibraryErrorsReadyTask = | 107 isInstanceOf isLibraryErrorsReadyTask = |
106 new isInstanceOf<LibraryErrorsReadyTask>(); | 108 new isInstanceOf<LibraryErrorsReadyTask>(); |
107 isInstanceOf isLibraryUnitErrorsTask = | 109 isInstanceOf isLibraryUnitErrorsTask = |
108 new isInstanceOf<LibraryUnitErrorsTask>(); | 110 new isInstanceOf<LibraryUnitErrorsTask>(); |
109 isInstanceOf isParseDartTask = new isInstanceOf<ParseDartTask>(); | 111 isInstanceOf isParseDartTask = new isInstanceOf<ParseDartTask>(); |
110 isInstanceOf isPartiallyResolveUnitReferencesTask = | 112 isInstanceOf isPartiallyResolveUnitReferencesTask = |
111 new isInstanceOf<PartiallyResolveUnitReferencesTask>(); | 113 new isInstanceOf<PartiallyResolveUnitReferencesTask>(); |
114 isInstanceOf isResolveFunctionBodiesInUnitTask = | |
115 new isInstanceOf<ResolveFunctionBodiesInUnitTask>(); | |
112 isInstanceOf isResolveLibraryTypeNamesTask = | 116 isInstanceOf isResolveLibraryTypeNamesTask = |
113 new isInstanceOf<ResolveLibraryTypeNamesTask>(); | 117 new isInstanceOf<ResolveLibraryTypeNamesTask>(); |
114 isInstanceOf isResolveUnitReferencesTask = | 118 isInstanceOf isResolveUnitReferencesTask = |
115 new isInstanceOf<ResolveUnitReferencesTask>(); | 119 new isInstanceOf<ResolveUnitReferencesTask>(); |
116 isInstanceOf isResolveUnitTypeNamesTask = | 120 isInstanceOf isResolveUnitTypeNamesTask = |
117 new isInstanceOf<ResolveUnitTypeNamesTask>(); | 121 new isInstanceOf<ResolveUnitTypeNamesTask>(); |
118 isInstanceOf isResolveVariableReferencesTask = | 122 isInstanceOf isResolveVariableReferencesTask = |
119 new isInstanceOf<ResolveVariableReferencesTask>(); | 123 new isInstanceOf<ResolveVariableReferencesTask>(); |
120 isInstanceOf isScanDartTask = new isInstanceOf<ScanDartTask>(); | 124 isInstanceOf isScanDartTask = new isInstanceOf<ScanDartTask>(); |
121 isInstanceOf isVerifyUnitTask = new isInstanceOf<VerifyUnitTask>(); | 125 isInstanceOf isVerifyUnitTask = new isInstanceOf<VerifyUnitTask>(); |
(...skipping 2075 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2197 VariableElement topLevel = | 2201 VariableElement topLevel = |
2198 getTopLevelVariable(unit, 'topLevel').name.staticElement; | 2202 getTopLevelVariable(unit, 'topLevel').name.staticElement; |
2199 VariableElement field = | 2203 VariableElement field = |
2200 getFieldInClass(unit, 'C', 'field').name.staticElement; | 2204 getFieldInClass(unit, 'C', 'field').name.staticElement; |
2201 | 2205 |
2202 computeResult(field, INFERRED_STATIC_VARIABLE, | 2206 computeResult(field, INFERRED_STATIC_VARIABLE, |
2203 matcher: isInferStaticVariableTypeTask); | 2207 matcher: isInferStaticVariableTypeTask); |
2204 InterfaceType stringType = context.typeProvider.stringType; | 2208 InterfaceType stringType = context.typeProvider.stringType; |
2205 expect(topLevel.type, stringType); | 2209 expect(topLevel.type, stringType); |
2206 expect(field.type, stringType); | 2210 expect(field.type, stringType); |
2211 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0)); | |
2207 } | 2212 } |
2208 | 2213 |
2209 void test_perform_cycle() { | 2214 void test_perform_cycle() { |
2210 AnalysisTarget source = newSource( | 2215 AnalysisTarget source = newSource( |
2211 '/test.dart', | 2216 '/test.dart', |
2212 ''' | 2217 ''' |
2213 var piFirst = true; | 2218 var piFirst = true; |
2214 var pi = piFirst ? 3.14 : tau / 2; | 2219 var pi = piFirst ? 3.14 : tau / 2; |
2215 var tau = piFirst ? pi * 2 : 6.28; | 2220 var tau = piFirst ? pi * 2 : 6.28; |
2216 '''); | 2221 '''); |
2217 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2222 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
2218 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2223 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2219 VariableElement piFirst = | 2224 VariableElement piFirst = |
2220 getTopLevelVariable(unit, 'piFirst').name.staticElement; | 2225 getTopLevelVariable(unit, 'piFirst').name.staticElement; |
2221 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; | 2226 VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement; |
2222 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; | 2227 VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement; |
2223 | 2228 |
2224 computeResult(piFirst, INFERRED_STATIC_VARIABLE, | 2229 computeResult(piFirst, INFERRED_STATIC_VARIABLE, |
2225 matcher: isInferStaticVariableTypeTask); | 2230 matcher: isInferStaticVariableTypeTask); |
2226 expect(piFirst.type, context.typeProvider.boolType); | 2231 expect(piFirst.type, context.typeProvider.boolType); |
2227 expect(pi.type.isDynamic, isTrue); | 2232 expect(pi.type.isDynamic, isTrue); |
2228 expect(tau.type.isDynamic, isTrue); | 2233 expect(tau.type.isDynamic, isTrue); |
2234 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0)); | |
2235 } | |
2236 | |
2237 void test_perform_error() { | |
2238 AnalysisTarget source = newSource( | |
2239 '/test.dart', | |
2240 ''' | |
2241 var a = '' / null; | |
2242 '''); | |
2243 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | |
2244 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | |
2245 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; | |
2246 | |
2247 computeResult(a, INFERRED_STATIC_VARIABLE, | |
2248 matcher: isInferStaticVariableTypeTask); | |
2249 expect(a.type.isDynamic, isTrue); | |
2250 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(1)); | |
2229 } | 2251 } |
2230 | 2252 |
2231 void test_perform_null() { | 2253 void test_perform_null() { |
2232 AnalysisTarget source = newSource( | 2254 AnalysisTarget source = newSource( |
2233 '/test.dart', | 2255 '/test.dart', |
2234 ''' | 2256 ''' |
2235 var a = null; | 2257 var a = null; |
2236 '''); | 2258 '''); |
2237 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); | 2259 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5); |
2238 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2260 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2239 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; | 2261 VariableElement a = getTopLevelVariable(unit, 'a').name.staticElement; |
2240 | 2262 |
2241 computeResult(a, INFERRED_STATIC_VARIABLE, | 2263 computeResult(a, INFERRED_STATIC_VARIABLE, |
2242 matcher: isInferStaticVariableTypeTask); | 2264 matcher: isInferStaticVariableTypeTask); |
2243 expect(a.type.isDynamic, isTrue); | 2265 expect(a.type.isDynamic, isTrue); |
2266 expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0)); | |
2244 } | 2267 } |
2245 } | 2268 } |
2246 | 2269 |
2247 @reflectiveTest | 2270 @reflectiveTest |
2248 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { | 2271 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { |
2249 test_perform() { | 2272 test_perform() { |
2250 Source library = newSource( | 2273 Source library = newSource( |
2251 '/lib.dart', | 2274 '/lib.dart', |
2252 r''' | 2275 r''' |
2253 library lib; | 2276 library lib; |
(...skipping 19 matching lines...) Expand all Loading... | |
2273 bool ready = outputs[LIBRARY_ERRORS_READY]; | 2296 bool ready = outputs[LIBRARY_ERRORS_READY]; |
2274 expect(ready, isTrue); | 2297 expect(ready, isTrue); |
2275 expect(context.getErrors(library).errors, hasLength(1)); | 2298 expect(context.getErrors(library).errors, hasLength(1)); |
2276 expect(context.getErrors(part1).errors, hasLength(1)); | 2299 expect(context.getErrors(part1).errors, hasLength(1)); |
2277 expect(context.getErrors(part2).errors, hasLength(1)); | 2300 expect(context.getErrors(part2).errors, hasLength(1)); |
2278 } | 2301 } |
2279 } | 2302 } |
2280 | 2303 |
2281 @reflectiveTest | 2304 @reflectiveTest |
2282 class LibraryUnitErrorsTaskTest extends _AbstractDartTaskTest { | 2305 class LibraryUnitErrorsTaskTest extends _AbstractDartTaskTest { |
2283 test_buildInputs() { | |
2284 Map<String, TaskInput> inputs = LibraryUnitErrorsTask | |
2285 .buildInputs(new LibrarySpecificUnit(emptySource, emptySource)); | |
2286 expect(inputs, isNotNull); | |
2287 expect( | |
2288 inputs.keys, | |
2289 unorderedEquals([ | |
2290 LibraryUnitErrorsTask.HINTS_INPUT, | |
2291 LibraryUnitErrorsTask.RESOLVE_REFERENCES_ERRORS_INPUT, | |
2292 LibraryUnitErrorsTask.RESOLVE_TYPE_NAMES_ERRORS_INPUT, | |
2293 LibraryUnitErrorsTask.VARIABLE_REFERENCE_ERRORS_INPUT, | |
2294 LibraryUnitErrorsTask.VERIFY_ERRORS_INPUT | |
2295 ])); | |
2296 } | |
2297 | |
2298 test_constructor() { | 2306 test_constructor() { |
2299 LibraryUnitErrorsTask task = | 2307 LibraryUnitErrorsTask task = |
2300 new LibraryUnitErrorsTask(context, emptySource); | 2308 new LibraryUnitErrorsTask(context, emptySource); |
2301 expect(task, isNotNull); | 2309 expect(task, isNotNull); |
2302 expect(task.context, context); | 2310 expect(task.context, context); |
2303 expect(task.target, emptySource); | 2311 expect(task.target, emptySource); |
2304 } | 2312 } |
2305 | 2313 |
2306 test_createTask() { | 2314 test_createTask() { |
2307 LibraryUnitErrorsTask task = | 2315 LibraryUnitErrorsTask task = |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2578 ExpressionStatement statement = statements[0]; | 2586 ExpressionStatement statement = statements[0]; |
2579 MethodInvocation invocation = statement.expression; | 2587 MethodInvocation invocation = statement.expression; |
2580 MethodElement methodElement = invocation.methodName.staticElement; | 2588 MethodElement methodElement = invocation.methodName.staticElement; |
2581 expect(methodElement, isNotNull); | 2589 expect(methodElement, isNotNull); |
2582 expect(methodElement.type, isNotNull); | 2590 expect(methodElement.type, isNotNull); |
2583 expect(methodElement.returnType.toString(), 'int'); | 2591 expect(methodElement.returnType.toString(), 'int'); |
2584 } | 2592 } |
2585 } | 2593 } |
2586 | 2594 |
2587 @reflectiveTest | 2595 @reflectiveTest |
2596 class ResolveFunctionBodiesInUnitTaskTest extends _AbstractDartTaskTest { | |
2597 void test_perform() { | |
2598 AnalysisTarget source = newSource( | |
2599 '/test.dart', | |
2600 ''' | |
2601 void f() { | |
2602 var c = new C(); | |
2603 c.m(); | |
2604 } | |
2605 class C { | |
2606 void m() { | |
2607 f(); | |
2608 } | |
2609 } | |
2610 '''); | |
2611 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8, | |
2612 matcher: isResolveFunctionBodiesInUnitTask); | |
2613 CompilationUnit unit = outputs[RESOLVED_UNIT8]; | |
2614 | |
2615 FunctionDeclaration f = unit.declarations[0]; | |
2616 _assertResolved(f.functionExpression.body); | |
2617 | |
2618 MethodDeclaration m = (unit.declarations[1] as ClassDeclaration).members[0]; | |
2619 _assertResolved(m.body); | |
2620 | |
2621 expect(outputs[RESOLVE_FUNCTION_BODIES_ERRORS], hasLength(0)); | |
2622 } | |
2623 | |
2624 void _assertResolved(FunctionBody body) { | |
2625 ResolutionVerifier verifier = new ResolutionVerifier(); | |
2626 body.accept(verifier); | |
2627 verifier.assertResolved(); | |
2628 } | |
2629 } | |
2630 | |
2631 @reflectiveTest | |
2588 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { | 2632 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { |
2589 test_perform() { | 2633 test_perform() { |
2590 Source sourceLib = newSource( | 2634 Source sourceLib = newSource( |
2591 '/my_lib.dart', | 2635 '/my_lib.dart', |
2592 ''' | 2636 ''' |
2593 library my_lib; | 2637 library my_lib; |
2594 part 'my_part.dart'; | 2638 part 'my_part.dart'; |
2595 class A {} | 2639 class A {} |
2596 class B extends A {} | 2640 class B extends A {} |
2597 '''); | 2641 '''); |
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3167 /** | 3211 /** |
3168 * Fill [errorListener] with [result] errors in the current [task]. | 3212 * Fill [errorListener] with [result] errors in the current [task]. |
3169 */ | 3213 */ |
3170 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { | 3214 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { |
3171 List<AnalysisError> errors = task.outputs[result]; | 3215 List<AnalysisError> errors = task.outputs[result]; |
3172 expect(errors, isNotNull, reason: result.name); | 3216 expect(errors, isNotNull, reason: result.name); |
3173 errorListener = new GatheringErrorListener(); | 3217 errorListener = new GatheringErrorListener(); |
3174 errorListener.addAll(errors); | 3218 errorListener.addAll(errors); |
3175 } | 3219 } |
3176 } | 3220 } |
OLD | NEW |