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.services.correction.fix; | 5 library test.services.correction.fix; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analysis_server/plugin/edit/fix/fix_core.dart'; | 9 import 'package:analysis_server/plugin/edit/fix/fix_core.dart'; |
10 import 'package:analysis_server/plugin/edit/fix/fix_dart.dart'; | 10 import 'package:analysis_server/plugin/edit/fix/fix_dart.dart'; |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 DartFixContext dartContext = new DartFixContextImpl( | 145 DartFixContext dartContext = new DartFixContextImpl( |
146 new FixContextImpl(provider, context, error), testUnit); | 146 new FixContextImpl(provider, context, error), testUnit); |
147 FixProcessor processor = new FixProcessor(dartContext); | 147 FixProcessor processor = new FixProcessor(dartContext); |
148 return processor.compute(); | 148 return processor.compute(); |
149 } | 149 } |
150 | 150 |
151 /** | 151 /** |
152 * Configures the [SourceFactory] to have the `my_pkg` package in | 152 * Configures the [SourceFactory] to have the `my_pkg` package in |
153 * `/packages/my_pkg/lib` folder. | 153 * `/packages/my_pkg/lib` folder. |
154 */ | 154 */ |
155 void _configureMyPkg(String myLibCode) { | 155 void _configureMyPkg(Map<String, String> pathToCode) { |
156 provider.newFile('/packages/my_pkg/lib/my_lib.dart', myLibCode); | 156 pathToCode.forEach((path, code) { |
| 157 provider.newFile('/packages/my_pkg/lib/$path', code); |
| 158 }); |
157 // configure SourceFactory | 159 // configure SourceFactory |
158 Folder myPkgFolder = provider.getResource('/packages/my_pkg/lib'); | 160 Folder myPkgFolder = provider.getResource('/packages/my_pkg/lib'); |
159 UriResolver pkgResolver = new PackageMapUriResolver(provider, { | 161 UriResolver pkgResolver = new PackageMapUriResolver(provider, { |
160 'my_pkg': [myPkgFolder] | 162 'my_pkg': [myPkgFolder] |
161 }); | 163 }); |
162 context.sourceFactory = new SourceFactory( | 164 context.sourceFactory = new SourceFactory( |
163 [AbstractContextTest.SDK_RESOLVER, pkgResolver, resourceResolver]); | 165 [AbstractContextTest.SDK_RESOLVER, pkgResolver, resourceResolver]); |
164 // force 'my_pkg' resolution | 166 // force 'my_pkg' resolution |
165 addSource('/tmp/other.dart', "import 'package:my_pkg/my_lib.dart';"); | 167 addSource( |
| 168 '/tmp/other.dart', |
| 169 pathToCode.keys |
| 170 .map((path) => "import 'package:my_pkg/$path';") |
| 171 .join('\n')); |
166 } | 172 } |
167 | 173 |
168 AnalysisError _findErrorToFix() { | 174 AnalysisError _findErrorToFix() { |
169 List<AnalysisError> errors = context.computeErrors(testSource); | 175 List<AnalysisError> errors = context.computeErrors(testSource); |
170 if (errorFilter != null) { | 176 if (errorFilter != null) { |
171 errors = errors.where(errorFilter).toList(); | 177 errors = errors.where(errorFilter).toList(); |
172 } | 178 } |
173 expect(errors, hasLength(1)); | 179 expect(errors, hasLength(1)); |
174 return errors[0]; | 180 return errors[0]; |
175 } | 181 } |
(...skipping 2899 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3075 '''); | 3081 '''); |
3076 await assertHasFix( | 3082 await assertHasFix( |
3077 DartFixKind.REPLACE_RETURN_TYPE_FUTURE, | 3083 DartFixKind.REPLACE_RETURN_TYPE_FUTURE, |
3078 ''' | 3084 ''' |
3079 import 'dart:async'; | 3085 import 'dart:async'; |
3080 Future main() async { | 3086 Future main() async { |
3081 } | 3087 } |
3082 '''); | 3088 '''); |
3083 } | 3089 } |
3084 | 3090 |
3085 test_importLibraryPackage_withClass() async { | 3091 test_importLibraryPackage_preferDirectOverExport() async { |
3086 _configureMyPkg(''' | 3092 _configureMyPkg({'b.dart': 'class Test {}', 'a.dart': "export 'b.dart';"}); |
3087 library my_lib; | |
3088 class Test {} | |
3089 '''); | |
3090 // try to find a fix | |
3091 resolveTestUnit(''' | 3093 resolveTestUnit(''' |
3092 main() { | 3094 main() { |
3093 Test test = null; | 3095 Test test = null; |
| 3096 } |
| 3097 '''); |
| 3098 performAllAnalysisTasks(); |
| 3099 await assertHasFix( |
| 3100 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
| 3101 ''' |
| 3102 import 'package:my_pkg/b.dart'; |
| 3103 |
| 3104 main() { |
| 3105 Test test = null; |
| 3106 } |
| 3107 '''); |
| 3108 await assertHasFix( |
| 3109 DartFixKind.IMPORT_LIBRARY_PROJECT2, |
| 3110 ''' |
| 3111 import 'package:my_pkg/a.dart'; |
| 3112 |
| 3113 main() { |
| 3114 Test test = null; |
| 3115 } |
| 3116 '''); |
| 3117 } |
| 3118 |
| 3119 test_importLibraryPackage_preferPublicOverPrivate() async { |
| 3120 _configureMyPkg( |
| 3121 {'src/a.dart': 'class Test {}', 'b.dart': "export 'src/a.dart';"}); |
| 3122 resolveTestUnit(''' |
| 3123 main() { |
| 3124 Test test = null; |
3094 } | 3125 } |
3095 '''); | 3126 '''); |
3096 performAllAnalysisTasks(); | 3127 performAllAnalysisTasks(); |
3097 await assertHasFix( | 3128 await assertHasFix( |
3098 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3129 DartFixKind.IMPORT_LIBRARY_PROJECT2, |
3099 ''' | 3130 ''' |
3100 import 'package:my_pkg/my_lib.dart'; | 3131 import 'package:my_pkg/b.dart'; |
3101 | 3132 |
3102 main() { | 3133 main() { |
3103 Test test = null; | 3134 Test test = null; |
| 3135 } |
| 3136 '''); |
| 3137 await assertHasFix( |
| 3138 DartFixKind.IMPORT_LIBRARY_PROJECT3, |
| 3139 ''' |
| 3140 import 'package:my_pkg/src/a.dart'; |
| 3141 |
| 3142 main() { |
| 3143 Test test = null; |
3104 } | 3144 } |
3105 '''); | 3145 '''); |
3106 } | 3146 } |
3107 | 3147 |
3108 test_importLibraryProject_withClass_annotation() async { | 3148 test_importLibraryProject_withClass_annotation() async { |
3109 addSource( | 3149 addSource( |
3110 '/lib.dart', | 3150 '/lib.dart', |
3111 ''' | 3151 ''' |
3112 library lib; | 3152 library lib; |
3113 class Test { | 3153 class Test { |
3114 const Test(int p); | 3154 const Test(int p); |
3115 } | 3155 } |
3116 '''); | 3156 '''); |
3117 resolveTestUnit(''' | 3157 resolveTestUnit(''' |
3118 @Test(0) | 3158 @Test(0) |
3119 main() { | 3159 main() { |
3120 } | 3160 } |
3121 '''); | 3161 '''); |
3122 performAllAnalysisTasks(); | 3162 performAllAnalysisTasks(); |
3123 await assertHasFix( | 3163 await assertHasFix( |
3124 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3164 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3125 ''' | 3165 ''' |
3126 import 'lib.dart'; | 3166 import 'lib.dart'; |
3127 | 3167 |
3128 @Test(0) | 3168 @Test(0) |
3129 main() { | 3169 main() { |
3130 } | 3170 } |
3131 '''); | 3171 '''); |
3132 } | 3172 } |
3133 | 3173 |
3134 test_importLibraryProject_withClass_hasOtherLibraryWithPrefix() async { | 3174 test_importLibraryProject_withClass_hasOtherLibraryWithPrefix() async { |
(...skipping 13 matching lines...) Expand all Loading... |
3148 '''); | 3188 '''); |
3149 resolveTestUnit(''' | 3189 resolveTestUnit(''' |
3150 import 'b.dart' show Two; | 3190 import 'b.dart' show Two; |
3151 main () { | 3191 main () { |
3152 new Two(); | 3192 new Two(); |
3153 new One(); | 3193 new One(); |
3154 } | 3194 } |
3155 '''); | 3195 '''); |
3156 performAllAnalysisTasks(); | 3196 performAllAnalysisTasks(); |
3157 await assertHasFix( | 3197 await assertHasFix( |
3158 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3198 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3159 ''' | 3199 ''' |
3160 import 'a.dart'; | 3200 import 'a.dart'; |
3161 import 'b.dart' show Two; | 3201 import 'b.dart' show Two; |
3162 main () { | 3202 main () { |
3163 new Two(); | 3203 new Two(); |
3164 new One(); | 3204 new One(); |
3165 } | 3205 } |
3166 '''); | 3206 '''); |
3167 } | 3207 } |
3168 | 3208 |
3169 test_importLibraryProject_withClass_inParentFolder() async { | 3209 test_importLibraryProject_withClass_inParentFolder() async { |
3170 testFile = '/project/bin/test.dart'; | 3210 testFile = '/project/bin/test.dart'; |
3171 addSource( | 3211 addSource( |
3172 '/project/lib.dart', | 3212 '/project/lib.dart', |
3173 ''' | 3213 ''' |
3174 library lib; | 3214 library lib; |
3175 class Test {} | 3215 class Test {} |
3176 '''); | 3216 '''); |
3177 resolveTestUnit(''' | 3217 resolveTestUnit(''' |
3178 main() { | 3218 main() { |
3179 Test t = null; | 3219 Test t = null; |
3180 } | 3220 } |
3181 '''); | 3221 '''); |
3182 performAllAnalysisTasks(); | 3222 performAllAnalysisTasks(); |
3183 await assertHasFix( | 3223 await assertHasFix( |
3184 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3224 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3185 ''' | 3225 ''' |
3186 import '../lib.dart'; | 3226 import '../lib.dart'; |
3187 | 3227 |
3188 main() { | 3228 main() { |
3189 Test t = null; | 3229 Test t = null; |
3190 } | 3230 } |
3191 '''); | 3231 '''); |
3192 } | 3232 } |
3193 | 3233 |
3194 test_importLibraryProject_withClass_inRelativeFolder() async { | 3234 test_importLibraryProject_withClass_inRelativeFolder() async { |
3195 testFile = '/project/bin/test.dart'; | 3235 testFile = '/project/bin/test.dart'; |
3196 addSource( | 3236 addSource( |
3197 '/project/lib/sub/folder/lib.dart', | 3237 '/project/lib/sub/folder/lib.dart', |
3198 ''' | 3238 ''' |
3199 library lib; | 3239 library lib; |
3200 class Test {} | 3240 class Test {} |
3201 '''); | 3241 '''); |
3202 resolveTestUnit(''' | 3242 resolveTestUnit(''' |
3203 main() { | 3243 main() { |
3204 Test t = null; | 3244 Test t = null; |
3205 } | 3245 } |
3206 '''); | 3246 '''); |
3207 performAllAnalysisTasks(); | 3247 performAllAnalysisTasks(); |
3208 await assertHasFix( | 3248 await assertHasFix( |
3209 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3249 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3210 ''' | 3250 ''' |
3211 import '../lib/sub/folder/lib.dart'; | 3251 import '../lib/sub/folder/lib.dart'; |
3212 | 3252 |
3213 main() { | 3253 main() { |
3214 Test t = null; | 3254 Test t = null; |
3215 } | 3255 } |
3216 '''); | 3256 '''); |
3217 } | 3257 } |
3218 | 3258 |
3219 test_importLibraryProject_withClass_inSameFolder() async { | 3259 test_importLibraryProject_withClass_inSameFolder() async { |
3220 testFile = '/project/bin/test.dart'; | 3260 testFile = '/project/bin/test.dart'; |
3221 addSource( | 3261 addSource( |
3222 '/project/bin/lib.dart', | 3262 '/project/bin/lib.dart', |
3223 ''' | 3263 ''' |
3224 library lib; | 3264 library lib; |
3225 class Test {} | 3265 class Test {} |
3226 '''); | 3266 '''); |
3227 resolveTestUnit(''' | 3267 resolveTestUnit(''' |
3228 main() { | 3268 main() { |
3229 Test t = null; | 3269 Test t = null; |
3230 } | 3270 } |
3231 '''); | 3271 '''); |
3232 performAllAnalysisTasks(); | 3272 performAllAnalysisTasks(); |
3233 await assertHasFix( | 3273 await assertHasFix( |
3234 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3274 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3235 ''' | 3275 ''' |
3236 import 'lib.dart'; | 3276 import 'lib.dart'; |
3237 | 3277 |
3238 main() { | 3278 main() { |
3239 Test t = null; | 3279 Test t = null; |
3240 } | 3280 } |
3241 '''); | 3281 '''); |
3242 } | 3282 } |
3243 | 3283 |
3244 test_importLibraryProject_withFunction() async { | 3284 test_importLibraryProject_withFunction() async { |
3245 addSource( | 3285 addSource( |
3246 '/lib.dart', | 3286 '/lib.dart', |
3247 ''' | 3287 ''' |
3248 library lib; | 3288 library lib; |
3249 myFunction() {} | 3289 myFunction() {} |
3250 '''); | 3290 '''); |
3251 resolveTestUnit(''' | 3291 resolveTestUnit(''' |
3252 main() { | 3292 main() { |
3253 myFunction(); | 3293 myFunction(); |
3254 } | 3294 } |
3255 '''); | 3295 '''); |
3256 performAllAnalysisTasks(); | 3296 performAllAnalysisTasks(); |
3257 await assertHasFix( | 3297 await assertHasFix( |
3258 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3298 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3259 ''' | 3299 ''' |
3260 import 'lib.dart'; | 3300 import 'lib.dart'; |
3261 | 3301 |
3262 main() { | 3302 main() { |
3263 myFunction(); | 3303 myFunction(); |
3264 } | 3304 } |
3265 '''); | 3305 '''); |
3266 } | 3306 } |
3267 | 3307 |
3268 test_importLibraryProject_withFunction_unresolvedMethod() async { | 3308 test_importLibraryProject_withFunction_unresolvedMethod() async { |
3269 addSource( | 3309 addSource( |
3270 '/lib.dart', | 3310 '/lib.dart', |
3271 ''' | 3311 ''' |
3272 library lib; | 3312 library lib; |
3273 myFunction() {} | 3313 myFunction() {} |
3274 '''); | 3314 '''); |
3275 resolveTestUnit(''' | 3315 resolveTestUnit(''' |
3276 class A { | 3316 class A { |
3277 main() { | 3317 main() { |
3278 myFunction(); | 3318 myFunction(); |
3279 } | 3319 } |
3280 } | 3320 } |
3281 '''); | 3321 '''); |
3282 performAllAnalysisTasks(); | 3322 performAllAnalysisTasks(); |
3283 await assertHasFix( | 3323 await assertHasFix( |
3284 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3324 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3285 ''' | 3325 ''' |
3286 import 'lib.dart'; | 3326 import 'lib.dart'; |
3287 | 3327 |
3288 class A { | 3328 class A { |
3289 main() { | 3329 main() { |
3290 myFunction(); | 3330 myFunction(); |
3291 } | 3331 } |
3292 } | 3332 } |
3293 '''); | 3333 '''); |
3294 } | 3334 } |
3295 | 3335 |
3296 test_importLibraryProject_withFunctionTypeAlias() async { | 3336 test_importLibraryProject_withFunctionTypeAlias() async { |
3297 testFile = '/project/bin/test.dart'; | 3337 testFile = '/project/bin/test.dart'; |
3298 addSource( | 3338 addSource( |
3299 '/project/bin/lib.dart', | 3339 '/project/bin/lib.dart', |
3300 ''' | 3340 ''' |
3301 library lib; | 3341 library lib; |
3302 typedef MyFunction(); | 3342 typedef MyFunction(); |
3303 '''); | 3343 '''); |
3304 resolveTestUnit(''' | 3344 resolveTestUnit(''' |
3305 main() { | 3345 main() { |
3306 MyFunction t = null; | 3346 MyFunction t = null; |
3307 } | 3347 } |
3308 '''); | 3348 '''); |
3309 performAllAnalysisTasks(); | 3349 performAllAnalysisTasks(); |
3310 await assertHasFix( | 3350 await assertHasFix( |
3311 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3351 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3312 ''' | 3352 ''' |
3313 import 'lib.dart'; | 3353 import 'lib.dart'; |
3314 | 3354 |
3315 main() { | 3355 main() { |
3316 MyFunction t = null; | 3356 MyFunction t = null; |
3317 } | 3357 } |
3318 '''); | 3358 '''); |
3319 } | 3359 } |
3320 | 3360 |
3321 test_importLibraryProject_withTopLevelVariable() async { | 3361 test_importLibraryProject_withTopLevelVariable() async { |
3322 addSource( | 3362 addSource( |
3323 '/lib.dart', | 3363 '/lib.dart', |
3324 ''' | 3364 ''' |
3325 library lib; | 3365 library lib; |
3326 int MY_VAR = 42; | 3366 int MY_VAR = 42; |
3327 '''); | 3367 '''); |
3328 resolveTestUnit(''' | 3368 resolveTestUnit(''' |
3329 main() { | 3369 main() { |
3330 print(MY_VAR); | 3370 print(MY_VAR); |
3331 } | 3371 } |
3332 '''); | 3372 '''); |
3333 performAllAnalysisTasks(); | 3373 performAllAnalysisTasks(); |
3334 await assertHasFix( | 3374 await assertHasFix( |
3335 DartFixKind.IMPORT_LIBRARY_PROJECT, | 3375 DartFixKind.IMPORT_LIBRARY_PROJECT1, |
3336 ''' | 3376 ''' |
3337 import 'lib.dart'; | 3377 import 'lib.dart'; |
3338 | 3378 |
3339 main() { | 3379 main() { |
3340 print(MY_VAR); | 3380 print(MY_VAR); |
3341 } | 3381 } |
3342 '''); | 3382 '''); |
3343 } | 3383 } |
3344 | 3384 |
3345 test_importLibrarySdk_withClass_AsExpression() async { | 3385 test_importLibrarySdk_withClass_AsExpression() async { |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3531 class B {} | 3571 class B {} |
3532 '''); | 3572 '''); |
3533 resolveTestUnit(''' | 3573 resolveTestUnit(''' |
3534 import 'lib.dart' show A; | 3574 import 'lib.dart' show A; |
3535 main() { | 3575 main() { |
3536 A a; | 3576 A a; |
3537 B b; | 3577 B b; |
3538 } | 3578 } |
3539 '''); | 3579 '''); |
3540 performAllAnalysisTasks(); | 3580 performAllAnalysisTasks(); |
3541 await assertNoFix(DartFixKind.IMPORT_LIBRARY_PROJECT); | 3581 await assertNoFix(DartFixKind.IMPORT_LIBRARY_PROJECT1); |
3542 await assertHasFix( | 3582 await assertHasFix( |
3543 DartFixKind.IMPORT_LIBRARY_SHOW, | 3583 DartFixKind.IMPORT_LIBRARY_SHOW, |
3544 ''' | 3584 ''' |
3545 import 'lib.dart' show A, B; | 3585 import 'lib.dart' show A, B; |
3546 main() { | 3586 main() { |
3547 A a; | 3587 A a; |
3548 B b; | 3588 B b; |
3549 } | 3589 } |
3550 '''); | 3590 '''); |
3551 } | 3591 } |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3917 '''); | 3957 '''); |
3918 performAllAnalysisTasks(); | 3958 performAllAnalysisTasks(); |
3919 await assertHasFix( | 3959 await assertHasFix( |
3920 DartFixKind.REPLACE_IMPORT_URI, | 3960 DartFixKind.REPLACE_IMPORT_URI, |
3921 ''' | 3961 ''' |
3922 import '../foo/bar/lib.dart'; | 3962 import '../foo/bar/lib.dart'; |
3923 '''); | 3963 '''); |
3924 } | 3964 } |
3925 | 3965 |
3926 test_replaceImportUri_package() async { | 3966 test_replaceImportUri_package() async { |
3927 _configureMyPkg(''); | 3967 _configureMyPkg({'my_lib.dart': ''}); |
3928 resolveTestUnit(''' | 3968 resolveTestUnit(''' |
3929 import 'no/matter/my_lib.dart'; | 3969 import 'no/matter/my_lib.dart'; |
3930 '''); | 3970 '''); |
3931 performAllAnalysisTasks(); | 3971 performAllAnalysisTasks(); |
3932 await assertHasFix( | 3972 await assertHasFix( |
3933 DartFixKind.REPLACE_IMPORT_URI, | 3973 DartFixKind.REPLACE_IMPORT_URI, |
3934 ''' | 3974 ''' |
3935 import 'package:my_pkg/my_lib.dart'; | 3975 import 'package:my_pkg/my_lib.dart'; |
3936 '''); | 3976 '''); |
3937 } | 3977 } |
(...skipping 1481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5419 @override | 5459 @override |
5420 void t() { } | 5460 void t() { } |
5421 } | 5461 } |
5422 '''); | 5462 '''); |
5423 } | 5463 } |
5424 | 5464 |
5425 void verifyResult(String expectedResult) { | 5465 void verifyResult(String expectedResult) { |
5426 expect(resultCode, expectedResult); | 5466 expect(resultCode, expectedResult); |
5427 } | 5467 } |
5428 } | 5468 } |
OLD | NEW |