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 analyzer.test.src.task.dart_test; | 5 library analyzer.test.src.task.dart_test; |
6 | 6 |
7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
8 import 'package:analyzer/dart/ast/token.dart'; | 8 import 'package:analyzer/dart/ast/token.dart'; |
9 import 'package:analyzer/dart/ast/visitor.dart'; | 9 import 'package:analyzer/dart/ast/visitor.dart'; |
10 import 'package:analyzer/dart/element/element.dart'; | 10 import 'package:analyzer/dart/element/element.dart'; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 runReflectiveTests(InferInstanceMembersInUnitTaskTest); | 60 runReflectiveTests(InferInstanceMembersInUnitTaskTest); |
61 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest); | 61 runReflectiveTests(InferStaticVariableTypesInUnitTaskTest); |
62 runReflectiveTests(InferStaticVariableTypeTaskTest); | 62 runReflectiveTests(InferStaticVariableTypeTaskTest); |
63 runReflectiveTests(LibraryErrorsReadyTaskTest); | 63 runReflectiveTests(LibraryErrorsReadyTaskTest); |
64 runReflectiveTests(LibraryUnitErrorsTaskTest); | 64 runReflectiveTests(LibraryUnitErrorsTaskTest); |
65 runReflectiveTests(ParseDartTaskTest); | 65 runReflectiveTests(ParseDartTaskTest); |
66 runReflectiveTests(PartiallyResolveUnitReferencesTaskTest); | 66 runReflectiveTests(PartiallyResolveUnitReferencesTaskTest); |
67 runReflectiveTests(PropagateVariableTypesInUnitTaskTest); | 67 runReflectiveTests(PropagateVariableTypesInUnitTaskTest); |
68 runReflectiveTests(PropagateVariableTypeTaskTest); | 68 runReflectiveTests(PropagateVariableTypeTaskTest); |
69 runReflectiveTests(ReferencedNamesBuilderTest); | 69 runReflectiveTests(ReferencedNamesBuilderTest); |
| 70 runReflectiveTests(ResolveDirectivesTaskTest); |
70 runReflectiveTests(ResolveDirectiveElementsTaskTest); | 71 runReflectiveTests(ResolveDirectiveElementsTaskTest); |
71 runReflectiveTests(ResolveInstanceFieldsInUnitTaskTest); | 72 runReflectiveTests(ResolveInstanceFieldsInUnitTaskTest); |
72 runReflectiveTests(ResolveLibraryTaskTest); | 73 runReflectiveTests(ResolveLibraryTaskTest); |
73 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); | 74 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); |
74 runReflectiveTests(ResolveTopLevelUnitTypeBoundsTaskTest); | 75 runReflectiveTests(ResolveTopLevelUnitTypeBoundsTaskTest); |
75 runReflectiveTests(ResolveUnitTaskTest); | 76 runReflectiveTests(ResolveUnitTaskTest); |
76 runReflectiveTests(ResolveUnitTypeNamesTaskTest); | 77 runReflectiveTests(ResolveUnitTypeNamesTaskTest); |
77 runReflectiveTests(ResolveVariableReferencesTaskTest); | 78 runReflectiveTests(ResolveVariableReferencesTaskTest); |
78 runReflectiveTests(ScanDartTaskTest); | 79 runReflectiveTests(ScanDartTaskTest); |
79 runReflectiveTests(StrongModeInferenceTest); | 80 runReflectiveTests(StrongModeInferenceTest); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 new isInstanceOf<LibraryUnitErrorsTask>(); | 129 new isInstanceOf<LibraryUnitErrorsTask>(); |
129 isInstanceOf isParseDartTask = new isInstanceOf<ParseDartTask>(); | 130 isInstanceOf isParseDartTask = new isInstanceOf<ParseDartTask>(); |
130 isInstanceOf isPartiallyResolveUnitReferencesTask = | 131 isInstanceOf isPartiallyResolveUnitReferencesTask = |
131 new isInstanceOf<PartiallyResolveUnitReferencesTask>(); | 132 new isInstanceOf<PartiallyResolveUnitReferencesTask>(); |
132 isInstanceOf isPropagateVariableTypesInUnitTask = | 133 isInstanceOf isPropagateVariableTypesInUnitTask = |
133 new isInstanceOf<PropagateVariableTypesInUnitTask>(); | 134 new isInstanceOf<PropagateVariableTypesInUnitTask>(); |
134 isInstanceOf isPropagateVariableTypeTask = | 135 isInstanceOf isPropagateVariableTypeTask = |
135 new isInstanceOf<PropagateVariableTypeTask>(); | 136 new isInstanceOf<PropagateVariableTypeTask>(); |
136 isInstanceOf isResolveDirectiveElementsTask = | 137 isInstanceOf isResolveDirectiveElementsTask = |
137 new isInstanceOf<ResolveDirectiveElementsTask>(); | 138 new isInstanceOf<ResolveDirectiveElementsTask>(); |
| 139 isInstanceOf isResolveDirectivesTask = |
| 140 new isInstanceOf<ResolveDirectivesTask>(); |
138 isInstanceOf isResolveLibraryReferencesTask = | 141 isInstanceOf isResolveLibraryReferencesTask = |
139 new isInstanceOf<ResolveLibraryReferencesTask>(); | 142 new isInstanceOf<ResolveLibraryReferencesTask>(); |
140 isInstanceOf isResolveLibraryTask = new isInstanceOf<ResolveLibraryTask>(); | 143 isInstanceOf isResolveLibraryTask = new isInstanceOf<ResolveLibraryTask>(); |
141 isInstanceOf isResolveLibraryTypeNamesTask = | 144 isInstanceOf isResolveLibraryTypeNamesTask = |
142 new isInstanceOf<ResolveLibraryTypeNamesTask>(); | 145 new isInstanceOf<ResolveLibraryTypeNamesTask>(); |
143 isInstanceOf isResolveTopLevelUnitTypeBoundsTask = | 146 isInstanceOf isResolveTopLevelUnitTypeBoundsTask = |
144 new isInstanceOf<ResolveTopLevelUnitTypeBoundsTask>(); | 147 new isInstanceOf<ResolveTopLevelUnitTypeBoundsTask>(); |
145 isInstanceOf isResolveUnitTask = new isInstanceOf<ResolveUnitTask>(); | 148 isInstanceOf isResolveUnitTask = new isInstanceOf<ResolveUnitTask>(); |
146 isInstanceOf isResolveUnitTypeNamesTask = | 149 isInstanceOf isResolveUnitTypeNamesTask = |
147 new isInstanceOf<ResolveUnitTypeNamesTask>(); | 150 new isInstanceOf<ResolveUnitTypeNamesTask>(); |
(...skipping 3062 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3210 List<AnalysisError> errors = getLibraryUnitErrors(outputs); | 3213 List<AnalysisError> errors = getLibraryUnitErrors(outputs); |
3211 expect(errors, hasLength(0)); | 3214 expect(errors, hasLength(0)); |
3212 } | 3215 } |
3213 } | 3216 } |
3214 | 3217 |
3215 @reflectiveTest | 3218 @reflectiveTest |
3216 class ParseDartTaskTest extends _AbstractDartTaskTest { | 3219 class ParseDartTaskTest extends _AbstractDartTaskTest { |
3217 Source source; | 3220 Source source; |
3218 | 3221 |
3219 test_perform() { | 3222 test_perform() { |
3220 _performParseTask(r''' | 3223 _performTask(r''' |
3221 part of lib; | 3224 part of lib; |
3222 class B {}'''); | 3225 class B {}'''); |
3223 expect(outputs, hasLength(11)); | 3226 expect(outputs, hasLength(4)); |
3224 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(0)); | |
3225 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); | |
3226 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); | |
3227 expect(outputs[INCLUDED_PARTS], hasLength(0)); | |
3228 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); | |
3229 expect(outputs[PARSE_ERRORS], hasLength(0)); | 3227 expect(outputs[PARSE_ERRORS], hasLength(0)); |
3230 expect(outputs[PARSED_UNIT], isNotNull); | 3228 expect(outputs[PARSED_UNIT1], isNotNull); |
3231 expect(outputs[REFERENCED_NAMES], isNotNull); | 3229 expect(outputs[REFERENCED_NAMES], isNotNull); |
3232 expect(outputs[REFERENCED_SOURCES], hasLength(2)); | |
3233 expect(outputs[SOURCE_KIND], SourceKind.PART); | 3230 expect(outputs[SOURCE_KIND], SourceKind.PART); |
3234 expect(outputs[UNITS], hasLength(1)); | |
3235 } | 3231 } |
3236 | 3232 |
3237 test_perform_computeSourceKind_noDirectives_hasContainingLibrary() { | 3233 test_perform_computeSourceKind_noDirectives_hasContainingLibrary() { |
3238 // Parse "lib.dart" to let the context know that "test.dart" is included. | 3234 // Parse "lib.dart" to let the context know that "test.dart" is included. |
3239 computeResult( | 3235 computeResult( |
3240 newSource( | 3236 newSource( |
3241 '/lib.dart', | 3237 '/lib.dart', |
3242 r''' | 3238 r''' |
3243 library lib; | 3239 library lib; |
3244 part 'test.dart'; | 3240 part 'test.dart'; |
3245 '''), | 3241 '''), |
3246 PARSED_UNIT); | 3242 PARSED_UNIT1); |
3247 // If there are no the "part of" directive, then it is not a part. | 3243 // If there are no the "part of" directive, then it is not a part. |
3248 _performParseTask(''); | 3244 _performTask(''); |
3249 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); | 3245 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); |
3250 } | 3246 } |
3251 | 3247 |
3252 test_perform_computeSourceKind_noDirectives_noContainingLibrary() { | 3248 test_perform_computeSourceKind_noDirectives_noContainingLibrary() { |
3253 _performParseTask(''); | 3249 _performTask(''); |
3254 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); | 3250 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); |
3255 } | 3251 } |
3256 | 3252 |
3257 test_perform_doesNotExist() { | 3253 test_perform_doesNotExist() { |
3258 _performParseTask(null); | 3254 _performTask(null); |
3259 expect(outputs, hasLength(11)); | 3255 expect(outputs, hasLength(4)); |
3260 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(0)); | |
3261 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); | |
3262 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); | |
3263 expect(outputs[INCLUDED_PARTS], hasLength(0)); | |
3264 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); | |
3265 expect(outputs[PARSE_ERRORS], hasLength(0)); | 3256 expect(outputs[PARSE_ERRORS], hasLength(0)); |
3266 expect(outputs[PARSED_UNIT], isNotNull); | 3257 expect(outputs[PARSED_UNIT1], isNotNull); |
3267 expect(outputs[REFERENCED_NAMES], isNotNull); | 3258 expect(outputs[REFERENCED_NAMES], isNotNull); |
3268 expect(outputs[REFERENCED_SOURCES], hasLength(2)); | |
3269 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); | 3259 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); |
3270 expect(outputs[UNITS], hasLength(1)); | |
3271 } | 3260 } |
3272 | 3261 |
3273 test_perform_enableAsync_false() { | 3262 test_perform_enableAsync_false() { |
3274 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); | 3263 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); |
3275 options.enableAsync = false; | 3264 options.enableAsync = false; |
3276 prepareAnalysisContext(options); | 3265 prepareAnalysisContext(options); |
3277 _performParseTask(r''' | 3266 _performTask(r''' |
3278 import 'dart:async'; | 3267 import 'dart:async'; |
3279 class B {void foo() async {}}'''); | 3268 class B {void foo() async {}}'''); |
3280 expect(outputs, hasLength(11)); | 3269 expect(outputs, hasLength(4)); |
3281 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1)); | |
3282 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); | |
3283 _assertHasCore(outputs[IMPORTED_LIBRARIES], 2); | |
3284 expect(outputs[INCLUDED_PARTS], hasLength(0)); | |
3285 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); | |
3286 expect(outputs[PARSE_ERRORS], hasLength(1)); | 3270 expect(outputs[PARSE_ERRORS], hasLength(1)); |
3287 expect(outputs[PARSED_UNIT], isNotNull); | 3271 expect(outputs[PARSED_UNIT1], isNotNull); |
3288 expect(outputs[REFERENCED_NAMES], isNotNull); | 3272 expect(outputs[REFERENCED_NAMES], isNotNull); |
3289 expect(outputs[REFERENCED_SOURCES], hasLength(3)); | |
3290 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); | 3273 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); |
3291 expect(outputs[UNITS], hasLength(1)); | |
3292 } | 3274 } |
3293 | 3275 |
3294 test_perform_enableAsync_true() { | 3276 test_perform_enableAsync_true() { |
3295 _performParseTask(r''' | 3277 _performTask(r''' |
3296 import 'dart:async'; | 3278 import 'dart:async'; |
3297 class B {void foo() async {}}'''); | 3279 class B {void foo() async {}}'''); |
3298 expect(outputs, hasLength(11)); | 3280 expect(outputs, hasLength(4)); |
3299 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1)); | |
3300 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); | |
3301 _assertHasCore(outputs[IMPORTED_LIBRARIES], 2); | |
3302 expect(outputs[INCLUDED_PARTS], hasLength(0)); | |
3303 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); | |
3304 expect(outputs[PARSE_ERRORS], hasLength(0)); | 3281 expect(outputs[PARSE_ERRORS], hasLength(0)); |
3305 expect(outputs[PARSED_UNIT], isNotNull); | 3282 expect(outputs[PARSED_UNIT1], isNotNull); |
3306 expect(outputs[REFERENCED_NAMES], isNotNull); | 3283 expect(outputs[REFERENCED_NAMES], isNotNull); |
3307 expect(outputs[REFERENCED_SOURCES], hasLength(3)); | |
3308 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); | 3284 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); |
3309 expect(outputs[UNITS], hasLength(1)); | |
3310 } | 3285 } |
3311 | 3286 |
3312 test_perform_flushTokenStream() { | 3287 test_perform_flushTokenStream() { |
3313 _performParseTask(r''' | 3288 _performTask(r''' |
3314 class Test {} | 3289 class Test {} |
3315 '''); | 3290 '''); |
3316 expect(analysisCache.getState(source, TOKEN_STREAM), CacheState.FLUSHED); | 3291 expect(analysisCache.getState(source, TOKEN_STREAM), CacheState.FLUSHED); |
3317 } | 3292 } |
3318 | 3293 |
3319 test_perform_invalidDirectives() { | 3294 test_perform_invalidDirectives() { |
3320 _performParseTask(r''' | 3295 _performTask(r''' |
3321 library lib; | 3296 library lib; |
3322 import '/does/not/exist.dart'; | 3297 import '/does/not/exist.dart'; |
3323 import '://invaliduri.dart'; | 3298 import '://invaliduri.dart'; |
3324 export '${a}lib3.dart'; | 3299 export '${a}lib3.dart'; |
3325 part 'part.dart'; | 3300 part 'part.dart'; |
3326 class A {}'''); | 3301 class A {}'''); |
3327 expect(outputs, hasLength(11)); | 3302 expect(outputs, hasLength(4)); |
3328 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1)); | 3303 expect(outputs[PARSE_ERRORS], hasLength(0)); |
3329 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); | 3304 expect(outputs[PARSED_UNIT1], isNotNull); |
3330 _assertHasCore(outputs[IMPORTED_LIBRARIES], 2); | |
3331 expect(outputs[INCLUDED_PARTS], hasLength(1)); | |
3332 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(2)); | |
3333 expect(outputs[PARSE_ERRORS], hasLength(2)); | |
3334 expect(outputs[PARSED_UNIT], isNotNull); | |
3335 expect(outputs[REFERENCED_NAMES], isNotNull); | 3305 expect(outputs[REFERENCED_NAMES], isNotNull); |
3336 expect(outputs[REFERENCED_SOURCES], hasLength(4)); | |
3337 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); | 3306 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); |
3338 expect(outputs[UNITS], hasLength(2)); | |
3339 } | 3307 } |
3340 | 3308 |
3341 test_perform_library() { | 3309 test_perform_library() { |
3342 _performParseTask(r''' | 3310 _performTask(r''' |
3343 library lib; | 3311 library lib; |
3344 import 'lib2.dart'; | 3312 import 'lib2.dart'; |
3345 export 'lib3.dart'; | 3313 export 'lib3.dart'; |
3346 part 'part.dart'; | 3314 part 'part.dart'; |
3347 class A {'''); | 3315 class A {'''); |
3348 expect(outputs, hasLength(11)); | 3316 expect(outputs, hasLength(4)); |
3349 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1)); | |
3350 expect(outputs[EXPORTED_LIBRARIES], hasLength(1)); | |
3351 _assertHasCore(outputs[IMPORTED_LIBRARIES], 2); | |
3352 expect(outputs[INCLUDED_PARTS], hasLength(1)); | |
3353 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(2)); | |
3354 expect(outputs[PARSE_ERRORS], hasLength(1)); | 3317 expect(outputs[PARSE_ERRORS], hasLength(1)); |
3355 expect(outputs[PARSED_UNIT], isNotNull); | 3318 expect(outputs[PARSED_UNIT1], isNotNull); |
3356 expect(outputs[REFERENCED_NAMES], isNotNull); | 3319 expect(outputs[REFERENCED_NAMES], isNotNull); |
3357 expect(outputs[REFERENCED_SOURCES], hasLength(5)); | |
3358 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); | 3320 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); |
3359 expect(outputs[UNITS], hasLength(2)); | |
3360 } | |
3361 | |
3362 test_perform_library_selfReferenceAsPart() { | |
3363 _performParseTask(r''' | |
3364 library lib; | |
3365 part 'test.dart'; | |
3366 '''); | |
3367 expect(outputs[INCLUDED_PARTS], unorderedEquals(<Source>[source])); | |
3368 } | 3321 } |
3369 | 3322 |
3370 test_perform_part() { | 3323 test_perform_part() { |
3371 _performParseTask(r''' | 3324 _performTask(r''' |
3372 part of lib; | 3325 part of lib; |
3373 class B {}'''); | 3326 class B {}'''); |
3374 expect(outputs, hasLength(11)); | 3327 expect(outputs, hasLength(4)); |
3375 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(0)); | |
3376 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); | |
3377 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); | |
3378 expect(outputs[INCLUDED_PARTS], hasLength(0)); | |
3379 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); | |
3380 expect(outputs[PARSE_ERRORS], hasLength(0)); | 3328 expect(outputs[PARSE_ERRORS], hasLength(0)); |
3381 expect(outputs[PARSED_UNIT], isNotNull); | 3329 expect(outputs[PARSED_UNIT1], isNotNull); |
3382 expect(outputs[REFERENCED_NAMES], isNotNull); | 3330 expect(outputs[REFERENCED_NAMES], isNotNull); |
3383 expect(outputs[REFERENCED_SOURCES], hasLength(2)); | |
3384 expect(outputs[SOURCE_KIND], SourceKind.PART); | 3331 expect(outputs[SOURCE_KIND], SourceKind.PART); |
3385 expect(outputs[UNITS], hasLength(1)); | |
3386 } | 3332 } |
3387 | 3333 |
3388 void _performParseTask(String content) { | 3334 void _performTask(String content) { |
3389 if (content == null) { | 3335 if (content == null) { |
3390 source = resourceProvider.getFile('/test.dart').createSource(); | 3336 source = resourceProvider.getFile('/test.dart').createSource(); |
3391 } else { | 3337 } else { |
3392 source = newSource('/test.dart', content); | 3338 source = newSource('/test.dart', content); |
3393 } | 3339 } |
3394 computeResult(source, PARSED_UNIT, matcher: isParseDartTask); | 3340 computeResult(source, PARSED_UNIT1, matcher: isParseDartTask); |
3395 } | 3341 } |
3396 | 3342 |
3397 static void _assertHasCore(dynamic sourceList, int lenght) { | 3343 static void _assertHasCore(dynamic sourceList, int length) { |
3398 List<Source> sources = sourceList as List<Source>; | 3344 List<Source> sources = sourceList as List<Source>; |
3399 expect(sources, hasLength(lenght)); | 3345 expect(sources, hasLength(length)); |
3400 expect(sources, contains(predicate((Source s) { | 3346 expect(sources, contains(predicate((Source s) { |
3401 return s.fullName.endsWith('core.dart'); | 3347 return s.fullName.endsWith('core.dart'); |
3402 }))); | 3348 }))); |
3403 } | 3349 } |
3404 } | 3350 } |
3405 | 3351 |
3406 @reflectiveTest | 3352 @reflectiveTest |
3407 class PartiallyResolveUnitReferencesTaskTest extends _AbstractDartTaskTest { | 3353 class PartiallyResolveUnitReferencesTaskTest extends _AbstractDartTaskTest { |
3408 test_perform_propagable() { | 3354 test_perform_propagable() { |
3409 enableStrongMode(); | 3355 enableStrongMode(); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3537 computeResult(target, RESOLVED_UNIT7, | 3483 computeResult(target, RESOLVED_UNIT7, |
3538 matcher: isPartiallyResolveUnitReferencesTask); | 3484 matcher: isPartiallyResolveUnitReferencesTask); |
3539 CompilationUnit unit = outputs[RESOLVED_UNIT7]; | 3485 CompilationUnit unit = outputs[RESOLVED_UNIT7]; |
3540 NodeList<CompilationUnitMember> declarations = unit.declarations; | 3486 NodeList<CompilationUnitMember> declarations = unit.declarations; |
3541 | 3487 |
3542 void expectReference(BlockFunctionBody body, bool isResolved) { | 3488 void expectReference(BlockFunctionBody body, bool isResolved) { |
3543 ExpressionStatement statement = body.block.statements[0]; | 3489 ExpressionStatement statement = body.block.statements[0]; |
3544 SimpleIdentifier reference = statement.expression; | 3490 SimpleIdentifier reference = statement.expression; |
3545 expect(reference.staticElement, isResolved ? isNotNull : isNull); | 3491 expect(reference.staticElement, isResolved ? isNotNull : isNull); |
3546 } | 3492 } |
| 3493 |
3547 // | 3494 // |
3548 // The reference to 'A' in 'f1' should not be resolved. | 3495 // The reference to 'A' in 'f1' should not be resolved. |
3549 // | 3496 // |
3550 FunctionDeclaration f1 = declarations[1]; | 3497 FunctionDeclaration f1 = declarations[1]; |
3551 expectReference(f1.functionExpression.body, false); | 3498 expectReference(f1.functionExpression.body, false); |
3552 // | 3499 // |
3553 // The references to 'A' in 'f2' should be resolved. | 3500 // The references to 'A' in 'f2' should be resolved. |
3554 // | 3501 // |
3555 TopLevelVariableDeclaration f2 = declarations[2]; | 3502 TopLevelVariableDeclaration f2 = declarations[2]; |
3556 FunctionExpression expression2 = f2.variables.variables[0].initializer; | 3503 FunctionExpression expression2 = f2.variables.variables[0].initializer; |
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4214 { | 4161 { |
4215 ExportDirective exportNode = unitA.directives[2]; | 4162 ExportDirective exportNode = unitA.directives[2]; |
4216 ExportElement exportElement = exportNode.element; | 4163 ExportElement exportElement = exportNode.element; |
4217 expect(exportElement, isNotNull); | 4164 expect(exportElement, isNotNull); |
4218 expect(exportElement.exportedLibrary, libraryElementC); | 4165 expect(exportElement.exportedLibrary, libraryElementC); |
4219 } | 4166 } |
4220 } | 4167 } |
4221 } | 4168 } |
4222 | 4169 |
4223 @reflectiveTest | 4170 @reflectiveTest |
| 4171 class ResolveDirectivesTaskTest extends _AbstractDartTaskTest { |
| 4172 Source source; |
| 4173 |
| 4174 test_perform() { |
| 4175 _performTask(r''' |
| 4176 part of lib; |
| 4177 class B {}'''); |
| 4178 expect(outputs, hasLength(9)); |
| 4179 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(0)); |
| 4180 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); |
| 4181 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); |
| 4182 expect(outputs[INCLUDED_PARTS], hasLength(0)); |
| 4183 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); |
| 4184 expect(outputs[PARSED_UNIT], isNotNull); |
| 4185 expect(outputs[REFERENCED_SOURCES], hasLength(2)); |
| 4186 expect(outputs[RESOLVE_DIRECTIVES_ERRORS], hasLength(0)); |
| 4187 expect(outputs[UNITS], hasLength(1)); |
| 4188 } |
| 4189 |
| 4190 test_perform_doesNotExist() { |
| 4191 _performTask(null); |
| 4192 expect(outputs, hasLength(9)); |
| 4193 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(0)); |
| 4194 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); |
| 4195 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); |
| 4196 expect(outputs[INCLUDED_PARTS], hasLength(0)); |
| 4197 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); |
| 4198 expect(outputs[PARSED_UNIT], isNotNull); |
| 4199 expect(outputs[REFERENCED_SOURCES], hasLength(2)); |
| 4200 expect(outputs[RESOLVE_DIRECTIVES_ERRORS], hasLength(0)); |
| 4201 expect(outputs[UNITS], hasLength(1)); |
| 4202 } |
| 4203 |
| 4204 test_perform_enableAsync_false() { |
| 4205 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); |
| 4206 options.enableAsync = false; |
| 4207 prepareAnalysisContext(options); |
| 4208 _performTask(r''' |
| 4209 import 'dart:async'; |
| 4210 class B {void foo() async {}}'''); |
| 4211 expect(outputs, hasLength(9)); |
| 4212 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1)); |
| 4213 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); |
| 4214 _assertHasCore(outputs[IMPORTED_LIBRARIES], 2); |
| 4215 expect(outputs[INCLUDED_PARTS], hasLength(0)); |
| 4216 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); |
| 4217 expect(outputs[PARSED_UNIT], isNotNull); |
| 4218 expect(outputs[REFERENCED_SOURCES], hasLength(3)); |
| 4219 expect(outputs[RESOLVE_DIRECTIVES_ERRORS], hasLength(0)); |
| 4220 expect(outputs[UNITS], hasLength(1)); |
| 4221 } |
| 4222 |
| 4223 test_perform_enableAsync_true() { |
| 4224 _performTask(r''' |
| 4225 import 'dart:async'; |
| 4226 class B {void foo() async {}}'''); |
| 4227 expect(outputs, hasLength(9)); |
| 4228 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1)); |
| 4229 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); |
| 4230 _assertHasCore(outputs[IMPORTED_LIBRARIES], 2); |
| 4231 expect(outputs[INCLUDED_PARTS], hasLength(0)); |
| 4232 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); |
| 4233 expect(outputs[PARSED_UNIT], isNotNull); |
| 4234 expect(outputs[REFERENCED_SOURCES], hasLength(3)); |
| 4235 expect(outputs[RESOLVE_DIRECTIVES_ERRORS], hasLength(0)); |
| 4236 expect(outputs[UNITS], hasLength(1)); |
| 4237 } |
| 4238 |
| 4239 test_perform_flushParsedUnit1() { |
| 4240 _performTask(r''' |
| 4241 class Test {} |
| 4242 '''); |
| 4243 expect(analysisCache.getState(source, PARSED_UNIT1), CacheState.FLUSHED); |
| 4244 } |
| 4245 |
| 4246 test_perform_invalidDirectives() { |
| 4247 _performTask(r''' |
| 4248 library lib; |
| 4249 import '/does/not/exist.dart'; |
| 4250 import '://invaliduri.dart'; |
| 4251 export '${a}lib3.dart'; |
| 4252 part 'part.dart'; |
| 4253 class A {}'''); |
| 4254 expect(outputs, hasLength(9)); |
| 4255 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1)); |
| 4256 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); |
| 4257 _assertHasCore(outputs[IMPORTED_LIBRARIES], 2); |
| 4258 expect(outputs[INCLUDED_PARTS], hasLength(1)); |
| 4259 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(2)); |
| 4260 expect(outputs[PARSED_UNIT], isNotNull); |
| 4261 expect(outputs[REFERENCED_SOURCES], hasLength(4)); |
| 4262 expect(outputs[RESOLVE_DIRECTIVES_ERRORS], hasLength(2)); |
| 4263 expect(outputs[UNITS], hasLength(2)); |
| 4264 } |
| 4265 |
| 4266 test_perform_library() { |
| 4267 _performTask(r''' |
| 4268 library lib; |
| 4269 import 'lib2.dart'; |
| 4270 export 'lib3.dart'; |
| 4271 part 'part.dart'; |
| 4272 class A {'''); |
| 4273 expect(outputs, hasLength(9)); |
| 4274 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1)); |
| 4275 expect(outputs[EXPORTED_LIBRARIES], hasLength(1)); |
| 4276 _assertHasCore(outputs[IMPORTED_LIBRARIES], 2); |
| 4277 expect(outputs[INCLUDED_PARTS], hasLength(1)); |
| 4278 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(2)); |
| 4279 expect(outputs[PARSED_UNIT], isNotNull); |
| 4280 expect(outputs[REFERENCED_SOURCES], hasLength(5)); |
| 4281 expect(outputs[RESOLVE_DIRECTIVES_ERRORS], hasLength(0)); |
| 4282 expect(outputs[UNITS], hasLength(2)); |
| 4283 } |
| 4284 |
| 4285 test_perform_library_selfReferenceAsPart() { |
| 4286 _performTask(r''' |
| 4287 library lib; |
| 4288 part 'test.dart'; |
| 4289 '''); |
| 4290 expect(outputs[INCLUDED_PARTS], unorderedEquals(<Source>[source])); |
| 4291 } |
| 4292 |
| 4293 test_perform_part() { |
| 4294 _performTask(r''' |
| 4295 part of lib; |
| 4296 class B {}'''); |
| 4297 expect(outputs, hasLength(9)); |
| 4298 expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(0)); |
| 4299 expect(outputs[EXPORTED_LIBRARIES], hasLength(0)); |
| 4300 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); |
| 4301 expect(outputs[INCLUDED_PARTS], hasLength(0)); |
| 4302 expect(outputs[LIBRARY_SPECIFIC_UNITS], hasLength(1)); |
| 4303 expect(outputs[PARSED_UNIT], isNotNull); |
| 4304 expect(outputs[REFERENCED_SOURCES], hasLength(2)); |
| 4305 expect(outputs[RESOLVE_DIRECTIVES_ERRORS], hasLength(0)); |
| 4306 expect(outputs[UNITS], hasLength(1)); |
| 4307 } |
| 4308 |
| 4309 void _performTask(String content) { |
| 4310 if (content == null) { |
| 4311 source = resourceProvider.getFile('/test.dart').createSource(); |
| 4312 } else { |
| 4313 source = newSource('/test.dart', content); |
| 4314 } |
| 4315 computeResult(source, PARSED_UNIT, matcher: isResolveDirectivesTask); |
| 4316 } |
| 4317 |
| 4318 static void _assertHasCore(dynamic sourceList, int length) { |
| 4319 List<Source> sources = sourceList as List<Source>; |
| 4320 expect(sources, hasLength(length)); |
| 4321 expect(sources, contains(predicate((Source s) { |
| 4322 return s.fullName.endsWith('core.dart'); |
| 4323 }))); |
| 4324 } |
| 4325 } |
| 4326 |
| 4327 @reflectiveTest |
4224 class ResolveInstanceFieldsInUnitTaskTest extends _AbstractDartTaskTest { | 4328 class ResolveInstanceFieldsInUnitTaskTest extends _AbstractDartTaskTest { |
4225 @override | 4329 @override |
4226 void setUp() { | 4330 void setUp() { |
4227 super.setUp(); | 4331 super.setUp(); |
4228 enableStrongMode(); | 4332 enableStrongMode(); |
4229 } | 4333 } |
4230 | 4334 |
4231 test_created_resolved_unit() { | 4335 test_created_resolved_unit() { |
4232 Source source = newSource( | 4336 Source source = newSource( |
4233 '/test.dart', | 4337 '/test.dart', |
(...skipping 1544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5778 } | 5882 } |
5779 | 5883 |
5780 List<dynamic> computeLibraryResults( | 5884 List<dynamic> computeLibraryResults( |
5781 List<Source> sources, ResultDescriptor result, | 5885 List<Source> sources, ResultDescriptor result, |
5782 {isInstanceOf matcher: null}) { | 5886 {isInstanceOf matcher: null}) { |
5783 dynamic compute(Source source) { | 5887 dynamic compute(Source source) { |
5784 computeResult(new LibrarySpecificUnit(source, source), result, | 5888 computeResult(new LibrarySpecificUnit(source, source), result, |
5785 matcher: matcher); | 5889 matcher: matcher); |
5786 return outputs[result]; | 5890 return outputs[result]; |
5787 } | 5891 } |
| 5892 |
5788 return sources.map(compute).toList(); | 5893 return sources.map(compute).toList(); |
5789 } | 5894 } |
5790 | 5895 |
5791 List<Map<ResultDescriptor, dynamic>> computeLibraryResultsMap( | 5896 List<Map<ResultDescriptor, dynamic>> computeLibraryResultsMap( |
5792 List<Source> sources, ResultDescriptor result, | 5897 List<Source> sources, ResultDescriptor result, |
5793 {isInstanceOf matcher: null}) { | 5898 {isInstanceOf matcher: null}) { |
5794 Map<ResultDescriptor, dynamic> compute(Source source) { | 5899 Map<ResultDescriptor, dynamic> compute(Source source) { |
5795 computeResult(source, result, matcher: matcher); | 5900 computeResult(source, result, matcher: matcher); |
5796 return outputs; | 5901 return outputs; |
5797 } | 5902 } |
| 5903 |
5798 return sources.map(compute).toList(); | 5904 return sources.map(compute).toList(); |
5799 } | 5905 } |
5800 | 5906 |
5801 /** | 5907 /** |
5802 * Create a script object with a single fragment containing the given | 5908 * Create a script object with a single fragment containing the given |
5803 * [scriptContent]. | 5909 * [scriptContent]. |
5804 */ | 5910 */ |
5805 DartScript createScript(String scriptContent) { | 5911 DartScript createScript(String scriptContent) { |
5806 String htmlContent = ''' | 5912 String htmlContent = ''' |
5807 <!DOCTYPE html> | 5913 <!DOCTYPE html> |
(...skipping 27 matching lines...) Expand all Loading... |
5835 /** | 5941 /** |
5836 * Fill [errorListener] with [result] errors in the current [task]. | 5942 * Fill [errorListener] with [result] errors in the current [task]. |
5837 */ | 5943 */ |
5838 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { | 5944 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { |
5839 List<AnalysisError> errors = task.outputs[result] as List<AnalysisError>; | 5945 List<AnalysisError> errors = task.outputs[result] as List<AnalysisError>; |
5840 expect(errors, isNotNull, reason: result.name); | 5946 expect(errors, isNotNull, reason: result.name); |
5841 errorListener = new GatheringErrorListener(); | 5947 errorListener = new GatheringErrorListener(); |
5842 errorListener.addAll(errors); | 5948 errorListener.addAll(errors); |
5843 } | 5949 } |
5844 } | 5950 } |
OLD | NEW |