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

Side by Side Diff: pkg/analysis_server/test/services/correction/assist_test.dart

Issue 2753123003: Add quick-fix to convert child: to children: (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 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.services.correction.assist; 5 library test.services.correction.assist;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/plugin/edit/assist/assist_core.dart'; 9 import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
10 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart'; 10 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
11 import 'package:analysis_server/plugin/protocol/protocol.dart'; 11 import 'package:analysis_server/plugin/protocol/protocol.dart';
12 import 'package:analysis_server/src/plugin/server_plugin.dart'; 12 import 'package:analysis_server/src/plugin/server_plugin.dart';
13 import 'package:analysis_server/src/services/correction/assist.dart'; 13 import 'package:analysis_server/src/services/correction/assist.dart';
14 import 'package:analysis_server/src/services/correction/assist_internal.dart'; 14 import 'package:analysis_server/src/services/correction/assist_internal.dart';
15 import 'package:analyzer/dart/ast/ast.dart'; 15 import 'package:analyzer/dart/ast/ast.dart';
16 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; 16 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
17 import 'package:analyzer/dart/element/element.dart'; 17 import 'package:analyzer/dart/element/element.dart';
18 import 'package:analyzer/file_system/file_system.dart'; 18 import 'package:analyzer/file_system/file_system.dart';
19 import 'package:analyzer/source/package_map_resolver.dart'; 19 import 'package:analyzer/source/package_map_resolver.dart';
20 import 'package:analyzer/src/generated/engine.dart'; 20 import 'package:analyzer/src/generated/engine.dart';
21 import 'package:analyzer/src/generated/source.dart'; 21 import 'package:analyzer/src/generated/source.dart';
22 import 'package:plugin/manager.dart'; 22 import 'package:plugin/manager.dart';
23 import 'package:plugin/plugin.dart'; 23 import 'package:plugin/plugin.dart';
24 import 'package:test/test.dart'; 24 import 'package:test/test.dart';
25 import 'package:test_reflective_loader/test_reflective_loader.dart'; 25 import 'package:test_reflective_loader/test_reflective_loader.dart';
26 26
27 import '../../abstract_single_unit.dart'; 27 import '../../abstract_single_unit.dart';
28 import 'flutter_util.dart';
28 29
29 main() { 30 main() {
30 defineReflectiveSuite(() { 31 defineReflectiveSuite(() {
31 defineReflectiveTests(AssistProcessorTest); 32 defineReflectiveTests(AssistProcessorTest);
32 defineReflectiveTests(AssistProcessorTest_Driver); 33 defineReflectiveTests(AssistProcessorTest_Driver);
33 }); 34 });
34 } 35 }
35 36
36 @reflectiveTest 37 @reflectiveTest
37 class AssistProcessorTest extends AbstractSingleUnitTest { 38 class AssistProcessorTest extends AbstractSingleUnitTest {
38 int offset; 39 int offset;
39 int length; 40 int length;
40 41
41 ServerPlugin plugin; 42 ServerPlugin plugin;
42 Assist assist; 43 Assist assist;
43 SourceChange change; 44 SourceChange change;
44 String resultCode; 45 String resultCode;
45 LinkedEditGroup linkedPositionGroup; 46 LinkedEditGroup linkedPositionGroup;
46 47
47 String flutterPkgLibPath = '/packages/flutter/lib';
48
49 String get _flutter_framework_code => '''
50 class Widget {}
51 class RenderObjectWidget extends Widget {}
52 class StatelessWidget extends Widget {}
53 class SingleChildRenderObjectWidget extends RenderObjectWidget {}
54 class Transform extends SingleChildRenderObjectWidget {}
55 class ClipRect extends SingleChildRenderObjectWidget { ClipRect.rect(){} }
56 class AspectRatio extends SingleChildRenderObjectWidget {}
57 class Container extends StatelessWidget { Container({child: null, width: null, h eight: null}){}}
58 class Center extends StatelessWidget { Center({child: null, key: null}){}}
59 class DefaultTextStyle extends StatelessWidget { DefaultTextStyle({child: null}) {}}
60 class Row extends Widget { Row({children: null}){}}
61 class GestureDetector extends SingleChildRenderObjectWidget { GestureDetector({c hild: null, onTap: null}){}}
62 class Scaffold extends Widget { Scaffold({body: null}){}}
63 ''';
64
65 /** 48 /**
66 * Asserts that there is an [Assist] of the given [kind] at [offset] which 49 * Asserts that there is an [Assist] of the given [kind] at [offset] which
67 * produces the [expected] code when applied to [testCode]. 50 * produces the [expected] code when applied to [testCode].
68 */ 51 */
69 assertHasAssist(AssistKind kind, String expected) async { 52 assertHasAssist(AssistKind kind, String expected) async {
70 assist = await _assertHasAssist(kind); 53 assist = await _assertHasAssist(kind);
71 change = assist.change; 54 change = assist.change;
72 // apply to "file" 55 // apply to "file"
73 List<SourceFileEdit> fileEdits = change.edits; 56 List<SourceFileEdit> fileEdits = change.edits;
74 expect(fileEdits, hasLength(1)); 57 expect(fileEdits, hasLength(1));
(...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after
1031 /// AAAAAAA [int] AAAAAAA 1014 /// AAAAAAA [int] AAAAAAA
1032 /// BBBBBBBB BBBB BBBB 1015 /// BBBBBBBB BBBB BBBB
1033 /// CCC [A] CCCCCCCCCCC 1016 /// CCC [A] CCCCCCCCCCC
1034 mmm() {} 1017 mmm() {}
1035 } 1018 }
1036 '''); 1019 ''');
1037 } 1020 }
1038 1021
1039 test_convertFlutterChild_OK_multiLine() async { 1022 test_convertFlutterChild_OK_multiLine() async {
1040 _configureFlutterPkg({ 1023 _configureFlutterPkg({
1041 'src/widgets/framework.dart': _flutter_framework_code, 1024 'src/widgets/framework.dart': flutter_framework_code,
1042 }); 1025 });
1043 await resolveTestUnit(''' 1026 await resolveTestUnit('''
1044 import 'package:flutter/src/widgets/framework.dart'; 1027 import 'package:flutter/src/widgets/framework.dart';
1045 build() { 1028 build() {
1046 return new Scaffold( 1029 return new Scaffold(
1047 // start 1030 // start
1048 body: new Center( 1031 body: new Center(
1049 /*caret*/child: new Container( 1032 /*caret*/child: new Container(
1050 width: 200.0, 1033 width: 200.0,
1051 height: 300.0, 1034 height: 300.0,
(...skipping 23 matching lines...) Expand all
1075 ), 1058 ),
1076 // end 1059 // end
1077 ); 1060 );
1078 } 1061 }
1079 '''); 1062 ''');
1080 } 1063 }
1081 1064
1082 test_convertFlutterChild_OK_newlineChild() async { 1065 test_convertFlutterChild_OK_newlineChild() async {
1083 // This case could occur with deeply nested constructors, common in Flutter. 1066 // This case could occur with deeply nested constructors, common in Flutter.
1084 _configureFlutterPkg({ 1067 _configureFlutterPkg({
1085 'src/widgets/framework.dart': _flutter_framework_code, 1068 'src/widgets/framework.dart': flutter_framework_code,
1086 }); 1069 });
1087 await resolveTestUnit(''' 1070 await resolveTestUnit('''
1088 import 'package:flutter/src/widgets/framework.dart'; 1071 import 'package:flutter/src/widgets/framework.dart';
1089 build() { 1072 build() {
1090 return new Scaffold( 1073 return new Scaffold(
1091 // start 1074 // start
1092 body: new Center( 1075 body: new Center(
1093 /*caret*/child: 1076 /*caret*/child:
1094 new Container( 1077 new Container(
1095 width: 200.0, 1078 width: 200.0,
(...skipping 23 matching lines...) Expand all
1119 key: null, 1102 key: null,
1120 ), 1103 ),
1121 // end 1104 // end
1122 ); 1105 );
1123 } 1106 }
1124 '''); 1107 ''');
1125 } 1108 }
1126 1109
1127 test_convertFlutterChild_OK_singleLine() async { 1110 test_convertFlutterChild_OK_singleLine() async {
1128 _configureFlutterPkg({ 1111 _configureFlutterPkg({
1129 'src/widgets/framework.dart': _flutter_framework_code, 1112 'src/widgets/framework.dart': flutter_framework_code,
1130 }); 1113 });
1131 await resolveTestUnit(''' 1114 await resolveTestUnit('''
1132 import 'package:flutter/src/widgets/framework.dart'; 1115 import 'package:flutter/src/widgets/framework.dart';
1133 build() { 1116 build() {
1134 return new Scaffold( 1117 return new Scaffold(
1135 // start 1118 // start
1136 body: new Center( 1119 body: new Center(
1137 /*caret*/child: new GestureDetector(), 1120 /*caret*/child: new GestureDetector(),
1138 key: null, 1121 key: null,
1139 ), 1122 ),
(...skipping 2480 matching lines...) Expand 10 before | Expand all | Expand 10 after
3620 DartAssistKind.JOIN_VARIABLE_DECLARATION, 3603 DartAssistKind.JOIN_VARIABLE_DECLARATION,
3621 ''' 3604 '''
3622 main() { 3605 main() {
3623 var v = 1; 3606 var v = 1;
3624 } 3607 }
3625 '''); 3608 ''');
3626 } 3609 }
3627 3610
3628 test_moveFlutterWidgetDown_OK() async { 3611 test_moveFlutterWidgetDown_OK() async {
3629 _configureFlutterPkg({ 3612 _configureFlutterPkg({
3630 'src/widgets/framework.dart': _flutter_framework_code, 3613 'src/widgets/framework.dart': flutter_framework_code,
3631 }); 3614 });
3632 await resolveTestUnit(''' 3615 await resolveTestUnit('''
3633 import 'package:flutter/src/widgets/framework.dart'; 3616 import 'package:flutter/src/widgets/framework.dart';
3634 build() { 3617 build() {
3635 return new Scaffold( 3618 return new Scaffold(
3636 // start 3619 // start
3637 body: new /*caret*/GestureDetector( 3620 body: new /*caret*/GestureDetector(
3638 onTap: () => startResize(), 3621 onTap: () => startResize(),
3639 child: new Center( 3622 child: new Center(
3640 child: new Container( 3623 child: new Container(
(...skipping 28 matching lines...) Expand all
3669 ), 3652 ),
3670 // end 3653 // end
3671 ); 3654 );
3672 } 3655 }
3673 startResize() {} 3656 startResize() {}
3674 '''); 3657 ''');
3675 } 3658 }
3676 3659
3677 test_moveFlutterWidgetUp_OK() async { 3660 test_moveFlutterWidgetUp_OK() async {
3678 _configureFlutterPkg({ 3661 _configureFlutterPkg({
3679 'src/widgets/framework.dart': _flutter_framework_code, 3662 'src/widgets/framework.dart': flutter_framework_code,
3680 }); 3663 });
3681 await resolveTestUnit(''' 3664 await resolveTestUnit('''
3682 import 'package:flutter/src/widgets/framework.dart'; 3665 import 'package:flutter/src/widgets/framework.dart';
3683 build() { 3666 build() {
3684 return new Scaffold( 3667 return new Scaffold(
3685 // start 3668 // start
3686 body: new Center( 3669 body: new Center(
3687 child: new /*caret*/GestureDetector( 3670 child: new /*caret*/GestureDetector(
3688 onTap: () => startResize(), 3671 onTap: () => startResize(),
3689 child: new Container( 3672 child: new Container(
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
3839 await assertHasAssistAt( 3822 await assertHasAssistAt(
3840 'int ', 3823 'int ',
3841 DartAssistKind.REMOVE_TYPE_ANNOTATION, 3824 DartAssistKind.REMOVE_TYPE_ANNOTATION,
3842 ''' 3825 '''
3843 final V = 1; 3826 final V = 1;
3844 '''); 3827 ''');
3845 } 3828 }
3846 3829
3847 test_reparentFlutterList_BAD_multiLine() async { 3830 test_reparentFlutterList_BAD_multiLine() async {
3848 _configureFlutterPkg({ 3831 _configureFlutterPkg({
3849 'src/widgets/framework.dart': _flutter_framework_code, 3832 'src/widgets/framework.dart': flutter_framework_code,
3850 }); 3833 });
3851 await resolveTestUnit(''' 3834 await resolveTestUnit('''
3852 import 'package:flutter/src/widgets/framework.dart'; 3835 import 'package:flutter/src/widgets/framework.dart';
3853 build() { 3836 build() {
3854 return new Container( 3837 return new Container(
3855 child: new Row( 3838 child: new Row(
3856 children: [/*caret*/ 3839 children: [/*caret*/
3857 // start 3840 // start
3858 new Transform(), 3841 new Transform(),
3859 new Object(), 3842 new Object(),
3860 new AspectRatio(), 3843 new AspectRatio(),
3861 // end 3844 // end
3862 ], 3845 ],
3863 ), 3846 ),
3864 ); 3847 );
3865 } 3848 }
3866 '''); 3849 ''');
3867 _setCaretLocation(); 3850 _setCaretLocation();
3868 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_LIST); 3851 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_LIST);
3869 } 3852 }
3870 3853
3871 test_reparentFlutterList_BAD_singleLine() async { 3854 test_reparentFlutterList_BAD_singleLine() async {
3872 _configureFlutterPkg({ 3855 _configureFlutterPkg({
3873 'src/widgets/framework.dart': _flutter_framework_code, 3856 'src/widgets/framework.dart': flutter_framework_code,
3874 }); 3857 });
3875 await resolveTestUnit(''' 3858 await resolveTestUnit('''
3876 import 'package:flutter/src/widgets/framework.dart'; 3859 import 'package:flutter/src/widgets/framework.dart';
3877 class FakeFlutter { 3860 class FakeFlutter {
3878 main() { 3861 main() {
3879 var obj; 3862 var obj;
3880 // start 3863 // start
3881 return new Row(children: [/*caret*/ new Transform()]); 3864 return new Row(children: [/*caret*/ new Transform()]);
3882 // end 3865 // end
3883 } 3866 }
3884 } 3867 }
3885 '''); 3868 ''');
3886 _setCaretLocation(); 3869 _setCaretLocation();
3887 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_LIST); 3870 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_LIST);
3888 } 3871 }
3889 3872
3890 test_reparentFlutterList_OK_multiLine() async { 3873 test_reparentFlutterList_OK_multiLine() async {
3891 _configureFlutterPkg({ 3874 _configureFlutterPkg({
3892 'src/widgets/framework.dart': _flutter_framework_code, 3875 'src/widgets/framework.dart': flutter_framework_code,
3893 }); 3876 });
3894 await resolveTestUnit(''' 3877 await resolveTestUnit('''
3895 import 'package:flutter/src/widgets/framework.dart'; 3878 import 'package:flutter/src/widgets/framework.dart';
3896 build() { 3879 build() {
3897 return new Container( 3880 return new Container(
3898 child: new Row( 3881 child: new Row(
3899 // start 3882 // start
3900 children: [/*caret*/ 3883 children: [/*caret*/
3901 new Transform(), 3884 new Transform(),
3902 new Transform(), 3885 new Transform(),
(...skipping 24 matching lines...) Expand all
3927 ], 3910 ],
3928 // end 3911 // end
3929 ), 3912 ),
3930 ); 3913 );
3931 } 3914 }
3932 '''); 3915 ''');
3933 } 3916 }
3934 3917
3935 test_reparentFlutterWidget_BAD_minimal() async { 3918 test_reparentFlutterWidget_BAD_minimal() async {
3936 _configureFlutterPkg({ 3919 _configureFlutterPkg({
3937 'src/widgets/framework.dart': _flutter_framework_code, 3920 'src/widgets/framework.dart': flutter_framework_code,
3938 }); 3921 });
3939 await resolveTestUnit(''' 3922 await resolveTestUnit('''
3940 /*caret*/x(){} 3923 /*caret*/x(){}
3941 '''); 3924 ''');
3942 _setCaretLocation(); 3925 _setCaretLocation();
3943 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_WIDGET); 3926 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_WIDGET);
3944 } 3927 }
3945 3928
3946 test_reparentFlutterWidget_BAD_singleLine() async { 3929 test_reparentFlutterWidget_BAD_singleLine() async {
3947 _configureFlutterPkg({ 3930 _configureFlutterPkg({
3948 'src/widgets/framework.dart': _flutter_framework_code, 3931 'src/widgets/framework.dart': flutter_framework_code,
3949 }); 3932 });
3950 await resolveTestUnit(''' 3933 await resolveTestUnit('''
3951 import 'package:flutter/src/widgets/framework.dart'; 3934 import 'package:flutter/src/widgets/framework.dart';
3952 class FakeFlutter { 3935 class FakeFlutter {
3953 main() { 3936 main() {
3954 var obj; 3937 var obj;
3955 // start 3938 // start
3956 return new Container(child: obj.xyz./*caret*/abc); 3939 return new Container(child: obj.xyz./*caret*/abc);
3957 // end 3940 // end
3958 } 3941 }
3959 } 3942 }
3960 '''); 3943 ''');
3961 _setCaretLocation(); 3944 _setCaretLocation();
3962 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_WIDGET); 3945 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_WIDGET);
3963 } 3946 }
3964 3947
3965 test_reparentFlutterWidget_OK_multiLines() async { 3948 test_reparentFlutterWidget_OK_multiLines() async {
3966 _configureFlutterPkg({ 3949 _configureFlutterPkg({
3967 'src/widgets/framework.dart': _flutter_framework_code, 3950 'src/widgets/framework.dart': flutter_framework_code,
3968 }); 3951 });
3969 await resolveTestUnit(''' 3952 await resolveTestUnit('''
3970 import 'package:flutter/src/widgets/framework.dart'; 3953 import 'package:flutter/src/widgets/framework.dart';
3971 class FakeFlutter { 3954 class FakeFlutter {
3972 main() { 3955 main() {
3973 return new Container( 3956 return new Container(
3974 // start 3957 // start
3975 child: new /*caret*/DefaultTextStyle( 3958 child: new /*caret*/DefaultTextStyle(
3976 child: new Row( 3959 child: new Row(
3977 children: <Widget>[ 3960 children: <Widget>[
(...skipping 28 matching lines...) Expand all
4006 ), 3989 ),
4007 // end 3990 // end
4008 ); 3991 );
4009 } 3992 }
4010 } 3993 }
4011 '''); 3994 ''');
4012 } 3995 }
4013 3996
4014 test_reparentFlutterWidget_OK_singleLine1() async { 3997 test_reparentFlutterWidget_OK_singleLine1() async {
4015 _configureFlutterPkg({ 3998 _configureFlutterPkg({
4016 'src/widgets/framework.dart': _flutter_framework_code, 3999 'src/widgets/framework.dart': flutter_framework_code,
4017 }); 4000 });
4018 await resolveTestUnit(''' 4001 await resolveTestUnit('''
4019 import 'package:flutter/src/widgets/framework.dart'; 4002 import 'package:flutter/src/widgets/framework.dart';
4020 class FakeFlutter { 4003 class FakeFlutter {
4021 main() { 4004 main() {
4022 // start 4005 // start
4023 return /*caret*/new Container(); 4006 return /*caret*/new Container();
4024 // end 4007 // end
4025 } 4008 }
4026 } 4009 }
4027 '''); 4010 ''');
4028 _setCaretLocation(); 4011 _setCaretLocation();
4029 await assertHasAssist( 4012 await assertHasAssist(
4030 DartAssistKind.REPARENT_FLUTTER_WIDGET, 4013 DartAssistKind.REPARENT_FLUTTER_WIDGET,
4031 ''' 4014 '''
4032 import 'package:flutter/src/widgets/framework.dart'; 4015 import 'package:flutter/src/widgets/framework.dart';
4033 class FakeFlutter { 4016 class FakeFlutter {
4034 main() { 4017 main() {
4035 // start 4018 // start
4036 return /*caret*/new widget(child: new Container()); 4019 return /*caret*/new widget(child: new Container());
4037 // end 4020 // end
4038 } 4021 }
4039 } 4022 }
4040 '''); 4023 ''');
4041 } 4024 }
4042 4025
4043 test_reparentFlutterWidget_OK_singleLine2() async { 4026 test_reparentFlutterWidget_OK_singleLine2() async {
4044 _configureFlutterPkg({ 4027 _configureFlutterPkg({
4045 'src/widgets/framework.dart': _flutter_framework_code, 4028 'src/widgets/framework.dart': flutter_framework_code,
4046 }); 4029 });
4047 await resolveTestUnit(''' 4030 await resolveTestUnit('''
4048 import 'package:flutter/src/widgets/framework.dart'; 4031 import 'package:flutter/src/widgets/framework.dart';
4049 class FakeFlutter { 4032 class FakeFlutter {
4050 main() { 4033 main() {
4051 // start 4034 // start
4052 return new ClipRect./*caret*/rect(); 4035 return new ClipRect./*caret*/rect();
4053 // end 4036 // end
4054 } 4037 }
4055 } 4038 }
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
4740 4723
4741 @override 4724 @override
4742 final AnalysisContext analysisContext; 4725 final AnalysisContext analysisContext;
4743 4726
4744 @override 4727 @override
4745 final CompilationUnit unit; 4728 final CompilationUnit unit;
4746 4729
4747 _DartAssistContextForValues(this.source, this.selectionOffset, 4730 _DartAssistContextForValues(this.source, this.selectionOffset,
4748 this.selectionLength, this.analysisContext, this.unit); 4731 this.selectionLength, this.analysisContext, this.unit);
4749 } 4732 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698