| 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 { |
| 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 |