OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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/services/completion/postfix/postfix_completi
on.dart'; | 6 import 'package:analysis_server/src/services/completion/postfix/postfix_completi
on.dart'; |
7 import 'package:analyzer/src/dart/analysis/driver.dart'; | 7 import 'package:analyzer/src/dart/analysis/driver.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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 _prepareCompletionAt(int offset, String key, String sourceCode) async { | 81 _prepareCompletionAt(int offset, String key, String sourceCode) async { |
82 verifyNoTestUnitErrors = false; | 82 verifyNoTestUnitErrors = false; |
83 await resolveTestUnit(sourceCode); | 83 await resolveTestUnit(sourceCode); |
84 await _computeCompletion(offset, key); | 84 await _computeCompletion(offset, key); |
85 } | 85 } |
86 } | 86 } |
87 | 87 |
88 @reflectiveTest | 88 @reflectiveTest |
89 class _AssertTest extends PostfixCompletionTest { | 89 class _AssertTest extends PostfixCompletionTest { |
90 test_assert() async { | 90 test_assert() async { |
91 await _prepareCompletion( | 91 await _prepareCompletion('.assert', ''' |
92 '.assert', | |
93 ''' | |
94 f(bool expr) { | 92 f(bool expr) { |
95 expr.assert | 93 expr.assert |
96 } | 94 } |
97 '''); | 95 '''); |
98 _assertHasChange( | 96 _assertHasChange('Expand .assert', ''' |
99 'Expand .assert', | |
100 ''' | |
101 f(bool expr) { | 97 f(bool expr) { |
102 assert(expr); | 98 assert(expr); |
103 } | 99 } |
104 '''); | 100 '''); |
105 } | 101 } |
106 | 102 |
107 test_assertFunc() async { | 103 test_assertFunc() async { |
108 await _prepareCompletion( | 104 await _prepareCompletion('.assert', ''' |
109 '.assert', | |
110 ''' | |
111 f() { | 105 f() { |
112 () => true.assert | 106 () => true.assert |
113 } | 107 } |
114 '''); | 108 '''); |
115 _assertHasChange( | 109 _assertHasChange('Expand .assert', ''' |
116 'Expand .assert', | |
117 ''' | |
118 f() { | 110 f() { |
119 assert(() => true); | 111 assert(() => true); |
120 } | 112 } |
121 '''); | 113 '''); |
122 } | 114 } |
123 | 115 |
124 @failingTest | 116 @failingTest |
125 test_assertFunc_invalid() async { | 117 test_assertFunc_invalid() async { |
126 await _prepareCompletion( | 118 await _prepareCompletion('.assert', ''' |
127 '.assert', | |
128 ''' | |
129 f() { | 119 f() { |
130 () => null.assert | 120 () => null.assert |
131 } | 121 } |
132 '''); | 122 '''); |
133 } | 123 } |
134 | 124 |
135 test_assertFuncCmp() async { | 125 test_assertFuncCmp() async { |
136 await _prepareCompletion( | 126 await _prepareCompletion('.assert', ''' |
137 '.assert', | |
138 ''' | |
139 f(int x, int y) { | 127 f(int x, int y) { |
140 () => x + 3 > y + 4.assert | 128 () => x + 3 > y + 4.assert |
141 } | 129 } |
142 '''); | 130 '''); |
143 _assertHasChange( | 131 _assertHasChange('Expand .assert', ''' |
144 'Expand .assert', | |
145 ''' | |
146 f(int x, int y) { | 132 f(int x, int y) { |
147 assert(() => x + 3 > y + 4); | 133 assert(() => x + 3 > y + 4); |
148 } | 134 } |
149 '''); | 135 '''); |
150 } | 136 } |
151 } | 137 } |
152 | 138 |
153 @reflectiveTest | 139 @reflectiveTest |
154 class _ForTest extends PostfixCompletionTest { | 140 class _ForTest extends PostfixCompletionTest { |
155 @failingTest | 141 @failingTest |
156 test_for_invalid() async { | 142 test_for_invalid() async { |
157 await _prepareCompletion( | 143 await _prepareCompletion('.for', ''' |
158 '.for', | |
159 ''' | |
160 f() { | 144 f() { |
161 {}.for | 145 {}.for |
162 } | 146 } |
163 '''); | 147 '''); |
164 } | 148 } |
165 | 149 |
166 test_forEmptyDynamic() async { | 150 test_forEmptyDynamic() async { |
167 await _prepareCompletion( | 151 await _prepareCompletion('.for', ''' |
168 '.for', | |
169 ''' | |
170 f() { | 152 f() { |
171 [].for | 153 [].for |
172 } | 154 } |
173 '''); | 155 '''); |
174 _assertHasChange( | 156 _assertHasChange('Expand .for', ''' |
175 'Expand .for', | |
176 ''' | |
177 f() { | 157 f() { |
178 for (var value in []) { | 158 for (var value in []) { |
179 /*caret*/ | 159 /*caret*/ |
180 } | 160 } |
181 } | 161 } |
182 '''); | 162 '''); |
183 } | 163 } |
184 | 164 |
185 test_forEmptyString() async { | 165 test_forEmptyString() async { |
186 await _prepareCompletion( | 166 await _prepareCompletion('.for', ''' |
187 '.for', | |
188 ''' | |
189 f() { | 167 f() { |
190 <String>[].for | 168 <String>[].for |
191 } | 169 } |
192 '''); | 170 '''); |
193 _assertHasChange( | 171 _assertHasChange('Expand .for', ''' |
194 'Expand .for', | |
195 ''' | |
196 f() { | 172 f() { |
197 for (var value in <String>[]) { | 173 for (var value in <String>[]) { |
198 /*caret*/ | 174 /*caret*/ |
199 } | 175 } |
200 } | 176 } |
201 '''); | 177 '''); |
202 } | 178 } |
203 | 179 |
204 test_fori() async { | 180 test_fori() async { |
205 await _prepareCompletion( | 181 await _prepareCompletion('.fori', ''' |
206 '.fori', | |
207 ''' | |
208 f() { | 182 f() { |
209 100.fori | 183 100.fori |
210 } | 184 } |
211 '''); | 185 '''); |
212 _assertHasChange( | 186 _assertHasChange('Expand .fori', ''' |
213 'Expand .fori', | |
214 ''' | |
215 f() { | 187 f() { |
216 for (int i = 0; i < 100; i++) { | 188 for (int i = 0; i < 100; i++) { |
217 /*caret*/ | 189 /*caret*/ |
218 } | 190 } |
219 } | 191 } |
220 '''); | 192 '''); |
221 } | 193 } |
222 | 194 |
223 @failingTest | 195 @failingTest |
224 test_fori_invalid() async { | 196 test_fori_invalid() async { |
225 await _prepareCompletion( | 197 await _prepareCompletion('.fori', ''' |
226 '.fori', | |
227 ''' | |
228 f() { | 198 f() { |
229 [].fori | 199 [].fori |
230 } | 200 } |
231 '''); | 201 '''); |
232 } | 202 } |
233 | 203 |
234 test_forIntList() async { | 204 test_forIntList() async { |
235 await _prepareCompletion( | 205 await _prepareCompletion('.for', ''' |
236 '.for', | |
237 ''' | |
238 f() { | 206 f() { |
239 [1,2,3].for | 207 [1,2,3].for |
240 } | 208 } |
241 '''); | 209 '''); |
242 _assertHasChange( | 210 _assertHasChange('Expand .for', ''' |
243 'Expand .for', | |
244 ''' | |
245 f() { | 211 f() { |
246 for (var value in [1,2,3]) { | 212 for (var value in [1,2,3]) { |
247 /*caret*/ | 213 /*caret*/ |
248 } | 214 } |
249 } | 215 } |
250 '''); | 216 '''); |
251 } | 217 } |
252 | 218 |
253 test_foriVar() async { | 219 test_foriVar() async { |
254 await _prepareCompletion( | 220 await _prepareCompletion('.fori', ''' |
255 '.fori', | |
256 ''' | |
257 f() { | 221 f() { |
258 var n = 100; | 222 var n = 100; |
259 n.fori | 223 n.fori |
260 } | 224 } |
261 '''); | 225 '''); |
262 _assertHasChange( | 226 _assertHasChange('Expand .fori', ''' |
263 'Expand .fori', | |
264 ''' | |
265 f() { | 227 f() { |
266 var n = 100; | 228 var n = 100; |
267 for (int i = 0; i < n; i++) { | 229 for (int i = 0; i < n; i++) { |
268 /*caret*/ | 230 /*caret*/ |
269 } | 231 } |
270 } | 232 } |
271 '''); | 233 '''); |
272 } | 234 } |
273 | 235 |
274 test_iterList() async { | 236 test_iterList() async { |
275 await _prepareCompletion( | 237 await _prepareCompletion('.iter', ''' |
276 '.iter', | |
277 ''' | |
278 f() { | 238 f() { |
279 [1,2,3].iter | 239 [1,2,3].iter |
280 } | 240 } |
281 '''); | 241 '''); |
282 _assertHasChange( | 242 _assertHasChange('Expand .iter', ''' |
283 'Expand .iter', | |
284 ''' | |
285 f() { | 243 f() { |
286 for (var value in [1,2,3]) { | 244 for (var value in [1,2,3]) { |
287 /*caret*/ | 245 /*caret*/ |
288 } | 246 } |
289 } | 247 } |
290 '''); | 248 '''); |
291 } | 249 } |
292 | 250 |
293 test_iterName() async { | 251 test_iterName() async { |
294 await _prepareCompletion( | 252 await _prepareCompletion('.iter', ''' |
295 '.iter', | |
296 ''' | |
297 f() { | 253 f() { |
298 var value = [1,2,3]; | 254 var value = [1,2,3]; |
299 value.iter | 255 value.iter |
300 } | 256 } |
301 '''); | 257 '''); |
302 _assertHasChange( | 258 _assertHasChange('Expand .iter', ''' |
303 'Expand .iter', | |
304 ''' | |
305 f() { | 259 f() { |
306 var value = [1,2,3]; | 260 var value = [1,2,3]; |
307 for (var value1 in value) { | 261 for (var value1 in value) { |
308 /*caret*/ | 262 /*caret*/ |
309 } | 263 } |
310 } | 264 } |
311 '''); | 265 '''); |
312 } | 266 } |
313 } | 267 } |
314 | 268 |
315 @reflectiveTest | 269 @reflectiveTest |
316 class _IfTest extends PostfixCompletionTest { | 270 class _IfTest extends PostfixCompletionTest { |
317 test_Else() async { | 271 test_Else() async { |
318 await _prepareCompletion( | 272 await _prepareCompletion('.else', ''' |
319 '.else', | |
320 ''' | |
321 f(bool val) { | 273 f(bool val) { |
322 val.else | 274 val.else |
323 } | 275 } |
324 '''); | 276 '''); |
325 _assertHasChange( | 277 _assertHasChange('Expand .else', ''' |
326 'Expand .else', | |
327 ''' | |
328 f(bool val) { | 278 f(bool val) { |
329 if (!val) { | 279 if (!val) { |
330 /*caret*/ | 280 /*caret*/ |
331 } | 281 } |
332 } | 282 } |
333 '''); | 283 '''); |
334 } | 284 } |
335 | 285 |
336 test_if() async { | 286 test_if() async { |
337 await _prepareCompletion( | 287 await _prepareCompletion('.if', ''' |
338 '.if', | |
339 ''' | |
340 f() { | 288 f() { |
341 3 < 4.if | 289 3 < 4.if |
342 } | 290 } |
343 '''); | 291 '''); |
344 _assertHasChange( | 292 _assertHasChange('Expand .if', ''' |
345 'Expand .if', | |
346 ''' | |
347 f() { | 293 f() { |
348 if (3 < 4) { | 294 if (3 < 4) { |
349 /*caret*/ | 295 /*caret*/ |
350 } | 296 } |
351 } | 297 } |
352 '''); | 298 '''); |
353 } | 299 } |
354 | 300 |
355 @failingTest | 301 @failingTest |
356 test_if_invalid() async { | 302 test_if_invalid() async { |
357 await _prepareCompletion( | 303 await _prepareCompletion('.if', ''' |
358 '.if', | |
359 ''' | |
360 f(List expr) { | 304 f(List expr) { |
361 expr.if | 305 expr.if |
362 } | 306 } |
363 '''); | 307 '''); |
364 } | 308 } |
365 | 309 |
366 test_ifDynamic() async { | 310 test_ifDynamic() async { |
367 await _prepareCompletion( | 311 await _prepareCompletion('.if', ''' |
368 '.if', | |
369 ''' | |
370 f(expr) { | 312 f(expr) { |
371 expr.if | 313 expr.if |
372 } | 314 } |
373 '''); | 315 '''); |
374 _assertHasChange( | 316 _assertHasChange('Expand .if', ''' |
375 'Expand .if', | |
376 ''' | |
377 f(expr) { | 317 f(expr) { |
378 if (expr) { | 318 if (expr) { |
379 /*caret*/ | 319 /*caret*/ |
380 } | 320 } |
381 } | 321 } |
382 '''); | 322 '''); |
383 } | 323 } |
384 } | 324 } |
385 | 325 |
386 @reflectiveTest | 326 @reflectiveTest |
387 class _NegateTest extends PostfixCompletionTest { | 327 class _NegateTest extends PostfixCompletionTest { |
388 test_negate() async { | 328 test_negate() async { |
389 await _prepareCompletion( | 329 await _prepareCompletion('.not', ''' |
390 '.not', | |
391 ''' | |
392 f(expr) { | 330 f(expr) { |
393 if (expr.not) | 331 if (expr.not) |
394 } | 332 } |
395 '''); | 333 '''); |
396 _assertHasChange( | 334 _assertHasChange('Expand .not', ''' |
397 'Expand .not', | |
398 ''' | |
399 f(expr) { | 335 f(expr) { |
400 if (!expr) | 336 if (!expr) |
401 } | 337 } |
402 '''); | 338 '''); |
403 } | 339 } |
404 | 340 |
405 @failingTest | 341 @failingTest |
406 test_negate_invalid() async { | 342 test_negate_invalid() async { |
407 await _prepareCompletion( | 343 await _prepareCompletion('.not', ''' |
408 '.not', | |
409 ''' | |
410 f(int expr) { | 344 f(int expr) { |
411 if (expr.not) | 345 if (expr.not) |
412 } | 346 } |
413 '''); | 347 '''); |
414 } | 348 } |
415 | 349 |
416 test_negateCascade() async { | 350 test_negateCascade() async { |
417 await _prepareCompletion( | 351 await _prepareCompletion('.not', ''' |
418 '.not', | |
419 ''' | |
420 f(expr) { | 352 f(expr) { |
421 if (expr..a..b..c.not) | 353 if (expr..a..b..c.not) |
422 } | 354 } |
423 '''); | 355 '''); |
424 _assertHasChange( | 356 _assertHasChange('Expand .not', ''' |
425 'Expand .not', | |
426 ''' | |
427 f(expr) { | 357 f(expr) { |
428 if (!expr..a..b..c) | 358 if (!expr..a..b..c) |
429 } | 359 } |
430 '''); | 360 '''); |
431 } | 361 } |
432 | 362 |
433 test_negateExpr() async { | 363 test_negateExpr() async { |
434 await _prepareCompletion( | 364 await _prepareCompletion('.not', ''' |
435 '.not', | |
436 ''' | |
437 f(int i, int j) { | 365 f(int i, int j) { |
438 if (i + 3 < j - 4.not) | 366 if (i + 3 < j - 4.not) |
439 } | 367 } |
440 '''); | 368 '''); |
441 _assertHasChange( | 369 _assertHasChange('Expand .not', ''' |
442 'Expand .not', | |
443 ''' | |
444 f(int i, int j) { | 370 f(int i, int j) { |
445 if (i + 3 >= j - 4) | 371 if (i + 3 >= j - 4) |
446 } | 372 } |
447 '''); | 373 '''); |
448 } | 374 } |
449 | 375 |
450 test_negateProperty() async { | 376 test_negateProperty() async { |
451 await _prepareCompletion( | 377 await _prepareCompletion('.not', ''' |
452 '.not', | |
453 ''' | |
454 f(expr) { | 378 f(expr) { |
455 if (expr.a.b.c.not) | 379 if (expr.a.b.c.not) |
456 } | 380 } |
457 '''); | 381 '''); |
458 _assertHasChange( | 382 _assertHasChange('Expand .not', ''' |
459 'Expand .not', | |
460 ''' | |
461 f(expr) { | 383 f(expr) { |
462 if (!expr.a.b.c) | 384 if (!expr.a.b.c) |
463 } | 385 } |
464 '''); | 386 '''); |
465 } | 387 } |
466 | 388 |
467 test_notFalse() async { | 389 test_notFalse() async { |
468 await _prepareCompletion( | 390 await _prepareCompletion('!', ''' |
469 '!', | |
470 ''' | |
471 f() { | 391 f() { |
472 if (false!) | 392 if (false!) |
473 } | 393 } |
474 '''); | 394 '''); |
475 _assertHasChange( | 395 _assertHasChange('Expand !', ''' |
476 'Expand !', | |
477 ''' | |
478 f() { | 396 f() { |
479 if (true) | 397 if (true) |
480 } | 398 } |
481 '''); | 399 '''); |
482 } | 400 } |
483 | 401 |
484 test_notFunc() async { | 402 test_notFunc() async { |
485 await _prepareCompletion( | 403 await _prepareCompletion('.not', ''' |
486 '.not', | |
487 ''' | |
488 bool f() { | 404 bool f() { |
489 if (f().not) | 405 if (f().not) |
490 } | 406 } |
491 '''); | 407 '''); |
492 _assertHasChange( | 408 _assertHasChange('Expand .not', ''' |
493 'Expand .not', | |
494 ''' | |
495 bool f() { | 409 bool f() { |
496 if (!f()) | 410 if (!f()) |
497 } | 411 } |
498 '''); | 412 '''); |
499 } | 413 } |
500 | 414 |
501 test_notTrue() async { | 415 test_notTrue() async { |
502 await _prepareCompletion( | 416 await _prepareCompletion('.not', ''' |
503 '.not', | |
504 ''' | |
505 f() { | 417 f() { |
506 if (true.not) | 418 if (true.not) |
507 } | 419 } |
508 '''); | 420 '''); |
509 _assertHasChange( | 421 _assertHasChange('Expand .not', ''' |
510 'Expand .not', | |
511 ''' | |
512 f() { | 422 f() { |
513 if (false) | 423 if (false) |
514 } | 424 } |
515 '''); | 425 '''); |
516 } | 426 } |
517 } | 427 } |
518 | 428 |
519 @reflectiveTest | 429 @reflectiveTest |
520 class _NotNullTest extends PostfixCompletionTest { | 430 class _NotNullTest extends PostfixCompletionTest { |
521 test_nn() async { | 431 test_nn() async { |
522 await _prepareCompletion( | 432 await _prepareCompletion('.nn', ''' |
523 '.nn', | |
524 ''' | |
525 f(expr) { | 433 f(expr) { |
526 var list = [1,2,3]; | 434 var list = [1,2,3]; |
527 list.nn | 435 list.nn |
528 } | 436 } |
529 '''); | 437 '''); |
530 _assertHasChange( | 438 _assertHasChange('Expand .nn', ''' |
531 'Expand .nn', | |
532 ''' | |
533 f(expr) { | 439 f(expr) { |
534 var list = [1,2,3]; | 440 var list = [1,2,3]; |
535 if (list != null) { | 441 if (list != null) { |
536 /*caret*/ | 442 /*caret*/ |
537 } | 443 } |
538 } | 444 } |
539 '''); | 445 '''); |
540 } | 446 } |
541 | 447 |
542 @failingTest | 448 @failingTest |
543 test_nn_invalid() async { | 449 test_nn_invalid() async { |
544 await _prepareCompletion( | 450 await _prepareCompletion('.nn', ''' |
545 '.nn', | |
546 ''' | |
547 f(expr) { | 451 f(expr) { |
548 var list = [1,2,3]; | 452 var list = [1,2,3]; |
549 }.nn | 453 }.nn |
550 '''); | 454 '''); |
551 } | 455 } |
552 | 456 |
553 test_nnDynamic() async { | 457 test_nnDynamic() async { |
554 await _prepareCompletion( | 458 await _prepareCompletion('.nn', ''' |
555 '.nn', | |
556 ''' | |
557 f(expr) { | 459 f(expr) { |
558 expr.nn | 460 expr.nn |
559 } | 461 } |
560 '''); | 462 '''); |
561 _assertHasChange( | 463 _assertHasChange('Expand .nn', ''' |
562 'Expand .nn', | |
563 ''' | |
564 f(expr) { | 464 f(expr) { |
565 if (expr != null) { | 465 if (expr != null) { |
566 /*caret*/ | 466 /*caret*/ |
567 } | 467 } |
568 } | 468 } |
569 '''); | 469 '''); |
570 } | 470 } |
571 | 471 |
572 test_notnull() async { | 472 test_notnull() async { |
573 await _prepareCompletion( | 473 await _prepareCompletion('.notnull', ''' |
574 '.notnull', | |
575 ''' | |
576 f(expr) { | 474 f(expr) { |
577 var list = [1,2,3]; | 475 var list = [1,2,3]; |
578 list.notnull | 476 list.notnull |
579 } | 477 } |
580 '''); | 478 '''); |
581 _assertHasChange( | 479 _assertHasChange('Expand .notnull', ''' |
582 'Expand .notnull', | |
583 ''' | |
584 f(expr) { | 480 f(expr) { |
585 var list = [1,2,3]; | 481 var list = [1,2,3]; |
586 if (list != null) { | 482 if (list != null) { |
587 /*caret*/ | 483 /*caret*/ |
588 } | 484 } |
589 } | 485 } |
590 '''); | 486 '''); |
591 } | 487 } |
592 | 488 |
593 test_null() async { | 489 test_null() async { |
594 await _prepareCompletion( | 490 await _prepareCompletion('.null', ''' |
595 '.null', | |
596 ''' | |
597 f(expr) { | 491 f(expr) { |
598 var list = [1,2,3]; | 492 var list = [1,2,3]; |
599 list.null | 493 list.null |
600 } | 494 } |
601 '''); | 495 '''); |
602 _assertHasChange( | 496 _assertHasChange('Expand .null', ''' |
603 'Expand .null', | |
604 ''' | |
605 f(expr) { | 497 f(expr) { |
606 var list = [1,2,3]; | 498 var list = [1,2,3]; |
607 if (list == null) { | 499 if (list == null) { |
608 /*caret*/ | 500 /*caret*/ |
609 } | 501 } |
610 } | 502 } |
611 '''); | 503 '''); |
612 } | 504 } |
613 | 505 |
614 test_nullnn() async { | 506 test_nullnn() async { |
615 await _prepareCompletion( | 507 await _prepareCompletion('.nn', ''' |
616 '.nn', | |
617 ''' | |
618 f() { | 508 f() { |
619 null.nn | 509 null.nn |
620 } | 510 } |
621 '''); | 511 '''); |
622 _assertHasChange( | 512 _assertHasChange('Expand .nn', ''' |
623 'Expand .nn', | |
624 ''' | |
625 f() { | 513 f() { |
626 if (false) { | 514 if (false) { |
627 /*caret*/ | 515 /*caret*/ |
628 } | 516 } |
629 } | 517 } |
630 '''); | 518 '''); |
631 } | 519 } |
632 | 520 |
633 test_nullnull() async { | 521 test_nullnull() async { |
634 await _prepareCompletion( | 522 await _prepareCompletion('.null', ''' |
635 '.null', | |
636 ''' | |
637 f() { | 523 f() { |
638 null.null | 524 null.null |
639 } | 525 } |
640 '''); | 526 '''); |
641 _assertHasChange( | 527 _assertHasChange('Expand .null', ''' |
642 'Expand .null', | |
643 ''' | |
644 f() { | 528 f() { |
645 if (true) { | 529 if (true) { |
646 /*caret*/ | 530 /*caret*/ |
647 } | 531 } |
648 } | 532 } |
649 '''); | 533 '''); |
650 } | 534 } |
651 } | 535 } |
652 | 536 |
653 @reflectiveTest | 537 @reflectiveTest |
654 class _ParenTest extends PostfixCompletionTest { | 538 class _ParenTest extends PostfixCompletionTest { |
655 test_paren() async { | 539 test_paren() async { |
656 await _prepareCompletion( | 540 await _prepareCompletion('.par', ''' |
657 '.par', | |
658 ''' | |
659 f(expr) { | 541 f(expr) { |
660 expr.par | 542 expr.par |
661 } | 543 } |
662 '''); | 544 '''); |
663 _assertHasChange( | 545 _assertHasChange('Expand .par', ''' |
664 'Expand .par', | |
665 ''' | |
666 f(expr) { | 546 f(expr) { |
667 (expr) | 547 (expr) |
668 } | 548 } |
669 '''); | 549 '''); |
670 } | 550 } |
671 } | 551 } |
672 | 552 |
673 @reflectiveTest | 553 @reflectiveTest |
674 class _ReturnTest extends PostfixCompletionTest { | 554 class _ReturnTest extends PostfixCompletionTest { |
675 test_return() async { | 555 test_return() async { |
676 await _prepareCompletion( | 556 await _prepareCompletion('.return', ''' |
677 '.return', | |
678 ''' | |
679 f(expr) { | 557 f(expr) { |
680 expr.return | 558 expr.return |
681 } | 559 } |
682 '''); | 560 '''); |
683 _assertHasChange( | 561 _assertHasChange('Expand .return', ''' |
684 'Expand .return', | |
685 ''' | |
686 f(expr) { | 562 f(expr) { |
687 return expr; | 563 return expr; |
688 } | 564 } |
689 '''); | 565 '''); |
690 } | 566 } |
691 } | 567 } |
692 | 568 |
693 @reflectiveTest | 569 @reflectiveTest |
694 class _SwitchTest extends PostfixCompletionTest { | 570 class _SwitchTest extends PostfixCompletionTest { |
695 test_return() async { | 571 test_return() async { |
696 await _prepareCompletion( | 572 await _prepareCompletion('.switch', ''' |
697 '.switch', | |
698 ''' | |
699 f(expr) { | 573 f(expr) { |
700 expr.switch | 574 expr.switch |
701 } | 575 } |
702 '''); | 576 '''); |
703 _assertHasChange( | 577 _assertHasChange('Expand .switch', ''' |
704 'Expand .switch', | |
705 ''' | |
706 f(expr) { | 578 f(expr) { |
707 switch (expr) { | 579 switch (expr) { |
708 /*caret*/ | 580 /*caret*/ |
709 } | 581 } |
710 } | 582 } |
711 '''); | 583 '''); |
712 } | 584 } |
713 } | 585 } |
714 | 586 |
715 @reflectiveTest | 587 @reflectiveTest |
716 class _TryTest extends PostfixCompletionTest { | 588 class _TryTest extends PostfixCompletionTest { |
717 test_try() async { | 589 test_try() async { |
718 await _prepareCompletion( | 590 await _prepareCompletion('.try', ''' |
719 '.try', | |
720 ''' | |
721 f() { | 591 f() { |
722 var x = 1.try | 592 var x = 1.try |
723 } | 593 } |
724 '''); | 594 '''); |
725 _assertHasChange( | 595 _assertHasChange('Expand .try', ''' |
726 'Expand .try', | |
727 ''' | |
728 f() { | 596 f() { |
729 try { | 597 try { |
730 var x = 1/*caret*/ | 598 var x = 1/*caret*/ |
731 } catch (e, s) { | 599 } catch (e, s) { |
732 print(s); | 600 print(s); |
733 } | 601 } |
734 } | 602 } |
735 '''); | 603 '''); |
736 } | 604 } |
737 | 605 |
738 @failingTest | 606 @failingTest |
739 test_try_invalid() async { | 607 test_try_invalid() async { |
740 // The semicolon is fine; this fails because of the do-statement. | 608 // The semicolon is fine; this fails because of the do-statement. |
741 await _prepareCompletion( | 609 await _prepareCompletion('.try', ''' |
742 '.try', | |
743 ''' | |
744 f() { | 610 f() { |
745 do {} while (true);.try | 611 do {} while (true);.try |
746 } | 612 } |
747 '''); | 613 '''); |
748 } | 614 } |
749 | 615 |
750 test_tryMultiline() async { | 616 test_tryMultiline() async { |
751 await _prepareCompletion( | 617 await _prepareCompletion('.try', ''' |
752 '.try', | |
753 ''' | |
754 f(arg) { | 618 f(arg) { |
755 arg | 619 arg |
756 ..first | 620 ..first |
757 ..second | 621 ..second |
758 ..third | 622 ..third |
759 ..fourth.try | 623 ..fourth.try |
760 } | 624 } |
761 '''); | 625 '''); |
762 _assertHasChange( | 626 _assertHasChange('Expand .try', ''' |
763 'Expand .try', | |
764 ''' | |
765 f(arg) { | 627 f(arg) { |
766 try { | 628 try { |
767 arg | 629 arg |
768 ..first | 630 ..first |
769 ..second | 631 ..second |
770 ..third | 632 ..third |
771 ..fourth/*caret*/ | 633 ..fourth/*caret*/ |
772 } catch (e, s) { | 634 } catch (e, s) { |
773 print(s); | 635 print(s); |
774 } | 636 } |
775 } | 637 } |
776 '''); | 638 '''); |
777 } | 639 } |
778 | 640 |
779 test_tryon() async { | 641 test_tryon() async { |
780 await _prepareCompletion( | 642 await _prepareCompletion('.tryon', ''' |
781 '.tryon', | |
782 ''' | |
783 f() { | 643 f() { |
784 var x = 1.tryon | 644 var x = 1.tryon |
785 } | 645 } |
786 '''); | 646 '''); |
787 _assertHasChange( | 647 _assertHasChange('Expand .tryon', ''' |
788 'Expand .tryon', | |
789 ''' | |
790 f() { | 648 f() { |
791 try { | 649 try { |
792 var x = 1/*caret*/ | 650 var x = 1/*caret*/ |
793 } on Exception catch (e, s) { | 651 } on Exception catch (e, s) { |
794 print(s); | 652 print(s); |
795 } | 653 } |
796 } | 654 } |
797 '''); | 655 '''); |
798 } | 656 } |
799 | 657 |
800 test_tryonThrowStatement() async { | 658 test_tryonThrowStatement() async { |
801 await _prepareCompletion( | 659 await _prepareCompletion('.tryon', ''' |
802 '.tryon', | |
803 ''' | |
804 f() { | 660 f() { |
805 throw 'error';.tryon | 661 throw 'error';.tryon |
806 } | 662 } |
807 '''); | 663 '''); |
808 _assertHasChange( | 664 _assertHasChange('Expand .tryon', ''' |
809 'Expand .tryon', | |
810 ''' | |
811 f() { | 665 f() { |
812 try { | 666 try { |
813 throw 'error';/*caret*/ | 667 throw 'error';/*caret*/ |
814 } on String catch (e, s) { | 668 } on String catch (e, s) { |
815 print(s); | 669 print(s); |
816 } | 670 } |
817 } | 671 } |
818 '''); | 672 '''); |
819 } | 673 } |
820 | 674 |
821 test_tryonThrowString() async { | 675 test_tryonThrowString() async { |
822 await _prepareCompletion( | 676 await _prepareCompletion('.tryon', ''' |
823 '.tryon', | |
824 ''' | |
825 f() { | 677 f() { |
826 throw 'error'.tryon | 678 throw 'error'.tryon |
827 } | 679 } |
828 '''); | 680 '''); |
829 _assertHasChange( | 681 _assertHasChange('Expand .tryon', ''' |
830 'Expand .tryon', | |
831 ''' | |
832 f() { | 682 f() { |
833 try { | 683 try { |
834 throw 'error'/*caret*/ | 684 throw 'error'/*caret*/ |
835 } on String catch (e, s) { | 685 } on String catch (e, s) { |
836 print(s); | 686 print(s); |
837 } | 687 } |
838 } | 688 } |
839 '''); | 689 '''); |
840 } | 690 } |
841 } | 691 } |
842 | 692 |
843 @reflectiveTest | 693 @reflectiveTest |
844 class _WhileTest extends PostfixCompletionTest { | 694 class _WhileTest extends PostfixCompletionTest { |
845 test_while() async { | 695 test_while() async { |
846 await _prepareCompletion( | 696 await _prepareCompletion('.while', ''' |
847 '.while', | |
848 ''' | |
849 f(expr) { | 697 f(expr) { |
850 expr.while | 698 expr.while |
851 } | 699 } |
852 '''); | 700 '''); |
853 _assertHasChange( | 701 _assertHasChange('Expand .while', ''' |
854 'Expand .while', | |
855 ''' | |
856 f(expr) { | 702 f(expr) { |
857 while (expr) { | 703 while (expr) { |
858 /*caret*/ | 704 /*caret*/ |
859 } | 705 } |
860 } | 706 } |
861 '''); | 707 '''); |
862 } | 708 } |
863 } | 709 } |
OLD | NEW |