| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'dart:async'; | 5 import 'dart:async'; |
| 6 | 6 |
| 7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
| 8 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; | 8 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; |
| 9 import 'package:analyzer/dart/element/element.dart'; | 9 import 'package:analyzer/dart/element/element.dart'; |
| 10 import 'package:analyzer/dart/element/type.dart'; | 10 import 'package:analyzer/dart/element/type.dart'; |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 driver.removeFile(a); | 356 driver.removeFile(a); |
| 357 expect(driver.addedFiles, isNot(contains(a))); | 357 expect(driver.addedFiles, isNot(contains(a))); |
| 358 expect(driver.addedFiles, isNot(contains(b))); | 358 expect(driver.addedFiles, isNot(contains(b))); |
| 359 } | 359 } |
| 360 | 360 |
| 361 test_addFile_shouldRefresh() async { | 361 test_addFile_shouldRefresh() async { |
| 362 var a = _p('/test/lib/a.dart'); | 362 var a = _p('/test/lib/a.dart'); |
| 363 var b = _p('/test/lib/b.dart'); | 363 var b = _p('/test/lib/b.dart'); |
| 364 | 364 |
| 365 provider.newFile(a, 'class A {}'); | 365 provider.newFile(a, 'class A {}'); |
| 366 provider.newFile( | 366 provider.newFile(b, r''' |
| 367 b, | |
| 368 r''' | |
| 369 import 'a.dart'; | 367 import 'a.dart'; |
| 370 '''); | 368 '''); |
| 371 | 369 |
| 372 driver.addFile(a); | 370 driver.addFile(a); |
| 373 driver.addFile(b); | 371 driver.addFile(b); |
| 374 | 372 |
| 375 void assertNumberOfErrorsInB(int n) { | 373 void assertNumberOfErrorsInB(int n) { |
| 376 var bResult = allResults.singleWhere((r) => r.path == b); | 374 var bResult = allResults.singleWhere((r) => r.path == b); |
| 377 expect(bResult.errors, hasLength(n)); | 375 expect(bResult.errors, hasLength(n)); |
| 378 allResults.clear(); | 376 allResults.clear(); |
| 379 } | 377 } |
| 380 | 378 |
| 381 // Initial analysis, 'b' does not use 'a', so there is a hint. | 379 // Initial analysis, 'b' does not use 'a', so there is a hint. |
| 382 await scheduler.waitForIdle(); | 380 await scheduler.waitForIdle(); |
| 383 assertNumberOfErrorsInB(1); | 381 assertNumberOfErrorsInB(1); |
| 384 | 382 |
| 385 // Update 'b' to use 'a', no more hints. | 383 // Update 'b' to use 'a', no more hints. |
| 386 provider.newFile( | 384 provider.newFile(b, r''' |
| 387 b, | |
| 388 r''' | |
| 389 import 'a.dart'; | 385 import 'a.dart'; |
| 390 main() { | 386 main() { |
| 391 print(A); | 387 print(A); |
| 392 } | 388 } |
| 393 '''); | 389 '''); |
| 394 driver.changeFile(b); | 390 driver.changeFile(b); |
| 395 await scheduler.waitForIdle(); | 391 await scheduler.waitForIdle(); |
| 396 assertNumberOfErrorsInB(0); | 392 assertNumberOfErrorsInB(0); |
| 397 | 393 |
| 398 // Change 'b' content so that it has a hint. | 394 // Change 'b' content so that it has a hint. |
| 399 // Remove 'b' and add it again. | 395 // Remove 'b' and add it again. |
| 400 // The file 'b' must be refreshed, and the hint must be reported. | 396 // The file 'b' must be refreshed, and the hint must be reported. |
| 401 provider.newFile( | 397 provider.newFile(b, r''' |
| 402 b, | |
| 403 r''' | |
| 404 import 'a.dart'; | 398 import 'a.dart'; |
| 405 '''); | 399 '''); |
| 406 driver.removeFile(b); | 400 driver.removeFile(b); |
| 407 driver.addFile(b); | 401 driver.addFile(b); |
| 408 await scheduler.waitForIdle(); | 402 await scheduler.waitForIdle(); |
| 409 assertNumberOfErrorsInB(1); | 403 assertNumberOfErrorsInB(1); |
| 410 } | 404 } |
| 411 | 405 |
| 412 test_addFile_thenRemove() async { | 406 test_addFile_thenRemove() async { |
| 413 var a = _p('/test/lib/a.dart'); | 407 var a = _p('/test/lib/a.dart'); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 424 | 418 |
| 425 // Only 'b' has been analyzed, because 'a' was removed before we started. | 419 // Only 'b' has been analyzed, because 'a' was removed before we started. |
| 426 expect(allResults, hasLength(1)); | 420 expect(allResults, hasLength(1)); |
| 427 expect(allResults[0].path, b); | 421 expect(allResults[0].path, b); |
| 428 } | 422 } |
| 429 | 423 |
| 430 test_analyze_resolveDirectives() async { | 424 test_analyze_resolveDirectives() async { |
| 431 var lib = _p('/test/lib.dart'); | 425 var lib = _p('/test/lib.dart'); |
| 432 var part1 = _p('/test/part1.dart'); | 426 var part1 = _p('/test/part1.dart'); |
| 433 var part2 = _p('/test/part2.dart'); | 427 var part2 = _p('/test/part2.dart'); |
| 434 provider.newFile( | 428 provider.newFile(lib, ''' |
| 435 lib, | |
| 436 ''' | |
| 437 library lib; | 429 library lib; |
| 438 part 'part1.dart'; | 430 part 'part1.dart'; |
| 439 part 'part2.dart'; | 431 part 'part2.dart'; |
| 440 '''); | 432 '''); |
| 441 provider.newFile( | 433 provider.newFile(part1, ''' |
| 442 part1, | |
| 443 ''' | |
| 444 part of lib; | 434 part of lib; |
| 445 '''); | 435 '''); |
| 446 provider.newFile( | 436 provider.newFile(part2, ''' |
| 447 part2, | |
| 448 ''' | |
| 449 part of 'lib.dart'; | 437 part of 'lib.dart'; |
| 450 '''); | 438 '''); |
| 451 | 439 |
| 452 AnalysisResult libResult = await driver.getResult(lib); | 440 AnalysisResult libResult = await driver.getResult(lib); |
| 453 AnalysisResult partResult1 = await driver.getResult(part1); | 441 AnalysisResult partResult1 = await driver.getResult(part1); |
| 454 AnalysisResult partResult2 = await driver.getResult(part2); | 442 AnalysisResult partResult2 = await driver.getResult(part2); |
| 455 | 443 |
| 456 CompilationUnit libUnit = libResult.unit; | 444 CompilationUnit libUnit = libResult.unit; |
| 457 CompilationUnit partUnit1 = partResult1.unit; | 445 CompilationUnit partUnit1 = partResult1.unit; |
| 458 CompilationUnit partUnit2 = partResult2.unit; | 446 CompilationUnit partUnit2 = partResult2.unit; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 480 | 468 |
| 481 { | 469 { |
| 482 var partOf = partUnit2.directives.single as PartOfDirective; | 470 var partOf = partUnit2.directives.single as PartOfDirective; |
| 483 expect(partOf.element, libraryElement); | 471 expect(partOf.element, libraryElement); |
| 484 } | 472 } |
| 485 } | 473 } |
| 486 | 474 |
| 487 test_analyze_resolveDirectives_error_missingLibraryDirective() async { | 475 test_analyze_resolveDirectives_error_missingLibraryDirective() async { |
| 488 var lib = _p('/test/lib.dart'); | 476 var lib = _p('/test/lib.dart'); |
| 489 var part = _p('/test/part.dart'); | 477 var part = _p('/test/part.dart'); |
| 490 provider.newFile( | 478 provider.newFile(lib, ''' |
| 491 lib, | |
| 492 ''' | |
| 493 part 'part.dart'; | 479 part 'part.dart'; |
| 494 '''); | 480 '''); |
| 495 provider.newFile( | 481 provider.newFile(part, ''' |
| 496 part, | |
| 497 ''' | |
| 498 part of lib; | 482 part of lib; |
| 499 '''); | 483 '''); |
| 500 | 484 |
| 501 driver.addFile(lib); | 485 driver.addFile(lib); |
| 502 | 486 |
| 503 AnalysisResult libResult = await driver.getResult(lib); | 487 AnalysisResult libResult = await driver.getResult(lib); |
| 504 List<AnalysisError> errors = libResult.errors; | 488 List<AnalysisError> errors = libResult.errors; |
| 505 if (libResult.unit.element.context.analysisOptions.enableUriInPartOf) { | 489 if (libResult.unit.element.context.analysisOptions.enableUriInPartOf) { |
| 506 expect(errors, hasLength(1)); | 490 expect(errors, hasLength(1)); |
| 507 expect(errors[0].errorCode, ResolverErrorCode.PART_OF_UNNAMED_LIBRARY); | 491 expect(errors[0].errorCode, ResolverErrorCode.PART_OF_UNNAMED_LIBRARY); |
| 508 } else { | 492 } else { |
| 509 expect(errors, hasLength(1)); | 493 expect(errors, hasLength(1)); |
| 510 expect(errors[0].errorCode, | 494 expect(errors[0].errorCode, |
| 511 ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART); | 495 ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART); |
| 512 } | 496 } |
| 513 } | 497 } |
| 514 | 498 |
| 515 test_analyze_resolveDirectives_error_partOfDifferentLibrary_byName() async { | 499 test_analyze_resolveDirectives_error_partOfDifferentLibrary_byName() async { |
| 516 var lib = _p('/test/lib.dart'); | 500 var lib = _p('/test/lib.dart'); |
| 517 var part = _p('/test/part.dart'); | 501 var part = _p('/test/part.dart'); |
| 518 provider.newFile( | 502 provider.newFile(lib, ''' |
| 519 lib, | |
| 520 ''' | |
| 521 library lib; | 503 library lib; |
| 522 part 'part.dart'; | 504 part 'part.dart'; |
| 523 '''); | 505 '''); |
| 524 provider.newFile( | 506 provider.newFile(part, ''' |
| 525 part, | |
| 526 ''' | |
| 527 part of someOtherLib; | 507 part of someOtherLib; |
| 528 '''); | 508 '''); |
| 529 | 509 |
| 530 driver.addFile(lib); | 510 driver.addFile(lib); |
| 531 | 511 |
| 532 AnalysisResult libResult = await driver.getResult(lib); | 512 AnalysisResult libResult = await driver.getResult(lib); |
| 533 List<AnalysisError> errors = libResult.errors; | 513 List<AnalysisError> errors = libResult.errors; |
| 534 expect(errors, hasLength(1)); | 514 expect(errors, hasLength(1)); |
| 535 expect(errors[0].errorCode, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY); | 515 expect(errors[0].errorCode, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY); |
| 536 } | 516 } |
| 537 | 517 |
| 538 test_analyze_resolveDirectives_error_partOfDifferentLibrary_byUri() async { | 518 test_analyze_resolveDirectives_error_partOfDifferentLibrary_byUri() async { |
| 539 var lib = _p('/test/lib.dart'); | 519 var lib = _p('/test/lib.dart'); |
| 540 var part = _p('/test/part.dart'); | 520 var part = _p('/test/part.dart'); |
| 541 provider.newFile( | 521 provider.newFile(lib, ''' |
| 542 lib, | |
| 543 ''' | |
| 544 library lib; | 522 library lib; |
| 545 part 'part.dart'; | 523 part 'part.dart'; |
| 546 '''); | 524 '''); |
| 547 provider.newFile( | 525 provider.newFile(part, ''' |
| 548 part, | |
| 549 ''' | |
| 550 part of 'other_lib.dart'; | 526 part of 'other_lib.dart'; |
| 551 '''); | 527 '''); |
| 552 | 528 |
| 553 driver.addFile(lib); | 529 driver.addFile(lib); |
| 554 | 530 |
| 555 AnalysisResult libResult = await driver.getResult(lib); | 531 AnalysisResult libResult = await driver.getResult(lib); |
| 556 List<AnalysisError> errors = libResult.errors; | 532 List<AnalysisError> errors = libResult.errors; |
| 557 expect(errors, hasLength(1)); | 533 expect(errors, hasLength(1)); |
| 558 expect(errors[0].errorCode, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY); | 534 expect(errors[0].errorCode, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY); |
| 559 } | 535 } |
| 560 | 536 |
| 561 test_analyze_resolveDirectives_error_partOfNonPart() async { | 537 test_analyze_resolveDirectives_error_partOfNonPart() async { |
| 562 var lib = _p('/test/lib.dart'); | 538 var lib = _p('/test/lib.dart'); |
| 563 var part = _p('/test/part.dart'); | 539 var part = _p('/test/part.dart'); |
| 564 provider.newFile( | 540 provider.newFile(lib, ''' |
| 565 lib, | |
| 566 ''' | |
| 567 library lib; | 541 library lib; |
| 568 part 'part.dart'; | 542 part 'part.dart'; |
| 569 '''); | 543 '''); |
| 570 provider.newFile( | 544 provider.newFile(part, ''' |
| 571 part, | |
| 572 ''' | |
| 573 // no part of directive | 545 // no part of directive |
| 574 '''); | 546 '''); |
| 575 | 547 |
| 576 driver.addFile(lib); | 548 driver.addFile(lib); |
| 577 | 549 |
| 578 AnalysisResult libResult = await driver.getResult(lib); | 550 AnalysisResult libResult = await driver.getResult(lib); |
| 579 List<AnalysisError> errors = libResult.errors; | 551 List<AnalysisError> errors = libResult.errors; |
| 580 expect(errors, hasLength(1)); | 552 expect(errors, hasLength(1)); |
| 581 expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_NON_PART); | 553 expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_NON_PART); |
| 582 } | 554 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 664 expect(driver.test.priorityResults, isEmpty); | 636 expect(driver.test.priorityResults, isEmpty); |
| 665 | 637 |
| 666 // The file is not priority, so its result is not cached. | 638 // The file is not priority, so its result is not cached. |
| 667 AnalysisResult result2 = await driver.getResult(a); | 639 AnalysisResult result2 = await driver.getResult(a); |
| 668 expect(result2, isNot(same(result1))); | 640 expect(result2, isNot(same(result1))); |
| 669 } | 641 } |
| 670 | 642 |
| 671 test_changeFile_implicitlyAnalyzed() async { | 643 test_changeFile_implicitlyAnalyzed() async { |
| 672 var a = _p('/test/lib/a.dart'); | 644 var a = _p('/test/lib/a.dart'); |
| 673 var b = _p('/test/lib/b.dart'); | 645 var b = _p('/test/lib/b.dart'); |
| 674 provider.newFile( | 646 provider.newFile(a, r''' |
| 675 a, | |
| 676 r''' | |
| 677 import 'b.dart'; | 647 import 'b.dart'; |
| 678 var A = B; | 648 var A = B; |
| 679 '''); | 649 '''); |
| 680 provider.newFile(b, 'var B = 1;'); | 650 provider.newFile(b, 'var B = 1;'); |
| 681 | 651 |
| 682 driver.priorityFiles = [a]; | 652 driver.priorityFiles = [a]; |
| 683 driver.addFile(a); | 653 driver.addFile(a); |
| 684 | 654 |
| 685 // We have a result only for "a". | 655 // We have a result only for "a". |
| 686 await scheduler.waitForIdle(); | 656 await scheduler.waitForIdle(); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 await scheduler.waitForIdle(); | 696 await scheduler.waitForIdle(); |
| 727 expect(allResults, isEmpty); | 697 expect(allResults, isEmpty); |
| 728 | 698 |
| 729 // This should not add "b" to the file state. | 699 // This should not add "b" to the file state. |
| 730 expect(driver.fsState.knownFilePaths, isNot(contains(b))); | 700 expect(driver.fsState.knownFilePaths, isNot(contains(b))); |
| 731 } | 701 } |
| 732 | 702 |
| 733 test_changeFile_selfConsistent() async { | 703 test_changeFile_selfConsistent() async { |
| 734 var a = _p('/test/lib/a.dart'); | 704 var a = _p('/test/lib/a.dart'); |
| 735 var b = _p('/test/lib/b.dart'); | 705 var b = _p('/test/lib/b.dart'); |
| 736 provider.newFile( | 706 provider.newFile(a, r''' |
| 737 a, | |
| 738 r''' | |
| 739 import 'b.dart'; | 707 import 'b.dart'; |
| 740 var A1 = 1; | 708 var A1 = 1; |
| 741 var A2 = B1; | 709 var A2 = B1; |
| 742 '''); | 710 '''); |
| 743 provider.newFile( | 711 provider.newFile(b, r''' |
| 744 b, | |
| 745 r''' | |
| 746 import 'a.dart'; | 712 import 'a.dart'; |
| 747 var B1 = A1; | 713 var B1 = A1; |
| 748 '''); | 714 '''); |
| 749 | 715 |
| 750 driver.priorityFiles = [a, b]; | 716 driver.priorityFiles = [a, b]; |
| 751 driver.addFile(a); | 717 driver.addFile(a); |
| 752 driver.addFile(b); | 718 driver.addFile(b); |
| 753 await scheduler.waitForIdle(); | 719 await scheduler.waitForIdle(); |
| 754 | 720 |
| 755 // We have results for both "a" and "b". | 721 // We have results for both "a" and "b". |
| 756 expect(allResults, hasLength(2)); | 722 expect(allResults, hasLength(2)); |
| 757 { | 723 { |
| 758 AnalysisResult ar = allResults.firstWhere((r) => r.path == a); | 724 AnalysisResult ar = allResults.firstWhere((r) => r.path == a); |
| 759 expect(_getTopLevelVarType(ar.unit, 'A1'), 'int'); | 725 expect(_getTopLevelVarType(ar.unit, 'A1'), 'int'); |
| 760 expect(_getTopLevelVarType(ar.unit, 'A2'), 'int'); | 726 expect(_getTopLevelVarType(ar.unit, 'A2'), 'int'); |
| 761 } | 727 } |
| 762 { | 728 { |
| 763 AnalysisResult br = allResults.firstWhere((r) => r.path == b); | 729 AnalysisResult br = allResults.firstWhere((r) => r.path == b); |
| 764 expect(_getTopLevelVarType(br.unit, 'B1'), 'int'); | 730 expect(_getTopLevelVarType(br.unit, 'B1'), 'int'); |
| 765 } | 731 } |
| 766 | 732 |
| 767 // Clear the results and update "a". | 733 // Clear the results and update "a". |
| 768 allResults.clear(); | 734 allResults.clear(); |
| 769 provider.updateFile( | 735 provider.updateFile(a, r''' |
| 770 a, | |
| 771 r''' | |
| 772 import 'b.dart'; | 736 import 'b.dart'; |
| 773 var A1 = 1.2; | 737 var A1 = 1.2; |
| 774 var A2 = B1; | 738 var A2 = B1; |
| 775 '''); | 739 '''); |
| 776 driver.changeFile(a); | 740 driver.changeFile(a); |
| 777 | 741 |
| 778 // We again get results for both "a" and "b". | 742 // We again get results for both "a" and "b". |
| 779 // The results are consistent. | 743 // The results are consistent. |
| 780 await scheduler.waitForIdle(); | 744 await scheduler.waitForIdle(); |
| 781 expect(allResults, hasLength(2)); | 745 expect(allResults, hasLength(2)); |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 951 import 'foo.dart'; | 915 import 'foo.dart'; |
| 952 '''); | 916 '''); |
| 953 | 917 |
| 954 AnalysisResult result = await driver.getResult(testFile); | 918 AnalysisResult result = await driver.getResult(testFile); |
| 955 List<AnalysisError> errors = result.errors; | 919 List<AnalysisError> errors = result.errors; |
| 956 expect(errors, hasLength(1)); | 920 expect(errors, hasLength(1)); |
| 957 expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST); | 921 expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST); |
| 958 } | 922 } |
| 959 | 923 |
| 960 test_errors_uriDoesNotExist_import_deferred() async { | 924 test_errors_uriDoesNotExist_import_deferred() async { |
| 961 addTestFile( | 925 addTestFile(r''' |
| 962 r''' | |
| 963 import 'foo.dart' deferred as foo; | 926 import 'foo.dart' deferred as foo; |
| 964 main() { | 927 main() { |
| 965 foo.loadLibrary(); | 928 foo.loadLibrary(); |
| 966 } | 929 } |
| 967 ''', | 930 ''', priority: true); |
| 968 priority: true); | |
| 969 | 931 |
| 970 AnalysisResult result = await driver.getResult(testFile); | 932 AnalysisResult result = await driver.getResult(testFile); |
| 971 List<AnalysisError> errors = result.errors; | 933 List<AnalysisError> errors = result.errors; |
| 972 expect(errors, hasLength(1)); | 934 expect(errors, hasLength(1)); |
| 973 expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST); | 935 expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST); |
| 974 } | 936 } |
| 975 | 937 |
| 976 test_errors_uriDoesNotExist_part() async { | 938 test_errors_uriDoesNotExist_part() async { |
| 977 addTestFile(r''' | 939 addTestFile(r''' |
| 978 library lib; | 940 library lib; |
| 979 part 'foo.dart'; | 941 part 'foo.dart'; |
| 980 '''); | 942 '''); |
| 981 | 943 |
| 982 AnalysisResult result = await driver.getResult(testFile); | 944 AnalysisResult result = await driver.getResult(testFile); |
| 983 List<AnalysisError> errors = result.errors; | 945 List<AnalysisError> errors = result.errors; |
| 984 expect(errors, hasLength(1)); | 946 expect(errors, hasLength(1)); |
| 985 expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST); | 947 expect(errors[0].errorCode, CompileTimeErrorCode.URI_DOES_NOT_EXIST); |
| 986 } | 948 } |
| 987 | 949 |
| 988 test_externalSummaries() async { | 950 test_externalSummaries() async { |
| 989 var a = _p('/a.dart'); | 951 var a = _p('/a.dart'); |
| 990 var b = _p('/b.dart'); | 952 var b = _p('/b.dart'); |
| 991 provider.newFile( | 953 provider.newFile(a, r''' |
| 992 a, | |
| 993 r''' | |
| 994 class A {} | 954 class A {} |
| 995 '''); | 955 '''); |
| 996 provider.newFile( | 956 provider.newFile(b, r''' |
| 997 b, | |
| 998 r''' | |
| 999 import 'a.dart'; | 957 import 'a.dart'; |
| 1000 var a = new A(); | 958 var a = new A(); |
| 1001 '''); | 959 '''); |
| 1002 | 960 |
| 1003 // Prepare the store with a.dart and everything it needs. | 961 // Prepare the store with a.dart and everything it needs. |
| 1004 SummaryDataStore summaryStore = | 962 SummaryDataStore summaryStore = |
| 1005 createAnalysisDriver().test.getSummaryStore(a); | 963 createAnalysisDriver().test.getSummaryStore(a); |
| 1006 | 964 |
| 1007 // There are at least a.dart and dart:core libraries. | 965 // There are at least a.dart and dart:core libraries. |
| 1008 String aUri = provider.pathContext.toUri(a).toString(); | 966 String aUri = provider.pathContext.toUri(a).toString(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1020 createAnalysisDriver(externalSummaries: summaryStore); | 978 createAnalysisDriver(externalSummaries: summaryStore); |
| 1021 AnalysisResult result = await driver.getResult(b); | 979 AnalysisResult result = await driver.getResult(b); |
| 1022 expect(result.errors, isEmpty); | 980 expect(result.errors, isEmpty); |
| 1023 } | 981 } |
| 1024 | 982 |
| 1025 test_generatedFile() async { | 983 test_generatedFile() async { |
| 1026 Uri uri = Uri.parse('package:aaa/foo.dart'); | 984 Uri uri = Uri.parse('package:aaa/foo.dart'); |
| 1027 String templatePath = _p('/aaa/lib/foo.dart'); | 985 String templatePath = _p('/aaa/lib/foo.dart'); |
| 1028 String generatedPath = _p('/generated/aaa/lib/foo.dart'); | 986 String generatedPath = _p('/generated/aaa/lib/foo.dart'); |
| 1029 | 987 |
| 1030 provider.newFile( | 988 provider.newFile(templatePath, r''' |
| 1031 templatePath, | |
| 1032 r''' | |
| 1033 a() {} | 989 a() {} |
| 1034 b() {} | 990 b() {} |
| 1035 '''); | 991 '''); |
| 1036 | 992 |
| 1037 provider.newFile( | 993 provider.newFile(generatedPath, r''' |
| 1038 generatedPath, | |
| 1039 r''' | |
| 1040 aaa() {} | 994 aaa() {} |
| 1041 bbb() {} | 995 bbb() {} |
| 1042 '''); | 996 '''); |
| 1043 | 997 |
| 1044 Source generatedSource = new _SourceMock(); | 998 Source generatedSource = new _SourceMock(); |
| 1045 when(generatedSource.uri).thenReturn(uri); | 999 when(generatedSource.uri).thenReturn(uri); |
| 1046 when(generatedSource.fullName).thenReturn(generatedPath); | 1000 when(generatedSource.fullName).thenReturn(generatedPath); |
| 1047 | 1001 |
| 1048 when(generatedUriResolver.resolveAbsolute(uri, uri)) | 1002 when(generatedUriResolver.resolveAbsolute(uri, uri)) |
| 1049 .thenReturn(generatedSource); | 1003 .thenReturn(generatedSource); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1172 | 1126 |
| 1173 AnalysisDriverUnitIndex index = await driver.getIndex(testFile); | 1127 AnalysisDriverUnitIndex index = await driver.getIndex(testFile); |
| 1174 | 1128 |
| 1175 int unitId = index.strings.indexOf('package:test/test.dart'); | 1129 int unitId = index.strings.indexOf('package:test/test.dart'); |
| 1176 int fooId = index.strings.indexOf('foo'); | 1130 int fooId = index.strings.indexOf('foo'); |
| 1177 expect(unitId, isNonNegative); | 1131 expect(unitId, isNonNegative); |
| 1178 expect(fooId, isNonNegative); | 1132 expect(fooId, isNonNegative); |
| 1179 } | 1133 } |
| 1180 | 1134 |
| 1181 test_getLibraryByUri_external_resynthesize() async { | 1135 test_getLibraryByUri_external_resynthesize() async { |
| 1182 provider.newFile( | 1136 provider.newFile(testFile, r''' |
| 1183 testFile, | |
| 1184 r''' | |
| 1185 class Test {} | 1137 class Test {} |
| 1186 '''); | 1138 '''); |
| 1187 | 1139 |
| 1188 // Prepare the store with package:test/test.dart URI. | 1140 // Prepare the store with package:test/test.dart URI. |
| 1189 SummaryDataStore summaryStore = | 1141 SummaryDataStore summaryStore = |
| 1190 createAnalysisDriver().test.getSummaryStore(testFile); | 1142 createAnalysisDriver().test.getSummaryStore(testFile); |
| 1191 | 1143 |
| 1192 // package:test/test.dart is in the store. | 1144 // package:test/test.dart is in the store. |
| 1193 String uri = 'package:test/test.dart'; | 1145 String uri = 'package:test/test.dart'; |
| 1194 expect(summaryStore.unlinkedMap.keys, contains(uri)); | 1146 expect(summaryStore.unlinkedMap.keys, contains(uri)); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1253 | 1205 |
| 1254 // The same result is also received through the stream. | 1206 // The same result is also received through the stream. |
| 1255 await scheduler.waitForIdle(); | 1207 await scheduler.waitForIdle(); |
| 1256 expect(allResults, [result]); | 1208 expect(allResults, [result]); |
| 1257 } | 1209 } |
| 1258 | 1210 |
| 1259 test_getResult_constants_defaultParameterValue_localFunction() async { | 1211 test_getResult_constants_defaultParameterValue_localFunction() async { |
| 1260 var a = _p('/test/bin/a.dart'); | 1212 var a = _p('/test/bin/a.dart'); |
| 1261 var b = _p('/test/bin/b.dart'); | 1213 var b = _p('/test/bin/b.dart'); |
| 1262 provider.newFile(a, 'const C = 42;'); | 1214 provider.newFile(a, 'const C = 42;'); |
| 1263 provider.newFile( | 1215 provider.newFile(b, r''' |
| 1264 b, | |
| 1265 r''' | |
| 1266 import 'a.dart'; | 1216 import 'a.dart'; |
| 1267 main() { | 1217 main() { |
| 1268 foo({int p: C}) {} | 1218 foo({int p: C}) {} |
| 1269 foo(); | 1219 foo(); |
| 1270 } | 1220 } |
| 1271 '''); | 1221 '''); |
| 1272 driver.addFile(a); | 1222 driver.addFile(a); |
| 1273 driver.addFile(b); | 1223 driver.addFile(b); |
| 1274 await scheduler.waitForIdle(); | 1224 await scheduler.waitForIdle(); |
| 1275 | 1225 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1344 addTestFile(content, priority: true); | 1294 addTestFile(content, priority: true); |
| 1345 | 1295 |
| 1346 var result = await driver.getResult(testFile); | 1296 var result = await driver.getResult(testFile); |
| 1347 expect(result.errors, isEmpty); | 1297 expect(result.errors, isEmpty); |
| 1348 } | 1298 } |
| 1349 | 1299 |
| 1350 test_getResult_importLibrary_thenRemoveIt() async { | 1300 test_getResult_importLibrary_thenRemoveIt() async { |
| 1351 var a = _p('/test/lib/a.dart'); | 1301 var a = _p('/test/lib/a.dart'); |
| 1352 var b = _p('/test/lib/b.dart'); | 1302 var b = _p('/test/lib/b.dart'); |
| 1353 provider.newFile(a, 'class A {}'); | 1303 provider.newFile(a, 'class A {}'); |
| 1354 provider.newFile( | 1304 provider.newFile(b, r''' |
| 1355 b, | |
| 1356 r''' | |
| 1357 import 'a.dart'; | 1305 import 'a.dart'; |
| 1358 class B extends A {} | 1306 class B extends A {} |
| 1359 '''); | 1307 '''); |
| 1360 | 1308 |
| 1361 driver.addFile(a); | 1309 driver.addFile(a); |
| 1362 driver.addFile(b); | 1310 driver.addFile(b); |
| 1363 await scheduler.waitForIdle(); | 1311 await scheduler.waitForIdle(); |
| 1364 | 1312 |
| 1365 // No errors in b.dart | 1313 // No errors in b.dart |
| 1366 { | 1314 { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1386 driver.addFile(a); | 1334 driver.addFile(a); |
| 1387 | 1335 |
| 1388 // No errors in b.dart again. | 1336 // No errors in b.dart again. |
| 1389 { | 1337 { |
| 1390 AnalysisResult result = await driver.getResult(b); | 1338 AnalysisResult result = await driver.getResult(b); |
| 1391 expect(result.errors, isEmpty); | 1339 expect(result.errors, isEmpty); |
| 1392 } | 1340 } |
| 1393 } | 1341 } |
| 1394 | 1342 |
| 1395 test_getResult_inferTypes_finalField() async { | 1343 test_getResult_inferTypes_finalField() async { |
| 1396 addTestFile( | 1344 addTestFile(r''' |
| 1397 r''' | |
| 1398 class C { | 1345 class C { |
| 1399 final f = 42; | 1346 final f = 42; |
| 1400 } | 1347 } |
| 1401 ''', | 1348 ''', priority: true); |
| 1402 priority: true); | |
| 1403 await scheduler.waitForIdle(); | 1349 await scheduler.waitForIdle(); |
| 1404 | 1350 |
| 1405 AnalysisResult result = await driver.getResult(testFile); | 1351 AnalysisResult result = await driver.getResult(testFile); |
| 1406 expect(_getClassFieldType(result.unit, 'C', 'f'), 'int'); | 1352 expect(_getClassFieldType(result.unit, 'C', 'f'), 'int'); |
| 1407 } | 1353 } |
| 1408 | 1354 |
| 1409 test_getResult_inferTypes_instanceMethod() async { | 1355 test_getResult_inferTypes_instanceMethod() async { |
| 1410 addTestFile( | 1356 addTestFile(r''' |
| 1411 r''' | |
| 1412 class A { | 1357 class A { |
| 1413 int m(double p) => 1; | 1358 int m(double p) => 1; |
| 1414 } | 1359 } |
| 1415 class B extends A { | 1360 class B extends A { |
| 1416 m(double p) => 2; | 1361 m(double p) => 2; |
| 1417 } | 1362 } |
| 1418 ''', | 1363 ''', priority: true); |
| 1419 priority: true); | |
| 1420 await scheduler.waitForIdle(); | 1364 await scheduler.waitForIdle(); |
| 1421 | 1365 |
| 1422 AnalysisResult result = await driver.getResult(testFile); | 1366 AnalysisResult result = await driver.getResult(testFile); |
| 1423 expect(_getClassMethodReturnType(result.unit, 'A', 'm'), 'int'); | 1367 expect(_getClassMethodReturnType(result.unit, 'A', 'm'), 'int'); |
| 1424 expect(_getClassMethodReturnType(result.unit, 'B', 'm'), 'int'); | 1368 expect(_getClassMethodReturnType(result.unit, 'B', 'm'), 'int'); |
| 1425 } | 1369 } |
| 1426 | 1370 |
| 1427 test_getResult_invalid_annotation_functionAsConstructor() async { | 1371 test_getResult_invalid_annotation_functionAsConstructor() async { |
| 1428 addTestFile( | 1372 addTestFile(r''' |
| 1429 r''' | |
| 1430 fff() {} | 1373 fff() {} |
| 1431 | 1374 |
| 1432 @fff() | 1375 @fff() |
| 1433 class C {} | 1376 class C {} |
| 1434 ''', | 1377 ''', priority: true); |
| 1435 priority: true); | |
| 1436 | 1378 |
| 1437 AnalysisResult result = await driver.getResult(testFile); | 1379 AnalysisResult result = await driver.getResult(testFile); |
| 1438 ClassDeclaration c = result.unit.declarations[1] as ClassDeclaration; | 1380 ClassDeclaration c = result.unit.declarations[1] as ClassDeclaration; |
| 1439 Annotation a = c.metadata[0]; | 1381 Annotation a = c.metadata[0]; |
| 1440 expect(a.name.name, 'fff'); | 1382 expect(a.name.name, 'fff'); |
| 1441 expect(a.name.staticElement, new isInstanceOf<FunctionElement>()); | 1383 expect(a.name.staticElement, new isInstanceOf<FunctionElement>()); |
| 1442 } | 1384 } |
| 1443 | 1385 |
| 1444 test_getResult_invalidUri() async { | 1386 test_getResult_invalidUri() async { |
| 1445 String content = r''' | 1387 String content = r''' |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1518 '''; | 1460 '''; |
| 1519 addTestFile(content); | 1461 addTestFile(content); |
| 1520 await driver.getResult(testFile); | 1462 await driver.getResult(testFile); |
| 1521 } | 1463 } |
| 1522 | 1464 |
| 1523 test_getResult_mix_fileAndPackageUris() async { | 1465 test_getResult_mix_fileAndPackageUris() async { |
| 1524 var a = _p('/test/bin/a.dart'); | 1466 var a = _p('/test/bin/a.dart'); |
| 1525 var b = _p('/test/bin/b.dart'); | 1467 var b = _p('/test/bin/b.dart'); |
| 1526 var c = _p('/test/lib/c.dart'); | 1468 var c = _p('/test/lib/c.dart'); |
| 1527 var d = _p('/test/test/d.dart'); | 1469 var d = _p('/test/test/d.dart'); |
| 1528 provider.newFile( | 1470 provider.newFile(a, r''' |
| 1529 a, | |
| 1530 r''' | |
| 1531 import 'package:test/c.dart'; | 1471 import 'package:test/c.dart'; |
| 1532 int x = y; | 1472 int x = y; |
| 1533 '''); | 1473 '''); |
| 1534 provider.newFile( | 1474 provider.newFile(b, r''' |
| 1535 b, | |
| 1536 r''' | |
| 1537 import '../lib/c.dart'; | 1475 import '../lib/c.dart'; |
| 1538 int x = y; | 1476 int x = y; |
| 1539 '''); | 1477 '''); |
| 1540 provider.newFile( | 1478 provider.newFile(c, r''' |
| 1541 c, | |
| 1542 r''' | |
| 1543 import '../test/d.dart'; | 1479 import '../test/d.dart'; |
| 1544 var y = z; | 1480 var y = z; |
| 1545 '''); | 1481 '''); |
| 1546 provider.newFile( | 1482 provider.newFile(d, r''' |
| 1547 d, | |
| 1548 r''' | |
| 1549 String z = "string"; | 1483 String z = "string"; |
| 1550 '''); | 1484 '''); |
| 1551 | 1485 |
| 1552 driver.addFile(a); | 1486 driver.addFile(a); |
| 1553 driver.addFile(b); | 1487 driver.addFile(b); |
| 1554 driver.addFile(c); | 1488 driver.addFile(c); |
| 1555 driver.addFile(d); | 1489 driver.addFile(d); |
| 1556 | 1490 |
| 1557 // Analysis of my_pkg/bin/a.dart produces no error because | 1491 // Analysis of my_pkg/bin/a.dart produces no error because |
| 1558 // file:///my_pkg/bin/a.dart imports package:my_pkg/c.dart, and | 1492 // file:///my_pkg/bin/a.dart imports package:my_pkg/c.dart, and |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1617 addTestFile(content); | 1551 addTestFile(content); |
| 1618 // Should not throw exceptions. | 1552 // Should not throw exceptions. |
| 1619 await driver.getResult(testFile); | 1553 await driver.getResult(testFile); |
| 1620 } | 1554 } |
| 1621 | 1555 |
| 1622 test_getResult_sameFile_twoUris() async { | 1556 test_getResult_sameFile_twoUris() async { |
| 1623 var a = _p('/test/lib/a.dart'); | 1557 var a = _p('/test/lib/a.dart'); |
| 1624 var b = _p('/test/lib/b.dart'); | 1558 var b = _p('/test/lib/b.dart'); |
| 1625 var c = _p('/test/test/c.dart'); | 1559 var c = _p('/test/test/c.dart'); |
| 1626 provider.newFile(a, 'class A<T> {}'); | 1560 provider.newFile(a, 'class A<T> {}'); |
| 1627 provider.newFile( | 1561 provider.newFile(b, r''' |
| 1628 b, | |
| 1629 r''' | |
| 1630 import 'a.dart'; | 1562 import 'a.dart'; |
| 1631 var VB = new A<int>(); | 1563 var VB = new A<int>(); |
| 1632 '''); | 1564 '''); |
| 1633 provider.newFile( | 1565 provider.newFile(c, r''' |
| 1634 c, | |
| 1635 r''' | |
| 1636 import '../lib/a.dart'; | 1566 import '../lib/a.dart'; |
| 1637 var VC = new A<double>(); | 1567 var VC = new A<double>(); |
| 1638 '''); | 1568 '''); |
| 1639 | 1569 |
| 1640 driver.addFile(a); | 1570 driver.addFile(a); |
| 1641 driver.addFile(b); | 1571 driver.addFile(b); |
| 1642 await scheduler.waitForIdle(); | 1572 await scheduler.waitForIdle(); |
| 1643 | 1573 |
| 1644 { | 1574 { |
| 1645 AnalysisResult result = await driver.getResult(b); | 1575 AnalysisResult result = await driver.getResult(b); |
| 1646 expect(_getImportSource(result.unit, 0).uri.toString(), | 1576 expect(_getImportSource(result.unit, 0).uri.toString(), |
| 1647 'package:test/a.dart'); | 1577 'package:test/a.dart'); |
| 1648 expect(_getTopLevelVarType(result.unit, 'VB'), 'A<int>'); | 1578 expect(_getTopLevelVarType(result.unit, 'VB'), 'A<int>'); |
| 1649 } | 1579 } |
| 1650 | 1580 |
| 1651 { | 1581 { |
| 1652 AnalysisResult result = await driver.getResult(c); | 1582 AnalysisResult result = await driver.getResult(c); |
| 1653 expect(_getImportSource(result.unit, 0).uri, | 1583 expect(_getImportSource(result.unit, 0).uri, |
| 1654 provider.pathContext.toUri(_p('/test/lib/a.dart'))); | 1584 provider.pathContext.toUri(_p('/test/lib/a.dart'))); |
| 1655 expect(_getTopLevelVarType(result.unit, 'VC'), 'A<double>'); | 1585 expect(_getTopLevelVarType(result.unit, 'VC'), 'A<double>'); |
| 1656 } | 1586 } |
| 1657 } | 1587 } |
| 1658 | 1588 |
| 1659 test_getResult_selfConsistent() async { | 1589 test_getResult_selfConsistent() async { |
| 1660 var a = _p('/test/lib/a.dart'); | 1590 var a = _p('/test/lib/a.dart'); |
| 1661 var b = _p('/test/lib/b.dart'); | 1591 var b = _p('/test/lib/b.dart'); |
| 1662 provider.newFile( | 1592 provider.newFile(a, r''' |
| 1663 a, | |
| 1664 r''' | |
| 1665 import 'b.dart'; | 1593 import 'b.dart'; |
| 1666 var A1 = 1; | 1594 var A1 = 1; |
| 1667 var A2 = B1; | 1595 var A2 = B1; |
| 1668 '''); | 1596 '''); |
| 1669 provider.newFile( | 1597 provider.newFile(b, r''' |
| 1670 b, | |
| 1671 r''' | |
| 1672 import 'a.dart'; | 1598 import 'a.dart'; |
| 1673 var B1 = A1; | 1599 var B1 = A1; |
| 1674 '''); | 1600 '''); |
| 1675 | 1601 |
| 1676 driver.addFile(a); | 1602 driver.addFile(a); |
| 1677 driver.addFile(b); | 1603 driver.addFile(b); |
| 1678 await scheduler.waitForIdle(); | 1604 await scheduler.waitForIdle(); |
| 1679 | 1605 |
| 1680 { | 1606 { |
| 1681 AnalysisResult result = await driver.getResult(a); | 1607 AnalysisResult result = await driver.getResult(a); |
| 1682 expect(_getTopLevelVarType(result.unit, 'A1'), 'int'); | 1608 expect(_getTopLevelVarType(result.unit, 'A1'), 'int'); |
| 1683 expect(_getTopLevelVarType(result.unit, 'A2'), 'int'); | 1609 expect(_getTopLevelVarType(result.unit, 'A2'), 'int'); |
| 1684 } | 1610 } |
| 1685 | 1611 |
| 1686 // Update "a" so that "A1" is now "double". | 1612 // Update "a" so that "A1" is now "double". |
| 1687 // Get result for "a". | 1613 // Get result for "a". |
| 1688 // | 1614 // |
| 1689 // We get "double" for "A2", even though "A2" has the type from "b". | 1615 // We get "double" for "A2", even though "A2" has the type from "b". |
| 1690 // That's because we check for "a" API signature consistency, and because | 1616 // That's because we check for "a" API signature consistency, and because |
| 1691 // it has changed, we invalidated the dependency cache, relinked libraries | 1617 // it has changed, we invalidated the dependency cache, relinked libraries |
| 1692 // and recomputed types. | 1618 // and recomputed types. |
| 1693 provider.updateFile( | 1619 provider.updateFile(a, r''' |
| 1694 a, | |
| 1695 r''' | |
| 1696 import 'b.dart'; | 1620 import 'b.dart'; |
| 1697 var A1 = 1.2; | 1621 var A1 = 1.2; |
| 1698 var A2 = B1; | 1622 var A2 = B1; |
| 1699 '''); | 1623 '''); |
| 1700 driver.changeFile(a); | 1624 driver.changeFile(a); |
| 1701 | 1625 |
| 1702 { | 1626 { |
| 1703 AnalysisResult result = await driver.getResult(a); | 1627 AnalysisResult result = await driver.getResult(a); |
| 1704 expect(_getTopLevelVarType(result.unit, 'A1'), 'double'); | 1628 expect(_getTopLevelVarType(result.unit, 'A1'), 'double'); |
| 1705 expect(_getTopLevelVarType(result.unit, 'A2'), 'double'); | 1629 expect(_getTopLevelVarType(result.unit, 'A2'), 'double'); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1781 | 1705 |
| 1782 _assertTopLevelDeclarations( | 1706 _assertTopLevelDeclarations( |
| 1783 await driver.getTopLevelNameDeclarations('X'), [], []); | 1707 await driver.getTopLevelNameDeclarations('X'), [], []); |
| 1784 } | 1708 } |
| 1785 | 1709 |
| 1786 test_getTopLevelNameDeclarations_parts() async { | 1710 test_getTopLevelNameDeclarations_parts() async { |
| 1787 var a = _p('/test/lib/a.dart'); | 1711 var a = _p('/test/lib/a.dart'); |
| 1788 var b = _p('/test/lib/b.dart'); | 1712 var b = _p('/test/lib/b.dart'); |
| 1789 var c = _p('/test/lib/c.dart'); | 1713 var c = _p('/test/lib/c.dart'); |
| 1790 | 1714 |
| 1791 provider.newFile( | 1715 provider.newFile(a, r''' |
| 1792 a, | |
| 1793 r''' | |
| 1794 library lib; | 1716 library lib; |
| 1795 part 'b.dart'; | 1717 part 'b.dart'; |
| 1796 part 'c.dart'; | 1718 part 'c.dart'; |
| 1797 class A {} | 1719 class A {} |
| 1798 '''); | 1720 '''); |
| 1799 provider.newFile(b, 'part of lib; class B {}'); | 1721 provider.newFile(b, 'part of lib; class B {}'); |
| 1800 provider.newFile(c, 'part of lib; class C {}'); | 1722 provider.newFile(c, 'part of lib; class C {}'); |
| 1801 | 1723 |
| 1802 driver.addFile(a); | 1724 driver.addFile(a); |
| 1803 driver.addFile(b); | 1725 driver.addFile(b); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1889 | 1811 |
| 1890 // Request of referenced names is not analysis of a file. | 1812 // Request of referenced names is not analysis of a file. |
| 1891 driver.getFilesReferencingName('X'); | 1813 driver.getFilesReferencingName('X'); |
| 1892 expect(driver.hasFilesToAnalyze, isFalse); | 1814 expect(driver.hasFilesToAnalyze, isFalse); |
| 1893 } | 1815 } |
| 1894 | 1816 |
| 1895 test_hermetic_modifyLibraryFile_resolvePart() async { | 1817 test_hermetic_modifyLibraryFile_resolvePart() async { |
| 1896 var a = _p('/test/lib/a.dart'); | 1818 var a = _p('/test/lib/a.dart'); |
| 1897 var b = _p('/test/lib/b.dart'); | 1819 var b = _p('/test/lib/b.dart'); |
| 1898 | 1820 |
| 1899 provider.newFile( | 1821 provider.newFile(a, r''' |
| 1900 a, | |
| 1901 r''' | |
| 1902 library a; | 1822 library a; |
| 1903 part 'b.dart'; | 1823 part 'b.dart'; |
| 1904 class C { | 1824 class C { |
| 1905 int foo; | 1825 int foo; |
| 1906 } | 1826 } |
| 1907 '''); | 1827 '''); |
| 1908 provider.newFile( | 1828 provider.newFile(b, r''' |
| 1909 b, | |
| 1910 r''' | |
| 1911 part of a; | 1829 part of a; |
| 1912 var c = new C(); | 1830 var c = new C(); |
| 1913 '''); | 1831 '''); |
| 1914 | 1832 |
| 1915 driver.addFile(a); | 1833 driver.addFile(a); |
| 1916 driver.addFile(b); | 1834 driver.addFile(b); |
| 1917 | 1835 |
| 1918 await driver.getResult(b); | 1836 await driver.getResult(b); |
| 1919 | 1837 |
| 1920 // Modify the library, but don't notify the driver. | 1838 // Modify the library, but don't notify the driver. |
| 1921 // The driver should use the previous library content and elements. | 1839 // The driver should use the previous library content and elements. |
| 1922 provider.newFile( | 1840 provider.newFile(a, r''' |
| 1923 a, | |
| 1924 r''' | |
| 1925 library a; | 1841 library a; |
| 1926 part 'b.dart'; | 1842 part 'b.dart'; |
| 1927 class C { | 1843 class C { |
| 1928 int bar; | 1844 int bar; |
| 1929 } | 1845 } |
| 1930 '''); | 1846 '''); |
| 1931 | 1847 |
| 1932 var result = await driver.getResult(b); | 1848 var result = await driver.getResult(b); |
| 1933 var c = _getTopLevelVar(result.unit, 'c'); | 1849 var c = _getTopLevelVar(result.unit, 'c'); |
| 1934 var typeC = c.element.type as InterfaceType; | 1850 var typeC = c.element.type as InterfaceType; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1954 AnalysisResult result = await driver.getResult(a); | 1870 AnalysisResult result = await driver.getResult(a); |
| 1955 expect(result.errors, isEmpty); | 1871 expect(result.errors, isEmpty); |
| 1956 expect(_getTopLevelVarType(result.unit, 'b'), 'B'); | 1872 expect(_getTopLevelVarType(result.unit, 'b'), 'B'); |
| 1957 } | 1873 } |
| 1958 | 1874 |
| 1959 test_knownFiles() async { | 1875 test_knownFiles() async { |
| 1960 var a = _p('/test/lib/a.dart'); | 1876 var a = _p('/test/lib/a.dart'); |
| 1961 var b = _p('/test/lib/b.dart'); | 1877 var b = _p('/test/lib/b.dart'); |
| 1962 var c = _p('/test/lib/c.dart'); | 1878 var c = _p('/test/lib/c.dart'); |
| 1963 | 1879 |
| 1964 provider.newFile( | 1880 provider.newFile(a, r''' |
| 1965 a, | |
| 1966 r''' | |
| 1967 import 'b.dart'; | 1881 import 'b.dart'; |
| 1968 '''); | 1882 '''); |
| 1969 provider.newFile(b, ''); | 1883 provider.newFile(b, ''); |
| 1970 provider.newFile(c, ''); | 1884 provider.newFile(c, ''); |
| 1971 | 1885 |
| 1972 driver.addFile(a); | 1886 driver.addFile(a); |
| 1973 driver.addFile(c); | 1887 driver.addFile(c); |
| 1974 await scheduler.waitForIdle(); | 1888 await scheduler.waitForIdle(); |
| 1975 | 1889 |
| 1976 expect(driver.knownFiles, contains(a)); | 1890 expect(driver.knownFiles, contains(a)); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2028 | 1942 |
| 2029 ParseResult parseResult = await driver.parseFile(p); | 1943 ParseResult parseResult = await driver.parseFile(p); |
| 2030 var clazz = parseResult.unit.declarations[0] as ClassDeclaration; | 1944 var clazz = parseResult.unit.declarations[0] as ClassDeclaration; |
| 2031 expect(clazz.name.name, 'A2'); | 1945 expect(clazz.name.name, 'A2'); |
| 2032 } | 1946 } |
| 2033 | 1947 |
| 2034 test_part_getErrors_afterLibrary() async { | 1948 test_part_getErrors_afterLibrary() async { |
| 2035 var a = _p('/test/lib/a.dart'); | 1949 var a = _p('/test/lib/a.dart'); |
| 2036 var b = _p('/test/lib/b.dart'); | 1950 var b = _p('/test/lib/b.dart'); |
| 2037 var c = _p('/test/lib/c.dart'); | 1951 var c = _p('/test/lib/c.dart'); |
| 2038 provider.newFile( | 1952 provider.newFile(a, r''' |
| 2039 a, | |
| 2040 r''' | |
| 2041 library a; | 1953 library a; |
| 2042 import 'b.dart'; | 1954 import 'b.dart'; |
| 2043 part 'c.dart'; | 1955 part 'c.dart'; |
| 2044 class A {} | 1956 class A {} |
| 2045 var c = new C(); | 1957 var c = new C(); |
| 2046 '''); | 1958 '''); |
| 2047 provider.newFile(b, 'class B {}'); | 1959 provider.newFile(b, 'class B {}'); |
| 2048 provider.newFile( | 1960 provider.newFile(c, r''' |
| 2049 c, | |
| 2050 r''' | |
| 2051 part of a; | 1961 part of a; |
| 2052 class C {} | 1962 class C {} |
| 2053 var a = new A(); | 1963 var a = new A(); |
| 2054 var b = new B(); | 1964 var b = new B(); |
| 2055 '''); | 1965 '''); |
| 2056 | 1966 |
| 2057 driver.addFile(a); | 1967 driver.addFile(a); |
| 2058 driver.addFile(b); | 1968 driver.addFile(b); |
| 2059 driver.addFile(c); | 1969 driver.addFile(c); |
| 2060 | 1970 |
| 2061 // Process a.dart so that we know that it's a library for c.dart later. | 1971 // Process a.dart so that we know that it's a library for c.dart later. |
| 2062 { | 1972 { |
| 2063 ErrorsResult result = await driver.getErrors(a); | 1973 ErrorsResult result = await driver.getErrors(a); |
| 2064 expect(result.errors, isEmpty); | 1974 expect(result.errors, isEmpty); |
| 2065 } | 1975 } |
| 2066 | 1976 |
| 2067 // c.dart does not have errors in the context of a.dart | 1977 // c.dart does not have errors in the context of a.dart |
| 2068 { | 1978 { |
| 2069 ErrorsResult result = await driver.getErrors(c); | 1979 ErrorsResult result = await driver.getErrors(c); |
| 2070 expect(result.errors, isEmpty); | 1980 expect(result.errors, isEmpty); |
| 2071 } | 1981 } |
| 2072 } | 1982 } |
| 2073 | 1983 |
| 2074 test_part_getErrors_beforeLibrary() async { | 1984 test_part_getErrors_beforeLibrary() async { |
| 2075 var a = _p('/test/lib/a.dart'); | 1985 var a = _p('/test/lib/a.dart'); |
| 2076 var b = _p('/test/lib/b.dart'); | 1986 var b = _p('/test/lib/b.dart'); |
| 2077 var c = _p('/test/lib/c.dart'); | 1987 var c = _p('/test/lib/c.dart'); |
| 2078 provider.newFile( | 1988 provider.newFile(a, r''' |
| 2079 a, | |
| 2080 r''' | |
| 2081 library a; | 1989 library a; |
| 2082 import 'b.dart'; | 1990 import 'b.dart'; |
| 2083 part 'c.dart'; | 1991 part 'c.dart'; |
| 2084 class A {} | 1992 class A {} |
| 2085 var c = new C(); | 1993 var c = new C(); |
| 2086 '''); | 1994 '''); |
| 2087 provider.newFile(b, 'class B {}'); | 1995 provider.newFile(b, 'class B {}'); |
| 2088 provider.newFile( | 1996 provider.newFile(c, r''' |
| 2089 c, | |
| 2090 r''' | |
| 2091 part of a; | 1997 part of a; |
| 2092 class C {} | 1998 class C {} |
| 2093 var a = new A(); | 1999 var a = new A(); |
| 2094 var b = new B(); | 2000 var b = new B(); |
| 2095 '''); | 2001 '''); |
| 2096 | 2002 |
| 2097 driver.addFile(a); | 2003 driver.addFile(a); |
| 2098 driver.addFile(b); | 2004 driver.addFile(b); |
| 2099 driver.addFile(c); | 2005 driver.addFile(c); |
| 2100 | 2006 |
| 2101 // c.dart is resolve in the context of a.dart, so have no errors | 2007 // c.dart is resolve in the context of a.dart, so have no errors |
| 2102 { | 2008 { |
| 2103 ErrorsResult result = await driver.getErrors(c); | 2009 ErrorsResult result = await driver.getErrors(c); |
| 2104 expect(result.errors, isEmpty); | 2010 expect(result.errors, isEmpty); |
| 2105 } | 2011 } |
| 2106 } | 2012 } |
| 2107 | 2013 |
| 2108 test_part_getResult_afterLibrary() async { | 2014 test_part_getResult_afterLibrary() async { |
| 2109 var a = _p('/test/lib/a.dart'); | 2015 var a = _p('/test/lib/a.dart'); |
| 2110 var b = _p('/test/lib/b.dart'); | 2016 var b = _p('/test/lib/b.dart'); |
| 2111 var c = _p('/test/lib/c.dart'); | 2017 var c = _p('/test/lib/c.dart'); |
| 2112 provider.newFile( | 2018 provider.newFile(a, r''' |
| 2113 a, | |
| 2114 r''' | |
| 2115 library a; | 2019 library a; |
| 2116 import 'b.dart'; | 2020 import 'b.dart'; |
| 2117 part 'c.dart'; | 2021 part 'c.dart'; |
| 2118 class A {} | 2022 class A {} |
| 2119 var c = new C(); | 2023 var c = new C(); |
| 2120 '''); | 2024 '''); |
| 2121 provider.newFile(b, 'class B {}'); | 2025 provider.newFile(b, 'class B {}'); |
| 2122 provider.newFile( | 2026 provider.newFile(c, r''' |
| 2123 c, | |
| 2124 r''' | |
| 2125 part of a; | 2027 part of a; |
| 2126 class C {} | 2028 class C {} |
| 2127 var a = new A(); | 2029 var a = new A(); |
| 2128 var b = new B(); | 2030 var b = new B(); |
| 2129 '''); | 2031 '''); |
| 2130 | 2032 |
| 2131 driver.addFile(a); | 2033 driver.addFile(a); |
| 2132 driver.addFile(b); | 2034 driver.addFile(b); |
| 2133 driver.addFile(c); | 2035 driver.addFile(c); |
| 2134 | 2036 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2145 expect(result.errors, isEmpty); | 2047 expect(result.errors, isEmpty); |
| 2146 expect(_getTopLevelVarType(result.unit, 'a'), 'A'); | 2048 expect(_getTopLevelVarType(result.unit, 'a'), 'A'); |
| 2147 expect(_getTopLevelVarType(result.unit, 'b'), 'B'); | 2049 expect(_getTopLevelVarType(result.unit, 'b'), 'B'); |
| 2148 } | 2050 } |
| 2149 } | 2051 } |
| 2150 | 2052 |
| 2151 test_part_getResult_beforeLibrary() async { | 2053 test_part_getResult_beforeLibrary() async { |
| 2152 var a = _p('/test/lib/a.dart'); | 2054 var a = _p('/test/lib/a.dart'); |
| 2153 var b = _p('/test/lib/b.dart'); | 2055 var b = _p('/test/lib/b.dart'); |
| 2154 var c = _p('/test/lib/c.dart'); | 2056 var c = _p('/test/lib/c.dart'); |
| 2155 provider.newFile( | 2057 provider.newFile(a, r''' |
| 2156 a, | |
| 2157 r''' | |
| 2158 library a; | 2058 library a; |
| 2159 import 'b.dart'; | 2059 import 'b.dart'; |
| 2160 part 'c.dart'; | 2060 part 'c.dart'; |
| 2161 class A {} | 2061 class A {} |
| 2162 var c = new C(); | 2062 var c = new C(); |
| 2163 '''); | 2063 '''); |
| 2164 provider.newFile(b, 'class B {}'); | 2064 provider.newFile(b, 'class B {}'); |
| 2165 provider.newFile( | 2065 provider.newFile(c, r''' |
| 2166 c, | |
| 2167 r''' | |
| 2168 part of a; | 2066 part of a; |
| 2169 class C {} | 2067 class C {} |
| 2170 var a = new A(); | 2068 var a = new A(); |
| 2171 var b = new B(); | 2069 var b = new B(); |
| 2172 '''); | 2070 '''); |
| 2173 | 2071 |
| 2174 driver.addFile(a); | 2072 driver.addFile(a); |
| 2175 driver.addFile(b); | 2073 driver.addFile(b); |
| 2176 driver.addFile(c); | 2074 driver.addFile(c); |
| 2177 | 2075 |
| 2178 // b.dart will be analyzed after a.dart is analyzed. | 2076 // b.dart will be analyzed after a.dart is analyzed. |
| 2179 // So, A and B references are resolved. | 2077 // So, A and B references are resolved. |
| 2180 AnalysisResult result = await driver.getResult(c); | 2078 AnalysisResult result = await driver.getResult(c); |
| 2181 expect(result.errors, isEmpty); | 2079 expect(result.errors, isEmpty); |
| 2182 expect(_getTopLevelVarType(result.unit, 'a'), 'A'); | 2080 expect(_getTopLevelVarType(result.unit, 'a'), 'A'); |
| 2183 expect(_getTopLevelVarType(result.unit, 'b'), 'B'); | 2081 expect(_getTopLevelVarType(result.unit, 'b'), 'B'); |
| 2184 } | 2082 } |
| 2185 | 2083 |
| 2186 test_part_getResult_noLibrary() async { | 2084 test_part_getResult_noLibrary() async { |
| 2187 var c = _p('/test/lib/c.dart'); | 2085 var c = _p('/test/lib/c.dart'); |
| 2188 provider.newFile( | 2086 provider.newFile(c, r''' |
| 2189 c, | |
| 2190 r''' | |
| 2191 part of a; | 2087 part of a; |
| 2192 class C {} | 2088 class C {} |
| 2193 var a = new A(); | 2089 var a = new A(); |
| 2194 var b = new B(); | 2090 var b = new B(); |
| 2195 '''); | 2091 '''); |
| 2196 | 2092 |
| 2197 driver.addFile(c); | 2093 driver.addFile(c); |
| 2198 | 2094 |
| 2199 // There is no library which c.dart is a part of, so it has unresolved | 2095 // There is no library which c.dart is a part of, so it has unresolved |
| 2200 // A and B references. | 2096 // A and B references. |
| 2201 AnalysisResult result = await driver.getResult(c); | 2097 AnalysisResult result = await driver.getResult(c); |
| 2202 expect(result.errors, isNotEmpty); | 2098 expect(result.errors, isNotEmpty); |
| 2203 expect(result.unit, isNotNull); | 2099 expect(result.unit, isNotNull); |
| 2204 } | 2100 } |
| 2205 | 2101 |
| 2206 test_part_results_afterLibrary() async { | 2102 test_part_results_afterLibrary() async { |
| 2207 var a = _p('/test/lib/a.dart'); | 2103 var a = _p('/test/lib/a.dart'); |
| 2208 var b = _p('/test/lib/b.dart'); | 2104 var b = _p('/test/lib/b.dart'); |
| 2209 var c = _p('/test/lib/c.dart'); | 2105 var c = _p('/test/lib/c.dart'); |
| 2210 provider.newFile( | 2106 provider.newFile(a, r''' |
| 2211 a, | |
| 2212 r''' | |
| 2213 library a; | 2107 library a; |
| 2214 import 'b.dart'; | 2108 import 'b.dart'; |
| 2215 part 'c.dart'; | 2109 part 'c.dart'; |
| 2216 class A {} | 2110 class A {} |
| 2217 var c = new C(); | 2111 var c = new C(); |
| 2218 '''); | 2112 '''); |
| 2219 provider.newFile(b, 'class B {}'); | 2113 provider.newFile(b, 'class B {}'); |
| 2220 provider.newFile( | 2114 provider.newFile(c, r''' |
| 2221 c, | |
| 2222 r''' | |
| 2223 part of a; | 2115 part of a; |
| 2224 class C {} | 2116 class C {} |
| 2225 var a = new A(); | 2117 var a = new A(); |
| 2226 var b = new B(); | 2118 var b = new B(); |
| 2227 '''); | 2119 '''); |
| 2228 | 2120 |
| 2229 // The order is important for creating the test case. | 2121 // The order is important for creating the test case. |
| 2230 driver.addFile(a); | 2122 driver.addFile(a); |
| 2231 driver.addFile(b); | 2123 driver.addFile(b); |
| 2232 driver.addFile(c); | 2124 driver.addFile(c); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2252 AnalysisResult result = allResults.lastWhere((r) => r.path == c); | 2144 AnalysisResult result = allResults.lastWhere((r) => r.path == c); |
| 2253 expect(result.errors, isNotEmpty); | 2145 expect(result.errors, isNotEmpty); |
| 2254 expect(result.unit, isNull); | 2146 expect(result.unit, isNull); |
| 2255 } | 2147 } |
| 2256 } | 2148 } |
| 2257 | 2149 |
| 2258 test_part_results_beforeLibrary() async { | 2150 test_part_results_beforeLibrary() async { |
| 2259 var a = _p('/test/lib/a.dart'); | 2151 var a = _p('/test/lib/a.dart'); |
| 2260 var b = _p('/test/lib/b.dart'); | 2152 var b = _p('/test/lib/b.dart'); |
| 2261 var c = _p('/test/lib/c.dart'); | 2153 var c = _p('/test/lib/c.dart'); |
| 2262 provider.newFile( | 2154 provider.newFile(a, r''' |
| 2263 a, | |
| 2264 r''' | |
| 2265 library a; | 2155 library a; |
| 2266 import 'b.dart'; | 2156 import 'b.dart'; |
| 2267 part 'c.dart'; | 2157 part 'c.dart'; |
| 2268 class A {} | 2158 class A {} |
| 2269 var c = new C(); | 2159 var c = new C(); |
| 2270 '''); | 2160 '''); |
| 2271 provider.newFile(b, 'class B {}'); | 2161 provider.newFile(b, 'class B {}'); |
| 2272 provider.newFile( | 2162 provider.newFile(c, r''' |
| 2273 c, | |
| 2274 r''' | |
| 2275 part of a; | 2163 part of a; |
| 2276 class C {} | 2164 class C {} |
| 2277 var a = new A(); | 2165 var a = new A(); |
| 2278 var b = new B(); | 2166 var b = new B(); |
| 2279 '''); | 2167 '''); |
| 2280 | 2168 |
| 2281 // The order is important for creating the test case. | 2169 // The order is important for creating the test case. |
| 2282 driver.addFile(c); | 2170 driver.addFile(c); |
| 2283 driver.addFile(a); | 2171 driver.addFile(a); |
| 2284 driver.addFile(b); | 2172 driver.addFile(b); |
| 2285 | 2173 |
| 2286 await scheduler.waitForIdle(); | 2174 await scheduler.waitForIdle(); |
| 2287 | 2175 |
| 2288 // c.dart was added before a.dart, so we attempt to analyze it before | 2176 // c.dart was added before a.dart, so we attempt to analyze it before |
| 2289 // a.dart, but we cannot find the library for it, so we delay analysis | 2177 // a.dart, but we cannot find the library for it, so we delay analysis |
| 2290 // until all other files are analyzed, including a.dart, after which we | 2178 // until all other files are analyzed, including a.dart, after which we |
| 2291 // analyze the delayed parts. | 2179 // analyze the delayed parts. |
| 2292 AnalysisResult result = allResults.lastWhere((r) => r.path == c); | 2180 AnalysisResult result = allResults.lastWhere((r) => r.path == c); |
| 2293 expect(result.errors, isEmpty); | 2181 expect(result.errors, isEmpty); |
| 2294 expect(result.unit, isNull); | 2182 expect(result.unit, isNull); |
| 2295 } | 2183 } |
| 2296 | 2184 |
| 2297 test_part_results_noLibrary() async { | 2185 test_part_results_noLibrary() async { |
| 2298 var c = _p('/test/lib/c.dart'); | 2186 var c = _p('/test/lib/c.dart'); |
| 2299 provider.newFile( | 2187 provider.newFile(c, r''' |
| 2300 c, | |
| 2301 r''' | |
| 2302 part of a; | 2188 part of a; |
| 2303 class C {} | 2189 class C {} |
| 2304 var a = new A(); | 2190 var a = new A(); |
| 2305 var b = new B(); | 2191 var b = new B(); |
| 2306 '''); | 2192 '''); |
| 2307 | 2193 |
| 2308 driver.addFile(c); | 2194 driver.addFile(c); |
| 2309 | 2195 |
| 2310 await scheduler.waitForIdle(); | 2196 await scheduler.waitForIdle(); |
| 2311 | 2197 |
| 2312 // There is no library which c.dart is a part of, so it has unresolved | 2198 // There is no library which c.dart is a part of, so it has unresolved |
| 2313 // A and B references. | 2199 // A and B references. |
| 2314 AnalysisResult result = allResults.lastWhere((r) => r.path == c); | 2200 AnalysisResult result = allResults.lastWhere((r) => r.path == c); |
| 2315 expect(result.errors, isNotEmpty); | 2201 expect(result.errors, isNotEmpty); |
| 2316 expect(result.unit, isNull); | 2202 expect(result.unit, isNull); |
| 2317 } | 2203 } |
| 2318 | 2204 |
| 2319 test_part_results_priority_beforeLibrary() async { | 2205 test_part_results_priority_beforeLibrary() async { |
| 2320 var a = _p('/test/lib/a.dart'); | 2206 var a = _p('/test/lib/a.dart'); |
| 2321 var b = _p('/test/lib/b.dart'); | 2207 var b = _p('/test/lib/b.dart'); |
| 2322 var c = _p('/test/lib/c.dart'); | 2208 var c = _p('/test/lib/c.dart'); |
| 2323 provider.newFile( | 2209 provider.newFile(a, r''' |
| 2324 a, | |
| 2325 r''' | |
| 2326 library a; | 2210 library a; |
| 2327 import 'b.dart'; | 2211 import 'b.dart'; |
| 2328 part 'c.dart'; | 2212 part 'c.dart'; |
| 2329 class A {} | 2213 class A {} |
| 2330 var c = new C(); | 2214 var c = new C(); |
| 2331 '''); | 2215 '''); |
| 2332 provider.newFile(b, 'class B {}'); | 2216 provider.newFile(b, 'class B {}'); |
| 2333 provider.newFile( | 2217 provider.newFile(c, r''' |
| 2334 c, | |
| 2335 r''' | |
| 2336 part of a; | 2218 part of a; |
| 2337 class C {} | 2219 class C {} |
| 2338 var a = new A(); | 2220 var a = new A(); |
| 2339 var b = new B(); | 2221 var b = new B(); |
| 2340 '''); | 2222 '''); |
| 2341 | 2223 |
| 2342 // The order is important for creating the test case. | 2224 // The order is important for creating the test case. |
| 2343 driver.priorityFiles = [c]; | 2225 driver.priorityFiles = [c]; |
| 2344 driver.addFile(c); | 2226 driver.addFile(c); |
| 2345 driver.addFile(a); | 2227 driver.addFile(a); |
| 2346 driver.addFile(b); | 2228 driver.addFile(b); |
| 2347 | 2229 |
| 2348 await scheduler.waitForIdle(); | 2230 await scheduler.waitForIdle(); |
| 2349 | 2231 |
| 2350 // c.dart was added before a.dart, so we attempt to analyze it before | 2232 // c.dart was added before a.dart, so we attempt to analyze it before |
| 2351 // a.dart, but we cannot find the library for it, so we delay analysis | 2233 // a.dart, but we cannot find the library for it, so we delay analysis |
| 2352 // until all other files are analyzed, including a.dart, after which we | 2234 // until all other files are analyzed, including a.dart, after which we |
| 2353 // analyze the delayed parts. | 2235 // analyze the delayed parts. |
| 2354 AnalysisResult result = allResults.lastWhere((r) => r.path == c); | 2236 AnalysisResult result = allResults.lastWhere((r) => r.path == c); |
| 2355 expect(result.errors, isEmpty); | 2237 expect(result.errors, isEmpty); |
| 2356 expect(result.unit, isNotNull); | 2238 expect(result.unit, isNotNull); |
| 2357 } | 2239 } |
| 2358 | 2240 |
| 2359 test_removeFile_changeFile_implicitlyAnalyzed() async { | 2241 test_removeFile_changeFile_implicitlyAnalyzed() async { |
| 2360 var a = _p('/test/lib/a.dart'); | 2242 var a = _p('/test/lib/a.dart'); |
| 2361 var b = _p('/test/lib/b.dart'); | 2243 var b = _p('/test/lib/b.dart'); |
| 2362 provider.newFile( | 2244 provider.newFile(a, r''' |
| 2363 a, | |
| 2364 r''' | |
| 2365 import 'b.dart'; | 2245 import 'b.dart'; |
| 2366 var A = B; | 2246 var A = B; |
| 2367 '''); | 2247 '''); |
| 2368 provider.newFile(b, 'var B = 1;'); | 2248 provider.newFile(b, 'var B = 1;'); |
| 2369 | 2249 |
| 2370 driver.priorityFiles = [a, b]; | 2250 driver.priorityFiles = [a, b]; |
| 2371 driver.addFile(a); | 2251 driver.addFile(a); |
| 2372 driver.addFile(b); | 2252 driver.addFile(b); |
| 2373 | 2253 |
| 2374 // We have results for both "a" and "b". | 2254 // We have results for both "a" and "b". |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2442 allResults.clear(); | 2322 allResults.clear(); |
| 2443 } | 2323 } |
| 2444 | 2324 |
| 2445 test_results_order() async { | 2325 test_results_order() async { |
| 2446 var a = _p('/test/lib/a.dart'); | 2326 var a = _p('/test/lib/a.dart'); |
| 2447 var b = _p('/test/lib/b.dart'); | 2327 var b = _p('/test/lib/b.dart'); |
| 2448 var c = _p('/test/lib/c.dart'); | 2328 var c = _p('/test/lib/c.dart'); |
| 2449 var d = _p('/test/lib/d.dart'); | 2329 var d = _p('/test/lib/d.dart'); |
| 2450 var e = _p('/test/lib/e.dart'); | 2330 var e = _p('/test/lib/e.dart'); |
| 2451 var f = _p('/test/lib/f.dart'); | 2331 var f = _p('/test/lib/f.dart'); |
| 2452 provider.newFile( | 2332 provider.newFile(a, r''' |
| 2453 a, | |
| 2454 r''' | |
| 2455 import 'd.dart'; | 2333 import 'd.dart'; |
| 2456 '''); | 2334 '''); |
| 2457 provider.newFile(b, ''); | 2335 provider.newFile(b, ''); |
| 2458 provider.newFile( | 2336 provider.newFile(c, r''' |
| 2459 c, | |
| 2460 r''' | |
| 2461 import 'd.dart'; | 2337 import 'd.dart'; |
| 2462 '''); | 2338 '''); |
| 2463 provider.newFile( | 2339 provider.newFile(d, r''' |
| 2464 d, | |
| 2465 r''' | |
| 2466 import 'b.dart'; | 2340 import 'b.dart'; |
| 2467 '''); | 2341 '''); |
| 2468 provider.newFile( | 2342 provider.newFile(e, r''' |
| 2469 e, | |
| 2470 r''' | |
| 2471 export 'b.dart'; | 2343 export 'b.dart'; |
| 2472 '''); | 2344 '''); |
| 2473 provider.newFile( | 2345 provider.newFile(f, r''' |
| 2474 f, | |
| 2475 r''' | |
| 2476 import 'e.dart'; | 2346 import 'e.dart'; |
| 2477 class F extends X {} | 2347 class F extends X {} |
| 2478 '''); | 2348 '''); |
| 2479 | 2349 |
| 2480 driver.addFile(a); | 2350 driver.addFile(a); |
| 2481 driver.addFile(b); | 2351 driver.addFile(b); |
| 2482 driver.addFile(c); | 2352 driver.addFile(c); |
| 2483 driver.addFile(d); | 2353 driver.addFile(d); |
| 2484 driver.addFile(e); | 2354 driver.addFile(e); |
| 2485 driver.addFile(f); | 2355 driver.addFile(f); |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2786 expect(() { | 2656 expect(() { |
| 2787 driver.changeFile(path); | 2657 driver.changeFile(path); |
| 2788 }, throwsStateError); | 2658 }, throwsStateError); |
| 2789 } | 2659 } |
| 2790 | 2660 |
| 2791 test_getResult_libraryUnits() async { | 2661 test_getResult_libraryUnits() async { |
| 2792 var lib = _p('/lib.dart'); | 2662 var lib = _p('/lib.dart'); |
| 2793 var part1 = _p('/part1.dart'); | 2663 var part1 = _p('/part1.dart'); |
| 2794 var part2 = _p('/part2.dart'); | 2664 var part2 = _p('/part2.dart'); |
| 2795 | 2665 |
| 2796 provider.newFile( | 2666 provider.newFile(lib, r''' |
| 2797 lib, | |
| 2798 r''' | |
| 2799 library test; | 2667 library test; |
| 2800 part 'part1.dart'; | 2668 part 'part1.dart'; |
| 2801 part 'part2.dart'; | 2669 part 'part2.dart'; |
| 2802 '''); | 2670 '''); |
| 2803 provider.newFile(part1, 'part of test; class A {}'); | 2671 provider.newFile(part1, 'part of test; class A {}'); |
| 2804 provider.newFile(part2, 'part of test; class B {}'); | 2672 provider.newFile(part2, 'part of test; class B {}'); |
| 2805 | 2673 |
| 2806 driver.addFile(lib); | 2674 driver.addFile(lib); |
| 2807 driver.addFile(part1); | 2675 driver.addFile(part1); |
| 2808 driver.addFile(part2); | 2676 driver.addFile(part2); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2857 var path = _p('/test.dart'); | 2725 var path = _p('/test.dart'); |
| 2858 expect(() { | 2726 expect(() { |
| 2859 driver.removeFile(path); | 2727 driver.removeFile(path); |
| 2860 }, throwsStateError); | 2728 }, throwsStateError); |
| 2861 } | 2729 } |
| 2862 | 2730 |
| 2863 String _p(String path) => provider.convertPath(path); | 2731 String _p(String path) => provider.convertPath(path); |
| 2864 } | 2732 } |
| 2865 | 2733 |
| 2866 class _SourceMock extends TypedMock implements Source {} | 2734 class _SourceMock extends TypedMock implements Source {} |
| OLD | NEW |