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

Side by Side Diff: pkg/analyzer/test/src/task/dart_test.dart

Issue 1326553003: Add the task to resolve function bodies (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test.src.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
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
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
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
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
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
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 }
OLDNEW
« pkg/analyzer/lib/src/task/dart.dart ('K') | « pkg/analyzer/lib/src/task/dart.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698