| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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.edit.refactoring; | 5 library test.edit.refactoring; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/edit/edit_domain.dart'; | 9 import 'package:analysis_server/src/edit/edit_domain.dart'; |
| 10 import 'package:analysis_server/src/protocol.dart'; | 10 import 'package:analysis_server/src/protocol.dart'; |
| (...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 | 621 |
| 622 void _setOffsetLengthForString(String search) { | 622 void _setOffsetLengthForString(String search) { |
| 623 offset = findOffset(search); | 623 offset = findOffset(search); |
| 624 length = search.length; | 624 length = search.length; |
| 625 } | 625 } |
| 626 } | 626 } |
| 627 | 627 |
| 628 | 628 |
| 629 @reflectiveTest | 629 @reflectiveTest |
| 630 class GetAvailableRefactoringsTest extends AbstractAnalysisTest { | 630 class GetAvailableRefactoringsTest extends AbstractAnalysisTest { |
| 631 List<RefactoringKind> kinds; |
| 632 |
| 631 /** | 633 /** |
| 632 * Tests that there is a RENAME refactoring available at the [search] offset. | 634 * Tests that there is a RENAME refactoring available at the [search] offset. |
| 633 */ | 635 */ |
| 634 Future assertHasRenameRefactoring(String code, String search) { | 636 Future assertHasRenameRefactoring(String code, String search) async { |
| 637 return assertHasKind(code, search, RefactoringKind.RENAME, true); |
| 638 } |
| 639 |
| 640 /** |
| 641 * Tests that there is refactoring of the given [kind] is available at the |
| 642 * [search] offset. |
| 643 */ |
| 644 Future assertHasKind(String code, String search, RefactoringKind kind, |
| 645 bool expected) async { |
| 635 addTestFile(code); | 646 addTestFile(code); |
| 636 return waitForTasksFinished().then((_) { | 647 await waitForTasksFinished(); |
| 637 List<RefactoringKind> kinds = getRefactoringsAtString(search); | 648 await getRefactoringsAtString(search); |
| 638 expect(kinds, contains(RefactoringKind.RENAME)); | 649 // verify |
| 639 }); | 650 Matcher matcher = contains(kind); |
| 651 if (!expected) { |
| 652 matcher = isNot(matcher); |
| 653 } |
| 654 expect(kinds, matcher); |
| 640 } | 655 } |
| 641 | 656 |
| 642 @override | 657 @override |
| 643 Index createIndex() { | 658 Index createIndex() { |
| 644 return createLocalMemoryIndex(); | 659 return createLocalMemoryIndex(); |
| 645 } | 660 } |
| 646 | 661 |
| 647 /** | 662 /** |
| 648 * Returns the list of available refactorings for the given [offset] and | 663 * Returns the list of available refactorings for the given [offset] and |
| 649 * [length]. | 664 * [length]. |
| 650 */ | 665 */ |
| 651 List<RefactoringKind> getRefactorings(int offset, int length) { | 666 Future getRefactorings(int offset, int length) async { |
| 652 Request request = new EditGetAvailableRefactoringsParams( | 667 Request request = new EditGetAvailableRefactoringsParams( |
| 653 testFile, | 668 testFile, |
| 654 offset, | 669 offset, |
| 655 length).toRequest('0'); | 670 length).toRequest('0'); |
| 656 Response response = handleSuccessfulRequest(request); | 671 serverChannel.sendRequest(request); |
| 672 var response = await serverChannel.waitForResponse(request); |
| 657 var result = new EditGetAvailableRefactoringsResult.fromResponse(response); | 673 var result = new EditGetAvailableRefactoringsResult.fromResponse(response); |
| 658 return result.kinds; | 674 kinds = result.kinds; |
| 659 } | 675 } |
| 660 | 676 |
| 661 /** | 677 /** |
| 662 * Returns the list of available refactorings at the offset of [search]. | 678 * Returns the list of available refactorings at the offset of [search]. |
| 663 */ | 679 */ |
| 664 List<RefactoringKind> getRefactoringsAtString(String search) { | 680 Future getRefactoringsAtString(String search) { |
| 665 int offset = findOffset(search); | 681 int offset = findOffset(search); |
| 666 return getRefactorings(offset, 0); | 682 return getRefactorings(offset, 0); |
| 667 } | 683 } |
| 668 | 684 |
| 669 List<RefactoringKind> getRefactoringsForString(String search) { | 685 Future getRefactoringsForString(String search) { |
| 670 int offset = findOffset(search); | 686 int offset = findOffset(search); |
| 671 return getRefactorings(offset, search.length); | 687 return getRefactorings(offset, search.length); |
| 672 } | 688 } |
| 673 | 689 |
| 674 @override | 690 @override |
| 675 void setUp() { | 691 void setUp() { |
| 676 super.setUp(); | 692 super.setUp(); |
| 677 createProject(); | 693 createProject(); |
| 678 handler = new EditDomainHandler(server); | 694 handler = new EditDomainHandler(server); |
| 695 server.handlers = [handler]; |
| 679 } | 696 } |
| 680 | 697 |
| 681 Future test_extractLocal() { | 698 Future test_extractLocal() async { |
| 682 addTestFile(''' | 699 addTestFile(''' |
| 683 main() { | 700 main() { |
| 684 var a = 1 + 2; | 701 var a = 1 + 2; |
| 685 } | 702 } |
| 686 '''); | 703 '''); |
| 687 return waitForTasksFinished().then((_) { | 704 await waitForTasksFinished(); |
| 688 var search = '1 + 2'; | 705 await getRefactoringsForString('1 + 2'); |
| 689 List<RefactoringKind> kinds = getRefactoringsForString(search); | 706 expect(kinds, contains(RefactoringKind.EXTRACT_LOCAL_VARIABLE)); |
| 690 expect(kinds, contains(RefactoringKind.EXTRACT_LOCAL_VARIABLE)); | 707 expect(kinds, contains(RefactoringKind.EXTRACT_METHOD)); |
| 691 expect(kinds, contains(RefactoringKind.EXTRACT_METHOD)); | 708 } |
| 692 }); | 709 |
| 710 Future test_convertMethodToGetter_hasElement() { |
| 711 return assertHasKind(''' |
| 712 int getValue() => 42; |
| 713 ''', 'getValue', RefactoringKind.CONVERT_METHOD_TO_GETTER, true); |
| 693 } | 714 } |
| 694 | 715 |
| 695 Future test_rename_hasElement_class() { | 716 Future test_rename_hasElement_class() { |
| 696 return assertHasRenameRefactoring(''' | 717 return assertHasRenameRefactoring(''' |
| 697 class Test {} | 718 class Test {} |
| 698 main() { | 719 main() { |
| 699 Test v; | 720 Test v; |
| 700 } | 721 } |
| 701 ''', 'Test v'); | 722 ''', 'Test v'); |
| 702 } | 723 } |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 790 return assertHasRenameRefactoring(''' | 811 return assertHasRenameRefactoring(''' |
| 791 class A { | 812 class A { |
| 792 test() {} | 813 test() {} |
| 793 } | 814 } |
| 794 main(A a) { | 815 main(A a) { |
| 795 a.test(); | 816 a.test(); |
| 796 } | 817 } |
| 797 ''', 'test();'); | 818 ''', 'test();'); |
| 798 } | 819 } |
| 799 | 820 |
| 800 Future test_rename_noElement() { | 821 Future test_rename_noElement() async { |
| 801 addTestFile(''' | 822 addTestFile(''' |
| 802 main() { | 823 main() { |
| 803 // not an element | 824 // not an element |
| 804 } | 825 } |
| 805 '''); | 826 '''); |
| 806 return waitForTasksFinished().then((_) { | 827 await waitForTasksFinished(); |
| 807 List<RefactoringKind> kinds = | 828 await getRefactoringsAtString('// not an element'); |
| 808 getRefactoringsAtString('// not an element'); | 829 expect(kinds, isNot(contains(RefactoringKind.RENAME))); |
| 809 expect(kinds, isNot(contains(RefactoringKind.RENAME))); | |
| 810 }); | |
| 811 } | 830 } |
| 812 } | 831 } |
| 813 | 832 |
| 814 | 833 |
| 815 @reflectiveTest | 834 @reflectiveTest |
| 816 class InlineLocalTest extends _AbstractGetRefactoring_Test { | 835 class InlineLocalTest extends _AbstractGetRefactoring_Test { |
| 817 test_feedback() { | 836 test_feedback() { |
| 818 addTestFile(''' | 837 addTestFile(''' |
| 819 main() { | 838 main() { |
| 820 int test = 42; | 839 int test = 42; |
| (...skipping 965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1786 true).toRequest('0'); | 1805 true).toRequest('0'); |
| 1787 return _assertErrorResposeNoIndex(request); | 1806 return _assertErrorResposeNoIndex(request); |
| 1788 } | 1807 } |
| 1789 | 1808 |
| 1790 _assertErrorResposeNoIndex(Request request) async { | 1809 _assertErrorResposeNoIndex(Request request) async { |
| 1791 Response response = await serverChannel.sendRequest(request); | 1810 Response response = await serverChannel.sendRequest(request); |
| 1792 expect(response.error, isNotNull); | 1811 expect(response.error, isNotNull); |
| 1793 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); | 1812 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); |
| 1794 } | 1813 } |
| 1795 } | 1814 } |
| OLD | NEW |