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 library test.services.completion.statement; | 5 library test.services.completion.statement; |
6 | 6 |
7 import 'package:analysis_server/src/protocol_server.dart'; | 7 import 'package:analysis_server/src/protocol_server.dart'; |
8 import 'package:analysis_server/src/services/completion/statement/statement_comp letion.dart'; | 8 import 'package:analysis_server/src/services/completion/statement/statement_comp letion.dart'; |
9 import 'package:analyzer/src/dart/analysis/driver.dart'; | 9 import 'package:analyzer/src/dart/analysis/driver.dart'; |
10 import 'package:test/test.dart'; | 10 import 'package:test/test.dart'; |
11 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 11 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
12 | 12 |
13 import '../../../abstract_single_unit.dart'; | 13 import '../../../abstract_single_unit.dart'; |
14 | 14 |
15 main() { | 15 main() { |
16 defineReflectiveSuite(() { | 16 defineReflectiveSuite(() { |
17 defineReflectiveTests(_DeclarationCompletionTest); | 17 defineReflectiveTests(_DeclarationCompletionTest); |
18 defineReflectiveTests(_ControlFlowCompletionTest); | 18 defineReflectiveTests(_ControlFlowCompletionTest); |
19 defineReflectiveTests(_DoCompletionTest); | 19 defineReflectiveTests(_DoCompletionTest); |
20 defineReflectiveTests(_ExpressionCompletionTest); | |
20 defineReflectiveTests(_ForCompletionTest); | 21 defineReflectiveTests(_ForCompletionTest); |
21 defineReflectiveTests(_ForEachCompletionTest); | 22 defineReflectiveTests(_ForEachCompletionTest); |
22 defineReflectiveTests(_IfCompletionTest); | 23 defineReflectiveTests(_IfCompletionTest); |
23 defineReflectiveTests(_SimpleCompletionTest); | 24 defineReflectiveTests(_SimpleCompletionTest); |
24 defineReflectiveTests(_SwitchCompletionTest); | 25 defineReflectiveTests(_SwitchCompletionTest); |
25 defineReflectiveTests(_TryCompletionTest); | 26 defineReflectiveTests(_TryCompletionTest); |
26 defineReflectiveTests(_WhileCompletionTest); | 27 defineReflectiveTests(_WhileCompletionTest); |
27 }); | 28 }); |
28 } | 29 } |
29 | 30 |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
296 _assertHasChange( | 297 _assertHasChange( |
297 'Complete class declaration', | 298 'Complete class declaration', |
298 ''' | 299 ''' |
299 class Sample { | 300 class Sample { |
300 //// | 301 //// |
301 } | 302 } |
302 ''', | 303 ''', |
303 (s) => _afterLast(s, ' ')); | 304 (s) => _afterLast(s, ' ')); |
304 } | 305 } |
305 | 306 |
307 test_extendsNoBody() async { | |
308 await _prepareCompletion( | |
309 'Sample', | |
310 ''' | |
311 class Sample extends Object | |
312 ''', | |
313 atEnd: true); | |
314 _assertHasChange( | |
315 'Complete class declaration', | |
316 ''' | |
317 class Sample extends Object { | |
318 //// | |
319 } | |
320 ''', | |
321 (s) => _afterLast(s, ' ')); | |
322 } | |
323 | |
306 test_functionDeclNoBody() async { | 324 test_functionDeclNoBody() async { |
307 await _prepareCompletion( | 325 await _prepareCompletion( |
308 'source()', | 326 'source()', |
309 ''' | 327 ''' |
310 String source() | 328 String source() |
311 ''', | 329 ''', |
312 atEnd: true); | 330 atEnd: true); |
313 _assertHasChange( | 331 _assertHasChange( |
314 'Complete function declaration', | 332 'Complete function declaration', |
315 ''' | 333 ''' |
316 String source() { | 334 String source() { |
317 //// | 335 //// |
318 } | 336 } |
319 ''', | 337 ''', |
320 (s) => _after(s, ' ')); | 338 (s) => _after(s, ' ')); |
321 } | 339 } |
322 | 340 |
341 test_functionDeclNoParen() async { | |
342 await _prepareCompletion( | |
343 'source(', | |
344 ''' | |
345 String source( | |
346 ''', | |
347 atEnd: true); | |
348 _assertHasChange( | |
349 'Complete function declaration', | |
350 ''' | |
351 String source() { | |
352 //// | |
353 } | |
354 ''', | |
355 (s) => _after(s, ' ')); | |
356 } | |
357 | |
323 test_methodDeclNoBody() async { | 358 test_methodDeclNoBody() async { |
324 await _prepareCompletion( | 359 await _prepareCompletion( |
325 'source()', | 360 'source()', |
326 ''' | 361 ''' |
327 class Sample { | 362 class Sample { |
328 String source() | 363 String source() |
329 } | 364 } |
330 ''', | 365 ''', |
331 atEnd: true); | 366 atEnd: true); |
332 _assertHasChange( | 367 _assertHasChange( |
333 'Complete function declaration', | 368 'Complete function declaration', |
334 ''' | 369 ''' |
335 class Sample { | 370 class Sample { |
336 String source() { | 371 String source() { |
337 //// | 372 //// |
338 } | 373 } |
339 } | 374 } |
340 ''', | 375 ''', |
341 (s) => _after(s, ' ')); | 376 (s) => _after(s, ' ')); |
342 } | 377 } |
343 | 378 |
379 test_methodDeclNoParen() async { | |
380 await _prepareCompletion( | |
381 'source(', | |
382 ''' | |
383 class Sample { | |
384 String source( | |
385 } | |
386 ''', | |
387 atEnd: true); | |
388 _assertHasChange( | |
389 'Complete function declaration', | |
390 ''' | |
391 class Sample { | |
392 String source() { | |
393 //// | |
394 } | |
395 } | |
396 ''', | |
397 (s) => _after(s, ' ')); | |
398 } | |
399 | |
344 test_variableDeclNoBody() async { | 400 test_variableDeclNoBody() async { |
345 await _prepareCompletion( | 401 await _prepareCompletion( |
346 'source', | 402 'source', |
347 ''' | 403 ''' |
348 String source | 404 String source |
349 ''', | 405 ''', |
350 atEnd: true); | 406 atEnd: true); |
351 _assertHasChange( | 407 _assertHasChange( |
352 'Complete variable declaration', | 408 'Complete variable declaration', |
353 ''' | 409 ''' |
354 String source; | 410 String source; |
355 //// | 411 //// |
356 ''', | 412 ''', |
357 (s) => _after(s, ';\n')); | 413 (s) => _after(s, ';\n')); |
358 } | 414 } |
415 | |
416 test_withNoBody() async { | |
Brian Wilkerson
2017/05/09 15:12:24
Is there a test for the following?
class Interf
messick
2017/05/09 16:32:09
Done.
| |
417 await _prepareCompletion( | |
418 'Sample', | |
419 ''' | |
420 class M {} | |
421 class Sample extends Object with M | |
422 ''', | |
423 atEnd: true); | |
424 _assertHasChange( | |
425 'Complete class declaration', | |
426 ''' | |
427 class M {} | |
428 class Sample extends Object with M { | |
429 //// | |
430 } | |
431 ''', | |
432 (s) => _afterLast(s, ' ')); | |
433 } | |
359 } | 434 } |
360 | 435 |
361 @reflectiveTest | 436 @reflectiveTest |
362 class _DoCompletionTest extends StatementCompletionTest { | 437 class _DoCompletionTest extends StatementCompletionTest { |
363 test_emptyCondition() async { | 438 test_emptyCondition() async { |
364 await _prepareCompletion( | 439 await _prepareCompletion( |
365 'while ()', | 440 'while ()', |
366 ''' | 441 ''' |
367 main() { | 442 main() { |
368 do { | 443 do { |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
484 main() { | 559 main() { |
485 do { | 560 do { |
486 } while (); | 561 } while (); |
487 } | 562 } |
488 ''', | 563 ''', |
489 (s) => _after(s, 'while (')); | 564 (s) => _after(s, 'while (')); |
490 } | 565 } |
491 } | 566 } |
492 | 567 |
493 @reflectiveTest | 568 @reflectiveTest |
569 class _ExpressionCompletionTest extends StatementCompletionTest { | |
570 test_listAssign() async { | |
571 await _prepareCompletion( | |
572 '= ', | |
573 ''' | |
574 main() { | |
575 var x = [1, 2, 3 | |
576 } | |
577 ''', | |
578 atEnd: true); | |
579 _assertHasChange( | |
580 'Add a semicolon and newline', | |
581 ''' | |
582 main() { | |
583 var x = [1, 2, 3]; | |
584 //// | |
585 } | |
586 ''', | |
587 (s) => _afterLast(s, ' ')); | |
588 } | |
589 | |
590 test_listAssignMultiLine() async { | |
591 // The indent of the final line is incorrect. | |
592 await _prepareCompletion( | |
593 '3', | |
594 ''' | |
595 main() { | |
596 var x = [ | |
597 1, | |
598 2, | |
599 3 | |
600 } | |
601 ''', | |
602 atEnd: true); | |
603 _assertHasChange( | |
604 'Add a semicolon and newline', | |
605 ''' | |
606 main() { | |
607 var x = [ | |
608 1, | |
609 2, | |
610 3, | |
611 ]; | |
612 //// | |
613 } | |
614 ''', | |
615 (s) => _afterLast(s, ' ')); | |
616 } | |
617 | |
618 @failingTest | |
619 test_mapAssign() async { | |
620 await _prepareCompletion( | |
621 '3: 3', | |
622 ''' | |
623 main() { | |
624 var x = {1: 1, 2: 2, 3: 3 | |
625 } | |
626 ''', | |
627 atEnd: true); | |
628 _assertHasChange( | |
629 'Add a semicolon and newline', | |
630 ''' | |
631 main() { | |
632 var x = {1: 1, 2: 2, 3: 3}; | |
633 //// | |
634 } | |
635 ''', | |
636 (s) => _afterLast(s, ' ')); | |
637 } | |
638 | |
639 @failingTest | |
640 test_mapAssignMissingColon() async { | |
641 await _prepareCompletion( | |
642 '3', | |
643 ''' | |
644 main() { | |
645 var x = {1: 1, 2: 2, 3 | |
646 } | |
647 ''', | |
648 atEnd: true); | |
649 _assertHasChange( | |
650 'Add a semicolon and newline', | |
651 ''' | |
652 main() { | |
653 var x = {1: 1, 2: 2, 3: }; | |
654 //// | |
655 } | |
656 ''', | |
657 (s) => _afterLast(s, ' ')); | |
658 } | |
659 | |
660 test_returnString() async { | |
661 await _prepareCompletion( | |
662 'text', | |
663 ''' | |
664 main() { | |
665 if (done()) { | |
666 return 'text | |
667 } | |
668 } | |
669 ''', | |
670 atEnd: true); | |
671 _assertHasChange( | |
672 'Complete control flow block', | |
673 ''' | |
674 main() { | |
675 if (done()) { | |
676 return 'text'; | |
677 } | |
678 //// | |
679 } | |
680 ''', | |
681 (s) => _afterLast(s, ' ')); | |
682 } | |
683 | |
684 test_stringAssign() async { | |
685 await _prepareCompletion( | |
686 '= ', | |
687 ''' | |
688 main() { | |
689 var x = ' | |
690 } | |
691 ''', | |
692 atEnd: true); | |
693 _assertHasChange( | |
694 'Add a semicolon and newline', | |
695 ''' | |
696 main() { | |
697 var x = ''; | |
698 //// | |
699 } | |
700 ''', | |
701 (s) => _afterLast(s, ' ')); | |
702 } | |
703 | |
704 test_stringSingle() async { | |
705 await _prepareCompletion( | |
706 'text', | |
707 ''' | |
708 main() { | |
709 print("text | |
710 } | |
711 ''', | |
712 atEnd: true); | |
713 _assertHasChange( | |
714 'Insert a newline at the end of the current line', | |
715 ''' | |
716 main() { | |
717 print("text"); | |
718 //// | |
719 } | |
720 ''', | |
721 (s) => _afterLast(s, ' ')); | |
722 } | |
723 | |
724 test_stringTriple() async { | |
725 await _prepareCompletion( | |
726 'text', | |
727 ''' | |
728 main() { | |
729 print(\'\'\'text | |
730 } | |
731 ''', | |
732 atEnd: true); | |
733 _assertHasChange( | |
734 'Insert a newline at the end of the current line', | |
735 ''' | |
736 main() { | |
737 print(\'\'\'text\'\'\'); | |
738 //// | |
739 } | |
740 ''', | |
741 (s) => _afterLast(s, ' ')); | |
742 } | |
743 } | |
744 | |
745 @reflectiveTest | |
494 class _ForCompletionTest extends StatementCompletionTest { | 746 class _ForCompletionTest extends StatementCompletionTest { |
495 test_emptyCondition() async { | 747 test_emptyCondition() async { |
496 await _prepareCompletion( | 748 await _prepareCompletion( |
497 '}', | 749 '0;', |
750 ''' | |
751 main() { | |
752 for (int i = 0;) /**/ //// | |
753 } | |
754 ''', | |
755 atEnd: true); | |
756 _assertHasChange( | |
757 'Complete for-statement', | |
758 ''' | |
759 main() { | |
760 for (int i = 0; ; ) /**/ { | |
761 //// | |
762 } | |
763 } | |
764 ''', | |
765 (s) => _after(s, ' ')); | |
766 } | |
767 | |
768 test_emptyConditionWithBody() async { | |
769 await _prepareCompletion( | |
770 '0;', | |
498 ''' | 771 ''' |
499 main() { | 772 main() { |
500 for (int i = 0;) { | 773 for (int i = 0;) { |
501 } | 774 } |
502 } | 775 } |
503 ''', | 776 ''', |
504 atEnd: true); | 777 atEnd: true); |
505 _assertHasChange( | 778 _assertHasChange( |
506 'Complete for-statement', | 779 'Complete for-statement', |
507 ''' | 780 ''' |
508 main() { | 781 main() { |
509 for (int i = 0; ; ) { | 782 for (int i = 0; ; ) { |
510 } | 783 } |
511 } | 784 } |
512 ''', | 785 ''', |
513 (s) => _after(s, '0; ')); | 786 (s) => _after(s, '0; ')); |
514 } | 787 } |
515 | 788 |
516 test_emptyInitializers() async { | 789 test_emptyInitializers() async { |
517 // TODO(messick) This should insert a newline and move the cursor there. | 790 // This does nothing, same as for Java. |
518 await _prepareCompletion( | 791 await _prepareCompletion( |
519 '}', | 792 'r (', |
520 ''' | 793 ''' |
521 main() { | 794 main() { |
522 for () { | 795 for () { |
523 } | 796 } |
524 } | 797 } |
525 ''', | 798 ''', |
526 atEnd: true); | 799 atEnd: true); |
527 _assertHasChange( | 800 _assertHasChange( |
528 'Complete for-statement', | 801 'Complete for-statement', |
529 ''' | 802 ''' |
530 main() { | 803 main() { |
531 for () { | 804 for () { |
532 } | 805 } |
533 } | 806 } |
534 ''', | 807 ''', |
535 (s) => _after(s, 'for (')); | 808 (s) => _after(s, 'r (')); |
809 } | |
810 | |
811 test_emptyInitializersAfterBody() async { | |
812 await _prepareCompletion( | |
813 '}', | |
814 ''' | |
815 main() { | |
816 for () { | |
817 } | |
818 } | |
819 ''', | |
820 atEnd: true); | |
821 _assertHasChange( | |
822 'Insert a newline at the end of the current line', | |
823 ''' | |
824 main() { | |
825 for () { | |
826 } | |
827 //// | |
828 } | |
829 ''', | |
830 (s) => _afterLast(s, ' ')); | |
536 } | 831 } |
537 | 832 |
538 test_emptyInitializersEmptyCondition() async { | 833 test_emptyInitializersEmptyCondition() async { |
539 await _prepareCompletion( | 834 await _prepareCompletion( |
540 '}', | 835 '/**/', |
541 ''' | 836 ''' |
542 main() { | 837 main() { |
543 for (;/**/) { | 838 for (;/**/) |
544 } | |
545 } | 839 } |
546 ''', | 840 ''', |
547 atEnd: true); | 841 atEnd: true); |
548 _assertHasChange( | 842 _assertHasChange( |
549 'Complete for-statement', | 843 'Complete for-statement', |
550 ''' | 844 ''' |
551 main() { | 845 main() { |
552 for (;/**/) { | 846 for (; /**/; ) { |
847 //// | |
553 } | 848 } |
554 } | 849 } |
555 ''', | 850 ''', |
556 (s) => _after(s, '/**/')); | 851 (s) => _after(s, ' ')); |
557 } | 852 } |
558 | 853 |
559 test_emptyParts() async { | 854 test_emptyParts() async { |
560 await _prepareCompletion( | 855 await _prepareCompletion( |
561 ';)', | 856 ';)', |
562 ''' | 857 ''' |
563 main() { | 858 main() { |
564 for (;;) | 859 for (;;) |
565 } | 860 } |
566 ''', | 861 ''', |
567 atEnd: true); | 862 atEnd: true); |
568 _assertHasChange( | 863 _assertHasChange( |
569 'Complete for-statement', | 864 'Complete for-statement', |
570 ''' | 865 ''' |
571 main() { | 866 main() { |
572 for (;;) { | 867 for (;;) { |
573 //// | 868 //// |
574 } | 869 } |
575 } | 870 } |
576 ''', | 871 ''', |
577 (s) => _after(s, ' ')); | 872 (s) => _after(s, ' ')); |
578 } | 873 } |
579 | 874 |
580 test_emptyUpdaters() async { | 875 test_emptyUpdaters() async { |
581 await _prepareCompletion( | 876 await _prepareCompletion( |
582 '}', | 877 '/**/', |
878 ''' | |
879 main() { | |
880 for (int i = 0; i < 10 /**/) | |
881 } | |
882 ''', | |
883 atEnd: true); | |
884 _assertHasChange( | |
885 'Complete for-statement', | |
886 ''' | |
887 main() { | |
888 for (int i = 0; i < 10 /**/; ) { | |
889 //// | |
890 } | |
891 } | |
892 ''', | |
893 (s) => _after(s, ' ')); | |
894 } | |
895 | |
896 test_emptyUpdatersWithBody() async { | |
897 await _prepareCompletion( | |
898 '/**/', | |
583 ''' | 899 ''' |
584 main() { | 900 main() { |
585 for (int i = 0; i < 10 /**/) { | 901 for (int i = 0; i < 10 /**/) { |
586 } | 902 } |
587 } | 903 } |
588 ''', | 904 ''', |
589 atEnd: true); | 905 atEnd: true); |
590 _assertHasChange( | 906 _assertHasChange( |
591 'Complete for-statement', | 907 'Complete for-statement', |
592 ''' | 908 ''' |
593 main() { | 909 main() { |
594 for (int i = 0; i < 10 /**/; ) { | 910 for (int i = 0; i < 10 /**/; ) { |
595 } | 911 } |
596 } | 912 } |
597 ''', | 913 ''', |
598 (s) => _after(s, '10 /**/; ')); | 914 (s) => _after(s, '*/; ')); |
599 } | 915 } |
600 | 916 |
601 test_keywordOnly() async { | 917 test_keywordOnly() async { |
602 await _prepareCompletion( | 918 await _prepareCompletion( |
603 'for', | 919 'for', |
604 ''' | 920 ''' |
605 main() { | 921 main() { |
606 for | 922 for |
607 } | 923 } |
608 ''', | 924 ''', |
609 atEnd: true); | 925 atEnd: true); |
610 _assertHasChange( | 926 _assertHasChange( |
611 'Complete for-statement', | 927 'Complete for-statement', |
612 ''' | 928 ''' |
613 main() { | 929 main() { |
614 for () { | 930 for () { |
615 //// | 931 //// |
616 } | 932 } |
617 } | 933 } |
618 ''', | 934 ''', |
619 (s) => _after(s, 'for (')); | 935 (s) => _after(s, 'for (')); |
620 } | 936 } |
621 | 937 |
622 test_missingLeftSeparator() async { | 938 test_missingLeftSeparator() async { |
623 await _prepareCompletion( | 939 await _prepareCompletion( |
624 '}', | 940 '= 0', |
625 ''' | 941 ''' |
626 main() { | 942 main() { |
627 for (int i = 0) { | 943 for (int i = 0) { |
628 } | 944 } |
629 } | 945 } |
630 ''', | 946 ''', |
631 atEnd: true); | 947 atEnd: true); |
632 _assertHasChange( | 948 _assertHasChange( |
633 'Complete for-statement', | 949 'Complete for-statement', |
634 ''' | 950 ''' |
635 main() { | 951 main() { |
636 for (int i = 0; ) { | 952 for (int i = 0; ; ) { |
637 } | 953 } |
638 } | 954 } |
639 ''', | 955 ''', |
640 (s) => _after(s, '0; ')); | 956 (s) => _after(s, '0; ')); |
641 } | 957 } |
642 | 958 |
643 test_noError() async { | 959 test_noError() async { |
644 await _prepareCompletion( | 960 await _prepareCompletion( |
645 ';)', | 961 ';)', |
646 ''' | 962 ''' |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
748 } | 1064 } |
749 return; | 1065 return; |
750 } | 1066 } |
751 ''', | 1067 ''', |
752 (s) => _after(s, ' ')); | 1068 (s) => _after(s, ' ')); |
753 } | 1069 } |
754 } | 1070 } |
755 | 1071 |
756 @reflectiveTest | 1072 @reflectiveTest |
757 class _IfCompletionTest extends StatementCompletionTest { | 1073 class _IfCompletionTest extends StatementCompletionTest { |
758 test_afterCondition_BAD() async { | 1074 test_afterCondition() async { |
759 // TODO(messick) Stop inserting the space after the closing brace. | |
760 await _prepareCompletion( | 1075 await _prepareCompletion( |
761 'if (true) ', // Trigger completion after space. | 1076 'if (true) ', // Trigger completion after space. |
762 ''' | 1077 ''' |
763 main() { | 1078 main() { |
764 if (true) //// | 1079 if (true) //// |
765 } | 1080 } |
766 ''', | 1081 ''', |
767 atEnd: true); | 1082 atEnd: true); |
768 _assertHasChange( | 1083 _assertHasChange( |
769 'Complete if-statement', | 1084 'Complete if-statement', |
770 ''' | 1085 ''' |
771 main() { | 1086 main() { |
772 if (true) { | 1087 if (true) { |
773 //// | 1088 //// |
774 } //// | 1089 } |
775 } | 1090 } |
776 ''', | 1091 ''', |
777 (s) => _after(s, ' ')); | 1092 (s) => _after(s, ' ')); |
778 } | 1093 } |
779 | 1094 |
780 test_emptyCondition() async { | 1095 test_emptyCondition() async { |
781 await _prepareCompletion( | 1096 await _prepareCompletion( |
782 'if ()', | 1097 'if ()', |
783 ''' | 1098 ''' |
784 main() { | 1099 main() { |
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1326 test_onCatch() async { | 1641 test_onCatch() async { |
1327 await _prepareCompletion( | 1642 await _prepareCompletion( |
1328 'on', | 1643 'on', |
1329 ''' | 1644 ''' |
1330 main() { | 1645 main() { |
1331 try { | 1646 try { |
1332 } on catch | 1647 } on catch |
1333 } | 1648 } |
1334 ''', | 1649 ''', |
1335 atEnd: true); | 1650 atEnd: true); |
1336 // It would be better to expect the cursor to follow the on-keyword but | |
1337 // the parser thinks the exception type is 'catch' so it's kinda broken. | |
1338 // See https://github.com/dart-lang/sdk/issues/29410 | |
1339 _assertHasChange( | 1651 _assertHasChange( |
1340 'Complete try-statement', | 1652 'Complete try-statement', |
1341 ''' | 1653 ''' |
1342 main() { | 1654 main() { |
1343 try { | 1655 try { |
1344 } on catch () { | 1656 } on catch () { |
1345 //// | 1657 //// |
1346 } | 1658 } |
1347 } | 1659 } |
1348 ''', | 1660 ''', |
1349 (s) => _after(s, 'catch (')); | 1661 (s) => _after(s, 'catch (')); |
1350 } | 1662 } |
1351 | 1663 |
1664 test_onCatchComment() async { | |
1665 await _prepareCompletion( | |
1666 'on', | |
1667 ''' | |
1668 main() { | |
1669 try { | |
1670 } on catch | |
1671 // | |
1672 } | |
1673 ''', | |
1674 atEnd: true); | |
1675 _assertHasChange( | |
1676 'Complete try-statement', | |
1677 ''' | |
1678 main() { | |
1679 try { | |
1680 } on catch () { | |
1681 //// | |
1682 } | |
1683 // | |
1684 } | |
1685 ''', | |
1686 (s) => _after(s, 'catch (')); | |
1687 } | |
1688 | |
1352 test_onOnly() async { | 1689 test_onOnly() async { |
1353 await _prepareCompletion( | 1690 await _prepareCompletion( |
1354 'on', | 1691 'on', |
1355 ''' | 1692 ''' |
1356 main() { | 1693 main() { |
1357 try { | 1694 try { |
1358 } on | 1695 } on |
1359 } | 1696 } |
1360 ''', | 1697 ''', |
1361 atEnd: true); | 1698 atEnd: true); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1465 ''' | 1802 ''' |
1466 main() { | 1803 main() { |
1467 while () { | 1804 while () { |
1468 //// | 1805 //// |
1469 } | 1806 } |
1470 } | 1807 } |
1471 ''', | 1808 ''', |
1472 (s) => _after(s, 'while (')); | 1809 (s) => _after(s, 'while (')); |
1473 } | 1810 } |
1474 } | 1811 } |
OLD | NEW |