Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(508)

Side by Side Diff: pkg/analyzer/test/generated/scanner_test.dart

Issue 975453004: Reformat (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 engine.scanner_test; 5 library engine.scanner_test;
6 6
7 import 'package:analyzer/src/generated/error.dart'; 7 import 'package:analyzer/src/generated/error.dart';
8 import 'package:analyzer/src/generated/scanner.dart'; 8 import 'package:analyzer/src/generated/scanner.dart';
9 import 'package:analyzer/src/generated/source.dart'; 9 import 'package:analyzer/src/generated/source.dart';
10 import 'package:unittest/unittest.dart'; 10 import 'package:unittest/unittest.dart';
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 expect(state, isNotNull); 165 expect(state, isNotNull);
166 } 166 }
167 } 167 }
168 } 168 }
169 } 169 }
170 170
171 @reflectiveTest 171 @reflectiveTest
172 class ScannerTest { 172 class ScannerTest {
173 void fail_incomplete_string_interpolation() { 173 void fail_incomplete_string_interpolation() {
174 // https://code.google.com/p/dart/issues/detail?id=18073 174 // https://code.google.com/p/dart/issues/detail?id=18073
175 _assertErrorAndTokens( 175 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 9,
176 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 176 "\"foo \${bar", [
177 9, 177 new StringToken(TokenType.STRING, "\"foo ", 0),
178 "\"foo \${bar", 178 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 5),
179 [ 179 new StringToken(TokenType.IDENTIFIER, "bar", 7)
180 new StringToken(TokenType.STRING, "\"foo ", 0), 180 ]);
181 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 5) ,
182 new StringToken(TokenType.IDENTIFIER, "bar", 7)]);
183 } 181 }
184 182
185 void test_ampersand() { 183 void test_ampersand() {
186 _assertToken(TokenType.AMPERSAND, "&"); 184 _assertToken(TokenType.AMPERSAND, "&");
187 } 185 }
188 186
189 void test_ampersand_ampersand() { 187 void test_ampersand_ampersand() {
190 _assertToken(TokenType.AMPERSAND_AMPERSAND, "&&"); 188 _assertToken(TokenType.AMPERSAND_AMPERSAND, "&&");
191 } 189 }
192 190
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 246
249 void test_colon() { 247 void test_colon() {
250 _assertToken(TokenType.COLON, ":"); 248 _assertToken(TokenType.COLON, ":");
251 } 249 }
252 250
253 void test_comma() { 251 void test_comma() {
254 _assertToken(TokenType.COMMA, ","); 252 _assertToken(TokenType.COMMA, ",");
255 } 253 }
256 254
257 void test_comment_disabled_multi() { 255 void test_comment_disabled_multi() {
258 Scanner scanner = new Scanner( 256 Scanner scanner = new Scanner(null,
259 null,
260 new CharSequenceReader("/* comment */ "), 257 new CharSequenceReader("/* comment */ "),
261 AnalysisErrorListener.NULL_LISTENER); 258 AnalysisErrorListener.NULL_LISTENER);
262 scanner.preserveComments = false; 259 scanner.preserveComments = false;
263 Token token = scanner.tokenize(); 260 Token token = scanner.tokenize();
264 expect(token, isNotNull); 261 expect(token, isNotNull);
265 expect(token.precedingComments, isNull); 262 expect(token.precedingComments, isNull);
266 } 263 }
267 264
268 void test_comment_multi() { 265 void test_comment_multi() {
269 _assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment */"); 266 _assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment */");
270 } 267 }
271 268
272 void test_comment_multi_unterminated() { 269 void test_comment_multi_unterminated() {
273 _assertError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, 3, "/* x"); 270 _assertError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, 3, "/* x");
274 } 271 }
275 272
276 void test_comment_nested() { 273 void test_comment_nested() {
277 _assertComment( 274 _assertComment(
278 TokenType.MULTI_LINE_COMMENT, 275 TokenType.MULTI_LINE_COMMENT, "/* comment /* within a */ comment */");
279 "/* comment /* within a */ comment */");
280 } 276 }
281 277
282 void test_comment_single() { 278 void test_comment_single() {
283 _assertComment(TokenType.SINGLE_LINE_COMMENT, "// comment"); 279 _assertComment(TokenType.SINGLE_LINE_COMMENT, "// comment");
284 } 280 }
285 281
286 void test_double_both_E() { 282 void test_double_both_E() {
287 _assertToken(TokenType.DOUBLE, "0.123E4"); 283 _assertToken(TokenType.DOUBLE, "0.123E4");
288 } 284 }
289 285
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 void test_keyword_while() { 570 void test_keyword_while() {
575 _assertKeywordToken("while"); 571 _assertKeywordToken("while");
576 } 572 }
577 573
578 void test_keyword_with() { 574 void test_keyword_with() {
579 _assertKeywordToken("with"); 575 _assertKeywordToken("with");
580 } 576 }
581 577
582 void test_lineInfo_multilineComment() { 578 void test_lineInfo_multilineComment() {
583 String source = "/*\r *\r */"; 579 String source = "/*\r *\r */";
584 _assertLineInfo( 580 _assertLineInfo(source, [
585 source, 581 new ScannerTest_ExpectedLocation(0, 1, 1),
586 [ 582 new ScannerTest_ExpectedLocation(4, 2, 2),
587 new ScannerTest_ExpectedLocation(0, 1, 1), 583 new ScannerTest_ExpectedLocation(source.length - 1, 3, 3)
588 new ScannerTest_ExpectedLocation(4, 2, 2), 584 ]);
589 new ScannerTest_ExpectedLocation(source.length - 1, 3, 3)]);
590 } 585 }
591 586
592 void test_lineInfo_multilineString() { 587 void test_lineInfo_multilineString() {
593 String source = "'''a\r\nbc\r\nd'''"; 588 String source = "'''a\r\nbc\r\nd'''";
594 _assertLineInfo( 589 _assertLineInfo(source, [
595 source, 590 new ScannerTest_ExpectedLocation(0, 1, 1),
596 [ 591 new ScannerTest_ExpectedLocation(7, 2, 2),
597 new ScannerTest_ExpectedLocation(0, 1, 1), 592 new ScannerTest_ExpectedLocation(source.length - 1, 3, 4)
598 new ScannerTest_ExpectedLocation(7, 2, 2), 593 ]);
599 new ScannerTest_ExpectedLocation(source.length - 1, 3, 4)]);
600 } 594 }
601 595
602 void test_lineInfo_simpleClass() { 596 void test_lineInfo_simpleClass() {
603 String source = 597 String source =
604 "class Test {\r\n String s = '...';\r\n int get x => s.MISSING_GET TER;\r\n}"; 598 "class Test {\r\n String s = '...';\r\n int get x => s.MISSING_GET TER;\r\n}";
605 _assertLineInfo( 599 _assertLineInfo(source, [
606 source, 600 new ScannerTest_ExpectedLocation(0, 1, 1),
607 [ 601 new ScannerTest_ExpectedLocation(source.indexOf("MISSING_GETTER"), 3, 20),
608 new ScannerTest_ExpectedLocation(0, 1, 1), 602 new ScannerTest_ExpectedLocation(source.length - 1, 4, 1)
609 new ScannerTest_ExpectedLocation(source.indexOf("MISSING_GETTER"), 3 , 20), 603 ]);
610 new ScannerTest_ExpectedLocation(source.length - 1, 4, 1)]);
611 } 604 }
612 605
613 void test_lineInfo_slashN() { 606 void test_lineInfo_slashN() {
614 String source = "class Test {\n}"; 607 String source = "class Test {\n}";
615 _assertLineInfo( 608 _assertLineInfo(source, [
616 source, 609 new ScannerTest_ExpectedLocation(0, 1, 1),
617 [ 610 new ScannerTest_ExpectedLocation(source.indexOf("}"), 2, 1)
618 new ScannerTest_ExpectedLocation(0, 1, 1), 611 ]);
619 new ScannerTest_ExpectedLocation(source.indexOf("}"), 2, 1)]);
620 } 612 }
621 613
622 void test_lt() { 614 void test_lt() {
623 _assertToken(TokenType.LT, "<"); 615 _assertToken(TokenType.LT, "<");
624 } 616 }
625 617
626 void test_lt_eq() { 618 void test_lt_eq() {
627 _assertToken(TokenType.LT_EQ, "<="); 619 _assertToken(TokenType.LT_EQ, "<=");
628 } 620 }
629 621
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 661
670 void test_percent_eq() { 662 void test_percent_eq() {
671 _assertToken(TokenType.PERCENT_EQ, "%="); 663 _assertToken(TokenType.PERCENT_EQ, "%=");
672 } 664 }
673 665
674 void test_period() { 666 void test_period() {
675 _assertToken(TokenType.PERIOD, "."); 667 _assertToken(TokenType.PERIOD, ".");
676 } 668 }
677 669
678 void test_periodAfterNumberNotIncluded_identifier() { 670 void test_periodAfterNumberNotIncluded_identifier() {
679 _assertTokens( 671 _assertTokens("42.isEven()", [
680 "42.isEven()", 672 new StringToken(TokenType.INT, "42", 0),
681 [ 673 new Token(TokenType.PERIOD, 2),
682 new StringToken(TokenType.INT, "42", 0), 674 new StringToken(TokenType.IDENTIFIER, "isEven", 3),
683 new Token(TokenType.PERIOD, 2), 675 new Token(TokenType.OPEN_PAREN, 9),
684 new StringToken(TokenType.IDENTIFIER, "isEven", 3), 676 new Token(TokenType.CLOSE_PAREN, 10)
685 new Token(TokenType.OPEN_PAREN, 9), 677 ]);
686 new Token(TokenType.CLOSE_PAREN, 10)]);
687 } 678 }
688 679
689 void test_periodAfterNumberNotIncluded_period() { 680 void test_periodAfterNumberNotIncluded_period() {
690 _assertTokens( 681 _assertTokens("42..isEven()", [
691 "42..isEven()", 682 new StringToken(TokenType.INT, "42", 0),
692 [ 683 new Token(TokenType.PERIOD_PERIOD, 2),
693 new StringToken(TokenType.INT, "42", 0), 684 new StringToken(TokenType.IDENTIFIER, "isEven", 4),
694 new Token(TokenType.PERIOD_PERIOD, 2), 685 new Token(TokenType.OPEN_PAREN, 10),
695 new StringToken(TokenType.IDENTIFIER, "isEven", 4), 686 new Token(TokenType.CLOSE_PAREN, 11)
696 new Token(TokenType.OPEN_PAREN, 10), 687 ]);
697 new Token(TokenType.CLOSE_PAREN, 11)]);
698 } 688 }
699 689
700 void test_period_period() { 690 void test_period_period() {
701 _assertToken(TokenType.PERIOD_PERIOD, ".."); 691 _assertToken(TokenType.PERIOD_PERIOD, "..");
702 } 692 }
703 693
704 void test_period_period_period() { 694 void test_period_period_period() {
705 _assertToken(TokenType.PERIOD_PERIOD_PERIOD, "..."); 695 _assertToken(TokenType.PERIOD_PERIOD_PERIOD, "...");
706 } 696 }
707 697
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 772
783 void test_string_multi_embeddedQuotes() { 773 void test_string_multi_embeddedQuotes() {
784 _assertToken(TokenType.STRING, "\"\"\"line1\n\"\"\nline2\"\"\""); 774 _assertToken(TokenType.STRING, "\"\"\"line1\n\"\"\nline2\"\"\"");
785 } 775 }
786 776
787 void test_string_multi_embeddedQuotes_escapedChar() { 777 void test_string_multi_embeddedQuotes_escapedChar() {
788 _assertToken(TokenType.STRING, "\"\"\"a\"\"\\tb\"\"\""); 778 _assertToken(TokenType.STRING, "\"\"\"a\"\"\\tb\"\"\"");
789 } 779 }
790 780
791 void test_string_multi_interpolation_block() { 781 void test_string_multi_interpolation_block() {
792 _assertTokens( 782 _assertTokens("\"Hello \${name}!\"", [
793 "\"Hello \${name}!\"", 783 new StringToken(TokenType.STRING, "\"Hello ", 0),
794 [ 784 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
795 new StringToken(TokenType.STRING, "\"Hello ", 0), 785 new StringToken(TokenType.IDENTIFIER, "name", 9),
796 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7) , 786 new Token(TokenType.CLOSE_CURLY_BRACKET, 13),
797 new StringToken(TokenType.IDENTIFIER, "name", 9), 787 new StringToken(TokenType.STRING, "!\"", 14)
798 new Token(TokenType.CLOSE_CURLY_BRACKET, 13), 788 ]);
799 new StringToken(TokenType.STRING, "!\"", 14)]);
800 } 789 }
801 790
802 void test_string_multi_interpolation_identifier() { 791 void test_string_multi_interpolation_identifier() {
803 _assertTokens( 792 _assertTokens("\"Hello \$name!\"", [
804 "\"Hello \$name!\"", 793 new StringToken(TokenType.STRING, "\"Hello ", 0),
805 [ 794 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
806 new StringToken(TokenType.STRING, "\"Hello ", 0), 795 new StringToken(TokenType.IDENTIFIER, "name", 8),
807 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7), 796 new StringToken(TokenType.STRING, "!\"", 12)
808 new StringToken(TokenType.IDENTIFIER, "name", 8), 797 ]);
809 new StringToken(TokenType.STRING, "!\"", 12)]);
810 } 798 }
811 799
812 void test_string_multi_single() { 800 void test_string_multi_single() {
813 _assertToken(TokenType.STRING, "'''string'''"); 801 _assertToken(TokenType.STRING, "'''string'''");
814 } 802 }
815 803
816 void test_string_multi_slashEnter() { 804 void test_string_multi_slashEnter() {
817 _assertToken(TokenType.STRING, "'''\\\n'''"); 805 _assertToken(TokenType.STRING, "'''\\\n'''");
818 } 806 }
819 807
820 void test_string_multi_unterminated() { 808 void test_string_multi_unterminated() {
821 _assertErrorAndTokens( 809 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8,
822 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 810 "'''string", [new StringToken(TokenType.STRING, "'''string", 0)]);
823 8,
824 "'''string",
825 [new StringToken(TokenType.STRING, "'''string", 0)]);
826 } 811 }
827 812
828 void test_string_multi_unterminated_interpolation_block() { 813 void test_string_multi_unterminated_interpolation_block() {
829 _assertErrorAndTokens( 814 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8,
830 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 815 "'''\${name", [
831 8, 816 new StringToken(TokenType.STRING, "'''", 0),
832 "'''\${name", 817 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
833 [ 818 new StringToken(TokenType.IDENTIFIER, "name", 5),
834 new StringToken(TokenType.STRING, "'''", 0), 819 new StringToken(TokenType.STRING, "", 9)
835 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3) , 820 ]);
836 new StringToken(TokenType.IDENTIFIER, "name", 5),
837 new StringToken(TokenType.STRING, "", 9)]);
838 } 821 }
839 822
840 void test_string_multi_unterminated_interpolation_identifier() { 823 void test_string_multi_unterminated_interpolation_identifier() {
841 _assertErrorAndTokens( 824 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7,
842 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 825 "'''\$name", [
843 7, 826 new StringToken(TokenType.STRING, "'''", 0),
844 "'''\$name", 827 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
845 [ 828 new StringToken(TokenType.IDENTIFIER, "name", 4),
846 new StringToken(TokenType.STRING, "'''", 0), 829 new StringToken(TokenType.STRING, "", 8)
847 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3), 830 ]);
848 new StringToken(TokenType.IDENTIFIER, "name", 4),
849 new StringToken(TokenType.STRING, "", 8)]);
850 } 831 }
851 832
852 void test_string_raw_multi_double() { 833 void test_string_raw_multi_double() {
853 _assertToken(TokenType.STRING, "r\"\"\"line1\nline2\"\"\""); 834 _assertToken(TokenType.STRING, "r\"\"\"line1\nline2\"\"\"");
854 } 835 }
855 836
856 void test_string_raw_multi_single() { 837 void test_string_raw_multi_single() {
857 _assertToken(TokenType.STRING, "r'''string'''"); 838 _assertToken(TokenType.STRING, "r'''string'''");
858 } 839 }
859 840
860 void test_string_raw_multi_unterminated() { 841 void test_string_raw_multi_unterminated() {
861 String source = "r'''string"; 842 String source = "r'''string";
862 _assertErrorAndTokens( 843 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
863 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 844 9, source, [new StringToken(TokenType.STRING, source, 0)]);
864 9,
865 source,
866 [new StringToken(TokenType.STRING, source, 0)]);
867 } 845 }
868 846
869 void test_string_raw_simple_double() { 847 void test_string_raw_simple_double() {
870 _assertToken(TokenType.STRING, "r\"string\""); 848 _assertToken(TokenType.STRING, "r\"string\"");
871 } 849 }
872 850
873 void test_string_raw_simple_single() { 851 void test_string_raw_simple_single() {
874 _assertToken(TokenType.STRING, "r'string'"); 852 _assertToken(TokenType.STRING, "r'string'");
875 } 853 }
876 854
877 void test_string_raw_simple_unterminated_eof() { 855 void test_string_raw_simple_unterminated_eof() {
878 String source = "r'string"; 856 String source = "r'string";
879 _assertErrorAndTokens( 857 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
880 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 858 7, source, [new StringToken(TokenType.STRING, source, 0)]);
881 7,
882 source,
883 [new StringToken(TokenType.STRING, source, 0)]);
884 } 859 }
885 860
886 void test_string_raw_simple_unterminated_eol() { 861 void test_string_raw_simple_unterminated_eol() {
887 String source = "r'string"; 862 String source = "r'string";
888 _assertErrorAndTokens( 863 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
889 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 864 8, "$source\n", [new StringToken(TokenType.STRING, source, 0)]);
890 8,
891 "$source\n",
892 [new StringToken(TokenType.STRING, source, 0)]);
893 } 865 }
894 866
895 void test_string_simple_double() { 867 void test_string_simple_double() {
896 _assertToken(TokenType.STRING, "\"string\""); 868 _assertToken(TokenType.STRING, "\"string\"");
897 } 869 }
898 870
899 void test_string_simple_escapedDollar() { 871 void test_string_simple_escapedDollar() {
900 _assertToken(TokenType.STRING, "'a\\\$b'"); 872 _assertToken(TokenType.STRING, "'a\\\$b'");
901 } 873 }
902 874
903 void test_string_simple_interpolation_adjacentIdentifiers() { 875 void test_string_simple_interpolation_adjacentIdentifiers() {
904 _assertTokens( 876 _assertTokens("'\$a\$b'", [
905 "'\$a\$b'", 877 new StringToken(TokenType.STRING, "'", 0),
906 [ 878 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
907 new StringToken(TokenType.STRING, "'", 0), 879 new StringToken(TokenType.IDENTIFIER, "a", 2),
908 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 880 new StringToken(TokenType.STRING, "", 3),
909 new StringToken(TokenType.IDENTIFIER, "a", 2), 881 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
910 new StringToken(TokenType.STRING, "", 3), 882 new StringToken(TokenType.IDENTIFIER, "b", 4),
911 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3), 883 new StringToken(TokenType.STRING, "'", 5)
912 new StringToken(TokenType.IDENTIFIER, "b", 4), 884 ]);
913 new StringToken(TokenType.STRING, "'", 5)]);
914 } 885 }
915 886
916 void test_string_simple_interpolation_block() { 887 void test_string_simple_interpolation_block() {
917 _assertTokens( 888 _assertTokens("'Hello \${name}!'", [
918 "'Hello \${name}!'", 889 new StringToken(TokenType.STRING, "'Hello ", 0),
919 [ 890 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
920 new StringToken(TokenType.STRING, "'Hello ", 0), 891 new StringToken(TokenType.IDENTIFIER, "name", 9),
921 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7) , 892 new Token(TokenType.CLOSE_CURLY_BRACKET, 13),
922 new StringToken(TokenType.IDENTIFIER, "name", 9), 893 new StringToken(TokenType.STRING, "!'", 14)
923 new Token(TokenType.CLOSE_CURLY_BRACKET, 13), 894 ]);
924 new StringToken(TokenType.STRING, "!'", 14)]);
925 } 895 }
926 896
927 void test_string_simple_interpolation_blockWithNestedMap() { 897 void test_string_simple_interpolation_blockWithNestedMap() {
928 _assertTokens( 898 _assertTokens("'a \${f({'b' : 'c'})} d'", [
929 "'a \${f({'b' : 'c'})} d'", 899 new StringToken(TokenType.STRING, "'a ", 0),
930 [ 900 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
931 new StringToken(TokenType.STRING, "'a ", 0), 901 new StringToken(TokenType.IDENTIFIER, "f", 5),
932 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3) , 902 new Token(TokenType.OPEN_PAREN, 6),
933 new StringToken(TokenType.IDENTIFIER, "f", 5), 903 new Token(TokenType.OPEN_CURLY_BRACKET, 7),
934 new Token(TokenType.OPEN_PAREN, 6), 904 new StringToken(TokenType.STRING, "'b'", 8),
935 new Token(TokenType.OPEN_CURLY_BRACKET, 7), 905 new Token(TokenType.COLON, 12),
936 new StringToken(TokenType.STRING, "'b'", 8), 906 new StringToken(TokenType.STRING, "'c'", 14),
937 new Token(TokenType.COLON, 12), 907 new Token(TokenType.CLOSE_CURLY_BRACKET, 17),
938 new StringToken(TokenType.STRING, "'c'", 14), 908 new Token(TokenType.CLOSE_PAREN, 18),
939 new Token(TokenType.CLOSE_CURLY_BRACKET, 17), 909 new Token(TokenType.CLOSE_CURLY_BRACKET, 19),
940 new Token(TokenType.CLOSE_PAREN, 18), 910 new StringToken(TokenType.STRING, " d'", 20)
941 new Token(TokenType.CLOSE_CURLY_BRACKET, 19), 911 ]);
942 new StringToken(TokenType.STRING, " d'", 20)]);
943 } 912 }
944 913
945 void test_string_simple_interpolation_firstAndLast() { 914 void test_string_simple_interpolation_firstAndLast() {
946 _assertTokens( 915 _assertTokens("'\$greeting \$name'", [
947 "'\$greeting \$name'", 916 new StringToken(TokenType.STRING, "'", 0),
948 [ 917 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
949 new StringToken(TokenType.STRING, "'", 0), 918 new StringToken(TokenType.IDENTIFIER, "greeting", 2),
950 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 919 new StringToken(TokenType.STRING, " ", 10),
951 new StringToken(TokenType.IDENTIFIER, "greeting", 2), 920 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 11),
952 new StringToken(TokenType.STRING, " ", 10), 921 new StringToken(TokenType.IDENTIFIER, "name", 12),
953 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 11) , 922 new StringToken(TokenType.STRING, "'", 16)
954 new StringToken(TokenType.IDENTIFIER, "name", 12), 923 ]);
955 new StringToken(TokenType.STRING, "'", 16)]);
956 } 924 }
957 925
958 void test_string_simple_interpolation_identifier() { 926 void test_string_simple_interpolation_identifier() {
959 _assertTokens( 927 _assertTokens("'Hello \$name!'", [
960 "'Hello \$name!'", 928 new StringToken(TokenType.STRING, "'Hello ", 0),
961 [ 929 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
962 new StringToken(TokenType.STRING, "'Hello ", 0), 930 new StringToken(TokenType.IDENTIFIER, "name", 8),
963 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7), 931 new StringToken(TokenType.STRING, "!'", 12)
964 new StringToken(TokenType.IDENTIFIER, "name", 8), 932 ]);
965 new StringToken(TokenType.STRING, "!'", 12)]);
966 } 933 }
967 934
968 void test_string_simple_interpolation_missingIdentifier() { 935 void test_string_simple_interpolation_missingIdentifier() {
969 _assertTokens( 936 _assertTokens("'\$x\$'", [
970 "'\$x\$'", 937 new StringToken(TokenType.STRING, "'", 0),
971 [ 938 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
972 new StringToken(TokenType.STRING, "'", 0), 939 new StringToken(TokenType.IDENTIFIER, "x", 2),
973 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 940 new StringToken(TokenType.STRING, "", 3),
974 new StringToken(TokenType.IDENTIFIER, "x", 2), 941 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
975 new StringToken(TokenType.STRING, "", 3), 942 new StringToken(TokenType.STRING, "'", 4)
976 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3), 943 ]);
977 new StringToken(TokenType.STRING, "'", 4)]);
978 } 944 }
979 945
980 void test_string_simple_interpolation_nonIdentifier() { 946 void test_string_simple_interpolation_nonIdentifier() {
981 _assertTokens( 947 _assertTokens("'\$1'", [
982 "'\$1'", 948 new StringToken(TokenType.STRING, "'", 0),
983 [ 949 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
984 new StringToken(TokenType.STRING, "'", 0), 950 new StringToken(TokenType.STRING, "1'", 2)
985 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 951 ]);
986 new StringToken(TokenType.STRING, "1'", 2)]);
987 } 952 }
988 953
989 void test_string_simple_single() { 954 void test_string_simple_single() {
990 _assertToken(TokenType.STRING, "'string'"); 955 _assertToken(TokenType.STRING, "'string'");
991 } 956 }
992 957
993 void test_string_simple_unterminated_eof() { 958 void test_string_simple_unterminated_eof() {
994 String source = "'string"; 959 String source = "'string";
995 _assertErrorAndTokens( 960 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
996 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 961 6, source, [new StringToken(TokenType.STRING, source, 0)]);
997 6,
998 source,
999 [new StringToken(TokenType.STRING, source, 0)]);
1000 } 962 }
1001 963
1002 void test_string_simple_unterminated_eol() { 964 void test_string_simple_unterminated_eol() {
1003 String source = "'string"; 965 String source = "'string";
1004 _assertErrorAndTokens( 966 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
1005 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 967 7, "$source\r", [new StringToken(TokenType.STRING, source, 0)]);
1006 7,
1007 "$source\r",
1008 [new StringToken(TokenType.STRING, source, 0)]);
1009 } 968 }
1010 969
1011 void test_string_simple_unterminated_interpolation_block() { 970 void test_string_simple_unterminated_interpolation_block() {
1012 _assertErrorAndTokens( 971 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 6,
1013 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 972 "'\${name", [
1014 6, 973 new StringToken(TokenType.STRING, "'", 0),
1015 "'\${name", 974 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 1),
1016 [ 975 new StringToken(TokenType.IDENTIFIER, "name", 3),
1017 new StringToken(TokenType.STRING, "'", 0), 976 new StringToken(TokenType.STRING, "", 7)
1018 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 1) , 977 ]);
1019 new StringToken(TokenType.IDENTIFIER, "name", 3),
1020 new StringToken(TokenType.STRING, "", 7)]);
1021 } 978 }
1022 979
1023 void test_string_simple_unterminated_interpolation_identifier() { 980 void test_string_simple_unterminated_interpolation_identifier() {
1024 _assertErrorAndTokens( 981 _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 5,
1025 ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 982 "'\$name", [
1026 5, 983 new StringToken(TokenType.STRING, "'", 0),
1027 "'\$name", 984 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
1028 [ 985 new StringToken(TokenType.IDENTIFIER, "name", 2),
1029 new StringToken(TokenType.STRING, "'", 0), 986 new StringToken(TokenType.STRING, "", 6)
1030 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 987 ]);
1031 new StringToken(TokenType.IDENTIFIER, "name", 2),
1032 new StringToken(TokenType.STRING, "", 6)]);
1033 } 988 }
1034 989
1035 void test_tilde() { 990 void test_tilde() {
1036 _assertToken(TokenType.TILDE, "~"); 991 _assertToken(TokenType.TILDE, "~");
1037 } 992 }
1038 993
1039 void test_tilde_slash() { 994 void test_tilde_slash() {
1040 _assertToken(TokenType.TILDE_SLASH, "~/"); 995 _assertToken(TokenType.TILDE_SLASH, "~/");
1041 } 996 }
1042 997
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1077 } 1032 }
1078 1033
1079 /** 1034 /**
1080 * Assert that scanning the given [source] produces an error with the given 1035 * Assert that scanning the given [source] produces an error with the given
1081 * code. 1036 * code.
1082 * 1037 *
1083 * [expectedError] the error that should be produced 1038 * [expectedError] the error that should be produced
1084 * [expectedOffset] the string offset that should be associated with the error 1039 * [expectedOffset] the string offset that should be associated with the error
1085 * [source] the source to be scanned to produce the error 1040 * [source] the source to be scanned to produce the error
1086 */ 1041 */
1087 void _assertError(ScannerErrorCode expectedError, int expectedOffset, 1042 void _assertError(
1088 String source) { 1043 ScannerErrorCode expectedError, int expectedOffset, String source) {
1089 GatheringErrorListener listener = new GatheringErrorListener(); 1044 GatheringErrorListener listener = new GatheringErrorListener();
1090 _scanWithListener(source, listener); 1045 _scanWithListener(source, listener);
1091 listener.assertErrors( 1046 listener.assertErrors([
1092 [ 1047 new AnalysisError.con2(null, expectedOffset, 1, expectedError, [
1093 new AnalysisError.con2( 1048 source.codeUnitAt(expectedOffset)
1094 null, 1049 ])
1095 expectedOffset, 1050 ]);
1096 1,
1097 expectedError,
1098 [source.codeUnitAt(expectedOffset)])]);
1099 } 1051 }
1100 1052
1101 /** 1053 /**
1102 * Assert that scanning the given [source] produces an error with the given 1054 * Assert that scanning the given [source] produces an error with the given
1103 * code, and also produces the given tokens. 1055 * code, and also produces the given tokens.
1104 * 1056 *
1105 * [expectedError] the error that should be produced 1057 * [expectedError] the error that should be produced
1106 * [expectedOffset] the string offset that should be associated with the error 1058 * [expectedOffset] the string offset that should be associated with the error
1107 * [source] the source to be scanned to produce the error 1059 * [source] the source to be scanned to produce the error
1108 * [expectedTokens] the tokens that are expected to be in the source 1060 * [expectedTokens] the tokens that are expected to be in the source
1109 */ 1061 */
1110 void _assertErrorAndTokens(ScannerErrorCode expectedError, int expectedOffset, 1062 void _assertErrorAndTokens(ScannerErrorCode expectedError, int expectedOffset,
1111 String source, List<Token> expectedTokens) { 1063 String source, List<Token> expectedTokens) {
1112 GatheringErrorListener listener = new GatheringErrorListener(); 1064 GatheringErrorListener listener = new GatheringErrorListener();
1113 Token token = _scanWithListener(source, listener); 1065 Token token = _scanWithListener(source, listener);
1114 listener.assertErrors( 1066 listener.assertErrors([
1115 [ 1067 new AnalysisError.con2(null, expectedOffset, 1, expectedError, [
1116 new AnalysisError.con2( 1068 source.codeUnitAt(expectedOffset)
1117 null, 1069 ])
1118 expectedOffset, 1070 ]);
1119 1,
1120 expectedError,
1121 [source.codeUnitAt(expectedOffset)])]);
1122 _checkTokens(token, expectedTokens); 1071 _checkTokens(token, expectedTokens);
1123 } 1072 }
1124 1073
1125 /** 1074 /**
1126 * Assert that when scanned the given [source] contains a single keyword token 1075 * Assert that when scanned the given [source] contains a single keyword token
1127 * with the same lexeme as the original source. 1076 * with the same lexeme as the original source.
1128 */ 1077 */
1129 void _assertKeywordToken(String source) { 1078 void _assertKeywordToken(String source) {
1130 Token token = _scan(source); 1079 Token token = _scan(source);
1131 expect(token, isNotNull); 1080 expect(token, isNotNull);
1132 expect(token.type, TokenType.KEYWORD); 1081 expect(token.type, TokenType.KEYWORD);
1133 expect(token.offset, 0); 1082 expect(token.offset, 0);
1134 expect(token.length, source.length); 1083 expect(token.length, source.length);
1135 expect(token.lexeme, source); 1084 expect(token.lexeme, source);
1136 Object value = token.value(); 1085 Object value = token.value();
1137 expect(value is Keyword, isTrue); 1086 expect(value is Keyword, isTrue);
1138 expect((value as Keyword).syntax, source); 1087 expect((value as Keyword).syntax, source);
1139 token = _scan(" $source "); 1088 token = _scan(" $source ");
1140 expect(token, isNotNull); 1089 expect(token, isNotNull);
1141 expect(token.type, TokenType.KEYWORD); 1090 expect(token.type, TokenType.KEYWORD);
1142 expect(token.offset, 1); 1091 expect(token.offset, 1);
1143 expect(token.length, source.length); 1092 expect(token.length, source.length);
1144 expect(token.lexeme, source); 1093 expect(token.lexeme, source);
1145 value = token.value(); 1094 value = token.value();
1146 expect(value is Keyword, isTrue); 1095 expect(value is Keyword, isTrue);
1147 expect((value as Keyword).syntax, source); 1096 expect((value as Keyword).syntax, source);
1148 expect(token.next.type, TokenType.EOF); 1097 expect(token.next.type, TokenType.EOF);
1149 } 1098 }
1150 1099
1151 void _assertLineInfo(String source, 1100 void _assertLineInfo(
1152 List<ScannerTest_ExpectedLocation> expectedLocations) { 1101 String source, List<ScannerTest_ExpectedLocation> expectedLocations) {
1153 GatheringErrorListener listener = new GatheringErrorListener(); 1102 GatheringErrorListener listener = new GatheringErrorListener();
1154 _scanWithListener(source, listener); 1103 _scanWithListener(source, listener);
1155 listener.assertNoErrors(); 1104 listener.assertNoErrors();
1156 LineInfo info = listener.getLineInfo(new TestSource()); 1105 LineInfo info = listener.getLineInfo(new TestSource());
1157 expect(info, isNotNull); 1106 expect(info, isNotNull);
1158 for (ScannerTest_ExpectedLocation expectedLocation in expectedLocations) { 1107 for (ScannerTest_ExpectedLocation expectedLocation in expectedLocations) {
1159 LineInfo_Location location = info.getLocation(expectedLocation._offset); 1108 LineInfo_Location location = info.getLocation(expectedLocation._offset);
1160 expect(location.lineNumber, expectedLocation._lineNumber); 1109 expect(location.lineNumber, expectedLocation._lineNumber);
1161 expect(location.columnNumber, expectedLocation._columnNumber); 1110 expect(location.columnNumber, expectedLocation._columnNumber);
1162 } 1111 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 Token token = _scan(source); 1168 Token token = _scan(source);
1220 _checkTokens(token, expectedTokens); 1169 _checkTokens(token, expectedTokens);
1221 } 1170 }
1222 1171
1223 void _checkTokens(Token firstToken, List<Token> expectedTokens) { 1172 void _checkTokens(Token firstToken, List<Token> expectedTokens) {
1224 expect(firstToken, isNotNull); 1173 expect(firstToken, isNotNull);
1225 Token token = firstToken; 1174 Token token = firstToken;
1226 for (int i = 0; i < expectedTokens.length; i++) { 1175 for (int i = 0; i < expectedTokens.length; i++) {
1227 Token expectedToken = expectedTokens[i]; 1176 Token expectedToken = expectedTokens[i];
1228 expect(token.type, expectedToken.type, reason: "Wrong type for token $i"); 1177 expect(token.type, expectedToken.type, reason: "Wrong type for token $i");
1229 expect( 1178 expect(token.offset, expectedToken.offset,
1230 token.offset,
1231 expectedToken.offset,
1232 reason: "Wrong offset for token $i"); 1179 reason: "Wrong offset for token $i");
1233 expect( 1180 expect(token.length, expectedToken.length,
1234 token.length,
1235 expectedToken.length,
1236 reason: "Wrong length for token $i"); 1181 reason: "Wrong length for token $i");
1237 expect( 1182 expect(token.lexeme, expectedToken.lexeme,
1238 token.lexeme,
1239 expectedToken.lexeme,
1240 reason: "Wrong lexeme for token $i"); 1183 reason: "Wrong lexeme for token $i");
1241 token = token.next; 1184 token = token.next;
1242 expect(token, isNotNull); 1185 expect(token, isNotNull);
1243 } 1186 }
1244 expect(token.type, TokenType.EOF); 1187 expect(token.type, TokenType.EOF);
1245 } 1188 }
1246 1189
1247 Token _scan(String source) { 1190 Token _scan(String source) {
1248 GatheringErrorListener listener = new GatheringErrorListener(); 1191 GatheringErrorListener listener = new GatheringErrorListener();
1249 Token token = _scanWithListener(source, listener); 1192 Token token = _scanWithListener(source, listener);
(...skipping 14 matching lines...) Expand all
1264 * An `ExpectedLocation` encodes information about the expected location of a 1207 * An `ExpectedLocation` encodes information about the expected location of a
1265 * given offset in source code. 1208 * given offset in source code.
1266 */ 1209 */
1267 class ScannerTest_ExpectedLocation { 1210 class ScannerTest_ExpectedLocation {
1268 final int _offset; 1211 final int _offset;
1269 1212
1270 final int _lineNumber; 1213 final int _lineNumber;
1271 1214
1272 final int _columnNumber; 1215 final int _columnNumber;
1273 1216
1274 ScannerTest_ExpectedLocation(this._offset, this._lineNumber, 1217 ScannerTest_ExpectedLocation(
1275 this._columnNumber); 1218 this._offset, this._lineNumber, this._columnNumber);
1276 } 1219 }
1277 1220
1278 /** 1221 /**
1279 * A `TokenStreamValidator` is used to validate the correct construction of a 1222 * A `TokenStreamValidator` is used to validate the correct construction of a
1280 * stream of tokens. 1223 * stream of tokens.
1281 */ 1224 */
1282 class TokenStreamValidator { 1225 class TokenStreamValidator {
1283 /** 1226 /**
1284 * Validate that the stream of tokens that starts with the given [token] is 1227 * Validate that the stream of tokens that starts with the given [token] is
1285 * correct. 1228 * correct.
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1401 expect(TokenType.LT_LT.isUserDefinableOperator, isTrue); 1344 expect(TokenType.LT_LT.isUserDefinableOperator, isTrue);
1402 expect(TokenType.MINUS.isUserDefinableOperator, isTrue); 1345 expect(TokenType.MINUS.isUserDefinableOperator, isTrue);
1403 expect(TokenType.PERCENT.isUserDefinableOperator, isTrue); 1346 expect(TokenType.PERCENT.isUserDefinableOperator, isTrue);
1404 expect(TokenType.PLUS.isUserDefinableOperator, isTrue); 1347 expect(TokenType.PLUS.isUserDefinableOperator, isTrue);
1405 expect(TokenType.SLASH.isUserDefinableOperator, isTrue); 1348 expect(TokenType.SLASH.isUserDefinableOperator, isTrue);
1406 expect(TokenType.STAR.isUserDefinableOperator, isTrue); 1349 expect(TokenType.STAR.isUserDefinableOperator, isTrue);
1407 expect(TokenType.TILDE.isUserDefinableOperator, isTrue); 1350 expect(TokenType.TILDE.isUserDefinableOperator, isTrue);
1408 expect(TokenType.TILDE_SLASH.isUserDefinableOperator, isTrue); 1351 expect(TokenType.TILDE_SLASH.isUserDefinableOperator, isTrue);
1409 } 1352 }
1410 } 1353 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/generated/resolver_test.dart ('k') | pkg/analyzer/test/generated/static_type_warning_code_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698