| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'package:analysis_server/src/protocol_server.dart'; | 5 import 'package:analysis_server/src/protocol_server.dart'; |
| 6 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.
dart'; | 6 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.
dart'; |
| 7 import 'package:analysis_server/src/services/completion/dart/library_prefix_cont
ributor.dart'; | 7 import 'package:analysis_server/src/services/completion/dart/library_prefix_cont
ributor.dart'; |
| 8 import 'package:test/test.dart'; | 8 import 'package:test/test.dart'; |
| 9 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 9 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 10 | 10 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 } | 35 } |
| 36 } | 36 } |
| 37 | 37 |
| 38 @override | 38 @override |
| 39 DartCompletionContributor createContributor() { | 39 DartCompletionContributor createContributor() { |
| 40 return new LibraryPrefixContributor(); | 40 return new LibraryPrefixContributor(); |
| 41 } | 41 } |
| 42 | 42 |
| 43 test_Block() async { | 43 test_Block() async { |
| 44 // Block BlockFunctionBody MethodDeclaration | 44 // Block BlockFunctionBody MethodDeclaration |
| 45 addSource( | 45 addSource('/testAB.dart', ''' |
| 46 '/testAB.dart', | |
| 47 ''' | |
| 48 export "dart:math" hide max; | 46 export "dart:math" hide max; |
| 49 class A {int x;} | 47 class A {int x;} |
| 50 @deprecated D1() {int x;} | 48 @deprecated D1() {int x;} |
| 51 class _B {boo() { partBoo() {}} }'''); | 49 class _B {boo() { partBoo() {}} }'''); |
| 52 addSource( | 50 addSource('/testCD.dart', ''' |
| 53 '/testCD.dart', | |
| 54 ''' | |
| 55 String T1; | 51 String T1; |
| 56 var _T2; | 52 var _T2; |
| 57 class C { } | 53 class C { } |
| 58 class D { }'''); | 54 class D { }'''); |
| 59 addSource( | 55 addSource('/testEEF.dart', ''' |
| 60 '/testEEF.dart', | |
| 61 ''' | |
| 62 class EE { } | 56 class EE { } |
| 63 class F { }'''); | 57 class F { }'''); |
| 64 addSource('/testG.dart', 'class G { }'); | 58 addSource('/testG.dart', 'class G { }'); |
| 65 addSource( | 59 addSource('/testH.dart', ''' |
| 66 '/testH.dart', | |
| 67 ''' | |
| 68 class H { } | 60 class H { } |
| 69 int T3; | 61 int T3; |
| 70 var _T4;'''); // not imported | 62 var _T4;'''); // not imported |
| 71 addTestSource(''' | 63 addTestSource(''' |
| 72 import "/testAB.dart"; | 64 import "/testAB.dart"; |
| 73 import "/testCD.dart" hide D; | 65 import "/testCD.dart" hide D; |
| 74 import "/testEEF.dart" show EE; | 66 import "/testEEF.dart" show EE; |
| 75 import "/testG.dart" as g; | 67 import "/testG.dart" as g; |
| 76 int T5; | 68 int T5; |
| 77 var _T6; | 69 var _T6; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 90 void b() { }} | 82 void b() { }} |
| 91 class Z { }'''); | 83 class Z { }'''); |
| 92 await computeSuggestions(); | 84 await computeSuggestions(); |
| 93 expect(replacementOffset, completionOffset); | 85 expect(replacementOffset, completionOffset); |
| 94 expect(replacementLength, 0); | 86 expect(replacementLength, 0); |
| 95 assertSuggestLibraryPrefixes(['g']); | 87 assertSuggestLibraryPrefixes(['g']); |
| 96 } | 88 } |
| 97 | 89 |
| 98 test_Block_final_final() async { | 90 test_Block_final_final() async { |
| 99 // Block BlockFunctionBody MethodDeclaration | 91 // Block BlockFunctionBody MethodDeclaration |
| 100 addSource( | 92 addSource('/testAB.dart', ''' |
| 101 '/testAB.dart', | |
| 102 ''' | |
| 103 export "dart:math" hide max; | 93 export "dart:math" hide max; |
| 104 class A {int x;} | 94 class A {int x;} |
| 105 @deprecated D1() {int x;} | 95 @deprecated D1() {int x;} |
| 106 class _B {boo() { partBoo() {}} }'''); | 96 class _B {boo() { partBoo() {}} }'''); |
| 107 addSource( | 97 addSource('/testCD.dart', ''' |
| 108 '/testCD.dart', | |
| 109 ''' | |
| 110 String T1; | 98 String T1; |
| 111 var _T2; | 99 var _T2; |
| 112 class C { } | 100 class C { } |
| 113 class D { }'''); | 101 class D { }'''); |
| 114 addSource( | 102 addSource('/testEEF.dart', ''' |
| 115 '/testEEF.dart', | |
| 116 ''' | |
| 117 class EE { } | 103 class EE { } |
| 118 class F { }'''); | 104 class F { }'''); |
| 119 addSource('/testG.dart', 'class G { }'); | 105 addSource('/testG.dart', 'class G { }'); |
| 120 addSource( | 106 addSource('/testH.dart', ''' |
| 121 '/testH.dart', | |
| 122 ''' | |
| 123 class H { } | 107 class H { } |
| 124 int T3; | 108 int T3; |
| 125 var _T4;'''); // not imported | 109 var _T4;'''); // not imported |
| 126 addTestSource(''' | 110 addTestSource(''' |
| 127 import "/testAB.dart"; | 111 import "/testAB.dart"; |
| 128 import "/testCD.dart" hide D; | 112 import "/testCD.dart" hide D; |
| 129 import "/testEEF.dart" show EE; | 113 import "/testEEF.dart" show EE; |
| 130 import "/testG.dart" as g; | 114 import "/testG.dart" as g; |
| 131 int T5; | 115 int T5; |
| 132 var _T6; | 116 var _T6; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 145 void b() { }} | 129 void b() { }} |
| 146 class Z { }'''); | 130 class Z { }'''); |
| 147 await computeSuggestions(); | 131 await computeSuggestions(); |
| 148 expect(replacementOffset, completionOffset); | 132 expect(replacementOffset, completionOffset); |
| 149 expect(replacementLength, 0); | 133 expect(replacementLength, 0); |
| 150 assertSuggestLibraryPrefixes(['g']); | 134 assertSuggestLibraryPrefixes(['g']); |
| 151 } | 135 } |
| 152 | 136 |
| 153 test_Block_final_var() async { | 137 test_Block_final_var() async { |
| 154 // Block BlockFunctionBody MethodDeclaration | 138 // Block BlockFunctionBody MethodDeclaration |
| 155 addSource( | 139 addSource('/testAB.dart', ''' |
| 156 '/testAB.dart', | |
| 157 ''' | |
| 158 export "dart:math" hide max; | 140 export "dart:math" hide max; |
| 159 class A {int x;} | 141 class A {int x;} |
| 160 @deprecated D1() {int x;} | 142 @deprecated D1() {int x;} |
| 161 class _B {boo() { partBoo() {}} }'''); | 143 class _B {boo() { partBoo() {}} }'''); |
| 162 addSource( | 144 addSource('/testCD.dart', ''' |
| 163 '/testCD.dart', | |
| 164 ''' | |
| 165 String T1; | 145 String T1; |
| 166 var _T2; | 146 var _T2; |
| 167 class C { } | 147 class C { } |
| 168 class D { }'''); | 148 class D { }'''); |
| 169 addSource( | 149 addSource('/testEEF.dart', ''' |
| 170 '/testEEF.dart', | |
| 171 ''' | |
| 172 class EE { } | 150 class EE { } |
| 173 class F { }'''); | 151 class F { }'''); |
| 174 addSource('/testG.dart', 'class G { }'); | 152 addSource('/testG.dart', 'class G { }'); |
| 175 addSource( | 153 addSource('/testH.dart', ''' |
| 176 '/testH.dart', | |
| 177 ''' | |
| 178 class H { } | 154 class H { } |
| 179 int T3; | 155 int T3; |
| 180 var _T4;'''); // not imported | 156 var _T4;'''); // not imported |
| 181 addTestSource(''' | 157 addTestSource(''' |
| 182 import "/testAB.dart"; | 158 import "/testAB.dart"; |
| 183 import "/testCD.dart" hide D; | 159 import "/testCD.dart" hide D; |
| 184 import "/testEEF.dart" show EE; | 160 import "/testEEF.dart" show EE; |
| 185 import "/testG.dart" as g; | 161 import "/testG.dart" as g; |
| 186 int T5; | 162 int T5; |
| 187 var _T6; | 163 var _T6; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 200 void b() { }} | 176 void b() { }} |
| 201 class Z { }'''); | 177 class Z { }'''); |
| 202 await computeSuggestions(); | 178 await computeSuggestions(); |
| 203 expect(replacementOffset, completionOffset); | 179 expect(replacementOffset, completionOffset); |
| 204 expect(replacementLength, 0); | 180 expect(replacementLength, 0); |
| 205 assertSuggestLibraryPrefixes(['g']); | 181 assertSuggestLibraryPrefixes(['g']); |
| 206 } | 182 } |
| 207 | 183 |
| 208 test_ClassDeclaration_body() async { | 184 test_ClassDeclaration_body() async { |
| 209 // ClassDeclaration CompilationUnit | 185 // ClassDeclaration CompilationUnit |
| 210 addSource( | 186 addSource('/testB.dart', ''' |
| 211 '/testB.dart', | |
| 212 ''' | |
| 213 class B { }'''); | 187 class B { }'''); |
| 214 addTestSource(''' | 188 addTestSource(''' |
| 215 import "testB.dart" as x; | 189 import "testB.dart" as x; |
| 216 @deprecated class A {^} | 190 @deprecated class A {^} |
| 217 class _B {} | 191 class _B {} |
| 218 A T;'''); | 192 A T;'''); |
| 219 await computeSuggestions(); | 193 await computeSuggestions(); |
| 220 expect(replacementOffset, completionOffset); | 194 expect(replacementOffset, completionOffset); |
| 221 expect(replacementLength, 0); | 195 expect(replacementLength, 0); |
| 222 assertSuggestLibraryPrefixes(['x']); | 196 assertSuggestLibraryPrefixes(['x']); |
| 223 } | 197 } |
| 224 | 198 |
| 225 test_ClassDeclaration_body_final() async { | 199 test_ClassDeclaration_body_final() async { |
| 226 // ClassDeclaration CompilationUnit | 200 // ClassDeclaration CompilationUnit |
| 227 addSource( | 201 addSource('/testB.dart', ''' |
| 228 '/testB.dart', | |
| 229 ''' | |
| 230 class B { }'''); | 202 class B { }'''); |
| 231 addTestSource(''' | 203 addTestSource(''' |
| 232 import "testB.dart" as x; | 204 import "testB.dart" as x; |
| 233 class A {final ^} | 205 class A {final ^} |
| 234 class _B {} | 206 class _B {} |
| 235 A T;'''); | 207 A T;'''); |
| 236 await computeSuggestions(); | 208 await computeSuggestions(); |
| 237 expect(replacementOffset, completionOffset); | 209 expect(replacementOffset, completionOffset); |
| 238 expect(replacementLength, 0); | 210 expect(replacementLength, 0); |
| 239 assertSuggestLibraryPrefixes(['x']); | 211 assertSuggestLibraryPrefixes(['x']); |
| 240 } | 212 } |
| 241 | 213 |
| 242 test_ClassDeclaration_body_final_field() async { | 214 test_ClassDeclaration_body_final_field() async { |
| 243 // ClassDeclaration CompilationUnit | 215 // ClassDeclaration CompilationUnit |
| 244 addSource( | 216 addSource('/testB.dart', ''' |
| 245 '/testB.dart', | |
| 246 ''' | |
| 247 class B { }'''); | 217 class B { }'''); |
| 248 addTestSource(''' | 218 addTestSource(''' |
| 249 import "testB.dart" as x; | 219 import "testB.dart" as x; |
| 250 class A {final ^ A(){}} | 220 class A {final ^ A(){}} |
| 251 class _B {} | 221 class _B {} |
| 252 A T;'''); | 222 A T;'''); |
| 253 await computeSuggestions(); | 223 await computeSuggestions(); |
| 254 expect(replacementOffset, completionOffset); | 224 expect(replacementOffset, completionOffset); |
| 255 expect(replacementLength, 0); | 225 expect(replacementLength, 0); |
| 256 assertSuggestLibraryPrefixes(['x']); | 226 assertSuggestLibraryPrefixes(['x']); |
| 257 } | 227 } |
| 258 | 228 |
| 259 test_ClassDeclaration_body_final_field2() async { | 229 test_ClassDeclaration_body_final_field2() async { |
| 260 // ClassDeclaration CompilationUnit | 230 // ClassDeclaration CompilationUnit |
| 261 addSource( | 231 addSource('/testB.dart', ''' |
| 262 '/testB.dart', | |
| 263 ''' | |
| 264 class B { }'''); | 232 class B { }'''); |
| 265 addTestSource(''' | 233 addTestSource(''' |
| 266 import "testB.dart" as Soo; | 234 import "testB.dart" as Soo; |
| 267 class A {final S^ A();} | 235 class A {final S^ A();} |
| 268 class _B {} | 236 class _B {} |
| 269 A Sew;'''); | 237 A Sew;'''); |
| 270 await computeSuggestions(); | 238 await computeSuggestions(); |
| 271 expect(replacementOffset, completionOffset - 1); | 239 expect(replacementOffset, completionOffset - 1); |
| 272 expect(replacementLength, 1); | 240 expect(replacementLength, 1); |
| 273 assertSuggestLibraryPrefixes(['Soo']); | 241 assertSuggestLibraryPrefixes(['Soo']); |
| 274 } | 242 } |
| 275 | 243 |
| 276 test_ClassDeclaration_body_final_final() async { | 244 test_ClassDeclaration_body_final_final() async { |
| 277 // ClassDeclaration CompilationUnit | 245 // ClassDeclaration CompilationUnit |
| 278 addSource( | 246 addSource('/testB.dart', ''' |
| 279 '/testB.dart', | |
| 280 ''' | |
| 281 class B { }'''); | 247 class B { }'''); |
| 282 addTestSource(''' | 248 addTestSource(''' |
| 283 import "testB.dart" as x; | 249 import "testB.dart" as x; |
| 284 class A {final ^ final foo;} | 250 class A {final ^ final foo;} |
| 285 class _B {} | 251 class _B {} |
| 286 A T;'''); | 252 A T;'''); |
| 287 await computeSuggestions(); | 253 await computeSuggestions(); |
| 288 expect(replacementOffset, completionOffset); | 254 expect(replacementOffset, completionOffset); |
| 289 expect(replacementLength, 0); | 255 expect(replacementLength, 0); |
| 290 assertSuggestLibraryPrefixes(['x']); | 256 assertSuggestLibraryPrefixes(['x']); |
| 291 } | 257 } |
| 292 | 258 |
| 293 test_ClassDeclaration_body_final_var() async { | 259 test_ClassDeclaration_body_final_var() async { |
| 294 // ClassDeclaration CompilationUnit | 260 // ClassDeclaration CompilationUnit |
| 295 addSource( | 261 addSource('/testB.dart', ''' |
| 296 '/testB.dart', | |
| 297 ''' | |
| 298 class B { }'''); | 262 class B { }'''); |
| 299 addTestSource(''' | 263 addTestSource(''' |
| 300 import "testB.dart" as x; | 264 import "testB.dart" as x; |
| 301 class A {final ^ var foo;} | 265 class A {final ^ var foo;} |
| 302 class _B {} | 266 class _B {} |
| 303 A T;'''); | 267 A T;'''); |
| 304 await computeSuggestions(); | 268 await computeSuggestions(); |
| 305 expect(replacementOffset, completionOffset); | 269 expect(replacementOffset, completionOffset); |
| 306 expect(replacementLength, 0); | 270 expect(replacementLength, 0); |
| 307 assertSuggestLibraryPrefixes(['x']); | 271 assertSuggestLibraryPrefixes(['x']); |
| 308 } | 272 } |
| 309 | 273 |
| 310 test_InstanceCreationExpression() async { | 274 test_InstanceCreationExpression() async { |
| 311 addSource( | 275 addSource('/testA.dart', ''' |
| 312 '/testA.dart', | |
| 313 ''' | |
| 314 class A {foo(){var f; {var x;}}} | 276 class A {foo(){var f; {var x;}}} |
| 315 class B {B(this.x, [String boo]) { } int x;} | 277 class B {B(this.x, [String boo]) { } int x;} |
| 316 class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); | 278 class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); |
| 317 addTestSource(''' | 279 addTestSource(''' |
| 318 import "/testA.dart" as t; | 280 import "/testA.dart" as t; |
| 319 import "dart:math" as math; | 281 import "dart:math" as math; |
| 320 main() {new ^ String x = "hello";}'''); | 282 main() {new ^ String x = "hello";}'''); |
| 321 await computeSuggestions(); | 283 await computeSuggestions(); |
| 322 assertSuggestLibraryPrefixes(['math', 't']); | 284 assertSuggestLibraryPrefixes(['math', 't']); |
| 323 } | 285 } |
| 324 | 286 |
| 325 test_InstanceCreationExpression2() async { | 287 test_InstanceCreationExpression2() async { |
| 326 addTestSource('import "dart:convert" as json;f() {var x=new js^}'); | 288 addTestSource('import "dart:convert" as json;f() {var x=new js^}'); |
| 327 await computeSuggestions(); | 289 await computeSuggestions(); |
| 328 assertSuggestLibraryPrefixes(['json']); | 290 assertSuggestLibraryPrefixes(['json']); |
| 329 } | 291 } |
| 330 | 292 |
| 331 test_InstanceCreationExpression_inPart() async { | 293 test_InstanceCreationExpression_inPart() async { |
| 332 addSource( | 294 addSource('/testA.dart', ''' |
| 333 '/testA.dart', | |
| 334 ''' | |
| 335 class A {foo(){var f; {var x;}}} | 295 class A {foo(){var f; {var x;}}} |
| 336 class B {B(this.x, [String boo]) { } int x;} | 296 class B {B(this.x, [String boo]) { } int x;} |
| 337 class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); | 297 class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); |
| 338 addSource( | 298 addSource('/testB.dart', ''' |
| 339 '/testB.dart', | |
| 340 ''' | |
| 341 library testB; | 299 library testB; |
| 342 import "/testA.dart" as t; | 300 import "/testA.dart" as t; |
| 343 import "dart:math" as math; | 301 import "dart:math" as math; |
| 344 part "$testFile" | 302 part "$testFile" |
| 345 main() {new ^ String x = "hello";}'''); | 303 main() {new ^ String x = "hello";}'''); |
| 346 addTestSource(''' | 304 addTestSource(''' |
| 347 part of testB; | 305 part of testB; |
| 348 main() {new ^ String x = "hello";}'''); | 306 main() {new ^ String x = "hello";}'''); |
| 349 await computeLibrariesContaining(); | 307 await computeLibrariesContaining(); |
| 350 await computeSuggestions(); | 308 await computeSuggestions(); |
| 351 assertSuggestLibraryPrefixes(['math', 't']); | 309 assertSuggestLibraryPrefixes(['math', 't']); |
| 352 } | 310 } |
| 353 | 311 |
| 354 test_InstanceCreationExpression_inPart_detached() async { | 312 test_InstanceCreationExpression_inPart_detached() async { |
| 355 addSource( | 313 addSource('/testA.dart', ''' |
| 356 '/testA.dart', | |
| 357 ''' | |
| 358 class A {foo(){var f; {var x;}}} | 314 class A {foo(){var f; {var x;}}} |
| 359 class B {B(this.x, [String boo]) { } int x;} | 315 class B {B(this.x, [String boo]) { } int x;} |
| 360 class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); | 316 class C {C.bar({boo: 'hoo', int z: 0}) { } }'''); |
| 361 addSource( | 317 addSource('/testB.dart', ''' |
| 362 '/testB.dart', | |
| 363 ''' | |
| 364 library testB; | 318 library testB; |
| 365 import "/testA.dart" as t; | 319 import "/testA.dart" as t; |
| 366 import "dart:math" as math; | 320 import "dart:math" as math; |
| 367 //part "$testFile" | 321 //part "$testFile" |
| 368 main() {new ^ String x = "hello";}'''); | 322 main() {new ^ String x = "hello";}'''); |
| 369 addTestSource(''' | 323 addTestSource(''' |
| 370 //part of testB; | 324 //part of testB; |
| 371 main() {new ^ String x = "hello";}'''); | 325 main() {new ^ String x = "hello";}'''); |
| 372 await computeSuggestions(); | 326 await computeSuggestions(); |
| 373 assertNoSuggestions(); | 327 assertNoSuggestions(); |
| 374 } | 328 } |
| 375 } | 329 } |
| OLD | NEW |