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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 test_perform_ClassDeclaration_errors_mixinHasNoConstructors() { | 61 test_perform_ClassDeclaration_errors_mixinHasNoConstructors() { |
62 Source source = newSource('/test.dart', ''' | 62 Source source = newSource('/test.dart', ''' |
63 class B { | 63 class B { |
64 B({x}); | 64 B({x}); |
65 } | 65 } |
66 class M {} | 66 class M {} |
67 class C extends B with M {} | 67 class C extends B with M {} |
68 '''); | 68 '''); |
69 LibraryElement libraryElement; | 69 LibraryElement libraryElement; |
70 { | 70 { |
71 _computeResult(source, LIBRARY_ELEMENT5); | 71 computeResult(source, LIBRARY_ELEMENT5); |
72 libraryElement = outputs[LIBRARY_ELEMENT5]; | 72 libraryElement = outputs[LIBRARY_ELEMENT5]; |
73 } | 73 } |
74 // prepare C | 74 // prepare C |
75 ClassElement c = libraryElement.getType('C'); | 75 ClassElement c = libraryElement.getType('C'); |
76 expect(c, isNotNull); | 76 expect(c, isNotNull); |
77 // build constructors | 77 // build constructors |
78 _computeResult(c, CONSTRUCTORS); | 78 computeResult(c, CONSTRUCTORS); |
79 expect(task, new isInstanceOf<BuildClassConstructorsTask>()); | 79 expect(task, new isInstanceOf<BuildClassConstructorsTask>()); |
80 _fillErrorListener(CONSTRUCTORS_ERRORS); | 80 _fillErrorListener(CONSTRUCTORS_ERRORS); |
81 errorListener.assertErrorsWithCodes( | 81 errorListener.assertErrorsWithCodes( |
82 <ErrorCode>[CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]); | 82 <ErrorCode>[CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]); |
83 } | 83 } |
84 | 84 |
85 test_perform_ClassDeclaration_explicitConstructors() { | 85 test_perform_ClassDeclaration_explicitConstructors() { |
86 Source source = newSource('/test.dart', ''' | 86 Source source = newSource('/test.dart', ''' |
87 class B { | 87 class B { |
88 B(p); | 88 B(p); |
89 } | 89 } |
90 class C extends B { | 90 class C extends B { |
91 C(int a, String b) {} | 91 C(int a, String b) {} |
92 } | 92 } |
93 '''); | 93 '''); |
94 LibraryElement libraryElement; | 94 LibraryElement libraryElement; |
95 { | 95 { |
96 _computeResult(source, LIBRARY_ELEMENT5); | 96 computeResult(source, LIBRARY_ELEMENT5); |
97 libraryElement = outputs[LIBRARY_ELEMENT5]; | 97 libraryElement = outputs[LIBRARY_ELEMENT5]; |
98 } | 98 } |
99 // prepare C | 99 // prepare C |
100 ClassElement c = libraryElement.getType('C'); | 100 ClassElement c = libraryElement.getType('C'); |
101 expect(c, isNotNull); | 101 expect(c, isNotNull); |
102 // build constructors | 102 // build constructors |
103 _computeResult(c, CONSTRUCTORS); | 103 computeResult(c, CONSTRUCTORS); |
104 expect(task, new isInstanceOf<BuildClassConstructorsTask>()); | 104 expect(task, new isInstanceOf<BuildClassConstructorsTask>()); |
105 // no errors | 105 // no errors |
106 expect(outputs[CONSTRUCTORS_ERRORS], isEmpty); | 106 expect(outputs[CONSTRUCTORS_ERRORS], isEmpty); |
107 // explicit constructor | 107 // explicit constructor |
108 List<ConstructorElement> constructors = outputs[CONSTRUCTORS]; | 108 List<ConstructorElement> constructors = outputs[CONSTRUCTORS]; |
109 expect(constructors, hasLength(1)); | 109 expect(constructors, hasLength(1)); |
110 expect(constructors[0].parameters, hasLength(2)); | 110 expect(constructors[0].parameters, hasLength(2)); |
111 } | 111 } |
112 | 112 |
113 test_perform_ClassTypeAlias() { | 113 test_perform_ClassTypeAlias() { |
114 Source source = newSource('/test.dart', ''' | 114 Source source = newSource('/test.dart', ''' |
115 class B { | 115 class B { |
116 B(int i); | 116 B(int i); |
117 } | 117 } |
118 class M1 {} | 118 class M1 {} |
119 class M2 {} | 119 class M2 {} |
120 | 120 |
121 class C2 = C1 with M2; | 121 class C2 = C1 with M2; |
122 class C1 = B with M1; | 122 class C1 = B with M1; |
123 '''); | 123 '''); |
124 LibraryElement libraryElement; | 124 LibraryElement libraryElement; |
125 { | 125 { |
126 _computeResult(source, LIBRARY_ELEMENT5); | 126 computeResult(source, LIBRARY_ELEMENT5); |
127 libraryElement = outputs[LIBRARY_ELEMENT5]; | 127 libraryElement = outputs[LIBRARY_ELEMENT5]; |
128 } | 128 } |
129 // prepare C2 | 129 // prepare C2 |
130 ClassElement class2 = libraryElement.getType('C2'); | 130 ClassElement class2 = libraryElement.getType('C2'); |
131 expect(class2, isNotNull); | 131 expect(class2, isNotNull); |
132 // build constructors | 132 // build constructors |
133 _computeResult(class2, CONSTRUCTORS); | 133 computeResult(class2, CONSTRUCTORS); |
134 expect(task, new isInstanceOf<BuildClassConstructorsTask>()); | 134 expect(task, new isInstanceOf<BuildClassConstructorsTask>()); |
135 List<ConstructorElement> constructors = outputs[CONSTRUCTORS]; | 135 List<ConstructorElement> constructors = outputs[CONSTRUCTORS]; |
136 expect(constructors, hasLength(1)); | 136 expect(constructors, hasLength(1)); |
137 expect(constructors[0].parameters, hasLength(1)); | 137 expect(constructors[0].parameters, hasLength(1)); |
138 } | 138 } |
139 | 139 |
140 test_perform_ClassTypeAlias_errors_mixinHasNoConstructors() { | 140 test_perform_ClassTypeAlias_errors_mixinHasNoConstructors() { |
141 Source source = newSource('/test.dart', ''' | 141 Source source = newSource('/test.dart', ''' |
142 class B { | 142 class B { |
143 B({x}); | 143 B({x}); |
144 } | 144 } |
145 class M {} | 145 class M {} |
146 class C = B with M; | 146 class C = B with M; |
147 '''); | 147 '''); |
148 LibraryElement libraryElement; | 148 LibraryElement libraryElement; |
149 { | 149 { |
150 _computeResult(source, LIBRARY_ELEMENT5); | 150 computeResult(source, LIBRARY_ELEMENT5); |
151 libraryElement = outputs[LIBRARY_ELEMENT5]; | 151 libraryElement = outputs[LIBRARY_ELEMENT5]; |
152 } | 152 } |
153 // prepare C | 153 // prepare C |
154 ClassElement c = libraryElement.getType('C'); | 154 ClassElement c = libraryElement.getType('C'); |
155 expect(c, isNotNull); | 155 expect(c, isNotNull); |
156 // build constructors | 156 // build constructors |
157 _computeResult(c, CONSTRUCTORS); | 157 computeResult(c, CONSTRUCTORS); |
158 expect(task, new isInstanceOf<BuildClassConstructorsTask>()); | 158 expect(task, new isInstanceOf<BuildClassConstructorsTask>()); |
159 _fillErrorListener(CONSTRUCTORS_ERRORS); | 159 _fillErrorListener(CONSTRUCTORS_ERRORS); |
160 errorListener.assertErrorsWithCodes( | 160 errorListener.assertErrorsWithCodes( |
161 <ErrorCode>[CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]); | 161 <ErrorCode>[CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]); |
162 } | 162 } |
163 } | 163 } |
164 | 164 |
165 @reflectiveTest | 165 @reflectiveTest |
166 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest { | 166 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest { |
167 Source source; | 167 Source source; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 class B = Object with A; | 255 class B = Object with A; |
256 '''); | 256 '''); |
257 CompilationUnit unit = outputs[RESOLVED_UNIT1]; | 257 CompilationUnit unit = outputs[RESOLVED_UNIT1]; |
258 CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT]; | 258 CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT]; |
259 expect(unit, isNotNull); | 259 expect(unit, isNotNull); |
260 expect(unitElement, isNotNull); | 260 expect(unitElement, isNotNull); |
261 // invalidate RESOLVED_UNIT1 | 261 // invalidate RESOLVED_UNIT1 |
262 CacheEntry cacheEntry = analysisCache.get(target); | 262 CacheEntry cacheEntry = analysisCache.get(target); |
263 cacheEntry.setState(RESOLVED_UNIT1, CacheState.INVALID); | 263 cacheEntry.setState(RESOLVED_UNIT1, CacheState.INVALID); |
264 // compute again | 264 // compute again |
265 _computeResult(target, RESOLVED_UNIT1); | 265 computeResult(target, RESOLVED_UNIT1); |
266 expect(outputs[COMPILATION_UNIT_ELEMENT], same(unitElement)); | 266 expect(outputs[COMPILATION_UNIT_ELEMENT], same(unitElement)); |
267 expect(outputs[RESOLVED_UNIT1], isNot(same(unit))); | 267 expect(outputs[RESOLVED_UNIT1], isNot(same(unit))); |
268 } | 268 } |
269 | 269 |
270 void _performBuildTask(String content) { | 270 void _performBuildTask(String content) { |
271 source = newSource('/test.dart', content); | 271 source = newSource('/test.dart', content); |
272 target = new LibrarySpecificUnit(source, source); | 272 target = new LibrarySpecificUnit(source, source); |
273 _computeResult(target, RESOLVED_UNIT1); | 273 computeResult(target, RESOLVED_UNIT1); |
274 expect(task, new isInstanceOf<BuildCompilationUnitElementTask>()); | 274 expect(task, new isInstanceOf<BuildCompilationUnitElementTask>()); |
275 } | 275 } |
276 } | 276 } |
277 | 277 |
278 @reflectiveTest | 278 @reflectiveTest |
279 class BuildDirectiveElementsTaskTest extends _AbstractDartTaskTest { | 279 class BuildDirectiveElementsTaskTest extends _AbstractDartTaskTest { |
280 test_constructor() { | 280 test_constructor() { |
281 BuildDirectiveElementsTask task = | 281 BuildDirectiveElementsTask task = |
282 new BuildDirectiveElementsTask(context, emptySource); | 282 new BuildDirectiveElementsTask(context, emptySource); |
283 expect(task, isNotNull); | 283 expect(task, isNotNull); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 library libB; | 315 library libB; |
316 ''', | 316 ''', |
317 '/libC.dart': ''' | 317 '/libC.dart': ''' |
318 library libC; | 318 library libC; |
319 ''' | 319 ''' |
320 }); | 320 }); |
321 Source sourceA = sources[0]; | 321 Source sourceA = sources[0]; |
322 Source sourceB = sources[1]; | 322 Source sourceB = sources[1]; |
323 Source sourceC = sources[2]; | 323 Source sourceC = sources[2]; |
324 // perform task | 324 // perform task |
325 _computeResult(sourceA, LIBRARY_ELEMENT2); | 325 computeResult(sourceA, LIBRARY_ELEMENT2); |
326 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); | 326 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); |
327 // prepare outputs | 327 // prepare outputs |
328 LibraryElement libraryElementA = outputs[LIBRARY_ELEMENT2]; | 328 LibraryElement libraryElementA = outputs[LIBRARY_ELEMENT2]; |
329 LibraryElement libraryElementB = _getImportLibraryInput(sourceB); | 329 LibraryElement libraryElementB = _getImportLibraryInput(sourceB); |
330 LibraryElement libraryElementC = _getExportLibraryInput(sourceC); | 330 LibraryElement libraryElementC = _getExportLibraryInput(sourceC); |
331 // no errors | 331 // no errors |
332 _assertErrorsWithCodes([]); | 332 _assertErrorsWithCodes([]); |
333 // validate directives | 333 // validate directives |
334 CompilationUnit libraryUnitA = context | 334 CompilationUnit libraryUnitA = context |
335 .getCacheEntry(new LibrarySpecificUnit(sourceA, sourceA)) | 335 .getCacheEntry(new LibrarySpecificUnit(sourceA, sourceA)) |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 '/libA.dart': ''' | 368 '/libA.dart': ''' |
369 library libA; | 369 library libA; |
370 import 'libB.dart' show A, B hide C, D; | 370 import 'libB.dart' show A, B hide C, D; |
371 ''', | 371 ''', |
372 '/libB.dart': ''' | 372 '/libB.dart': ''' |
373 library libB; | 373 library libB; |
374 ''' | 374 ''' |
375 }); | 375 }); |
376 Source sourceA = sources[0]; | 376 Source sourceA = sources[0]; |
377 // perform task | 377 // perform task |
378 _computeResult(sourceA, LIBRARY_ELEMENT2); | 378 computeResult(sourceA, LIBRARY_ELEMENT2); |
379 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); | 379 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); |
380 // prepare outputs | 380 // prepare outputs |
381 CompilationUnit libraryUnitA = context | 381 CompilationUnit libraryUnitA = context |
382 .getCacheEntry(new LibrarySpecificUnit(sourceA, sourceA)) | 382 .getCacheEntry(new LibrarySpecificUnit(sourceA, sourceA)) |
383 .getValue(RESOLVED_UNIT1); | 383 .getValue(RESOLVED_UNIT1); |
384 // no errors | 384 // no errors |
385 _assertErrorsWithCodes([]); | 385 _assertErrorsWithCodes([]); |
386 // validate directives | 386 // validate directives |
387 ImportDirective importNode = libraryUnitA.directives[1]; | 387 ImportDirective importNode = libraryUnitA.directives[1]; |
388 ImportElement importElement = importNode.element; | 388 ImportElement importElement = importNode.element; |
389 List<NamespaceCombinator> combinators = importElement.combinators; | 389 List<NamespaceCombinator> combinators = importElement.combinators; |
390 expect(combinators, hasLength(2)); | 390 expect(combinators, hasLength(2)); |
391 { | 391 { |
392 ShowElementCombinator combinator = combinators[0]; | 392 ShowElementCombinator combinator = combinators[0]; |
393 expect(combinator.offset, 33); | 393 expect(combinator.offset, 33); |
394 expect(combinator.end, 42); | 394 expect(combinator.end, 42); |
395 expect(combinator.shownNames, ['A', 'B']); | 395 expect(combinator.shownNames, ['A', 'B']); |
396 } | 396 } |
397 { | 397 { |
398 HideElementCombinator combinator = combinators[1]; | 398 HideElementCombinator combinator = combinators[1]; |
399 expect(combinator.hiddenNames, ['C', 'D']); | 399 expect(combinator.hiddenNames, ['C', 'D']); |
400 } | 400 } |
401 } | 401 } |
402 | 402 |
403 test_perform_dartCoreContext() { | 403 test_perform_dartCoreContext() { |
404 List<Source> sources = newSources({'/libA.dart': ''}); | 404 List<Source> sources = newSources({'/libA.dart': ''}); |
405 Source source = sources[0]; | 405 Source source = sources[0]; |
406 // perform task | 406 // perform task |
407 _computeResult(source, LIBRARY_ELEMENT2); | 407 computeResult(source, LIBRARY_ELEMENT2); |
408 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); | 408 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); |
409 // prepare outputs | 409 // prepare outputs |
410 LibraryElement libraryElement = outputs[LIBRARY_ELEMENT2]; | 410 LibraryElement libraryElement = outputs[LIBRARY_ELEMENT2]; |
411 // verify that dart:core has SDK context | 411 // verify that dart:core has SDK context |
412 { | 412 { |
413 LibraryElement coreLibrary = libraryElement.importedLibraries[0]; | 413 LibraryElement coreLibrary = libraryElement.importedLibraries[0]; |
414 DartSdk dartSdk = context.sourceFactory.dartSdk; | 414 DartSdk dartSdk = context.sourceFactory.dartSdk; |
415 expect(coreLibrary.context, same(dartSdk.context)); | 415 expect(coreLibrary.context, same(dartSdk.context)); |
416 } | 416 } |
417 } | 417 } |
418 | 418 |
419 test_perform_error_exportOfNonLibrary() { | 419 test_perform_error_exportOfNonLibrary() { |
420 List<Source> sources = newSources({ | 420 List<Source> sources = newSources({ |
421 '/libA.dart': ''' | 421 '/libA.dart': ''' |
422 library libA; | 422 library libA; |
423 export 'part.dart'; | 423 export 'part.dart'; |
424 ''', | 424 ''', |
425 '/part.dart': ''' | 425 '/part.dart': ''' |
426 part of notLib; | 426 part of notLib; |
427 ''' | 427 ''' |
428 }); | 428 }); |
429 Source sourceA = sources[0]; | 429 Source sourceA = sources[0]; |
430 // perform task | 430 // perform task |
431 _computeResult(sourceA, LIBRARY_ELEMENT2); | 431 computeResult(sourceA, LIBRARY_ELEMENT2); |
432 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); | 432 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); |
433 // validate errors | 433 // validate errors |
434 _assertErrorsWithCodes([CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY]); | 434 _assertErrorsWithCodes([CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY]); |
435 } | 435 } |
436 | 436 |
437 test_perform_error_importOfNonLibrary() { | 437 test_perform_error_importOfNonLibrary() { |
438 List<Source> sources = newSources({ | 438 List<Source> sources = newSources({ |
439 '/libA.dart': ''' | 439 '/libA.dart': ''' |
440 library libA; | 440 library libA; |
441 import 'part.dart'; | 441 import 'part.dart'; |
442 ''', | 442 ''', |
443 '/part.dart': ''' | 443 '/part.dart': ''' |
444 part of notLib; | 444 part of notLib; |
445 ''' | 445 ''' |
446 }); | 446 }); |
447 Source sourceA = sources[0]; | 447 Source sourceA = sources[0]; |
448 // perform task | 448 // perform task |
449 _computeResult(sourceA, LIBRARY_ELEMENT2); | 449 computeResult(sourceA, LIBRARY_ELEMENT2); |
450 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); | 450 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); |
451 // validate errors | 451 // validate errors |
452 _assertErrorsWithCodes([CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY]); | 452 _assertErrorsWithCodes([CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY]); |
453 } | 453 } |
454 | 454 |
455 test_perform_hasExtUri() { | 455 test_perform_hasExtUri() { |
456 List<Source> sources = newSources({ | 456 List<Source> sources = newSources({ |
457 '/lib.dart': ''' | 457 '/lib.dart': ''' |
458 import 'dart-ext:doesNotExist.dart'; | 458 import 'dart-ext:doesNotExist.dart'; |
459 ''' | 459 ''' |
460 }); | 460 }); |
461 Source source = sources[0]; | 461 Source source = sources[0]; |
462 // perform task | 462 // perform task |
463 _computeResult(source, LIBRARY_ELEMENT2); | 463 computeResult(source, LIBRARY_ELEMENT2); |
464 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); | 464 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); |
465 // prepare outputs | 465 // prepare outputs |
466 LibraryElement libraryElement = outputs[LIBRARY_ELEMENT2]; | 466 LibraryElement libraryElement = outputs[LIBRARY_ELEMENT2]; |
467 expect(libraryElement.hasExtUri, isTrue); | 467 expect(libraryElement.hasExtUri, isTrue); |
468 } | 468 } |
469 | 469 |
470 test_perform_importPrefix() { | 470 test_perform_importPrefix() { |
471 List<Source> sources = newSources({ | 471 List<Source> sources = newSources({ |
472 '/libA.dart': ''' | 472 '/libA.dart': ''' |
473 library libA; | 473 library libA; |
474 import 'libB.dart' as pref; | 474 import 'libB.dart' as pref; |
475 import 'libC.dart' as pref; | 475 import 'libC.dart' as pref; |
476 ''', | 476 ''', |
477 '/libB.dart': ''' | 477 '/libB.dart': ''' |
478 library libB; | 478 library libB; |
479 ''', | 479 ''', |
480 '/libC.dart': ''' | 480 '/libC.dart': ''' |
481 library libC; | 481 library libC; |
482 ''' | 482 ''' |
483 }); | 483 }); |
484 Source sourceA = sources[0]; | 484 Source sourceA = sources[0]; |
485 Source sourceB = sources[1]; | 485 Source sourceB = sources[1]; |
486 // perform task | 486 // perform task |
487 _computeResult(sourceA, LIBRARY_ELEMENT2); | 487 computeResult(sourceA, LIBRARY_ELEMENT2); |
488 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); | 488 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); |
489 // prepare outputs | 489 // prepare outputs |
490 CompilationUnit libraryUnitA = context | 490 CompilationUnit libraryUnitA = context |
491 .getCacheEntry(new LibrarySpecificUnit(sourceA, sourceA)) | 491 .getCacheEntry(new LibrarySpecificUnit(sourceA, sourceA)) |
492 .getValue(RESOLVED_UNIT1); | 492 .getValue(RESOLVED_UNIT1); |
493 // validate directives | 493 // validate directives |
494 { | 494 { |
495 ImportDirective importNodeB = libraryUnitA.directives[1]; | 495 ImportDirective importNodeB = libraryUnitA.directives[1]; |
496 SimpleIdentifier prefixNodeB = importNodeB.prefix; | 496 SimpleIdentifier prefixNodeB = importNodeB.prefix; |
497 ImportElement importElementB = importNodeB.element; | 497 ImportElement importElementB = importNodeB.element; |
(...skipping 29 matching lines...) Expand all Loading... |
527 } | 527 } |
528 | 528 |
529 @reflectiveTest | 529 @reflectiveTest |
530 class BuildEnumMemberElementsTaskTest extends _AbstractDartTaskTest { | 530 class BuildEnumMemberElementsTaskTest extends _AbstractDartTaskTest { |
531 test_perform() { | 531 test_perform() { |
532 Source source = newSource('/test.dart', ''' | 532 Source source = newSource('/test.dart', ''' |
533 enum MyEnum { | 533 enum MyEnum { |
534 A, B | 534 A, B |
535 } | 535 } |
536 '''); | 536 '''); |
537 _computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT2); | 537 computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT2); |
538 expect(task, new isInstanceOf<BuildEnumMemberElementsTask>()); | 538 expect(task, new isInstanceOf<BuildEnumMemberElementsTask>()); |
539 CompilationUnit unit = outputs[RESOLVED_UNIT2]; | 539 CompilationUnit unit = outputs[RESOLVED_UNIT2]; |
540 // validate Element | 540 // validate Element |
541 ClassElement enumElement = unit.element.getEnum('MyEnum'); | 541 ClassElement enumElement = unit.element.getEnum('MyEnum'); |
542 List<FieldElement> fields = enumElement.fields; | 542 List<FieldElement> fields = enumElement.fields; |
543 expect(fields, hasLength(4)); | 543 expect(fields, hasLength(4)); |
544 { | 544 { |
545 FieldElementImpl index = fields[0]; | 545 FieldElementImpl index = fields[0]; |
546 expect(index, isNotNull); | 546 expect(index, isNotNull); |
547 expect(index.name, 'index'); | 547 expect(index.name, 'index'); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 class BuildExportNamespaceTaskTest extends _AbstractDartTaskTest { | 592 class BuildExportNamespaceTaskTest extends _AbstractDartTaskTest { |
593 test_perform_entryPoint() { | 593 test_perform_entryPoint() { |
594 Source sourceA = newSource('/a.dart', ''' | 594 Source sourceA = newSource('/a.dart', ''' |
595 library lib_a; | 595 library lib_a; |
596 export 'b.dart'; | 596 export 'b.dart'; |
597 '''); | 597 '''); |
598 Source sourceB = newSource('/b.dart', ''' | 598 Source sourceB = newSource('/b.dart', ''' |
599 library lib_b; | 599 library lib_b; |
600 main() {} | 600 main() {} |
601 '''); | 601 '''); |
602 _computeResult(sourceA, LIBRARY_ELEMENT4); | 602 computeResult(sourceA, LIBRARY_ELEMENT4); |
603 expect(task, new isInstanceOf<BuildExportNamespaceTask>()); | 603 expect(task, new isInstanceOf<BuildExportNamespaceTask>()); |
604 // validate | 604 // validate |
605 { | 605 { |
606 LibraryElement library = outputs[LIBRARY_ELEMENT4]; | 606 LibraryElement library = outputs[LIBRARY_ELEMENT4]; |
607 FunctionElement entryPoint = library.entryPoint; | 607 FunctionElement entryPoint = library.entryPoint; |
608 expect(entryPoint, isNotNull); | 608 expect(entryPoint, isNotNull); |
609 expect(entryPoint.source, sourceB); | 609 expect(entryPoint.source, sourceB); |
610 } | 610 } |
611 } | 611 } |
612 | 612 |
(...skipping 11 matching lines...) Expand all Loading... |
624 class B2 {} | 624 class B2 {} |
625 class B3 {} | 625 class B3 {} |
626 class _B4 {} | 626 class _B4 {} |
627 '''); | 627 '''); |
628 newSource('/c.dart', ''' | 628 newSource('/c.dart', ''' |
629 library lib_c; | 629 library lib_c; |
630 class C1 {} | 630 class C1 {} |
631 class C2 {} | 631 class C2 {} |
632 class C3 {} | 632 class C3 {} |
633 '''); | 633 '''); |
634 _computeResult(sourceA, LIBRARY_ELEMENT4); | 634 computeResult(sourceA, LIBRARY_ELEMENT4); |
635 expect(task, new isInstanceOf<BuildExportNamespaceTask>()); | 635 expect(task, new isInstanceOf<BuildExportNamespaceTask>()); |
636 // validate | 636 // validate |
637 { | 637 { |
638 LibraryElement library = outputs[LIBRARY_ELEMENT4]; | 638 LibraryElement library = outputs[LIBRARY_ELEMENT4]; |
639 Namespace namespace = library.exportNamespace; | 639 Namespace namespace = library.exportNamespace; |
640 Iterable<String> definedKeys = namespace.definedNames.keys; | 640 Iterable<String> definedKeys = namespace.definedNames.keys; |
641 expect(definedKeys, unorderedEquals(['A1', 'A2', 'B2', 'B3'])); | 641 expect(definedKeys, unorderedEquals(['A1', 'A2', 'B2', 'B3'])); |
642 } | 642 } |
643 } | 643 } |
644 | 644 |
645 test_perform_showCombinator() { | 645 test_perform_showCombinator() { |
646 Source sourceA = newSource('/a.dart', ''' | 646 Source sourceA = newSource('/a.dart', ''' |
647 library lib_a; | 647 library lib_a; |
648 export 'b.dart' show B1; | 648 export 'b.dart' show B1; |
649 class A1 {} | 649 class A1 {} |
650 class A2 {} | 650 class A2 {} |
651 class _A3 {} | 651 class _A3 {} |
652 '''); | 652 '''); |
653 newSource('/b.dart', ''' | 653 newSource('/b.dart', ''' |
654 library lib_b; | 654 library lib_b; |
655 class B1 {} | 655 class B1 {} |
656 class B2 {} | 656 class B2 {} |
657 class _B3 {} | 657 class _B3 {} |
658 '''); | 658 '''); |
659 _computeResult(sourceA, LIBRARY_ELEMENT4); | 659 computeResult(sourceA, LIBRARY_ELEMENT4); |
660 expect(task, new isInstanceOf<BuildExportNamespaceTask>()); | 660 expect(task, new isInstanceOf<BuildExportNamespaceTask>()); |
661 // validate | 661 // validate |
662 { | 662 { |
663 LibraryElement library = outputs[LIBRARY_ELEMENT4]; | 663 LibraryElement library = outputs[LIBRARY_ELEMENT4]; |
664 Namespace namespace = library.exportNamespace; | 664 Namespace namespace = library.exportNamespace; |
665 Iterable<String> definedKeys = namespace.definedNames.keys; | 665 Iterable<String> definedKeys = namespace.definedNames.keys; |
666 expect(definedKeys, unorderedEquals(['A1', 'A2', 'B1'])); | 666 expect(definedKeys, unorderedEquals(['A1', 'A2', 'B1'])); |
667 } | 667 } |
668 } | 668 } |
669 | 669 |
670 test_perform_showCombinator_setter() { | 670 test_perform_showCombinator_setter() { |
671 Source sourceA = newSource('/a.dart', ''' | 671 Source sourceA = newSource('/a.dart', ''' |
672 library lib_a; | 672 library lib_a; |
673 export 'b.dart' show topLevelB; | 673 export 'b.dart' show topLevelB; |
674 class A {} | 674 class A {} |
675 '''); | 675 '''); |
676 newSource('/b.dart', ''' | 676 newSource('/b.dart', ''' |
677 library lib_b; | 677 library lib_b; |
678 int topLevelB; | 678 int topLevelB; |
679 '''); | 679 '''); |
680 _computeResult(sourceA, LIBRARY_ELEMENT4); | 680 computeResult(sourceA, LIBRARY_ELEMENT4); |
681 expect(task, new isInstanceOf<BuildExportNamespaceTask>()); | 681 expect(task, new isInstanceOf<BuildExportNamespaceTask>()); |
682 // validate | 682 // validate |
683 { | 683 { |
684 LibraryElement library = outputs[LIBRARY_ELEMENT4]; | 684 LibraryElement library = outputs[LIBRARY_ELEMENT4]; |
685 Namespace namespace = library.exportNamespace; | 685 Namespace namespace = library.exportNamespace; |
686 Iterable<String> definedKeys = namespace.definedNames.keys; | 686 Iterable<String> definedKeys = namespace.definedNames.keys; |
687 expect(definedKeys, unorderedEquals(['A', 'topLevelB', 'topLevelB='])); | 687 expect(definedKeys, unorderedEquals(['A', 'topLevelB', 'topLevelB='])); |
688 } | 688 } |
689 } | 689 } |
690 } | 690 } |
691 | 691 |
692 @reflectiveTest | 692 @reflectiveTest |
693 class BuildFunctionTypeAliasesTaskTest extends _AbstractDartTaskTest { | 693 class BuildFunctionTypeAliasesTaskTest extends _AbstractDartTaskTest { |
694 test_perform() { | 694 test_perform() { |
695 Source source = newSource('/test.dart', ''' | 695 Source source = newSource('/test.dart', ''' |
696 typedef int F(G g); | 696 typedef int F(G g); |
697 typedef String G(int p); | 697 typedef String G(int p); |
698 '''); | 698 '''); |
699 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 699 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
700 _computeResult(target, RESOLVED_UNIT3); | 700 computeResult(target, RESOLVED_UNIT3); |
701 expect(task, new isInstanceOf<BuildFunctionTypeAliasesTask>()); | 701 expect(task, new isInstanceOf<BuildFunctionTypeAliasesTask>()); |
702 // validate | 702 // validate |
703 CompilationUnit unit = outputs[RESOLVED_UNIT3]; | 703 CompilationUnit unit = outputs[RESOLVED_UNIT3]; |
704 FunctionTypeAlias nodeF = unit.declarations[0]; | 704 FunctionTypeAlias nodeF = unit.declarations[0]; |
705 FunctionTypeAlias nodeG = unit.declarations[1]; | 705 FunctionTypeAlias nodeG = unit.declarations[1]; |
706 { | 706 { |
707 FormalParameter parameter = nodeF.parameters.parameters[0]; | 707 FormalParameter parameter = nodeF.parameters.parameters[0]; |
708 DartType parameterType = parameter.element.type; | 708 DartType parameterType = parameter.element.type; |
709 Element returnTypeElement = nodeF.returnType.type.element; | 709 Element returnTypeElement = nodeF.returnType.type.element; |
710 expect(returnTypeElement.displayName, 'int'); | 710 expect(returnTypeElement.displayName, 'int'); |
711 expect(parameterType.element, nodeG.element); | 711 expect(parameterType.element, nodeG.element); |
712 } | 712 } |
713 { | 713 { |
714 FormalParameter parameter = nodeG.parameters.parameters[0]; | 714 FormalParameter parameter = nodeG.parameters.parameters[0]; |
715 DartType parameterType = parameter.element.type; | 715 DartType parameterType = parameter.element.type; |
716 expect(nodeG.returnType.type.element.displayName, 'String'); | 716 expect(nodeG.returnType.type.element.displayName, 'String'); |
717 expect(parameterType.element.displayName, 'int'); | 717 expect(parameterType.element.displayName, 'int'); |
718 } | 718 } |
719 } | 719 } |
720 | 720 |
721 test_perform_errors() { | 721 test_perform_errors() { |
722 Source source = newSource('/test.dart', ''' | 722 Source source = newSource('/test.dart', ''' |
723 typedef int F(NoSuchType p); | 723 typedef int F(NoSuchType p); |
724 '''); | 724 '''); |
725 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 725 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
726 _computeResult(target, BUILD_FUNCTION_TYPE_ALIASES_ERRORS); | 726 computeResult(target, BUILD_FUNCTION_TYPE_ALIASES_ERRORS); |
727 expect(task, new isInstanceOf<BuildFunctionTypeAliasesTask>()); | 727 expect(task, new isInstanceOf<BuildFunctionTypeAliasesTask>()); |
728 // validate | 728 // validate |
729 _fillErrorListener(BUILD_FUNCTION_TYPE_ALIASES_ERRORS); | 729 _fillErrorListener(BUILD_FUNCTION_TYPE_ALIASES_ERRORS); |
730 errorListener | 730 errorListener |
731 .assertErrorsWithCodes(<ErrorCode>[StaticWarningCode.UNDEFINED_CLASS]); | 731 .assertErrorsWithCodes(<ErrorCode>[StaticWarningCode.UNDEFINED_CLASS]); |
732 } | 732 } |
733 } | 733 } |
734 | 734 |
735 @reflectiveTest | 735 @reflectiveTest |
736 class BuildLibraryConstructorsTaskTest extends _AbstractDartTaskTest { | 736 class BuildLibraryConstructorsTaskTest extends _AbstractDartTaskTest { |
737 test_perform() { | 737 test_perform() { |
738 Source source = newSource('/test.dart', ''' | 738 Source source = newSource('/test.dart', ''' |
739 class B { | 739 class B { |
740 B(int i); | 740 B(int i); |
741 } | 741 } |
742 class M1 {} | 742 class M1 {} |
743 class M2 {} | 743 class M2 {} |
744 | 744 |
745 class C2 = C1 with M2; | 745 class C2 = C1 with M2; |
746 class C1 = B with M1; | 746 class C1 = B with M1; |
747 class C3 = B with M2; | 747 class C3 = B with M2; |
748 '''); | 748 '''); |
749 _computeResult(source, LIBRARY_ELEMENT6); | 749 computeResult(source, LIBRARY_ELEMENT6); |
750 expect(task, new isInstanceOf<BuildLibraryConstructorsTask>()); | 750 expect(task, new isInstanceOf<BuildLibraryConstructorsTask>()); |
751 LibraryElement libraryElement = outputs[LIBRARY_ELEMENT6]; | 751 LibraryElement libraryElement = outputs[LIBRARY_ELEMENT6]; |
752 // C1 | 752 // C1 |
753 { | 753 { |
754 ClassElement classElement = libraryElement.getType('C2'); | 754 ClassElement classElement = libraryElement.getType('C2'); |
755 List<ConstructorElement> constructors = classElement.constructors; | 755 List<ConstructorElement> constructors = classElement.constructors; |
756 expect(constructors, hasLength(1)); | 756 expect(constructors, hasLength(1)); |
757 expect(constructors[0].parameters, hasLength(1)); | 757 expect(constructors[0].parameters, hasLength(1)); |
758 } | 758 } |
759 // C3 | 759 // C3 |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1037 } | 1037 } |
1038 | 1038 |
1039 void _assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) { | 1039 void _assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) { |
1040 _fillErrorListener(BUILD_LIBRARY_ERRORS); | 1040 _fillErrorListener(BUILD_LIBRARY_ERRORS); |
1041 errorListener.assertErrorsWithCodes(expectedErrorCodes); | 1041 errorListener.assertErrorsWithCodes(expectedErrorCodes); |
1042 } | 1042 } |
1043 | 1043 |
1044 void _performBuildTask(Map<String, String> sourceMap) { | 1044 void _performBuildTask(Map<String, String> sourceMap) { |
1045 List<Source> sources = newSources(sourceMap); | 1045 List<Source> sources = newSources(sourceMap); |
1046 Source libSource = sources.first; | 1046 Source libSource = sources.first; |
1047 _computeResult(libSource, LIBRARY_ELEMENT1); | 1047 computeResult(libSource, LIBRARY_ELEMENT1); |
1048 expect(task, new isInstanceOf<BuildLibraryElementTask>()); | 1048 expect(task, new isInstanceOf<BuildLibraryElementTask>()); |
1049 libraryUnit = context | 1049 libraryUnit = context |
1050 .getCacheEntry(new LibrarySpecificUnit(libSource, libSource)) | 1050 .getCacheEntry(new LibrarySpecificUnit(libSource, libSource)) |
1051 .getValue(RESOLVED_UNIT1); | 1051 .getValue(RESOLVED_UNIT1); |
1052 libraryUnitElement = libraryUnit.element; | 1052 libraryUnitElement = libraryUnit.element; |
1053 librarySource = libraryUnitElement.source; | 1053 librarySource = libraryUnitElement.source; |
1054 libraryElement = outputs[LIBRARY_ELEMENT1]; | 1054 libraryElement = outputs[LIBRARY_ELEMENT1]; |
1055 partUnits = task.inputs[BuildLibraryElementTask.PARTS_UNIT_INPUT]; | 1055 partUnits = task.inputs[BuildLibraryElementTask.PARTS_UNIT_INPUT]; |
1056 } | 1056 } |
1057 } | 1057 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1100 part 'part.dart'; | 1100 part 'part.dart'; |
1101 a() {} | 1101 a() {} |
1102 _b() {} | 1102 _b() {} |
1103 ''', | 1103 ''', |
1104 '/part.dart': ''' | 1104 '/part.dart': ''' |
1105 part of lib; | 1105 part of lib; |
1106 _c() {} | 1106 _c() {} |
1107 d() {} | 1107 d() {} |
1108 ''' | 1108 ''' |
1109 }); | 1109 }); |
1110 _computeResult(sources.first, LIBRARY_ELEMENT3); | 1110 computeResult(sources.first, LIBRARY_ELEMENT3); |
1111 expect(task, new isInstanceOf<BuildPublicNamespaceTask>()); | 1111 expect(task, new isInstanceOf<BuildPublicNamespaceTask>()); |
1112 // validate | 1112 // validate |
1113 LibraryElement library = outputs[LIBRARY_ELEMENT3]; | 1113 LibraryElement library = outputs[LIBRARY_ELEMENT3]; |
1114 Namespace namespace = library.publicNamespace; | 1114 Namespace namespace = library.publicNamespace; |
1115 expect(namespace.definedNames.keys, unorderedEquals(['a', 'd'])); | 1115 expect(namespace.definedNames.keys, unorderedEquals(['a', 'd'])); |
1116 } | 1116 } |
1117 } | 1117 } |
1118 | 1118 |
1119 @reflectiveTest | 1119 @reflectiveTest |
1120 class BuildSourceClosuresTaskTest extends _AbstractDartTaskTest { | 1120 class BuildSourceClosuresTaskTest extends _AbstractDartTaskTest { |
1121 test_perform_exportClosure() { | 1121 test_perform_exportClosure() { |
1122 Source sourceA = newSource('/a.dart', ''' | 1122 Source sourceA = newSource('/a.dart', ''' |
1123 library lib_a; | 1123 library lib_a; |
1124 export 'b.dart'; | 1124 export 'b.dart'; |
1125 '''); | 1125 '''); |
1126 Source sourceB = newSource('/b.dart', ''' | 1126 Source sourceB = newSource('/b.dart', ''' |
1127 library lib_b; | 1127 library lib_b; |
1128 export 'c.dart'; | 1128 export 'c.dart'; |
1129 '''); | 1129 '''); |
1130 Source sourceC = newSource('/c.dart', ''' | 1130 Source sourceC = newSource('/c.dart', ''' |
1131 library lib_c; | 1131 library lib_c; |
1132 export 'a.dart'; | 1132 export 'a.dart'; |
1133 '''); | 1133 '''); |
1134 Source sourceD = newSource('/d.dart', ''' | 1134 Source sourceD = newSource('/d.dart', ''' |
1135 library lib_d; | 1135 library lib_d; |
1136 '''); | 1136 '''); |
1137 // a.dart | 1137 // a.dart |
1138 { | 1138 { |
1139 _computeResult(sourceA, EXPORT_SOURCE_CLOSURE); | 1139 computeResult(sourceA, EXPORT_SOURCE_CLOSURE); |
1140 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1140 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1141 List<Source> closure = outputs[EXPORT_SOURCE_CLOSURE]; | 1141 List<Source> closure = outputs[EXPORT_SOURCE_CLOSURE]; |
1142 expect(closure, unorderedEquals([sourceA, sourceB, sourceC])); | 1142 expect(closure, unorderedEquals([sourceA, sourceB, sourceC])); |
1143 } | 1143 } |
1144 // c.dart | 1144 // c.dart |
1145 { | 1145 { |
1146 _computeResult(sourceC, EXPORT_SOURCE_CLOSURE); | 1146 computeResult(sourceC, EXPORT_SOURCE_CLOSURE); |
1147 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1147 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1148 List<Source> closure = outputs[EXPORT_SOURCE_CLOSURE]; | 1148 List<Source> closure = outputs[EXPORT_SOURCE_CLOSURE]; |
1149 expect(closure, unorderedEquals([sourceA, sourceB, sourceC])); | 1149 expect(closure, unorderedEquals([sourceA, sourceB, sourceC])); |
1150 } | 1150 } |
1151 // d.dart | 1151 // d.dart |
1152 { | 1152 { |
1153 _computeResult(sourceD, EXPORT_SOURCE_CLOSURE); | 1153 computeResult(sourceD, EXPORT_SOURCE_CLOSURE); |
1154 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1154 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1155 List<Source> closure = outputs[EXPORT_SOURCE_CLOSURE]; | 1155 List<Source> closure = outputs[EXPORT_SOURCE_CLOSURE]; |
1156 expect(closure, unorderedEquals([sourceD])); | 1156 expect(closure, unorderedEquals([sourceD])); |
1157 } | 1157 } |
1158 } | 1158 } |
1159 | 1159 |
1160 test_perform_importClosure() { | 1160 test_perform_importClosure() { |
1161 Source sourceA = newSource('/a.dart', ''' | 1161 Source sourceA = newSource('/a.dart', ''' |
1162 library lib_a; | 1162 library lib_a; |
1163 import 'b.dart'; | 1163 import 'b.dart'; |
1164 '''); | 1164 '''); |
1165 Source sourceB = newSource('/b.dart', ''' | 1165 Source sourceB = newSource('/b.dart', ''' |
1166 library lib_b; | 1166 library lib_b; |
1167 import 'c.dart'; | 1167 import 'c.dart'; |
1168 '''); | 1168 '''); |
1169 Source sourceC = newSource('/c.dart', ''' | 1169 Source sourceC = newSource('/c.dart', ''' |
1170 library lib_c; | 1170 library lib_c; |
1171 import 'a.dart'; | 1171 import 'a.dart'; |
1172 '''); | 1172 '''); |
1173 Source sourceD = newSource('/d.dart', ''' | 1173 Source sourceD = newSource('/d.dart', ''' |
1174 library lib_d; | 1174 library lib_d; |
1175 '''); | 1175 '''); |
1176 Source coreSource = context.sourceFactory.resolveUri(null, 'dart:core'); | 1176 Source coreSource = context.sourceFactory.resolveUri(null, 'dart:core'); |
1177 // a.dart | 1177 // a.dart |
1178 { | 1178 { |
1179 _computeResult(sourceA, IMPORT_SOURCE_CLOSURE); | 1179 computeResult(sourceA, IMPORT_SOURCE_CLOSURE); |
1180 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1180 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1181 List<Source> closure = outputs[IMPORT_SOURCE_CLOSURE]; | 1181 List<Source> closure = outputs[IMPORT_SOURCE_CLOSURE]; |
1182 expect(closure, contains(sourceA)); | 1182 expect(closure, contains(sourceA)); |
1183 expect(closure, contains(sourceB)); | 1183 expect(closure, contains(sourceB)); |
1184 expect(closure, contains(sourceC)); | 1184 expect(closure, contains(sourceC)); |
1185 expect(closure, contains(coreSource)); | 1185 expect(closure, contains(coreSource)); |
1186 } | 1186 } |
1187 // c.dart | 1187 // c.dart |
1188 { | 1188 { |
1189 _computeResult(sourceC, IMPORT_SOURCE_CLOSURE); | 1189 computeResult(sourceC, IMPORT_SOURCE_CLOSURE); |
1190 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1190 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1191 List<Source> closure = outputs[IMPORT_SOURCE_CLOSURE]; | 1191 List<Source> closure = outputs[IMPORT_SOURCE_CLOSURE]; |
1192 expect(closure, contains(sourceA)); | 1192 expect(closure, contains(sourceA)); |
1193 expect(closure, contains(sourceB)); | 1193 expect(closure, contains(sourceB)); |
1194 expect(closure, contains(sourceC)); | 1194 expect(closure, contains(sourceC)); |
1195 expect(closure, contains(coreSource)); | 1195 expect(closure, contains(coreSource)); |
1196 } | 1196 } |
1197 // d.dart | 1197 // d.dart |
1198 { | 1198 { |
1199 _computeResult(sourceD, IMPORT_SOURCE_CLOSURE); | 1199 computeResult(sourceD, IMPORT_SOURCE_CLOSURE); |
1200 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1200 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1201 List<Source> closure = outputs[IMPORT_SOURCE_CLOSURE]; | 1201 List<Source> closure = outputs[IMPORT_SOURCE_CLOSURE]; |
1202 expect(closure, contains(sourceD)); | 1202 expect(closure, contains(sourceD)); |
1203 expect(closure, contains(coreSource)); | 1203 expect(closure, contains(coreSource)); |
1204 } | 1204 } |
1205 } | 1205 } |
1206 | 1206 |
1207 test_perform_importExportClosure() { | 1207 test_perform_importExportClosure() { |
1208 Source sourceA = newSource('/a.dart', ''' | 1208 Source sourceA = newSource('/a.dart', ''' |
1209 library lib_a; | 1209 library lib_a; |
1210 '''); | 1210 '''); |
1211 Source sourceB = newSource('/b.dart', ''' | 1211 Source sourceB = newSource('/b.dart', ''' |
1212 library lib_b; | 1212 library lib_b; |
1213 export 'a.dart'; | 1213 export 'a.dart'; |
1214 '''); | 1214 '''); |
1215 Source sourceC = newSource('/c.dart', ''' | 1215 Source sourceC = newSource('/c.dart', ''' |
1216 library lib_c; | 1216 library lib_c; |
1217 import 'b.dart'; | 1217 import 'b.dart'; |
1218 '''); | 1218 '''); |
1219 Source coreSource = context.sourceFactory.resolveUri(null, 'dart:core'); | 1219 Source coreSource = context.sourceFactory.resolveUri(null, 'dart:core'); |
1220 // c.dart | 1220 // c.dart |
1221 { | 1221 { |
1222 _computeResult(sourceC, IMPORT_EXPORT_SOURCE_CLOSURE); | 1222 computeResult(sourceC, IMPORT_EXPORT_SOURCE_CLOSURE); |
1223 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1223 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1224 List<Source> closure = outputs[IMPORT_EXPORT_SOURCE_CLOSURE]; | 1224 List<Source> closure = outputs[IMPORT_EXPORT_SOURCE_CLOSURE]; |
1225 expect(closure, contains(sourceA)); | 1225 expect(closure, contains(sourceA)); |
1226 expect(closure, contains(sourceB)); | 1226 expect(closure, contains(sourceB)); |
1227 expect(closure, contains(sourceC)); | 1227 expect(closure, contains(sourceC)); |
1228 expect(closure, contains(coreSource)); | 1228 expect(closure, contains(coreSource)); |
1229 } | 1229 } |
1230 // b.dart | 1230 // b.dart |
1231 { | 1231 { |
1232 _computeResult(sourceB, IMPORT_EXPORT_SOURCE_CLOSURE); | 1232 computeResult(sourceB, IMPORT_EXPORT_SOURCE_CLOSURE); |
1233 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1233 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1234 List<Source> closure = outputs[IMPORT_EXPORT_SOURCE_CLOSURE]; | 1234 List<Source> closure = outputs[IMPORT_EXPORT_SOURCE_CLOSURE]; |
1235 expect(closure, contains(sourceA)); | 1235 expect(closure, contains(sourceA)); |
1236 expect(closure, contains(sourceB)); | 1236 expect(closure, contains(sourceB)); |
1237 expect(closure, contains(coreSource)); | 1237 expect(closure, contains(coreSource)); |
1238 } | 1238 } |
1239 } | 1239 } |
1240 | 1240 |
1241 test_perform_isClient_false() { | 1241 test_perform_isClient_false() { |
1242 Source sourceA = newSource('/a.dart', ''' | 1242 Source sourceA = newSource('/a.dart', ''' |
1243 library lib_a; | 1243 library lib_a; |
1244 import 'b.dart'; | 1244 import 'b.dart'; |
1245 '''); | 1245 '''); |
1246 newSource('/b.dart', ''' | 1246 newSource('/b.dart', ''' |
1247 library lib_b; | 1247 library lib_b; |
1248 '''); | 1248 '''); |
1249 _computeResult(sourceA, IS_CLIENT); | 1249 computeResult(sourceA, IS_CLIENT); |
1250 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1250 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1251 expect(outputs[IS_CLIENT], isFalse); | 1251 expect(outputs[IS_CLIENT], isFalse); |
1252 } | 1252 } |
1253 | 1253 |
1254 test_perform_isClient_true_export_indirect() { | 1254 test_perform_isClient_true_export_indirect() { |
1255 newSource('/exports_html.dart', ''' | 1255 newSource('/exports_html.dart', ''' |
1256 library lib_exports_html; | 1256 library lib_exports_html; |
1257 export 'dart:html'; | 1257 export 'dart:html'; |
1258 '''); | 1258 '''); |
1259 Source source = newSource('/test.dart', ''' | 1259 Source source = newSource('/test.dart', ''' |
1260 import 'exports_html.dart'; | 1260 import 'exports_html.dart'; |
1261 '''); | 1261 '''); |
1262 _computeResult(source, IS_CLIENT); | 1262 computeResult(source, IS_CLIENT); |
1263 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1263 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1264 expect(outputs[IS_CLIENT], isTrue); | 1264 expect(outputs[IS_CLIENT], isTrue); |
1265 } | 1265 } |
1266 | 1266 |
1267 test_perform_isClient_true_import_direct() { | 1267 test_perform_isClient_true_import_direct() { |
1268 Source sourceA = newSource('/a.dart', ''' | 1268 Source sourceA = newSource('/a.dart', ''' |
1269 library lib_a; | 1269 library lib_a; |
1270 import 'dart:html'; | 1270 import 'dart:html'; |
1271 '''); | 1271 '''); |
1272 _computeResult(sourceA, IS_CLIENT); | 1272 computeResult(sourceA, IS_CLIENT); |
1273 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1273 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1274 expect(outputs[IS_CLIENT], isTrue); | 1274 expect(outputs[IS_CLIENT], isTrue); |
1275 } | 1275 } |
1276 | 1276 |
1277 test_perform_isClient_true_import_indirect() { | 1277 test_perform_isClient_true_import_indirect() { |
1278 Source sourceA = newSource('/a.dart', ''' | 1278 Source sourceA = newSource('/a.dart', ''' |
1279 library lib_a; | 1279 library lib_a; |
1280 import 'b.dart'; | 1280 import 'b.dart'; |
1281 '''); | 1281 '''); |
1282 newSource('/b.dart', ''' | 1282 newSource('/b.dart', ''' |
1283 library lib_b; | 1283 library lib_b; |
1284 import 'dart:html'; | 1284 import 'dart:html'; |
1285 '''); | 1285 '''); |
1286 _computeResult(sourceA, IS_CLIENT); | 1286 computeResult(sourceA, IS_CLIENT); |
1287 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); | 1287 expect(task, new isInstanceOf<BuildSourceClosuresTask>()); |
1288 expect(outputs[IS_CLIENT], isTrue); | 1288 expect(outputs[IS_CLIENT], isTrue); |
1289 } | 1289 } |
1290 } | 1290 } |
1291 | 1291 |
1292 @reflectiveTest | 1292 @reflectiveTest |
1293 class BuildTypeProviderTaskTest extends _AbstractDartTaskTest { | 1293 class BuildTypeProviderTaskTest extends _AbstractDartTaskTest { |
1294 test_perform() { | 1294 test_perform() { |
1295 _computeResult(AnalysisContextTarget.request, TYPE_PROVIDER); | 1295 computeResult(AnalysisContextTarget.request, TYPE_PROVIDER); |
1296 expect(task, new isInstanceOf<BuildTypeProviderTask>()); | 1296 expect(task, new isInstanceOf<BuildTypeProviderTask>()); |
1297 // validate | 1297 // validate |
1298 TypeProvider typeProvider = outputs[TYPE_PROVIDER]; | 1298 TypeProvider typeProvider = outputs[TYPE_PROVIDER]; |
1299 expect(typeProvider, isNotNull); | 1299 expect(typeProvider, isNotNull); |
1300 expect(typeProvider.boolType, isNotNull); | 1300 expect(typeProvider.boolType, isNotNull); |
1301 expect(typeProvider.intType, isNotNull); | 1301 expect(typeProvider.intType, isNotNull); |
1302 expect(typeProvider.futureType, isNotNull); | 1302 expect(typeProvider.futureType, isNotNull); |
1303 } | 1303 } |
1304 } | 1304 } |
1305 | 1305 |
(...skipping 12 matching lines...) Expand all Loading... |
1318 | 1318 |
1319 test_annotation_with_args() { | 1319 test_annotation_with_args() { |
1320 Source source = newSource('/test.dart', ''' | 1320 Source source = newSource('/test.dart', ''' |
1321 const x = 1; | 1321 const x = 1; |
1322 @D(x) class C {} | 1322 @D(x) class C {} |
1323 class D { const D(value); } | 1323 class D { const D(value); } |
1324 '''); | 1324 '''); |
1325 // First compute the resolved unit for the source. | 1325 // First compute the resolved unit for the source. |
1326 LibrarySpecificUnit librarySpecificUnit = | 1326 LibrarySpecificUnit librarySpecificUnit = |
1327 new LibrarySpecificUnit(source, source); | 1327 new LibrarySpecificUnit(source, source); |
1328 _computeResult(librarySpecificUnit, RESOLVED_UNIT1); | 1328 computeResult(librarySpecificUnit, RESOLVED_UNIT1); |
1329 CompilationUnit unit = outputs[RESOLVED_UNIT1]; | 1329 CompilationUnit unit = outputs[RESOLVED_UNIT1]; |
1330 // Find the elements for x and D's constructor, and the annotation on C. | 1330 // Find the elements for x and D's constructor, and the annotation on C. |
1331 List<PropertyAccessorElement> accessors = unit.element.accessors; | 1331 List<PropertyAccessorElement> accessors = unit.element.accessors; |
1332 Element x = accessors.firstWhere((PropertyAccessorElement accessor) => | 1332 Element x = accessors.firstWhere((PropertyAccessorElement accessor) => |
1333 accessor.isGetter && accessor.name == 'x').variable; | 1333 accessor.isGetter && accessor.name == 'x').variable; |
1334 List<ClassElement> types = unit.element.types; | 1334 List<ClassElement> types = unit.element.types; |
1335 Element constructorForD = | 1335 Element constructorForD = |
1336 types.firstWhere((ClassElement cls) => cls.name == 'D').constructors[0]; | 1336 types.firstWhere((ClassElement cls) => cls.name == 'D').constructors[0]; |
1337 Annotation annotation = findClassAnnotation(unit, 'C'); | 1337 Annotation annotation = findClassAnnotation(unit, 'C'); |
1338 // Now compute the dependencies for the annotation, and check that it is | 1338 // Now compute the dependencies for the annotation, and check that it is |
1339 // the set [x, constructorForD]. | 1339 // the set [x, constructorForD]. |
1340 // TODO(paulberry): test librarySource != source | 1340 // TODO(paulberry): test librarySource != source |
1341 _computeResult(new ConstantEvaluationTarget_Annotation( | 1341 computeResult(new ConstantEvaluationTarget_Annotation( |
1342 context, source, source, annotation), CONSTANT_DEPENDENCIES); | 1342 context, source, source, annotation), CONSTANT_DEPENDENCIES); |
1343 expect( | 1343 expect( |
1344 outputs[CONSTANT_DEPENDENCIES].toSet(), [x, constructorForD].toSet()); | 1344 outputs[CONSTANT_DEPENDENCIES].toSet(), [x, constructorForD].toSet()); |
1345 } | 1345 } |
1346 | 1346 |
1347 test_annotation_without_args() { | 1347 test_annotation_without_args() { |
1348 Source source = newSource('/test.dart', ''' | 1348 Source source = newSource('/test.dart', ''' |
1349 const x = 1; | 1349 const x = 1; |
1350 @x class C {} | 1350 @x class C {} |
1351 '''); | 1351 '''); |
1352 // First compute the resolved unit for the source. | 1352 // First compute the resolved unit for the source. |
1353 LibrarySpecificUnit librarySpecificUnit = | 1353 LibrarySpecificUnit librarySpecificUnit = |
1354 new LibrarySpecificUnit(source, source); | 1354 new LibrarySpecificUnit(source, source); |
1355 _computeResult(librarySpecificUnit, RESOLVED_UNIT1); | 1355 computeResult(librarySpecificUnit, RESOLVED_UNIT1); |
1356 CompilationUnit unit = outputs[RESOLVED_UNIT1]; | 1356 CompilationUnit unit = outputs[RESOLVED_UNIT1]; |
1357 // Find the element for x and the annotation on C. | 1357 // Find the element for x and the annotation on C. |
1358 List<PropertyAccessorElement> accessors = unit.element.accessors; | 1358 List<PropertyAccessorElement> accessors = unit.element.accessors; |
1359 Element x = accessors.firstWhere((PropertyAccessorElement accessor) => | 1359 Element x = accessors.firstWhere((PropertyAccessorElement accessor) => |
1360 accessor.isGetter && accessor.name == 'x').variable; | 1360 accessor.isGetter && accessor.name == 'x').variable; |
1361 Annotation annotation = findClassAnnotation(unit, 'C'); | 1361 Annotation annotation = findClassAnnotation(unit, 'C'); |
1362 // Now compute the dependencies for the annotation, and check that it is | 1362 // Now compute the dependencies for the annotation, and check that it is |
1363 // the list [x]. | 1363 // the list [x]. |
1364 _computeResult(new ConstantEvaluationTarget_Annotation( | 1364 computeResult(new ConstantEvaluationTarget_Annotation( |
1365 context, source, source, annotation), CONSTANT_DEPENDENCIES); | 1365 context, source, source, annotation), CONSTANT_DEPENDENCIES); |
1366 expect(outputs[CONSTANT_DEPENDENCIES], [x]); | 1366 expect(outputs[CONSTANT_DEPENDENCIES], [x]); |
1367 } | 1367 } |
1368 | 1368 |
1369 test_enumConstant() { | 1369 test_enumConstant() { |
1370 Source source = newSource('/test.dart', ''' | 1370 Source source = newSource('/test.dart', ''' |
1371 enum E {A, B, C} | 1371 enum E {A, B, C} |
1372 '''); | 1372 '''); |
1373 // First compute the resolved unit for the source. | 1373 // First compute the resolved unit for the source. |
1374 LibrarySpecificUnit librarySpecificUnit = | 1374 LibrarySpecificUnit librarySpecificUnit = |
1375 new LibrarySpecificUnit(source, source); | 1375 new LibrarySpecificUnit(source, source); |
1376 _computeResult(librarySpecificUnit, RESOLVED_UNIT2); | 1376 computeResult(librarySpecificUnit, RESOLVED_UNIT2); |
1377 CompilationUnit unit = outputs[RESOLVED_UNIT2]; | 1377 CompilationUnit unit = outputs[RESOLVED_UNIT2]; |
1378 // Find the element for 'A' | 1378 // Find the element for 'A' |
1379 EnumDeclaration enumDeclaration = unit.declarations[0]; | 1379 EnumDeclaration enumDeclaration = unit.declarations[0]; |
1380 EnumConstantDeclaration constantDeclaration = enumDeclaration.constants[0]; | 1380 EnumConstantDeclaration constantDeclaration = enumDeclaration.constants[0]; |
1381 FieldElement constantElement = constantDeclaration.element; | 1381 FieldElement constantElement = constantDeclaration.element; |
1382 // Now compute the dependencies for the constant and check that there are | 1382 // Now compute the dependencies for the constant and check that there are |
1383 // none. | 1383 // none. |
1384 _computeResult(constantElement, CONSTANT_DEPENDENCIES); | 1384 computeResult(constantElement, CONSTANT_DEPENDENCIES); |
1385 expect(outputs[CONSTANT_DEPENDENCIES], isEmpty); | 1385 expect(outputs[CONSTANT_DEPENDENCIES], isEmpty); |
1386 } | 1386 } |
1387 | 1387 |
1388 test_perform() { | 1388 test_perform() { |
1389 Source source = newSource('/test.dart', ''' | 1389 Source source = newSource('/test.dart', ''' |
1390 const x = y; | 1390 const x = y; |
1391 const y = 1; | 1391 const y = 1; |
1392 '''); | 1392 '''); |
1393 // First compute the resolved unit for the source. | 1393 // First compute the resolved unit for the source. |
1394 LibrarySpecificUnit librarySpecificUnit = | 1394 LibrarySpecificUnit librarySpecificUnit = |
1395 new LibrarySpecificUnit(source, source); | 1395 new LibrarySpecificUnit(source, source); |
1396 _computeResult(librarySpecificUnit, RESOLVED_UNIT1); | 1396 computeResult(librarySpecificUnit, RESOLVED_UNIT1); |
1397 CompilationUnit unit = outputs[RESOLVED_UNIT1]; | 1397 CompilationUnit unit = outputs[RESOLVED_UNIT1]; |
1398 // Find the elements for the constants x and y. | 1398 // Find the elements for the constants x and y. |
1399 List<PropertyAccessorElement> accessors = unit.element.accessors; | 1399 List<PropertyAccessorElement> accessors = unit.element.accessors; |
1400 Element x = accessors.firstWhere((PropertyAccessorElement accessor) => | 1400 Element x = accessors.firstWhere((PropertyAccessorElement accessor) => |
1401 accessor.isGetter && accessor.name == 'x').variable; | 1401 accessor.isGetter && accessor.name == 'x').variable; |
1402 Element y = accessors.firstWhere((PropertyAccessorElement accessor) => | 1402 Element y = accessors.firstWhere((PropertyAccessorElement accessor) => |
1403 accessor.isGetter && accessor.name == 'y').variable; | 1403 accessor.isGetter && accessor.name == 'y').variable; |
1404 // Now compute the dependencies for x, and check that it is the list [y]. | 1404 // Now compute the dependencies for x, and check that it is the list [y]. |
1405 _computeResult(x, CONSTANT_DEPENDENCIES); | 1405 computeResult(x, CONSTANT_DEPENDENCIES); |
1406 expect(outputs[CONSTANT_DEPENDENCIES], [y]); | 1406 expect(outputs[CONSTANT_DEPENDENCIES], [y]); |
1407 } | 1407 } |
1408 } | 1408 } |
1409 | 1409 |
1410 @reflectiveTest | 1410 @reflectiveTest |
1411 class ComputeConstantValueTaskTest extends _AbstractDartTaskTest { | 1411 class ComputeConstantValueTaskTest extends _AbstractDartTaskTest { |
1412 EvaluationResultImpl computeClassAnnotation( | 1412 EvaluationResultImpl computeClassAnnotation( |
1413 Source source, CompilationUnit unit, String className) { | 1413 Source source, CompilationUnit unit, String className) { |
1414 for (CompilationUnitMember member in unit.declarations) { | 1414 for (CompilationUnitMember member in unit.declarations) { |
1415 if (member is ClassDeclaration && member.name.name == className) { | 1415 if (member is ClassDeclaration && member.name.name == className) { |
1416 expect(member.metadata, hasLength(1)); | 1416 expect(member.metadata, hasLength(1)); |
1417 Annotation annotation = member.metadata[0]; | 1417 Annotation annotation = member.metadata[0]; |
1418 ConstantEvaluationTarget_Annotation target = | 1418 ConstantEvaluationTarget_Annotation target = |
1419 new ConstantEvaluationTarget_Annotation( | 1419 new ConstantEvaluationTarget_Annotation( |
1420 context, source, source, annotation); | 1420 context, source, source, annotation); |
1421 _computeResult(target, CONSTANT_VALUE); | 1421 computeResult(target, CONSTANT_VALUE); |
1422 expect(outputs[CONSTANT_VALUE], same(target)); | 1422 expect(outputs[CONSTANT_VALUE], same(target)); |
1423 EvaluationResultImpl evaluationResult = | 1423 EvaluationResultImpl evaluationResult = |
1424 (annotation.elementAnnotation as ElementAnnotationImpl).evaluationRe
sult; | 1424 (annotation.elementAnnotation as ElementAnnotationImpl).evaluationRe
sult; |
1425 return evaluationResult; | 1425 return evaluationResult; |
1426 } | 1426 } |
1427 } | 1427 } |
1428 fail('Annotation not found'); | 1428 fail('Annotation not found'); |
1429 return null; | 1429 return null; |
1430 } | 1430 } |
1431 | 1431 |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1581 EvaluationResultImpl _computeTopLevelVariableConstValue( | 1581 EvaluationResultImpl _computeTopLevelVariableConstValue( |
1582 String variableName, String content) { | 1582 String variableName, String content) { |
1583 return _evaluateConstant(_resolveUnit(content), variableName); | 1583 return _evaluateConstant(_resolveUnit(content), variableName); |
1584 } | 1584 } |
1585 | 1585 |
1586 EvaluationResultImpl _evaluateConstant( | 1586 EvaluationResultImpl _evaluateConstant( |
1587 CompilationUnit unit, String variableName) { | 1587 CompilationUnit unit, String variableName) { |
1588 // Find the element for the given constant. | 1588 // Find the element for the given constant. |
1589 PropertyInducingElement variableElement = _findVariable(unit, variableName); | 1589 PropertyInducingElement variableElement = _findVariable(unit, variableName); |
1590 // Now compute the value of the constant. | 1590 // Now compute the value of the constant. |
1591 _computeResult(variableElement, CONSTANT_VALUE); | 1591 computeResult(variableElement, CONSTANT_VALUE); |
1592 expect(outputs[CONSTANT_VALUE], same(variableElement)); | 1592 expect(outputs[CONSTANT_VALUE], same(variableElement)); |
1593 EvaluationResultImpl evaluationResult = | 1593 EvaluationResultImpl evaluationResult = |
1594 (variableElement as TopLevelVariableElementImpl).evaluationResult; | 1594 (variableElement as TopLevelVariableElementImpl).evaluationResult; |
1595 return evaluationResult; | 1595 return evaluationResult; |
1596 } | 1596 } |
1597 | 1597 |
1598 void _expectCircularityError(EvaluationResultImpl evaluationResult) { | 1598 void _expectCircularityError(EvaluationResultImpl evaluationResult) { |
1599 expect(evaluationResult, isNotNull); | 1599 expect(evaluationResult, isNotNull); |
1600 expect(evaluationResult.value, isNull); | 1600 expect(evaluationResult.value, isNull); |
1601 expect(evaluationResult.errors, hasLength(1)); | 1601 expect(evaluationResult.errors, hasLength(1)); |
1602 expect(evaluationResult.errors[0].errorCode, | 1602 expect(evaluationResult.errors[0].errorCode, |
1603 CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT); | 1603 CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT); |
1604 } | 1604 } |
1605 | 1605 |
1606 PropertyInducingElement _findVariable( | 1606 PropertyInducingElement _findVariable( |
1607 CompilationUnit unit, String variableName) { | 1607 CompilationUnit unit, String variableName) { |
1608 // Find the element for the given constant. | 1608 // Find the element for the given constant. |
1609 return unit.element.topLevelVariables.firstWhere( | 1609 return unit.element.topLevelVariables.firstWhere( |
1610 (TopLevelVariableElement variable) => variable.name == variableName); | 1610 (TopLevelVariableElement variable) => variable.name == variableName); |
1611 } | 1611 } |
1612 | 1612 |
1613 CompilationUnit _resolveSource(Source source) { | 1613 CompilationUnit _resolveSource(Source source) { |
1614 LibrarySpecificUnit librarySpecificUnit = | 1614 LibrarySpecificUnit librarySpecificUnit = |
1615 new LibrarySpecificUnit(source, source); | 1615 new LibrarySpecificUnit(source, source); |
1616 _computeResult(librarySpecificUnit, RESOLVED_UNIT1); | 1616 computeResult(librarySpecificUnit, RESOLVED_UNIT1); |
1617 CompilationUnit unit = outputs[RESOLVED_UNIT1]; | 1617 CompilationUnit unit = outputs[RESOLVED_UNIT1]; |
1618 return unit; | 1618 return unit; |
1619 } | 1619 } |
1620 | 1620 |
1621 CompilationUnit _resolveUnit(String content) => | 1621 CompilationUnit _resolveUnit(String content) => |
1622 _resolveSource(newSource('/test.dart', content)); | 1622 _resolveSource(newSource('/test.dart', content)); |
1623 } | 1623 } |
1624 | 1624 |
1625 @reflectiveTest | 1625 @reflectiveTest |
1626 class ContainingLibrariesTaskTest extends _AbstractDartTaskTest { | 1626 class ContainingLibrariesTaskTest extends _AbstractDartTaskTest { |
(...skipping 26 matching lines...) Expand all Loading... |
1653 expect(task.description, isNotNull); | 1653 expect(task.description, isNotNull); |
1654 } | 1654 } |
1655 | 1655 |
1656 test_descriptor() { | 1656 test_descriptor() { |
1657 TaskDescriptor descriptor = ContainingLibrariesTask.DESCRIPTOR; | 1657 TaskDescriptor descriptor = ContainingLibrariesTask.DESCRIPTOR; |
1658 expect(descriptor, isNotNull); | 1658 expect(descriptor, isNotNull); |
1659 } | 1659 } |
1660 | 1660 |
1661 test_perform_definingCompilationUnit() { | 1661 test_perform_definingCompilationUnit() { |
1662 AnalysisTarget library = newSource('/test.dart', 'library test;'); | 1662 AnalysisTarget library = newSource('/test.dart', 'library test;'); |
1663 _computeResult(library, INCLUDED_PARTS); | 1663 computeResult(library, INCLUDED_PARTS); |
1664 _computeResult(library, CONTAINING_LIBRARIES); | 1664 computeResult(library, CONTAINING_LIBRARIES); |
1665 expect(task, new isInstanceOf<ContainingLibrariesTask>()); | 1665 expect(task, new isInstanceOf<ContainingLibrariesTask>()); |
1666 expect(outputs, hasLength(1)); | 1666 expect(outputs, hasLength(1)); |
1667 List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES]; | 1667 List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES]; |
1668 expect(containingLibraries, unorderedEquals([library])); | 1668 expect(containingLibraries, unorderedEquals([library])); |
1669 } | 1669 } |
1670 | 1670 |
1671 test_perform_partInMultipleLibraries() { | 1671 test_perform_partInMultipleLibraries() { |
1672 AnalysisTarget library1 = | 1672 AnalysisTarget library1 = |
1673 newSource('/lib1.dart', 'library test; part "part.dart";'); | 1673 newSource('/lib1.dart', 'library test; part "part.dart";'); |
1674 AnalysisTarget library2 = | 1674 AnalysisTarget library2 = |
1675 newSource('/lib2.dart', 'library test; part "part.dart";'); | 1675 newSource('/lib2.dart', 'library test; part "part.dart";'); |
1676 AnalysisTarget part = newSource('/part.dart', 'part of test;'); | 1676 AnalysisTarget part = newSource('/part.dart', 'part of test;'); |
1677 _computeResult(library1, INCLUDED_PARTS); | 1677 computeResult(library1, INCLUDED_PARTS); |
1678 _computeResult(library2, INCLUDED_PARTS); | 1678 computeResult(library2, INCLUDED_PARTS); |
1679 _computeResult(part, SOURCE_KIND); | 1679 computeResult(part, SOURCE_KIND); |
1680 _computeResult(part, CONTAINING_LIBRARIES); | 1680 computeResult(part, CONTAINING_LIBRARIES); |
1681 expect(task, new isInstanceOf<ContainingLibrariesTask>()); | 1681 expect(task, new isInstanceOf<ContainingLibrariesTask>()); |
1682 expect(outputs, hasLength(1)); | 1682 expect(outputs, hasLength(1)); |
1683 List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES]; | 1683 List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES]; |
1684 expect(containingLibraries, unorderedEquals([library1, library2])); | 1684 expect(containingLibraries, unorderedEquals([library1, library2])); |
1685 } | 1685 } |
1686 | 1686 |
1687 test_perform_partInSingleLibrary() { | 1687 test_perform_partInSingleLibrary() { |
1688 AnalysisTarget library = | 1688 AnalysisTarget library = |
1689 newSource('/lib.dart', 'library test; part "part.dart";'); | 1689 newSource('/lib.dart', 'library test; part "part.dart";'); |
1690 AnalysisTarget part = newSource('/part.dart', 'part of test;'); | 1690 AnalysisTarget part = newSource('/part.dart', 'part of test;'); |
1691 _computeResult(library, INCLUDED_PARTS); | 1691 computeResult(library, INCLUDED_PARTS); |
1692 _computeResult(part, SOURCE_KIND); | 1692 computeResult(part, SOURCE_KIND); |
1693 _computeResult(part, CONTAINING_LIBRARIES); | 1693 computeResult(part, CONTAINING_LIBRARIES); |
1694 expect(task, new isInstanceOf<ContainingLibrariesTask>()); | 1694 expect(task, new isInstanceOf<ContainingLibrariesTask>()); |
1695 expect(outputs, hasLength(1)); | 1695 expect(outputs, hasLength(1)); |
1696 List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES]; | 1696 List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES]; |
1697 expect(containingLibraries, unorderedEquals([library])); | 1697 expect(containingLibraries, unorderedEquals([library])); |
1698 } | 1698 } |
1699 } | 1699 } |
1700 | 1700 |
1701 @reflectiveTest | 1701 @reflectiveTest |
1702 class DartErrorsTaskTest extends _AbstractDartTaskTest { | 1702 class DartErrorsTaskTest extends _AbstractDartTaskTest { |
1703 test_buildInputs() { | 1703 test_buildInputs() { |
(...skipping 28 matching lines...) Expand all Loading... |
1732 } | 1732 } |
1733 | 1733 |
1734 test_descriptor() { | 1734 test_descriptor() { |
1735 TaskDescriptor descriptor = DartErrorsTask.DESCRIPTOR; | 1735 TaskDescriptor descriptor = DartErrorsTask.DESCRIPTOR; |
1736 expect(descriptor, isNotNull); | 1736 expect(descriptor, isNotNull); |
1737 } | 1737 } |
1738 | 1738 |
1739 test_perform_definingCompilationUnit() { | 1739 test_perform_definingCompilationUnit() { |
1740 AnalysisTarget library = | 1740 AnalysisTarget library = |
1741 newSource('/test.dart', 'library test; import "dart:math";'); | 1741 newSource('/test.dart', 'library test; import "dart:math";'); |
1742 _computeResult(library, INCLUDED_PARTS); | 1742 computeResult(library, INCLUDED_PARTS); |
1743 _computeResult(library, DART_ERRORS); | 1743 computeResult(library, DART_ERRORS); |
1744 expect(task, new isInstanceOf<DartErrorsTask>()); | 1744 expect(task, new isInstanceOf<DartErrorsTask>()); |
1745 expect(outputs, hasLength(1)); | 1745 expect(outputs, hasLength(1)); |
1746 List<AnalysisError> errors = outputs[DART_ERRORS]; | 1746 List<AnalysisError> errors = outputs[DART_ERRORS]; |
1747 expect(errors, hasLength(1)); | 1747 expect(errors, hasLength(1)); |
1748 } | 1748 } |
1749 | 1749 |
1750 test_perform_partInSingleLibrary() { | 1750 test_perform_partInSingleLibrary() { |
1751 AnalysisTarget library = newSource( | 1751 AnalysisTarget library = newSource( |
1752 '/lib.dart', 'library test; import "dart:math"; part "part.dart";'); | 1752 '/lib.dart', 'library test; import "dart:math"; part "part.dart";'); |
1753 AnalysisTarget part = | 1753 AnalysisTarget part = |
1754 newSource('/part.dart', 'part of test; class A extends A {}'); | 1754 newSource('/part.dart', 'part of test; class A extends A {}'); |
1755 _computeResult(library, INCLUDED_PARTS); | 1755 computeResult(library, INCLUDED_PARTS); |
1756 _computeResult(library, DART_ERRORS); | 1756 computeResult(library, DART_ERRORS); |
1757 _computeResult(part, DART_ERRORS); | 1757 computeResult(part, DART_ERRORS); |
1758 expect(task, new isInstanceOf<DartErrorsTask>()); | 1758 expect(task, new isInstanceOf<DartErrorsTask>()); |
1759 expect(outputs, hasLength(1)); | 1759 expect(outputs, hasLength(1)); |
1760 List<AnalysisError> errors = outputs[DART_ERRORS]; | 1760 List<AnalysisError> errors = outputs[DART_ERRORS]; |
1761 // This should contain only the errors in the part file, not the ones in the | 1761 // This should contain only the errors in the part file, not the ones in the |
1762 // library. | 1762 // library. |
1763 expect(errors, hasLength(1)); | 1763 expect(errors, hasLength(1)); |
1764 } | 1764 } |
1765 } | 1765 } |
1766 | 1766 |
1767 @reflectiveTest | 1767 @reflectiveTest |
1768 class EvaluateUnitConstantsTaskTest extends _AbstractDartTaskTest { | 1768 class EvaluateUnitConstantsTaskTest extends _AbstractDartTaskTest { |
1769 test_perform() { | 1769 test_perform() { |
1770 Source source = newSource('/test.dart', ''' | 1770 Source source = newSource('/test.dart', ''' |
1771 class C { | 1771 class C { |
1772 const C(); | 1772 const C(); |
1773 } | 1773 } |
1774 | 1774 |
1775 @x | 1775 @x |
1776 f() {} | 1776 f() {} |
1777 | 1777 |
1778 const x = const C(); | 1778 const x = const C(); |
1779 '''); | 1779 '''); |
1780 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1780 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1781 _computeResult(target, RESOLVED_UNIT); | 1781 computeResult(target, RESOLVED_UNIT); |
1782 expect(task, new isInstanceOf<EvaluateUnitConstantsTask>()); | 1782 expect(task, new isInstanceOf<EvaluateUnitConstantsTask>()); |
1783 CompilationUnit unit = outputs[RESOLVED_UNIT]; | 1783 CompilationUnit unit = outputs[RESOLVED_UNIT]; |
1784 CompilationUnitElement unitElement = unit.element; | 1784 CompilationUnitElement unitElement = unit.element; |
1785 expect((unitElement.types[0].constructors[ | 1785 expect((unitElement.types[0].constructors[ |
1786 0] as ConstructorElementImpl).isCycleFree, isTrue); | 1786 0] as ConstructorElementImpl).isCycleFree, isTrue); |
1787 expect((unitElement.functions[0].metadata[ | 1787 expect((unitElement.functions[0].metadata[ |
1788 0] as ElementAnnotationImpl).evaluationResult, isNotNull); | 1788 0] as ElementAnnotationImpl).evaluationResult, isNotNull); |
1789 expect((unitElement.topLevelVariables[ | 1789 expect((unitElement.topLevelVariables[ |
1790 0] as TopLevelVariableElementImpl).evaluationResult, isNotNull); | 1790 0] as TopLevelVariableElementImpl).evaluationResult, isNotNull); |
1791 } | 1791 } |
(...skipping 19 matching lines...) Expand all Loading... |
1811 main() { | 1811 main() { |
1812 new A(); | 1812 new A(); |
1813 }'''); | 1813 }'''); |
1814 _computeUsedElements(source); | 1814 _computeUsedElements(source); |
1815 // validate | 1815 // validate |
1816 expect(usedElementNames, unorderedEquals(['A'])); | 1816 expect(usedElementNames, unorderedEquals(['A'])); |
1817 } | 1817 } |
1818 | 1818 |
1819 void _computeUsedElements(Source source) { | 1819 void _computeUsedElements(Source source) { |
1820 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1820 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1821 _computeResult(target, USED_IMPORTED_ELEMENTS); | 1821 computeResult(target, USED_IMPORTED_ELEMENTS); |
1822 expect(task, new isInstanceOf<GatherUsedImportedElementsTask>()); | 1822 expect(task, new isInstanceOf<GatherUsedImportedElementsTask>()); |
1823 usedElements = outputs[USED_IMPORTED_ELEMENTS]; | 1823 usedElements = outputs[USED_IMPORTED_ELEMENTS]; |
1824 usedElementNames = usedElements.elements.map((e) => e.name).toSet(); | 1824 usedElementNames = usedElements.elements.map((e) => e.name).toSet(); |
1825 } | 1825 } |
1826 } | 1826 } |
1827 | 1827 |
1828 @reflectiveTest | 1828 @reflectiveTest |
1829 class GatherUsedLocalElementsTaskTest extends _AbstractDartTaskTest { | 1829 class GatherUsedLocalElementsTaskTest extends _AbstractDartTaskTest { |
1830 UsedLocalElements usedElements; | 1830 UsedLocalElements usedElements; |
1831 Set<String> usedElementNames; | 1831 Set<String> usedElementNames; |
(...skipping 23 matching lines...) Expand all Loading... |
1855 } | 1855 } |
1856 '''); | 1856 '''); |
1857 _computeUsedElements(source); | 1857 _computeUsedElements(source); |
1858 // validate | 1858 // validate |
1859 expect(usedElementNames, unorderedEquals(['A', 'a', 'p', '_m2'])); | 1859 expect(usedElementNames, unorderedEquals(['A', 'a', 'p', '_m2'])); |
1860 expect(usedElements.members, unorderedEquals(['_m2', '_m3'])); | 1860 expect(usedElements.members, unorderedEquals(['_m2', '_m3'])); |
1861 } | 1861 } |
1862 | 1862 |
1863 void _computeUsedElements(Source source) { | 1863 void _computeUsedElements(Source source) { |
1864 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1864 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1865 _computeResult(target, USED_LOCAL_ELEMENTS); | 1865 computeResult(target, USED_LOCAL_ELEMENTS); |
1866 expect(task, new isInstanceOf<GatherUsedLocalElementsTask>()); | 1866 expect(task, new isInstanceOf<GatherUsedLocalElementsTask>()); |
1867 usedElements = outputs[USED_LOCAL_ELEMENTS]; | 1867 usedElements = outputs[USED_LOCAL_ELEMENTS]; |
1868 usedElementNames = usedElements.elements.map((e) => e.name).toSet(); | 1868 usedElementNames = usedElements.elements.map((e) => e.name).toSet(); |
1869 } | 1869 } |
1870 } | 1870 } |
1871 | 1871 |
1872 @reflectiveTest | 1872 @reflectiveTest |
1873 class GenerateHintsTaskTest extends _AbstractDartTaskTest { | 1873 class GenerateHintsTaskTest extends _AbstractDartTaskTest { |
1874 test_perform_bestPractices_missingReturn() { | 1874 test_perform_bestPractices_missingReturn() { |
1875 Source source = newSource('/test.dart', ''' | 1875 Source source = newSource('/test.dart', ''' |
1876 int main() { | 1876 int main() { |
1877 } | 1877 } |
1878 '''); | 1878 '''); |
1879 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1879 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1880 _computeResult(target, HINTS); | 1880 computeResult(target, HINTS); |
1881 expect(task, new isInstanceOf<GenerateHintsTask>()); | 1881 expect(task, new isInstanceOf<GenerateHintsTask>()); |
1882 // validate | 1882 // validate |
1883 _fillErrorListener(HINTS); | 1883 _fillErrorListener(HINTS); |
1884 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.MISSING_RETURN]); | 1884 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.MISSING_RETURN]); |
1885 } | 1885 } |
1886 | 1886 |
1887 test_perform_dart2js() { | 1887 test_perform_dart2js() { |
1888 Source source = newSource('/test.dart', ''' | 1888 Source source = newSource('/test.dart', ''' |
1889 main(p) { | 1889 main(p) { |
1890 if (p is double) { | 1890 if (p is double) { |
1891 print('double'); | 1891 print('double'); |
1892 } | 1892 } |
1893 } | 1893 } |
1894 '''); | 1894 '''); |
1895 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1895 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1896 _computeResult(target, HINTS); | 1896 computeResult(target, HINTS); |
1897 expect(task, new isInstanceOf<GenerateHintsTask>()); | 1897 expect(task, new isInstanceOf<GenerateHintsTask>()); |
1898 // validate | 1898 // validate |
1899 _fillErrorListener(HINTS); | 1899 _fillErrorListener(HINTS); |
1900 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.IS_DOUBLE]); | 1900 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.IS_DOUBLE]); |
1901 } | 1901 } |
1902 | 1902 |
1903 test_perform_deadCode() { | 1903 test_perform_deadCode() { |
1904 Source source = newSource('/test.dart', ''' | 1904 Source source = newSource('/test.dart', ''' |
1905 main() { | 1905 main() { |
1906 if (false) { | 1906 if (false) { |
1907 print('how?'); | 1907 print('how?'); |
1908 } | 1908 } |
1909 } | 1909 } |
1910 '''); | 1910 '''); |
1911 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1911 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1912 _computeResult(target, HINTS); | 1912 computeResult(target, HINTS); |
1913 expect(task, new isInstanceOf<GenerateHintsTask>()); | 1913 expect(task, new isInstanceOf<GenerateHintsTask>()); |
1914 // validate | 1914 // validate |
1915 _fillErrorListener(HINTS); | 1915 _fillErrorListener(HINTS); |
1916 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.DEAD_CODE]); | 1916 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.DEAD_CODE]); |
1917 } | 1917 } |
1918 | 1918 |
1919 test_perform_disabled() { | 1919 test_perform_disabled() { |
1920 context.analysisOptions = | 1920 context.analysisOptions = |
1921 new AnalysisOptionsImpl.from(context.analysisOptions)..hint = false; | 1921 new AnalysisOptionsImpl.from(context.analysisOptions)..hint = false; |
1922 Source source = newSource('/test.dart', ''' | 1922 Source source = newSource('/test.dart', ''' |
1923 int main() { | 1923 int main() { |
1924 } | 1924 } |
1925 '''); | 1925 '''); |
1926 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1926 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1927 _computeResult(target, HINTS); | 1927 computeResult(target, HINTS); |
1928 expect(task, new isInstanceOf<GenerateHintsTask>()); | 1928 expect(task, new isInstanceOf<GenerateHintsTask>()); |
1929 // validate | 1929 // validate |
1930 _fillErrorListener(HINTS); | 1930 _fillErrorListener(HINTS); |
1931 errorListener.assertNoErrors(); | 1931 errorListener.assertNoErrors(); |
1932 } | 1932 } |
1933 | 1933 |
1934 test_perform_imports_duplicateImport() { | 1934 test_perform_imports_duplicateImport() { |
1935 newSource('/a.dart', r''' | 1935 newSource('/a.dart', r''' |
1936 library lib_a; | 1936 library lib_a; |
1937 class A {} | 1937 class A {} |
1938 '''); | 1938 '''); |
1939 Source source = newSource('/test.dart', r''' | 1939 Source source = newSource('/test.dart', r''' |
1940 import 'a.dart'; | 1940 import 'a.dart'; |
1941 import 'a.dart'; | 1941 import 'a.dart'; |
1942 main() { | 1942 main() { |
1943 new A(); | 1943 new A(); |
1944 } | 1944 } |
1945 '''); | 1945 '''); |
1946 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1946 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1947 _computeResult(target, HINTS); | 1947 computeResult(target, HINTS); |
1948 expect(task, new isInstanceOf<GenerateHintsTask>()); | 1948 expect(task, new isInstanceOf<GenerateHintsTask>()); |
1949 // validate | 1949 // validate |
1950 _fillErrorListener(HINTS); | 1950 _fillErrorListener(HINTS); |
1951 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.DUPLICATE_IMPORT]); | 1951 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.DUPLICATE_IMPORT]); |
1952 } | 1952 } |
1953 | 1953 |
1954 test_perform_imports_unusedImport_one() { | 1954 test_perform_imports_unusedImport_one() { |
1955 newSource('/a.dart', r''' | 1955 newSource('/a.dart', r''' |
1956 library lib_a; | 1956 library lib_a; |
1957 class A {} | 1957 class A {} |
1958 '''); | 1958 '''); |
1959 newSource('/b.dart', r''' | 1959 newSource('/b.dart', r''' |
1960 library lib_b; | 1960 library lib_b; |
1961 class B {} | 1961 class B {} |
1962 '''); | 1962 '''); |
1963 Source source = newSource('/test.dart', r''' | 1963 Source source = newSource('/test.dart', r''' |
1964 import 'a.dart'; | 1964 import 'a.dart'; |
1965 import 'b.dart'; | 1965 import 'b.dart'; |
1966 main() { | 1966 main() { |
1967 new A(); | 1967 new A(); |
1968 }'''); | 1968 }'''); |
1969 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1969 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1970 _computeResult(target, HINTS); | 1970 computeResult(target, HINTS); |
1971 expect(task, new isInstanceOf<GenerateHintsTask>()); | 1971 expect(task, new isInstanceOf<GenerateHintsTask>()); |
1972 // validate | 1972 // validate |
1973 _fillErrorListener(HINTS); | 1973 _fillErrorListener(HINTS); |
1974 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.UNUSED_IMPORT]); | 1974 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.UNUSED_IMPORT]); |
1975 } | 1975 } |
1976 | 1976 |
1977 test_perform_imports_unusedImport_zero() { | 1977 test_perform_imports_unusedImport_zero() { |
1978 newSource('/a.dart', r''' | 1978 newSource('/a.dart', r''' |
1979 library lib_a; | 1979 library lib_a; |
1980 class A {} | 1980 class A {} |
1981 '''); | 1981 '''); |
1982 Source source = newSource('/test.dart', r''' | 1982 Source source = newSource('/test.dart', r''' |
1983 import 'a.dart'; | 1983 import 'a.dart'; |
1984 main() { | 1984 main() { |
1985 new A(); | 1985 new A(); |
1986 }'''); | 1986 }'''); |
1987 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 1987 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
1988 _computeResult(target, HINTS); | 1988 computeResult(target, HINTS); |
1989 expect(task, new isInstanceOf<GenerateHintsTask>()); | 1989 expect(task, new isInstanceOf<GenerateHintsTask>()); |
1990 // validate | 1990 // validate |
1991 _fillErrorListener(HINTS); | 1991 _fillErrorListener(HINTS); |
1992 errorListener.assertNoErrors(); | 1992 errorListener.assertNoErrors(); |
1993 } | 1993 } |
1994 | 1994 |
1995 test_perform_overrideVerifier() { | 1995 test_perform_overrideVerifier() { |
1996 Source source = newSource('/test.dart', ''' | 1996 Source source = newSource('/test.dart', ''' |
1997 class A {} | 1997 class A {} |
1998 class B { | 1998 class B { |
1999 @override | 1999 @override |
2000 m() {} | 2000 m() {} |
2001 } | 2001 } |
2002 '''); | 2002 '''); |
2003 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2003 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2004 _computeResult(target, HINTS); | 2004 computeResult(target, HINTS); |
2005 expect(task, new isInstanceOf<GenerateHintsTask>()); | 2005 expect(task, new isInstanceOf<GenerateHintsTask>()); |
2006 // validate | 2006 // validate |
2007 _fillErrorListener(HINTS); | 2007 _fillErrorListener(HINTS); |
2008 errorListener.assertErrorsWithCodes( | 2008 errorListener.assertErrorsWithCodes( |
2009 <ErrorCode>[HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD]); | 2009 <ErrorCode>[HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD]); |
2010 } | 2010 } |
2011 | 2011 |
2012 test_perform_todo() { | 2012 test_perform_todo() { |
2013 Source source = newSource('/test.dart', ''' | 2013 Source source = newSource('/test.dart', ''' |
2014 main() { | 2014 main() { |
2015 // TODO(developer) foo bar | 2015 // TODO(developer) foo bar |
2016 } | 2016 } |
2017 '''); | 2017 '''); |
2018 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2018 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2019 _computeResult(target, HINTS); | 2019 computeResult(target, HINTS); |
2020 expect(task, new isInstanceOf<GenerateHintsTask>()); | 2020 expect(task, new isInstanceOf<GenerateHintsTask>()); |
2021 // validate | 2021 // validate |
2022 _fillErrorListener(HINTS); | 2022 _fillErrorListener(HINTS); |
2023 errorListener.assertErrorsWithCodes(<ErrorCode>[TodoCode.TODO]); | 2023 errorListener.assertErrorsWithCodes(<ErrorCode>[TodoCode.TODO]); |
2024 } | 2024 } |
2025 | 2025 |
2026 test_perform_unusedLocalElements_class() { | 2026 test_perform_unusedLocalElements_class() { |
2027 Source source = newSource('/test.dart', ''' | 2027 Source source = newSource('/test.dart', ''' |
2028 class _A {} | 2028 class _A {} |
2029 class _B {} | 2029 class _B {} |
2030 main() { | 2030 main() { |
2031 new _A(); | 2031 new _A(); |
2032 } | 2032 } |
2033 '''); | 2033 '''); |
2034 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2034 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2035 _computeResult(target, HINTS); | 2035 computeResult(target, HINTS); |
2036 expect(task, new isInstanceOf<GenerateHintsTask>()); | 2036 expect(task, new isInstanceOf<GenerateHintsTask>()); |
2037 // validate | 2037 // validate |
2038 _fillErrorListener(HINTS); | 2038 _fillErrorListener(HINTS); |
2039 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.UNUSED_ELEMENT]); | 2039 errorListener.assertErrorsWithCodes(<ErrorCode>[HintCode.UNUSED_ELEMENT]); |
2040 } | 2040 } |
2041 | 2041 |
2042 test_perform_unusedLocalElements_localVariable() { | 2042 test_perform_unusedLocalElements_localVariable() { |
2043 Source source = newSource('/test.dart', ''' | 2043 Source source = newSource('/test.dart', ''' |
2044 main() { | 2044 main() { |
2045 var v = 42; | 2045 var v = 42; |
2046 } | 2046 } |
2047 '''); | 2047 '''); |
2048 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2048 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2049 _computeResult(target, HINTS); | 2049 computeResult(target, HINTS); |
2050 expect(task, new isInstanceOf<GenerateHintsTask>()); | 2050 expect(task, new isInstanceOf<GenerateHintsTask>()); |
2051 // validate | 2051 // validate |
2052 _fillErrorListener(HINTS); | 2052 _fillErrorListener(HINTS); |
2053 errorListener | 2053 errorListener |
2054 .assertErrorsWithCodes(<ErrorCode>[HintCode.UNUSED_LOCAL_VARIABLE]); | 2054 .assertErrorsWithCodes(<ErrorCode>[HintCode.UNUSED_LOCAL_VARIABLE]); |
2055 } | 2055 } |
2056 | 2056 |
2057 test_perform_unusedLocalElements_method() { | 2057 test_perform_unusedLocalElements_method() { |
2058 Source source = newSource('/my_lib.dart', ''' | 2058 Source source = newSource('/my_lib.dart', ''' |
2059 library my_lib; | 2059 library my_lib; |
2060 part 'my_part.dart'; | 2060 part 'my_part.dart'; |
2061 class A { | 2061 class A { |
2062 _ma() {} | 2062 _ma() {} |
2063 _mb() {} | 2063 _mb() {} |
2064 _mc() {} | 2064 _mc() {} |
2065 } | 2065 } |
2066 '''); | 2066 '''); |
2067 newSource('/my_part.dart', ''' | 2067 newSource('/my_part.dart', ''' |
2068 part of my_lib; | 2068 part of my_lib; |
2069 | 2069 |
2070 f(A a) { | 2070 f(A a) { |
2071 a._mb(); | 2071 a._mb(); |
2072 } | 2072 } |
2073 '''); | 2073 '''); |
2074 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2074 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2075 _computeResult(target, HINTS); | 2075 computeResult(target, HINTS); |
2076 expect(task, new isInstanceOf<GenerateHintsTask>()); | 2076 expect(task, new isInstanceOf<GenerateHintsTask>()); |
2077 // validate | 2077 // validate |
2078 _fillErrorListener(HINTS); | 2078 _fillErrorListener(HINTS); |
2079 errorListener.assertErrorsWithCodes( | 2079 errorListener.assertErrorsWithCodes( |
2080 <ErrorCode>[HintCode.UNUSED_ELEMENT, HintCode.UNUSED_ELEMENT]); | 2080 <ErrorCode>[HintCode.UNUSED_ELEMENT, HintCode.UNUSED_ELEMENT]); |
2081 } | 2081 } |
2082 } | 2082 } |
2083 | 2083 |
2084 @reflectiveTest | 2084 @reflectiveTest |
2085 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { | 2085 class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest { |
2086 test_perform() { | 2086 test_perform() { |
2087 Source library = newSource('/lib.dart', r''' | 2087 Source library = newSource('/lib.dart', r''' |
2088 library lib; | 2088 library lib; |
2089 part 'part1.dart'; | 2089 part 'part1.dart'; |
2090 part 'part2.dart'; | 2090 part 'part2.dart'; |
2091 X v1; | 2091 X v1; |
2092 '''); | 2092 '''); |
2093 Source part1 = newSource('/part1.dart', r''' | 2093 Source part1 = newSource('/part1.dart', r''' |
2094 part of lib; | 2094 part of lib; |
2095 X v2; | 2095 X v2; |
2096 '''); | 2096 '''); |
2097 Source part2 = newSource('/part2.dart', r''' | 2097 Source part2 = newSource('/part2.dart', r''' |
2098 part of lib; | 2098 part of lib; |
2099 X v3; | 2099 X v3; |
2100 '''); | 2100 '''); |
2101 _computeResult(library, LIBRARY_ERRORS_READY); | 2101 computeResult(library, LIBRARY_ERRORS_READY); |
2102 expect(task, new isInstanceOf<LibraryErrorsReadyTask>()); | 2102 expect(task, new isInstanceOf<LibraryErrorsReadyTask>()); |
2103 expect(outputs, hasLength(1)); | 2103 expect(outputs, hasLength(1)); |
2104 bool ready = outputs[LIBRARY_ERRORS_READY]; | 2104 bool ready = outputs[LIBRARY_ERRORS_READY]; |
2105 expect(ready, isTrue); | 2105 expect(ready, isTrue); |
2106 expect(context.getErrors(library).errors, hasLength(1)); | 2106 expect(context.getErrors(library).errors, hasLength(1)); |
2107 expect(context.getErrors(part1).errors, hasLength(1)); | 2107 expect(context.getErrors(part1).errors, hasLength(1)); |
2108 expect(context.getErrors(part2).errors, hasLength(1)); | 2108 expect(context.getErrors(part2).errors, hasLength(1)); |
2109 } | 2109 } |
2110 } | 2110 } |
2111 | 2111 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2148 } | 2148 } |
2149 | 2149 |
2150 test_descriptor() { | 2150 test_descriptor() { |
2151 TaskDescriptor descriptor = LibraryUnitErrorsTask.DESCRIPTOR; | 2151 TaskDescriptor descriptor = LibraryUnitErrorsTask.DESCRIPTOR; |
2152 expect(descriptor, isNotNull); | 2152 expect(descriptor, isNotNull); |
2153 } | 2153 } |
2154 | 2154 |
2155 test_perform_definingCompilationUnit() { | 2155 test_perform_definingCompilationUnit() { |
2156 AnalysisTarget library = | 2156 AnalysisTarget library = |
2157 newSource('/test.dart', 'library test; import "dart:math";'); | 2157 newSource('/test.dart', 'library test; import "dart:math";'); |
2158 _computeResult( | 2158 computeResult( |
2159 new LibrarySpecificUnit(library, library), LIBRARY_UNIT_ERRORS); | 2159 new LibrarySpecificUnit(library, library), LIBRARY_UNIT_ERRORS); |
2160 expect(task, new isInstanceOf<LibraryUnitErrorsTask>()); | 2160 expect(task, new isInstanceOf<LibraryUnitErrorsTask>()); |
2161 expect(outputs, hasLength(1)); | 2161 expect(outputs, hasLength(1)); |
2162 List<AnalysisError> errors = outputs[LIBRARY_UNIT_ERRORS]; | 2162 List<AnalysisError> errors = outputs[LIBRARY_UNIT_ERRORS]; |
2163 expect(errors, hasLength(1)); | 2163 expect(errors, hasLength(1)); |
2164 } | 2164 } |
2165 | 2165 |
2166 test_perform_partInSingleLibrary() { | 2166 test_perform_partInSingleLibrary() { |
2167 AnalysisTarget library = | 2167 AnalysisTarget library = |
2168 newSource('/lib.dart', 'library test; part "part.dart";'); | 2168 newSource('/lib.dart', 'library test; part "part.dart";'); |
2169 AnalysisTarget part = newSource('/part.dart', 'part of test;'); | 2169 AnalysisTarget part = newSource('/part.dart', 'part of test;'); |
2170 _computeResult(new LibrarySpecificUnit(library, part), LIBRARY_UNIT_ERRORS); | 2170 computeResult(new LibrarySpecificUnit(library, part), LIBRARY_UNIT_ERRORS); |
2171 expect(task, new isInstanceOf<LibraryUnitErrorsTask>()); | 2171 expect(task, new isInstanceOf<LibraryUnitErrorsTask>()); |
2172 expect(outputs, hasLength(1)); | 2172 expect(outputs, hasLength(1)); |
2173 List<AnalysisError> errors = outputs[LIBRARY_UNIT_ERRORS]; | 2173 List<AnalysisError> errors = outputs[LIBRARY_UNIT_ERRORS]; |
2174 expect(errors, hasLength(0)); | 2174 expect(errors, hasLength(0)); |
2175 } | 2175 } |
2176 } | 2176 } |
2177 | 2177 |
2178 @reflectiveTest | 2178 @reflectiveTest |
2179 class ParseDartTaskTest extends _AbstractDartTaskTest { | 2179 class ParseDartTaskTest extends _AbstractDartTaskTest { |
2180 test_buildInputs() { | 2180 test_buildInputs() { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2221 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); | 2221 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); |
2222 expect(outputs[INCLUDED_PARTS], hasLength(0)); | 2222 expect(outputs[INCLUDED_PARTS], hasLength(0)); |
2223 expect(outputs[PARSE_ERRORS], hasLength(0)); | 2223 expect(outputs[PARSE_ERRORS], hasLength(0)); |
2224 expect(outputs[PARSED_UNIT], isNotNull); | 2224 expect(outputs[PARSED_UNIT], isNotNull); |
2225 expect(outputs[SOURCE_KIND], SourceKind.PART); | 2225 expect(outputs[SOURCE_KIND], SourceKind.PART); |
2226 expect(outputs[UNITS], hasLength(1)); | 2226 expect(outputs[UNITS], hasLength(1)); |
2227 } | 2227 } |
2228 | 2228 |
2229 test_perform_computeSourceKind_noDirectives_hasContainingLibrary() { | 2229 test_perform_computeSourceKind_noDirectives_hasContainingLibrary() { |
2230 // Parse "lib.dart" to let the context know that "test.dart" is included. | 2230 // Parse "lib.dart" to let the context know that "test.dart" is included. |
2231 _computeResult(newSource('/lib.dart', r''' | 2231 computeResult(newSource('/lib.dart', r''' |
2232 library lib; | 2232 library lib; |
2233 part 'test.dart'; | 2233 part 'test.dart'; |
2234 '''), PARSED_UNIT); | 2234 '''), PARSED_UNIT); |
2235 // If there are no the "part of" directive, then it is not a part. | 2235 // If there are no the "part of" directive, then it is not a part. |
2236 _performParseTask(''); | 2236 _performParseTask(''); |
2237 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); | 2237 expect(outputs[SOURCE_KIND], SourceKind.LIBRARY); |
2238 } | 2238 } |
2239 | 2239 |
2240 test_perform_computeSourceKind_noDirectives_noContainingLibrary() { | 2240 test_perform_computeSourceKind_noDirectives_noContainingLibrary() { |
2241 _performParseTask(''); | 2241 _performParseTask(''); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2302 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); | 2302 _assertHasCore(outputs[IMPORTED_LIBRARIES], 1); |
2303 expect(outputs[INCLUDED_PARTS], hasLength(0)); | 2303 expect(outputs[INCLUDED_PARTS], hasLength(0)); |
2304 expect(outputs[PARSE_ERRORS], hasLength(0)); | 2304 expect(outputs[PARSE_ERRORS], hasLength(0)); |
2305 expect(outputs[PARSED_UNIT], isNotNull); | 2305 expect(outputs[PARSED_UNIT], isNotNull); |
2306 expect(outputs[SOURCE_KIND], SourceKind.PART); | 2306 expect(outputs[SOURCE_KIND], SourceKind.PART); |
2307 expect(outputs[UNITS], hasLength(1)); | 2307 expect(outputs[UNITS], hasLength(1)); |
2308 } | 2308 } |
2309 | 2309 |
2310 void _performParseTask(String content) { | 2310 void _performParseTask(String content) { |
2311 AnalysisTarget target = newSource('/test.dart', content); | 2311 AnalysisTarget target = newSource('/test.dart', content); |
2312 _computeResult(target, PARSED_UNIT); | 2312 computeResult(target, PARSED_UNIT); |
2313 expect(task, new isInstanceOf<ParseDartTask>()); | 2313 expect(task, new isInstanceOf<ParseDartTask>()); |
2314 } | 2314 } |
2315 | 2315 |
2316 static void _assertHasCore(List<Source> sources, int lenght) { | 2316 static void _assertHasCore(List<Source> sources, int lenght) { |
2317 expect(sources, hasLength(lenght)); | 2317 expect(sources, hasLength(lenght)); |
2318 expect(sources, contains(predicate((Source s) { | 2318 expect(sources, contains(predicate((Source s) { |
2319 return s.fullName.endsWith('core.dart'); | 2319 return s.fullName.endsWith('core.dart'); |
2320 }))); | 2320 }))); |
2321 } | 2321 } |
2322 } | 2322 } |
2323 | 2323 |
2324 @reflectiveTest | 2324 @reflectiveTest |
2325 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { | 2325 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest { |
2326 test_perform() { | 2326 test_perform() { |
2327 Source sourceLib = newSource('/my_lib.dart', ''' | 2327 Source sourceLib = newSource('/my_lib.dart', ''' |
2328 library my_lib; | 2328 library my_lib; |
2329 part 'my_part.dart'; | 2329 part 'my_part.dart'; |
2330 class A {} | 2330 class A {} |
2331 class B extends A {} | 2331 class B extends A {} |
2332 '''); | 2332 '''); |
2333 newSource('/my_part.dart', ''' | 2333 newSource('/my_part.dart', ''' |
2334 part of my_lib; | 2334 part of my_lib; |
2335 class C extends A {} | 2335 class C extends A {} |
2336 '''); | 2336 '''); |
2337 _computeResult(sourceLib, LIBRARY_ELEMENT5); | 2337 computeResult(sourceLib, LIBRARY_ELEMENT5); |
2338 expect(task, new isInstanceOf<ResolveLibraryTypeNamesTask>()); | 2338 expect(task, new isInstanceOf<ResolveLibraryTypeNamesTask>()); |
2339 // validate | 2339 // validate |
2340 LibraryElement library = outputs[LIBRARY_ELEMENT5]; | 2340 LibraryElement library = outputs[LIBRARY_ELEMENT5]; |
2341 { | 2341 { |
2342 ClassElement classB = library.getType('B'); | 2342 ClassElement classB = library.getType('B'); |
2343 expect(classB.supertype.displayName, 'A'); | 2343 expect(classB.supertype.displayName, 'A'); |
2344 } | 2344 } |
2345 { | 2345 { |
2346 ClassElement classC = library.getType('C'); | 2346 ClassElement classC = library.getType('C'); |
2347 expect(classC.supertype.displayName, 'A'); | 2347 expect(classC.supertype.displayName, 'A'); |
(...skipping 13 matching lines...) Expand all Loading... |
2361 class B extends B2 {} | 2361 class B extends B2 {} |
2362 '''); | 2362 '''); |
2363 newSource('/b2.dart', ''' | 2363 newSource('/b2.dart', ''' |
2364 part of b; | 2364 part of b; |
2365 class B2 extends C {} | 2365 class B2 extends C {} |
2366 '''); | 2366 '''); |
2367 newSource('/c.dart', ''' | 2367 newSource('/c.dart', ''' |
2368 library c; | 2368 library c; |
2369 class C {} | 2369 class C {} |
2370 '''); | 2370 '''); |
2371 _computeResult(sourceA, LIBRARY_ELEMENT5); | 2371 computeResult(sourceA, LIBRARY_ELEMENT5); |
2372 expect(task, new isInstanceOf<ResolveLibraryTypeNamesTask>()); | 2372 expect(task, new isInstanceOf<ResolveLibraryTypeNamesTask>()); |
2373 // validate | 2373 // validate |
2374 LibraryElement library = outputs[LIBRARY_ELEMENT5]; | 2374 LibraryElement library = outputs[LIBRARY_ELEMENT5]; |
2375 { | 2375 { |
2376 ClassElement clazz = library.getType('A'); | 2376 ClassElement clazz = library.getType('A'); |
2377 expect(clazz.displayName, 'A'); | 2377 expect(clazz.displayName, 'A'); |
2378 clazz = clazz.supertype.element; | 2378 clazz = clazz.supertype.element; |
2379 expect(clazz.displayName, 'B'); | 2379 expect(clazz.displayName, 'B'); |
2380 clazz = clazz.supertype.element; | 2380 clazz = clazz.supertype.element; |
2381 expect(clazz.displayName, 'B2'); | 2381 expect(clazz.displayName, 'B2'); |
(...skipping 12 matching lines...) Expand all Loading... |
2394 Source source = newSource('/test.dart', ''' | 2394 Source source = newSource('/test.dart', ''' |
2395 class A { | 2395 class A { |
2396 m() {} | 2396 m() {} |
2397 } | 2397 } |
2398 main(A a) { | 2398 main(A a) { |
2399 a.m(); | 2399 a.m(); |
2400 } | 2400 } |
2401 '''); | 2401 '''); |
2402 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2402 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2403 // prepare unit and "a.m()" invocation | 2403 // prepare unit and "a.m()" invocation |
2404 _computeResult(target, RESOLVED_UNIT6); | 2404 computeResult(target, RESOLVED_UNIT6); |
2405 CompilationUnit unit = outputs[RESOLVED_UNIT6]; | 2405 CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
2406 // walk the AST | 2406 // walk the AST |
2407 FunctionDeclaration function = unit.declarations[1]; | 2407 FunctionDeclaration function = unit.declarations[1]; |
2408 BlockFunctionBody body = function.functionExpression.body; | 2408 BlockFunctionBody body = function.functionExpression.body; |
2409 ExpressionStatement statement = body.block.statements[0]; | 2409 ExpressionStatement statement = body.block.statements[0]; |
2410 MethodInvocation invocation = statement.expression; | 2410 MethodInvocation invocation = statement.expression; |
2411 expect(task, new isInstanceOf<ResolveUnitReferencesTask>()); | 2411 expect(task, new isInstanceOf<ResolveUnitReferencesTask>()); |
2412 expect(unit, same(outputs[RESOLVED_UNIT6])); | 2412 expect(unit, same(outputs[RESOLVED_UNIT6])); |
2413 // a.m() is resolved now | 2413 // a.m() is resolved now |
2414 expect(invocation.methodName.staticElement, isNotNull); | 2414 expect(invocation.methodName.staticElement, isNotNull); |
2415 } | 2415 } |
2416 | 2416 |
2417 test_perform_errors() { | 2417 test_perform_errors() { |
2418 Source source = newSource('/test.dart', ''' | 2418 Source source = newSource('/test.dart', ''' |
2419 class A { | 2419 class A { |
2420 } | 2420 } |
2421 main(A a) { | 2421 main(A a) { |
2422 a.unknownMethod(); | 2422 a.unknownMethod(); |
2423 } | 2423 } |
2424 '''); | 2424 '''); |
2425 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2425 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2426 _computeResult(target, RESOLVED_UNIT6); | 2426 computeResult(target, RESOLVED_UNIT6); |
2427 expect(task, new isInstanceOf<ResolveUnitReferencesTask>()); | 2427 expect(task, new isInstanceOf<ResolveUnitReferencesTask>()); |
2428 // validate | 2428 // validate |
2429 _fillErrorListener(RESOLVE_REFERENCES_ERRORS); | 2429 _fillErrorListener(RESOLVE_REFERENCES_ERRORS); |
2430 errorListener.assertErrorsWithCodes( | 2430 errorListener.assertErrorsWithCodes( |
2431 <ErrorCode>[StaticTypeWarningCode.UNDEFINED_METHOD]); | 2431 <ErrorCode>[StaticTypeWarningCode.UNDEFINED_METHOD]); |
2432 } | 2432 } |
2433 | 2433 |
2434 test_perform_importExport() { | 2434 test_perform_importExport() { |
2435 newSource('/a.dart', ''' | 2435 newSource('/a.dart', ''' |
2436 library a; | 2436 library a; |
2437 class A<T> { | 2437 class A<T> { |
2438 T m() {} | 2438 T m() {} |
2439 } | 2439 } |
2440 '''); | 2440 '''); |
2441 newSource('/b.dart', ''' | 2441 newSource('/b.dart', ''' |
2442 library b; | 2442 library b; |
2443 export 'a.dart'; | 2443 export 'a.dart'; |
2444 '''); | 2444 '''); |
2445 Source sourceC = newSource('/c.dart', ''' | 2445 Source sourceC = newSource('/c.dart', ''' |
2446 library c; | 2446 library c; |
2447 import 'b.dart'; | 2447 import 'b.dart'; |
2448 main() { | 2448 main() { |
2449 new A<int>().m(); | 2449 new A<int>().m(); |
2450 } | 2450 } |
2451 '''); | 2451 '''); |
2452 _computeResult(new LibrarySpecificUnit(sourceC, sourceC), RESOLVED_UNIT6); | 2452 computeResult(new LibrarySpecificUnit(sourceC, sourceC), RESOLVED_UNIT6); |
2453 expect(task, new isInstanceOf<ResolveUnitReferencesTask>()); | 2453 expect(task, new isInstanceOf<ResolveUnitReferencesTask>()); |
2454 // validate | 2454 // validate |
2455 CompilationUnit unit = outputs[RESOLVED_UNIT6]; | 2455 CompilationUnit unit = outputs[RESOLVED_UNIT6]; |
2456 expect(unit, isNotNull); | 2456 expect(unit, isNotNull); |
2457 { | 2457 { |
2458 FunctionDeclaration functionDeclaration = unit.declarations[0]; | 2458 FunctionDeclaration functionDeclaration = unit.declarations[0]; |
2459 BlockFunctionBody body = functionDeclaration.functionExpression.body; | 2459 BlockFunctionBody body = functionDeclaration.functionExpression.body; |
2460 List<Statement> statements = body.block.statements; | 2460 List<Statement> statements = body.block.statements; |
2461 ExpressionStatement statement = statements[0]; | 2461 ExpressionStatement statement = statements[0]; |
2462 MethodInvocation invocation = statement.expression; | 2462 MethodInvocation invocation = statement.expression; |
2463 MethodElement methodElement = invocation.methodName.staticElement; | 2463 MethodElement methodElement = invocation.methodName.staticElement; |
2464 expect(methodElement, isNotNull); | 2464 expect(methodElement, isNotNull); |
2465 expect(methodElement.type, isNotNull); | 2465 expect(methodElement.type, isNotNull); |
2466 expect(methodElement.returnType.toString(), 'int'); | 2466 expect(methodElement.returnType.toString(), 'int'); |
2467 } | 2467 } |
2468 } | 2468 } |
2469 } | 2469 } |
2470 | 2470 |
2471 @reflectiveTest | 2471 @reflectiveTest |
2472 class ResolveUnitTypeNamesTaskTest extends _AbstractDartTaskTest { | 2472 class ResolveUnitTypeNamesTaskTest extends _AbstractDartTaskTest { |
2473 test_perform() { | 2473 test_perform() { |
2474 Source source = newSource('/test.dart', ''' | 2474 Source source = newSource('/test.dart', ''' |
2475 class A {} | 2475 class A {} |
2476 class B extends A {} | 2476 class B extends A {} |
2477 int f(String p) => p.length; | 2477 int f(String p) => p.length; |
2478 '''); | 2478 '''); |
2479 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2479 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2480 _computeResult(target, RESOLVED_UNIT4); | 2480 computeResult(target, RESOLVED_UNIT4); |
2481 expect(task, new isInstanceOf<ResolveUnitTypeNamesTask>()); | 2481 expect(task, new isInstanceOf<ResolveUnitTypeNamesTask>()); |
2482 // validate | 2482 // validate |
2483 CompilationUnit unit = outputs[RESOLVED_UNIT4]; | 2483 CompilationUnit unit = outputs[RESOLVED_UNIT4]; |
2484 { | 2484 { |
2485 ClassDeclaration nodeA = unit.declarations[0]; | 2485 ClassDeclaration nodeA = unit.declarations[0]; |
2486 ClassDeclaration nodeB = unit.declarations[1]; | 2486 ClassDeclaration nodeB = unit.declarations[1]; |
2487 DartType extendsType = nodeB.extendsClause.superclass.type; | 2487 DartType extendsType = nodeB.extendsClause.superclass.type; |
2488 expect(extendsType, nodeA.element.type); | 2488 expect(extendsType, nodeA.element.type); |
2489 } | 2489 } |
2490 { | 2490 { |
2491 FunctionDeclaration functionNode = unit.declarations[2]; | 2491 FunctionDeclaration functionNode = unit.declarations[2]; |
2492 DartType returnType = functionNode.returnType.type; | 2492 DartType returnType = functionNode.returnType.type; |
2493 List<FormalParameter> parameters = | 2493 List<FormalParameter> parameters = |
2494 functionNode.functionExpression.parameters.parameters; | 2494 functionNode.functionExpression.parameters.parameters; |
2495 expect(returnType.displayName, 'int'); | 2495 expect(returnType.displayName, 'int'); |
2496 expect(parameters[0].element.type.displayName, 'String'); | 2496 expect(parameters[0].element.type.displayName, 'String'); |
2497 } | 2497 } |
2498 } | 2498 } |
2499 | 2499 |
2500 test_perform_errors() { | 2500 test_perform_errors() { |
2501 Source source = newSource('/test.dart', ''' | 2501 Source source = newSource('/test.dart', ''' |
2502 NoSuchClass f() => null; | 2502 NoSuchClass f() => null; |
2503 '''); | 2503 '''); |
2504 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2504 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2505 _computeResult(target, RESOLVE_TYPE_NAMES_ERRORS); | 2505 computeResult(target, RESOLVE_TYPE_NAMES_ERRORS); |
2506 expect(task, new isInstanceOf<ResolveUnitTypeNamesTask>()); | 2506 expect(task, new isInstanceOf<ResolveUnitTypeNamesTask>()); |
2507 // validate | 2507 // validate |
2508 _fillErrorListener(RESOLVE_TYPE_NAMES_ERRORS); | 2508 _fillErrorListener(RESOLVE_TYPE_NAMES_ERRORS); |
2509 errorListener | 2509 errorListener |
2510 .assertErrorsWithCodes(<ErrorCode>[StaticWarningCode.UNDEFINED_CLASS]); | 2510 .assertErrorsWithCodes(<ErrorCode>[StaticWarningCode.UNDEFINED_CLASS]); |
2511 } | 2511 } |
2512 } | 2512 } |
2513 | 2513 |
2514 @reflectiveTest | 2514 @reflectiveTest |
2515 class ResolveVariableReferencesTaskTest extends _AbstractDartTaskTest { | 2515 class ResolveVariableReferencesTaskTest extends _AbstractDartTaskTest { |
2516 /** | 2516 /** |
2517 * Verify that the mutated states of the given [variable] correspond to the | 2517 * Verify that the mutated states of the given [variable] correspond to the |
2518 * [mutatedInClosure] and [mutatedInScope] matchers. | 2518 * [mutatedInClosure] and [mutatedInScope] matchers. |
2519 */ | 2519 */ |
2520 void expectMutated(VariableElement variable, Matcher mutatedInClosure, | 2520 void expectMutated(VariableElement variable, Matcher mutatedInClosure, |
2521 Matcher mutatedInScope) { | 2521 Matcher mutatedInScope) { |
2522 expect(variable.isPotentiallyMutatedInClosure, mutatedInClosure); | 2522 expect(variable.isPotentiallyMutatedInClosure, mutatedInClosure); |
2523 expect(variable.isPotentiallyMutatedInScope, mutatedInScope); | 2523 expect(variable.isPotentiallyMutatedInScope, mutatedInScope); |
2524 } | 2524 } |
2525 | 2525 |
2526 test_perform_buildClosureLibraryElements() { | 2526 test_perform_buildClosureLibraryElements() { |
2527 Source source = newSource('/test.dart', ''' | 2527 Source source = newSource('/test.dart', ''' |
2528 main() { | 2528 main() { |
2529 } | 2529 } |
2530 '''); | 2530 '''); |
2531 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2531 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2532 _computeResult(target, RESOLVED_UNIT5); | 2532 computeResult(target, RESOLVED_UNIT5); |
2533 expect(task, new isInstanceOf<ResolveVariableReferencesTask>()); | 2533 expect(task, new isInstanceOf<ResolveVariableReferencesTask>()); |
2534 } | 2534 } |
2535 | 2535 |
2536 test_perform_local() { | 2536 test_perform_local() { |
2537 Source source = newSource('/test.dart', ''' | 2537 Source source = newSource('/test.dart', ''' |
2538 main() { | 2538 main() { |
2539 var v1 = 1; | 2539 var v1 = 1; |
2540 var v2 = 1; | 2540 var v2 = 1; |
2541 var v3 = 1; | 2541 var v3 = 1; |
2542 var v4 = 1; | 2542 var v4 = 1; |
2543 v2 = 2; | 2543 v2 = 2; |
2544 v4 = 2; | 2544 v4 = 2; |
2545 localFunction() { | 2545 localFunction() { |
2546 v3 = 3; | 2546 v3 = 3; |
2547 v4 = 3; | 2547 v4 = 3; |
2548 } | 2548 } |
2549 } | 2549 } |
2550 '''); | 2550 '''); |
2551 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2551 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2552 _computeResult(target, RESOLVED_UNIT5); | 2552 computeResult(target, RESOLVED_UNIT5); |
2553 expect(task, new isInstanceOf<ResolveVariableReferencesTask>()); | 2553 expect(task, new isInstanceOf<ResolveVariableReferencesTask>()); |
2554 // validate | 2554 // validate |
2555 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2555 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2556 FunctionElement main = unit.element.functions[0]; | 2556 FunctionElement main = unit.element.functions[0]; |
2557 expectMutated(main.localVariables[0], isFalse, isFalse); | 2557 expectMutated(main.localVariables[0], isFalse, isFalse); |
2558 expectMutated(main.localVariables[1], isFalse, isTrue); | 2558 expectMutated(main.localVariables[1], isFalse, isTrue); |
2559 expectMutated(main.localVariables[2], isTrue, isTrue); | 2559 expectMutated(main.localVariables[2], isTrue, isTrue); |
2560 expectMutated(main.localVariables[3], isTrue, isTrue); | 2560 expectMutated(main.localVariables[3], isTrue, isTrue); |
2561 } | 2561 } |
2562 | 2562 |
2563 test_perform_parameter() { | 2563 test_perform_parameter() { |
2564 Source source = newSource('/test.dart', ''' | 2564 Source source = newSource('/test.dart', ''' |
2565 main(p1, p2, p3, p4) { | 2565 main(p1, p2, p3, p4) { |
2566 p2 = 2; | 2566 p2 = 2; |
2567 p4 = 2; | 2567 p4 = 2; |
2568 localFunction() { | 2568 localFunction() { |
2569 p3 = 3; | 2569 p3 = 3; |
2570 p4 = 3; | 2570 p4 = 3; |
2571 } | 2571 } |
2572 } | 2572 } |
2573 '''); | 2573 '''); |
2574 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2574 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2575 _computeResult(target, RESOLVED_UNIT5); | 2575 computeResult(target, RESOLVED_UNIT5); |
2576 expect(task, new isInstanceOf<ResolveVariableReferencesTask>()); | 2576 expect(task, new isInstanceOf<ResolveVariableReferencesTask>()); |
2577 // validate | 2577 // validate |
2578 CompilationUnit unit = outputs[RESOLVED_UNIT5]; | 2578 CompilationUnit unit = outputs[RESOLVED_UNIT5]; |
2579 FunctionElement main = unit.element.functions[0]; | 2579 FunctionElement main = unit.element.functions[0]; |
2580 expectMutated(main.parameters[0], isFalse, isFalse); | 2580 expectMutated(main.parameters[0], isFalse, isFalse); |
2581 expectMutated(main.parameters[1], isFalse, isTrue); | 2581 expectMutated(main.parameters[1], isFalse, isTrue); |
2582 expectMutated(main.parameters[2], isTrue, isTrue); | 2582 expectMutated(main.parameters[2], isTrue, isTrue); |
2583 expectMutated(main.parameters[3], isTrue, isTrue); | 2583 expectMutated(main.parameters[3], isTrue, isTrue); |
2584 } | 2584 } |
2585 } | 2585 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2627 test_perform_noErrors() { | 2627 test_perform_noErrors() { |
2628 _performScanTask('class A {}'); | 2628 _performScanTask('class A {}'); |
2629 expect(outputs, hasLength(3)); | 2629 expect(outputs, hasLength(3)); |
2630 expect(outputs[LINE_INFO], isNotNull); | 2630 expect(outputs[LINE_INFO], isNotNull); |
2631 expect(outputs[SCAN_ERRORS], hasLength(0)); | 2631 expect(outputs[SCAN_ERRORS], hasLength(0)); |
2632 expect(outputs[TOKEN_STREAM], isNotNull); | 2632 expect(outputs[TOKEN_STREAM], isNotNull); |
2633 } | 2633 } |
2634 | 2634 |
2635 void _performScanTask(String content) { | 2635 void _performScanTask(String content) { |
2636 AnalysisTarget target = newSource('/test.dart', content); | 2636 AnalysisTarget target = newSource('/test.dart', content); |
2637 _computeResult(target, TOKEN_STREAM); | 2637 computeResult(target, TOKEN_STREAM); |
2638 expect(task, new isInstanceOf<ScanDartTask>()); | 2638 expect(task, new isInstanceOf<ScanDartTask>()); |
2639 } | 2639 } |
2640 } | 2640 } |
2641 | 2641 |
2642 @reflectiveTest | 2642 @reflectiveTest |
2643 class VerifyUnitTaskTest extends _AbstractDartTaskTest { | 2643 class VerifyUnitTaskTest extends _AbstractDartTaskTest { |
2644 test_perform_constantError() { | 2644 test_perform_constantError() { |
2645 Source source = newSource('/test.dart', ''' | 2645 Source source = newSource('/test.dart', ''' |
2646 main(int p) { | 2646 main(int p) { |
2647 const v = p; | 2647 const v = p; |
2648 } | 2648 } |
2649 '''); | 2649 '''); |
2650 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2650 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2651 _computeResult(target, VERIFY_ERRORS); | 2651 computeResult(target, VERIFY_ERRORS); |
2652 expect(task, new isInstanceOf<VerifyUnitTask>()); | 2652 expect(task, new isInstanceOf<VerifyUnitTask>()); |
2653 // validate | 2653 // validate |
2654 _fillErrorListener(VERIFY_ERRORS); | 2654 _fillErrorListener(VERIFY_ERRORS); |
2655 errorListener.assertErrorsWithCodes(<ErrorCode>[ | 2655 errorListener.assertErrorsWithCodes(<ErrorCode>[ |
2656 CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE | 2656 CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE |
2657 ]); | 2657 ]); |
2658 } | 2658 } |
2659 | 2659 |
2660 test_perform_directiveError() { | 2660 test_perform_directiveError() { |
2661 Source source = newSource('/test.dart', ''' | 2661 Source source = newSource('/test.dart', ''' |
2662 import 'no-such-file.dart'; | 2662 import 'no-such-file.dart'; |
2663 '''); | 2663 '''); |
2664 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2664 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2665 _computeResult(target, VERIFY_ERRORS); | 2665 computeResult(target, VERIFY_ERRORS); |
2666 expect(task, new isInstanceOf<VerifyUnitTask>()); | 2666 expect(task, new isInstanceOf<VerifyUnitTask>()); |
2667 // validate | 2667 // validate |
2668 _fillErrorListener(VERIFY_ERRORS); | 2668 _fillErrorListener(VERIFY_ERRORS); |
2669 errorListener.assertErrorsWithCodes( | 2669 errorListener.assertErrorsWithCodes( |
2670 <ErrorCode>[CompileTimeErrorCode.URI_DOES_NOT_EXIST]); | 2670 <ErrorCode>[CompileTimeErrorCode.URI_DOES_NOT_EXIST]); |
2671 } | 2671 } |
2672 | 2672 |
2673 test_perform_verifyError() { | 2673 test_perform_verifyError() { |
2674 Source source = newSource('/test.dart', ''' | 2674 Source source = newSource('/test.dart', ''' |
2675 main() { | 2675 main() { |
2676 if (42) { | 2676 if (42) { |
2677 print('Not bool!'); | 2677 print('Not bool!'); |
2678 } | 2678 } |
2679 } | 2679 } |
2680 '''); | 2680 '''); |
2681 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 2681 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
2682 _computeResult(target, VERIFY_ERRORS); | 2682 computeResult(target, VERIFY_ERRORS); |
2683 expect(task, new isInstanceOf<VerifyUnitTask>()); | 2683 expect(task, new isInstanceOf<VerifyUnitTask>()); |
2684 // validate | 2684 // validate |
2685 _fillErrorListener(VERIFY_ERRORS); | 2685 _fillErrorListener(VERIFY_ERRORS); |
2686 errorListener.assertErrorsWithCodes( | 2686 errorListener.assertErrorsWithCodes( |
2687 <ErrorCode>[StaticTypeWarningCode.NON_BOOL_CONDITION]); | 2687 <ErrorCode>[StaticTypeWarningCode.NON_BOOL_CONDITION]); |
2688 } | 2688 } |
2689 } | 2689 } |
2690 | 2690 |
2691 class _AbstractDartTaskTest extends AbstractContextTest { | 2691 class _AbstractDartTaskTest extends AbstractContextTest { |
2692 Source emptySource; | 2692 Source emptySource; |
2693 | 2693 |
2694 AnalysisTask task; | |
2695 Map<ResultDescriptor<dynamic>, dynamic> oldOutputs; | |
2696 Map<ResultDescriptor<dynamic>, dynamic> outputs; | |
2697 GatheringErrorListener errorListener = new GatheringErrorListener(); | 2694 GatheringErrorListener errorListener = new GatheringErrorListener(); |
2698 | 2695 |
2699 void assertIsInvalid(AnalysisTarget target, ResultDescriptor descriptor) { | 2696 void assertIsInvalid(AnalysisTarget target, ResultDescriptor descriptor) { |
2700 CacheEntry entry = context.getCacheEntry(target); | 2697 CacheEntry entry = context.getCacheEntry(target); |
2701 expect(entry.isInvalid(descriptor), isTrue); | 2698 expect(entry.isInvalid(descriptor), isTrue); |
2702 } | 2699 } |
2703 | 2700 |
2704 void assertIsValid(AnalysisTarget target, ResultDescriptor descriptor) { | 2701 void assertIsValid(AnalysisTarget target, ResultDescriptor descriptor) { |
2705 CacheEntry entry = context.getCacheEntry(target); | 2702 CacheEntry entry = context.getCacheEntry(target); |
2706 expect(entry.isValid(descriptor), isTrue); | 2703 expect(entry.isValid(descriptor), isTrue); |
2707 } | 2704 } |
2708 | 2705 |
2709 void assertSameResults(List<ResultDescriptor> descriptors) { | 2706 void assertSameResults(List<ResultDescriptor> descriptors) { |
2710 descriptors.forEach((descriptor) { | 2707 descriptors.forEach((descriptor) { |
2711 var oldResult = oldOutputs[descriptor]; | 2708 var oldResult = oldOutputs[descriptor]; |
2712 var newResult = outputs[descriptor]; | 2709 var newResult = outputs[descriptor]; |
2713 expect(newResult, same(oldResult), reason: descriptor.name); | 2710 expect(newResult, same(oldResult), reason: descriptor.name); |
2714 }); | 2711 }); |
2715 } | 2712 } |
2716 | 2713 |
2717 void setUp() { | 2714 void setUp() { |
2718 super.setUp(); | 2715 super.setUp(); |
2719 emptySource = newSource('/test.dart'); | 2716 emptySource = newSource('/test.dart'); |
2720 } | 2717 } |
2721 | 2718 |
2722 void _computeResult(AnalysisTarget target, ResultDescriptor result) { | |
2723 oldOutputs = outputs; | |
2724 task = analysisDriver.computeResult(target, result); | |
2725 expect(task, isNotNull); | |
2726 expect(task.caughtException, isNull); | |
2727 outputs = task.outputs; | |
2728 } | |
2729 | |
2730 /** | 2719 /** |
2731 * Fill [errorListener] with [result] errors in the current [task]. | 2720 * Fill [errorListener] with [result] errors in the current [task]. |
2732 */ | 2721 */ |
2733 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { | 2722 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { |
2734 List<AnalysisError> errors = task.outputs[result]; | 2723 List<AnalysisError> errors = task.outputs[result]; |
2735 expect(errors, isNotNull, reason: result.name); | 2724 expect(errors, isNotNull, reason: result.name); |
2736 errorListener = new GatheringErrorListener(); | 2725 errorListener = new GatheringErrorListener(); |
2737 errorListener.addAll(errors); | 2726 errorListener.addAll(errors); |
2738 } | 2727 } |
2739 } | 2728 } |
OLD | NEW |