OLD | NEW |
1 // This code was auto-generated, is not intended to be edited, and is subject to | 1 // This code was auto-generated, is not intended to be edited, and is subject to |
2 // significant change. Please see the README file for more information. | 2 // significant change. Please see the README file for more information. |
3 | 3 |
4 library engine.scanner_test; | 4 library engine.scanner_test; |
5 | 5 |
6 import 'dart:collection'; | 6 import 'dart:collection'; |
7 import 'package:analyzer_experimental/src/generated/java_core.dart'; | 7 import 'package:analyzer_experimental/src/generated/java_core.dart'; |
8 import 'package:analyzer_experimental/src/generated/java_engine.dart'; | 8 import 'package:analyzer_experimental/src/generated/java_engine.dart'; |
9 import 'package:analyzer_experimental/src/generated/java_junit.dart'; | 9 import 'package:analyzer_experimental/src/generated/java_junit.dart'; |
10 import 'package:analyzer_experimental/src/generated/source.dart'; | 10 import 'package:analyzer_experimental/src/generated/source.dart'; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 final __test = new TokenTypeTest(); | 124 final __test = new TokenTypeTest(); |
125 runJUnitTest(__test, __test.test_isOperator); | 125 runJUnitTest(__test, __test.test_isOperator); |
126 }); | 126 }); |
127 _ut.test('test_isUserDefinableOperator', () { | 127 _ut.test('test_isUserDefinableOperator', () { |
128 final __test = new TokenTypeTest(); | 128 final __test = new TokenTypeTest(); |
129 runJUnitTest(__test, __test.test_isUserDefinableOperator); | 129 runJUnitTest(__test, __test.test_isUserDefinableOperator); |
130 }); | 130 }); |
131 }); | 131 }); |
132 } | 132 } |
133 } | 133 } |
| 134 |
134 /** | 135 /** |
135 * The class {@code TokenFactory} defines utility methods that can be used to cr
eate tokens. | 136 * The class {@code TokenFactory} defines utility methods that can be used to cr
eate tokens. |
136 */ | 137 */ |
137 class TokenFactory { | 138 class TokenFactory { |
138 static Token token(Keyword keyword) => new KeywordToken(keyword, 0); | 139 static Token token(Keyword keyword) => new KeywordToken(keyword, 0); |
139 static Token token2(String lexeme) => new StringToken(TokenType.STRING, lexeme
, 0); | 140 static Token token2(String lexeme) => new StringToken(TokenType.STRING, lexeme
, 0); |
140 static Token token3(TokenType type) => new Token(type, 0); | 141 static Token token3(TokenType type) => new Token(type, 0); |
141 static Token token4(TokenType type, String lexeme) => new StringToken(type, le
xeme, 0); | 142 static Token token4(TokenType type, String lexeme) => new StringToken(type, le
xeme, 0); |
142 /** | |
143 * Prevent the creation of instances of this class. | |
144 */ | |
145 TokenFactory() { | |
146 } | |
147 } | 143 } |
148 class CharBufferScannerTest extends AbstractScannerTest { | 144 class CharBufferScannerTest extends AbstractScannerTest { |
149 Token scan(String source, GatheringErrorListener listener) { | 145 Token scan(String source, GatheringErrorListener listener) { |
150 CharBuffer buffer = CharBuffer.wrap(source); | 146 CharBuffer buffer = CharBuffer.wrap(source); |
151 CharBufferScanner scanner = new CharBufferScanner(null, buffer, listener); | 147 CharBufferScanner scanner = new CharBufferScanner(null, buffer, listener); |
152 Token result = scanner.tokenize(); | 148 Token result = scanner.tokenize(); |
153 listener.setLineInfo(new TestSource(), scanner.lineStarts); | 149 listener.setLineInfo(new TestSource(), scanner.lineStarts); |
154 return result; | 150 return result; |
155 } | 151 } |
156 static dartSuite() { | 152 static dartSuite() { |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 runJUnitTest(__test, __test.test_keyword_void); | 544 runJUnitTest(__test, __test.test_keyword_void); |
549 }); | 545 }); |
550 _ut.test('test_keyword_while', () { | 546 _ut.test('test_keyword_while', () { |
551 final __test = new CharBufferScannerTest(); | 547 final __test = new CharBufferScannerTest(); |
552 runJUnitTest(__test, __test.test_keyword_while); | 548 runJUnitTest(__test, __test.test_keyword_while); |
553 }); | 549 }); |
554 _ut.test('test_keyword_with', () { | 550 _ut.test('test_keyword_with', () { |
555 final __test = new CharBufferScannerTest(); | 551 final __test = new CharBufferScannerTest(); |
556 runJUnitTest(__test, __test.test_keyword_with); | 552 runJUnitTest(__test, __test.test_keyword_with); |
557 }); | 553 }); |
558 _ut.test('test_lineInfo', () { | 554 _ut.test('test_lineInfo_multilineComment', () { |
559 final __test = new CharBufferScannerTest(); | 555 final __test = new CharBufferScannerTest(); |
560 runJUnitTest(__test, __test.test_lineInfo); | 556 runJUnitTest(__test, __test.test_lineInfo_multilineComment); |
| 557 }); |
| 558 _ut.test('test_lineInfo_simpleClass', () { |
| 559 final __test = new CharBufferScannerTest(); |
| 560 runJUnitTest(__test, __test.test_lineInfo_simpleClass); |
| 561 }); |
| 562 _ut.test('test_lineInfo_slashN', () { |
| 563 final __test = new CharBufferScannerTest(); |
| 564 runJUnitTest(__test, __test.test_lineInfo_slashN); |
561 }); | 565 }); |
562 _ut.test('test_lt', () { | 566 _ut.test('test_lt', () { |
563 final __test = new CharBufferScannerTest(); | 567 final __test = new CharBufferScannerTest(); |
564 runJUnitTest(__test, __test.test_lt); | 568 runJUnitTest(__test, __test.test_lt); |
565 }); | 569 }); |
566 _ut.test('test_lt_eq', () { | 570 _ut.test('test_lt_eq', () { |
567 final __test = new CharBufferScannerTest(); | 571 final __test = new CharBufferScannerTest(); |
568 runJUnitTest(__test, __test.test_lt_eq); | 572 runJUnitTest(__test, __test.test_lt_eq); |
569 }); | 573 }); |
570 _ut.test('test_lt_lt', () { | 574 _ut.test('test_lt_lt', () { |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 runJUnitTest(__test, __test.test_string_raw_simple_unterminated_eol); | 736 runJUnitTest(__test, __test.test_string_raw_simple_unterminated_eol); |
733 }); | 737 }); |
734 _ut.test('test_string_simple_double', () { | 738 _ut.test('test_string_simple_double', () { |
735 final __test = new CharBufferScannerTest(); | 739 final __test = new CharBufferScannerTest(); |
736 runJUnitTest(__test, __test.test_string_simple_double); | 740 runJUnitTest(__test, __test.test_string_simple_double); |
737 }); | 741 }); |
738 _ut.test('test_string_simple_escapedDollar', () { | 742 _ut.test('test_string_simple_escapedDollar', () { |
739 final __test = new CharBufferScannerTest(); | 743 final __test = new CharBufferScannerTest(); |
740 runJUnitTest(__test, __test.test_string_simple_escapedDollar); | 744 runJUnitTest(__test, __test.test_string_simple_escapedDollar); |
741 }); | 745 }); |
| 746 _ut.test('test_string_simple_interpolation_adjacentIdentifiers', () { |
| 747 final __test = new CharBufferScannerTest(); |
| 748 runJUnitTest(__test, __test.test_string_simple_interpolation_adjacentIde
ntifiers); |
| 749 }); |
742 _ut.test('test_string_simple_interpolation_block', () { | 750 _ut.test('test_string_simple_interpolation_block', () { |
743 final __test = new CharBufferScannerTest(); | 751 final __test = new CharBufferScannerTest(); |
744 runJUnitTest(__test, __test.test_string_simple_interpolation_block); | 752 runJUnitTest(__test, __test.test_string_simple_interpolation_block); |
745 }); | 753 }); |
746 _ut.test('test_string_simple_interpolation_blockWithNestedMap', () { | 754 _ut.test('test_string_simple_interpolation_blockWithNestedMap', () { |
747 final __test = new CharBufferScannerTest(); | 755 final __test = new CharBufferScannerTest(); |
748 runJUnitTest(__test, __test.test_string_simple_interpolation_blockWithNe
stedMap); | 756 runJUnitTest(__test, __test.test_string_simple_interpolation_blockWithNe
stedMap); |
749 }); | 757 }); |
750 _ut.test('test_string_simple_interpolation_firstAndLast', () { | 758 _ut.test('test_string_simple_interpolation_firstAndLast', () { |
751 final __test = new CharBufferScannerTest(); | 759 final __test = new CharBufferScannerTest(); |
752 runJUnitTest(__test, __test.test_string_simple_interpolation_firstAndLas
t); | 760 runJUnitTest(__test, __test.test_string_simple_interpolation_firstAndLas
t); |
753 }); | 761 }); |
754 _ut.test('test_string_simple_interpolation_identifier', () { | 762 _ut.test('test_string_simple_interpolation_identifier', () { |
755 final __test = new CharBufferScannerTest(); | 763 final __test = new CharBufferScannerTest(); |
756 runJUnitTest(__test, __test.test_string_simple_interpolation_identifier)
; | 764 runJUnitTest(__test, __test.test_string_simple_interpolation_identifier)
; |
757 }); | 765 }); |
| 766 _ut.test('test_string_simple_interpolation_missingIdentifier', () { |
| 767 final __test = new CharBufferScannerTest(); |
| 768 runJUnitTest(__test, __test.test_string_simple_interpolation_missingIden
tifier); |
| 769 }); |
| 770 _ut.test('test_string_simple_interpolation_nonIdentifier', () { |
| 771 final __test = new CharBufferScannerTest(); |
| 772 runJUnitTest(__test, __test.test_string_simple_interpolation_nonIdentifi
er); |
| 773 }); |
758 _ut.test('test_string_simple_single', () { | 774 _ut.test('test_string_simple_single', () { |
759 final __test = new CharBufferScannerTest(); | 775 final __test = new CharBufferScannerTest(); |
760 runJUnitTest(__test, __test.test_string_simple_single); | 776 runJUnitTest(__test, __test.test_string_simple_single); |
761 }); | 777 }); |
762 _ut.test('test_string_simple_unterminated_eof', () { | 778 _ut.test('test_string_simple_unterminated_eof', () { |
763 final __test = new CharBufferScannerTest(); | 779 final __test = new CharBufferScannerTest(); |
764 runJUnitTest(__test, __test.test_string_simple_unterminated_eof); | 780 runJUnitTest(__test, __test.test_string_simple_unterminated_eof); |
765 }); | 781 }); |
766 _ut.test('test_string_simple_unterminated_eol', () { | 782 _ut.test('test_string_simple_unterminated_eol', () { |
767 final __test = new CharBufferScannerTest(); | 783 final __test = new CharBufferScannerTest(); |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1199 runJUnitTest(__test, __test.test_keyword_void); | 1215 runJUnitTest(__test, __test.test_keyword_void); |
1200 }); | 1216 }); |
1201 _ut.test('test_keyword_while', () { | 1217 _ut.test('test_keyword_while', () { |
1202 final __test = new StringScannerTest(); | 1218 final __test = new StringScannerTest(); |
1203 runJUnitTest(__test, __test.test_keyword_while); | 1219 runJUnitTest(__test, __test.test_keyword_while); |
1204 }); | 1220 }); |
1205 _ut.test('test_keyword_with', () { | 1221 _ut.test('test_keyword_with', () { |
1206 final __test = new StringScannerTest(); | 1222 final __test = new StringScannerTest(); |
1207 runJUnitTest(__test, __test.test_keyword_with); | 1223 runJUnitTest(__test, __test.test_keyword_with); |
1208 }); | 1224 }); |
1209 _ut.test('test_lineInfo', () { | 1225 _ut.test('test_lineInfo_multilineComment', () { |
1210 final __test = new StringScannerTest(); | 1226 final __test = new StringScannerTest(); |
1211 runJUnitTest(__test, __test.test_lineInfo); | 1227 runJUnitTest(__test, __test.test_lineInfo_multilineComment); |
| 1228 }); |
| 1229 _ut.test('test_lineInfo_simpleClass', () { |
| 1230 final __test = new StringScannerTest(); |
| 1231 runJUnitTest(__test, __test.test_lineInfo_simpleClass); |
| 1232 }); |
| 1233 _ut.test('test_lineInfo_slashN', () { |
| 1234 final __test = new StringScannerTest(); |
| 1235 runJUnitTest(__test, __test.test_lineInfo_slashN); |
1212 }); | 1236 }); |
1213 _ut.test('test_lt', () { | 1237 _ut.test('test_lt', () { |
1214 final __test = new StringScannerTest(); | 1238 final __test = new StringScannerTest(); |
1215 runJUnitTest(__test, __test.test_lt); | 1239 runJUnitTest(__test, __test.test_lt); |
1216 }); | 1240 }); |
1217 _ut.test('test_lt_eq', () { | 1241 _ut.test('test_lt_eq', () { |
1218 final __test = new StringScannerTest(); | 1242 final __test = new StringScannerTest(); |
1219 runJUnitTest(__test, __test.test_lt_eq); | 1243 runJUnitTest(__test, __test.test_lt_eq); |
1220 }); | 1244 }); |
1221 _ut.test('test_lt_lt', () { | 1245 _ut.test('test_lt_lt', () { |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1387 runJUnitTest(__test, __test.test_string_raw_simple_unterminated_eol); | 1411 runJUnitTest(__test, __test.test_string_raw_simple_unterminated_eol); |
1388 }); | 1412 }); |
1389 _ut.test('test_string_simple_double', () { | 1413 _ut.test('test_string_simple_double', () { |
1390 final __test = new StringScannerTest(); | 1414 final __test = new StringScannerTest(); |
1391 runJUnitTest(__test, __test.test_string_simple_double); | 1415 runJUnitTest(__test, __test.test_string_simple_double); |
1392 }); | 1416 }); |
1393 _ut.test('test_string_simple_escapedDollar', () { | 1417 _ut.test('test_string_simple_escapedDollar', () { |
1394 final __test = new StringScannerTest(); | 1418 final __test = new StringScannerTest(); |
1395 runJUnitTest(__test, __test.test_string_simple_escapedDollar); | 1419 runJUnitTest(__test, __test.test_string_simple_escapedDollar); |
1396 }); | 1420 }); |
| 1421 _ut.test('test_string_simple_interpolation_adjacentIdentifiers', () { |
| 1422 final __test = new StringScannerTest(); |
| 1423 runJUnitTest(__test, __test.test_string_simple_interpolation_adjacentIde
ntifiers); |
| 1424 }); |
1397 _ut.test('test_string_simple_interpolation_block', () { | 1425 _ut.test('test_string_simple_interpolation_block', () { |
1398 final __test = new StringScannerTest(); | 1426 final __test = new StringScannerTest(); |
1399 runJUnitTest(__test, __test.test_string_simple_interpolation_block); | 1427 runJUnitTest(__test, __test.test_string_simple_interpolation_block); |
1400 }); | 1428 }); |
1401 _ut.test('test_string_simple_interpolation_blockWithNestedMap', () { | 1429 _ut.test('test_string_simple_interpolation_blockWithNestedMap', () { |
1402 final __test = new StringScannerTest(); | 1430 final __test = new StringScannerTest(); |
1403 runJUnitTest(__test, __test.test_string_simple_interpolation_blockWithNe
stedMap); | 1431 runJUnitTest(__test, __test.test_string_simple_interpolation_blockWithNe
stedMap); |
1404 }); | 1432 }); |
1405 _ut.test('test_string_simple_interpolation_firstAndLast', () { | 1433 _ut.test('test_string_simple_interpolation_firstAndLast', () { |
1406 final __test = new StringScannerTest(); | 1434 final __test = new StringScannerTest(); |
1407 runJUnitTest(__test, __test.test_string_simple_interpolation_firstAndLas
t); | 1435 runJUnitTest(__test, __test.test_string_simple_interpolation_firstAndLas
t); |
1408 }); | 1436 }); |
1409 _ut.test('test_string_simple_interpolation_identifier', () { | 1437 _ut.test('test_string_simple_interpolation_identifier', () { |
1410 final __test = new StringScannerTest(); | 1438 final __test = new StringScannerTest(); |
1411 runJUnitTest(__test, __test.test_string_simple_interpolation_identifier)
; | 1439 runJUnitTest(__test, __test.test_string_simple_interpolation_identifier)
; |
1412 }); | 1440 }); |
| 1441 _ut.test('test_string_simple_interpolation_missingIdentifier', () { |
| 1442 final __test = new StringScannerTest(); |
| 1443 runJUnitTest(__test, __test.test_string_simple_interpolation_missingIden
tifier); |
| 1444 }); |
| 1445 _ut.test('test_string_simple_interpolation_nonIdentifier', () { |
| 1446 final __test = new StringScannerTest(); |
| 1447 runJUnitTest(__test, __test.test_string_simple_interpolation_nonIdentifi
er); |
| 1448 }); |
1413 _ut.test('test_string_simple_single', () { | 1449 _ut.test('test_string_simple_single', () { |
1414 final __test = new StringScannerTest(); | 1450 final __test = new StringScannerTest(); |
1415 runJUnitTest(__test, __test.test_string_simple_single); | 1451 runJUnitTest(__test, __test.test_string_simple_single); |
1416 }); | 1452 }); |
1417 _ut.test('test_string_simple_unterminated_eof', () { | 1453 _ut.test('test_string_simple_unterminated_eof', () { |
1418 final __test = new StringScannerTest(); | 1454 final __test = new StringScannerTest(); |
1419 runJUnitTest(__test, __test.test_string_simple_unterminated_eof); | 1455 runJUnitTest(__test, __test.test_string_simple_unterminated_eof); |
1420 }); | 1456 }); |
1421 _ut.test('test_string_simple_unterminated_eol', () { | 1457 _ut.test('test_string_simple_unterminated_eol', () { |
1422 final __test = new StringScannerTest(); | 1458 final __test = new StringScannerTest(); |
(...skipping 11 matching lines...) Expand all Loading... |
1434 final __test = new StringScannerTest(); | 1470 final __test = new StringScannerTest(); |
1435 runJUnitTest(__test, __test.test_tilde_slash_eq); | 1471 runJUnitTest(__test, __test.test_tilde_slash_eq); |
1436 }); | 1472 }); |
1437 _ut.test('test_unclosedPairInInterpolation', () { | 1473 _ut.test('test_unclosedPairInInterpolation', () { |
1438 final __test = new StringScannerTest(); | 1474 final __test = new StringScannerTest(); |
1439 runJUnitTest(__test, __test.test_unclosedPairInInterpolation); | 1475 runJUnitTest(__test, __test.test_unclosedPairInInterpolation); |
1440 }); | 1476 }); |
1441 }); | 1477 }); |
1442 } | 1478 } |
1443 } | 1479 } |
| 1480 |
1444 /** | 1481 /** |
1445 * Instances of the class {@code TokenStreamValidator} are used to validate the
correct construction | 1482 * Instances of the class {@code TokenStreamValidator} are used to validate the
correct construction |
1446 * of a stream of tokens. | 1483 * of a stream of tokens. |
1447 */ | 1484 */ |
1448 class TokenStreamValidator { | 1485 class TokenStreamValidator { |
| 1486 |
1449 /** | 1487 /** |
1450 * Validate that the stream of tokens that starts with the given token is corr
ect. | 1488 * Validate that the stream of tokens that starts with the given token is corr
ect. |
1451 * @param token the first token in the stream of tokens to be validated | 1489 * @param token the first token in the stream of tokens to be validated |
1452 */ | 1490 */ |
1453 void validate(Token token) { | 1491 void validate(Token token) { |
1454 JavaStringBuilder builder = new JavaStringBuilder(); | 1492 JavaStringBuilder builder = new JavaStringBuilder(); |
1455 validateStream(builder, token); | 1493 validateStream(builder, token); |
1456 if (builder.length > 0) { | 1494 if (builder.length > 0) { |
1457 JUnitTestCase.fail(builder.toString()); | 1495 JUnitTestCase.fail(builder.toString()); |
1458 } | 1496 } |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1795 } | 1833 } |
1796 void test_keyword_void() { | 1834 void test_keyword_void() { |
1797 assertKeywordToken("void"); | 1835 assertKeywordToken("void"); |
1798 } | 1836 } |
1799 void test_keyword_while() { | 1837 void test_keyword_while() { |
1800 assertKeywordToken("while"); | 1838 assertKeywordToken("while"); |
1801 } | 1839 } |
1802 void test_keyword_with() { | 1840 void test_keyword_with() { |
1803 assertKeywordToken("with"); | 1841 assertKeywordToken("with"); |
1804 } | 1842 } |
1805 void test_lineInfo() { | 1843 void test_lineInfo_multilineComment() { |
1806 String source = "/*\r *\r */"; | 1844 String source = "/*\r *\r */"; |
1807 GatheringErrorListener listener = new GatheringErrorListener(); | 1845 assertLineInfo(source, [new AbstractScannerTest_ExpectedLocation(0, 1, 1), n
ew AbstractScannerTest_ExpectedLocation(4, 2, 2), new AbstractScannerTest_Expect
edLocation(source.length - 1, 3, 3)]); |
1808 Token token = scan(source, listener); | 1846 } |
1809 JUnitTestCase.assertSame(TokenType.MULTI_LINE_COMMENT, token.precedingCommen
ts.type); | 1847 void test_lineInfo_simpleClass() { |
1810 listener.assertNoErrors(); | 1848 String source = "class Test {\r\n String s = '...';\r\n int get x => s
.MISSING_GETTER;\r\n}"; |
1811 LineInfo info = listener.getLineInfo(new TestSource()); | 1849 assertLineInfo(source, [new AbstractScannerTest_ExpectedLocation(0, 1, 1), n
ew AbstractScannerTest_ExpectedLocation(source.indexOf("MISSING_GETTER"), 3, 20)
, new AbstractScannerTest_ExpectedLocation(source.length - 1, 4, 1)]); |
1812 JUnitTestCase.assertNotNull(info); | 1850 } |
1813 JUnitTestCase.assertEquals(3, info.getLocation(source.length - 1).lineNumber
); | 1851 void test_lineInfo_slashN() { |
| 1852 String source = "class Test {\n}"; |
| 1853 assertLineInfo(source, [new AbstractScannerTest_ExpectedLocation(0, 1, 1), n
ew AbstractScannerTest_ExpectedLocation(source.indexOf("}"), 2, 1)]); |
1814 } | 1854 } |
1815 void test_lt() { | 1855 void test_lt() { |
1816 assertToken(TokenType.LT, "<"); | 1856 assertToken(TokenType.LT, "<"); |
1817 } | 1857 } |
1818 void test_lt_eq() { | 1858 void test_lt_eq() { |
1819 assertToken(TokenType.LT_EQ, "<="); | 1859 assertToken(TokenType.LT_EQ, "<="); |
1820 } | 1860 } |
1821 void test_lt_lt() { | 1861 void test_lt_lt() { |
1822 assertToken(TokenType.LT_LT, "<<"); | 1862 assertToken(TokenType.LT_LT, "<<"); |
1823 } | 1863 } |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1946 } | 1986 } |
1947 void test_string_raw_simple_unterminated_eol() { | 1987 void test_string_raw_simple_unterminated_eol() { |
1948 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "r'string\n"); | 1988 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "r'string\n"); |
1949 } | 1989 } |
1950 void test_string_simple_double() { | 1990 void test_string_simple_double() { |
1951 assertToken(TokenType.STRING, "\"string\""); | 1991 assertToken(TokenType.STRING, "\"string\""); |
1952 } | 1992 } |
1953 void test_string_simple_escapedDollar() { | 1993 void test_string_simple_escapedDollar() { |
1954 assertToken(TokenType.STRING, "'a\\\$b'"); | 1994 assertToken(TokenType.STRING, "'a\\\$b'"); |
1955 } | 1995 } |
| 1996 void test_string_simple_interpolation_adjacentIdentifiers() { |
| 1997 assertTokens("'\$a\$b'", [new StringToken(TokenType.STRING, "'", 0), new Str
ingToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), new StringToken(To
kenType.IDENTIFIER, "a", 2), new StringToken(TokenType.STRING, "", 3), new Strin
gToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3), new StringToken(Toke
nType.IDENTIFIER, "b", 4), new StringToken(TokenType.STRING, "'", 5)]); |
| 1998 } |
1956 void test_string_simple_interpolation_block() { | 1999 void test_string_simple_interpolation_block() { |
1957 assertTokens("'Hello \${name}!'", [new StringToken(TokenType.STRING, "'Hello
", 0), new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7), ne
w StringToken(TokenType.IDENTIFIER, "name", 9), new Token(TokenType.CLOSE_CURLY_
BRACKET, 13), new StringToken(TokenType.STRING, "!'", 14)]); | 2000 assertTokens("'Hello \${name}!'", [new StringToken(TokenType.STRING, "'Hello
", 0), new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7), ne
w StringToken(TokenType.IDENTIFIER, "name", 9), new Token(TokenType.CLOSE_CURLY_
BRACKET, 13), new StringToken(TokenType.STRING, "!'", 14)]); |
1958 } | 2001 } |
1959 void test_string_simple_interpolation_blockWithNestedMap() { | 2002 void test_string_simple_interpolation_blockWithNestedMap() { |
1960 assertTokens("'a \${f({'b' : 'c'})} d'", [new StringToken(TokenType.STRING,
"'a ", 0), new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
new StringToken(TokenType.IDENTIFIER, "f", 5), new Token(TokenType.OPEN_PAREN,
6), new Token(TokenType.OPEN_CURLY_BRACKET, 7), new StringToken(TokenType.STRING
, "'b'", 8), new Token(TokenType.COLON, 12), new StringToken(TokenType.STRING, "
'c'", 14), new Token(TokenType.CLOSE_CURLY_BRACKET, 17), new Token(TokenType.CLO
SE_PAREN, 18), new Token(TokenType.CLOSE_CURLY_BRACKET, 19), new StringToken(Tok
enType.STRING, " d'", 20)]); | 2003 assertTokens("'a \${f({'b' : 'c'})} d'", [new StringToken(TokenType.STRING,
"'a ", 0), new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
new StringToken(TokenType.IDENTIFIER, "f", 5), new Token(TokenType.OPEN_PAREN,
6), new Token(TokenType.OPEN_CURLY_BRACKET, 7), new StringToken(TokenType.STRING
, "'b'", 8), new Token(TokenType.COLON, 12), new StringToken(TokenType.STRING, "
'c'", 14), new Token(TokenType.CLOSE_CURLY_BRACKET, 17), new Token(TokenType.CLO
SE_PAREN, 18), new Token(TokenType.CLOSE_CURLY_BRACKET, 19), new StringToken(Tok
enType.STRING, " d'", 20)]); |
1961 } | 2004 } |
1962 void test_string_simple_interpolation_firstAndLast() { | 2005 void test_string_simple_interpolation_firstAndLast() { |
1963 assertTokens("'\$greeting \$name'", [new StringToken(TokenType.STRING, "'",
0), new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), new Str
ingToken(TokenType.IDENTIFIER, "greeting", 2), new StringToken(TokenType.STRING,
" ", 10), new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 11),
new StringToken(TokenType.IDENTIFIER, "name", 12), new StringToken(TokenType.ST
RING, "'", 16)]); | 2006 assertTokens("'\$greeting \$name'", [new StringToken(TokenType.STRING, "'",
0), new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), new Str
ingToken(TokenType.IDENTIFIER, "greeting", 2), new StringToken(TokenType.STRING,
" ", 10), new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 11),
new StringToken(TokenType.IDENTIFIER, "name", 12), new StringToken(TokenType.ST
RING, "'", 16)]); |
1964 } | 2007 } |
1965 void test_string_simple_interpolation_identifier() { | 2008 void test_string_simple_interpolation_identifier() { |
1966 assertTokens("'Hello \$name!'", [new StringToken(TokenType.STRING, "'Hello "
, 0), new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7), new S
tringToken(TokenType.IDENTIFIER, "name", 8), new StringToken(TokenType.STRING, "
!'", 12)]); | 2009 assertTokens("'Hello \$name!'", [new StringToken(TokenType.STRING, "'Hello "
, 0), new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7), new S
tringToken(TokenType.IDENTIFIER, "name", 8), new StringToken(TokenType.STRING, "
!'", 12)]); |
1967 } | 2010 } |
| 2011 void test_string_simple_interpolation_missingIdentifier() { |
| 2012 assertTokens("'\$x\$'", [new StringToken(TokenType.STRING, "'", 0), new Stri
ngToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), new StringToken(Tok
enType.IDENTIFIER, "x", 2), new StringToken(TokenType.STRING, "", 3), new String
Token(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3), new StringToken(Token
Type.STRING, "'", 4)]); |
| 2013 } |
| 2014 void test_string_simple_interpolation_nonIdentifier() { |
| 2015 assertTokens("'\$1'", [new StringToken(TokenType.STRING, "'", 0), new String
Token(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), new StringToken(Token
Type.STRING, "1'", 2)]); |
| 2016 } |
1968 void test_string_simple_single() { | 2017 void test_string_simple_single() { |
1969 assertToken(TokenType.STRING, "'string'"); | 2018 assertToken(TokenType.STRING, "'string'"); |
1970 } | 2019 } |
1971 void test_string_simple_unterminated_eof() { | 2020 void test_string_simple_unterminated_eof() { |
1972 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 6, "'string"); | 2021 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 6, "'string"); |
1973 } | 2022 } |
1974 void test_string_simple_unterminated_eol() { | 2023 void test_string_simple_unterminated_eol() { |
1975 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "'string\r"); | 2024 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "'string\r"); |
1976 } | 2025 } |
1977 void test_tilde() { | 2026 void test_tilde() { |
(...skipping 14 matching lines...) Expand all Loading... |
1992 Token token = scan2(source); | 2041 Token token = scan2(source); |
1993 JUnitTestCase.assertNotNull(token); | 2042 JUnitTestCase.assertNotNull(token); |
1994 JUnitTestCase.assertEquals(TokenType.EOF, token.type); | 2043 JUnitTestCase.assertEquals(TokenType.EOF, token.type); |
1995 Token comment = token.precedingComments; | 2044 Token comment = token.precedingComments; |
1996 JUnitTestCase.assertNotNull(comment); | 2045 JUnitTestCase.assertNotNull(comment); |
1997 JUnitTestCase.assertEquals(commentType, comment.type); | 2046 JUnitTestCase.assertEquals(commentType, comment.type); |
1998 JUnitTestCase.assertEquals(0, comment.offset); | 2047 JUnitTestCase.assertEquals(0, comment.offset); |
1999 JUnitTestCase.assertEquals(source.length, comment.length); | 2048 JUnitTestCase.assertEquals(source.length, comment.length); |
2000 JUnitTestCase.assertEquals(source, comment.lexeme); | 2049 JUnitTestCase.assertEquals(source, comment.lexeme); |
2001 } | 2050 } |
| 2051 |
2002 /** | 2052 /** |
2003 * Assert that scanning the given source produces an error with the given code
. | 2053 * Assert that scanning the given source produces an error with the given code
. |
2004 * @param illegalCharacter | 2054 * @param illegalCharacter |
2005 * @param i | 2055 * @param i |
2006 * @param source the source to be scanned to produce the error | 2056 * @param source the source to be scanned to produce the error |
2007 */ | 2057 */ |
2008 void assertError(ScannerErrorCode expectedError, int expectedOffset, String so
urce) { | 2058 void assertError(ScannerErrorCode expectedError, int expectedOffset, String so
urce) { |
2009 GatheringErrorListener listener = new GatheringErrorListener(); | 2059 GatheringErrorListener listener = new GatheringErrorListener(); |
2010 scan(source, listener); | 2060 scan(source, listener); |
2011 listener.assertErrors([new AnalysisError.con2(null, expectedOffset, 1, expec
tedError, [(source.codeUnitAt(expectedOffset) as int)])]); | 2061 listener.assertErrors([new AnalysisError.con2(null, expectedOffset, 1, expec
tedError, [(source.codeUnitAt(expectedOffset) as int)])]); |
2012 } | 2062 } |
| 2063 |
2013 /** | 2064 /** |
2014 * Assert that when scanned the given source contains a single keyword token w
ith the same lexeme | 2065 * Assert that when scanned the given source contains a single keyword token w
ith the same lexeme |
2015 * as the original source. | 2066 * as the original source. |
2016 * @param source the source to be scanned | 2067 * @param source the source to be scanned |
2017 */ | 2068 */ |
2018 void assertKeywordToken(String source) { | 2069 void assertKeywordToken(String source) { |
2019 Token token = scan2(source); | 2070 Token token = scan2(source); |
2020 JUnitTestCase.assertNotNull(token); | 2071 JUnitTestCase.assertNotNull(token); |
2021 JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type); | 2072 JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type); |
2022 JUnitTestCase.assertEquals(0, token.offset); | 2073 JUnitTestCase.assertEquals(0, token.offset); |
2023 JUnitTestCase.assertEquals(source.length, token.length); | 2074 JUnitTestCase.assertEquals(source.length, token.length); |
2024 JUnitTestCase.assertEquals(source, token.lexeme); | 2075 JUnitTestCase.assertEquals(source, token.lexeme); |
2025 Object value2 = token.value(); | 2076 Object value2 = token.value(); |
2026 JUnitTestCase.assertTrue(value2 is Keyword); | 2077 JUnitTestCase.assertTrue(value2 is Keyword); |
2027 JUnitTestCase.assertEquals(source, ((value2 as Keyword)).syntax); | 2078 JUnitTestCase.assertEquals(source, ((value2 as Keyword)).syntax); |
2028 token = scan2(" ${source} "); | 2079 token = scan2(" ${source} "); |
2029 JUnitTestCase.assertNotNull(token); | 2080 JUnitTestCase.assertNotNull(token); |
2030 JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type); | 2081 JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type); |
2031 JUnitTestCase.assertEquals(1, token.offset); | 2082 JUnitTestCase.assertEquals(1, token.offset); |
2032 JUnitTestCase.assertEquals(source.length, token.length); | 2083 JUnitTestCase.assertEquals(source.length, token.length); |
2033 JUnitTestCase.assertEquals(source, token.lexeme); | 2084 JUnitTestCase.assertEquals(source, token.lexeme); |
2034 value2 = token.value(); | 2085 value2 = token.value(); |
2035 JUnitTestCase.assertTrue(value2 is Keyword); | 2086 JUnitTestCase.assertTrue(value2 is Keyword); |
2036 JUnitTestCase.assertEquals(source, ((value2 as Keyword)).syntax); | 2087 JUnitTestCase.assertEquals(source, ((value2 as Keyword)).syntax); |
2037 JUnitTestCase.assertEquals(TokenType.EOF, token.next.type); | 2088 JUnitTestCase.assertEquals(TokenType.EOF, token.next.type); |
2038 } | 2089 } |
| 2090 void assertLineInfo(String source, List<AbstractScannerTest_ExpectedLocation>
expectedLocations) { |
| 2091 GatheringErrorListener listener = new GatheringErrorListener(); |
| 2092 scan(source, listener); |
| 2093 listener.assertNoErrors(); |
| 2094 LineInfo info = listener.getLineInfo(new TestSource()); |
| 2095 JUnitTestCase.assertNotNull(info); |
| 2096 for (AbstractScannerTest_ExpectedLocation expectedLocation in expectedLocati
ons) { |
| 2097 LineInfo_Location location = info.getLocation(expectedLocation._offset); |
| 2098 JUnitTestCase.assertEquals(expectedLocation._lineNumber, location.lineNumb
er); |
| 2099 JUnitTestCase.assertEquals(expectedLocation._columnNumber, location.column
Number); |
| 2100 } |
| 2101 } |
| 2102 |
2039 /** | 2103 /** |
2040 * Assert that the token scanned from the given source has the expected type. | 2104 * Assert that the token scanned from the given source has the expected type. |
2041 * @param expectedType the expected type of the token | 2105 * @param expectedType the expected type of the token |
2042 * @param source the source to be scanned to produce the actual token | 2106 * @param source the source to be scanned to produce the actual token |
2043 */ | 2107 */ |
2044 Token assertToken(TokenType expectedType, String source) { | 2108 Token assertToken(TokenType expectedType, String source) { |
2045 Token originalToken = scan2(source); | 2109 Token originalToken = scan2(source); |
2046 JUnitTestCase.assertNotNull(originalToken); | 2110 JUnitTestCase.assertNotNull(originalToken); |
2047 JUnitTestCase.assertEquals(expectedType, originalToken.type); | 2111 JUnitTestCase.assertEquals(expectedType, originalToken.type); |
2048 JUnitTestCase.assertEquals(0, originalToken.offset); | 2112 JUnitTestCase.assertEquals(0, originalToken.offset); |
(...skipping 12 matching lines...) Expand all Loading... |
2061 } | 2125 } |
2062 Token tokenWithSpaces = scan2(" ${source} "); | 2126 Token tokenWithSpaces = scan2(" ${source} "); |
2063 JUnitTestCase.assertNotNull(tokenWithSpaces); | 2127 JUnitTestCase.assertNotNull(tokenWithSpaces); |
2064 JUnitTestCase.assertEquals(expectedType, tokenWithSpaces.type); | 2128 JUnitTestCase.assertEquals(expectedType, tokenWithSpaces.type); |
2065 JUnitTestCase.assertEquals(1, tokenWithSpaces.offset); | 2129 JUnitTestCase.assertEquals(1, tokenWithSpaces.offset); |
2066 JUnitTestCase.assertEquals(source.length, tokenWithSpaces.length); | 2130 JUnitTestCase.assertEquals(source.length, tokenWithSpaces.length); |
2067 JUnitTestCase.assertEquals(source, tokenWithSpaces.lexeme); | 2131 JUnitTestCase.assertEquals(source, tokenWithSpaces.lexeme); |
2068 JUnitTestCase.assertEquals(TokenType.EOF, originalToken.next.type); | 2132 JUnitTestCase.assertEquals(TokenType.EOF, originalToken.next.type); |
2069 return originalToken; | 2133 return originalToken; |
2070 } | 2134 } |
| 2135 |
2071 /** | 2136 /** |
2072 * Assert that when scanned the given source contains a sequence of tokens ide
ntical to the given | 2137 * Assert that when scanned the given source contains a sequence of tokens ide
ntical to the given |
2073 * tokens. | 2138 * tokens. |
2074 * @param source the source to be scanned | 2139 * @param source the source to be scanned |
2075 * @param expectedTokens the tokens that are expected to be in the source | 2140 * @param expectedTokens the tokens that are expected to be in the source |
2076 */ | 2141 */ |
2077 void assertTokens(String source, List<Token> expectedTokens) { | 2142 void assertTokens(String source, List<Token> expectedTokens) { |
2078 Token token = scan2(source); | 2143 Token token = scan2(source); |
2079 JUnitTestCase.assertNotNull(token); | 2144 JUnitTestCase.assertNotNull(token); |
2080 for (int i = 0; i < expectedTokens.length; i++) { | 2145 for (int i = 0; i < expectedTokens.length; i++) { |
2081 Token expectedToken = expectedTokens[i]; | 2146 Token expectedToken = expectedTokens[i]; |
2082 JUnitTestCase.assertEqualsMsg("Wrong type for token ${i}", expectedToken.t
ype, token.type); | 2147 JUnitTestCase.assertEqualsMsg("Wrong type for token ${i}", expectedToken.t
ype, token.type); |
2083 JUnitTestCase.assertEqualsMsg("Wrong offset for token ${i}", expectedToken
.offset, token.offset); | 2148 JUnitTestCase.assertEqualsMsg("Wrong offset for token ${i}", expectedToken
.offset, token.offset); |
2084 JUnitTestCase.assertEqualsMsg("Wrong length for token ${i}", expectedToken
.length, token.length); | 2149 JUnitTestCase.assertEqualsMsg("Wrong length for token ${i}", expectedToken
.length, token.length); |
2085 JUnitTestCase.assertEqualsMsg("Wrong lexeme for token ${i}", expectedToken
.lexeme, token.lexeme); | 2150 JUnitTestCase.assertEqualsMsg("Wrong lexeme for token ${i}", expectedToken
.lexeme, token.lexeme); |
2086 token = token.next; | 2151 token = token.next; |
2087 JUnitTestCase.assertNotNull(token); | 2152 JUnitTestCase.assertNotNull(token); |
2088 } | 2153 } |
2089 JUnitTestCase.assertEquals(TokenType.EOF, token.type); | 2154 JUnitTestCase.assertEquals(TokenType.EOF, token.type); |
2090 } | 2155 } |
2091 Token scan2(String source) { | 2156 Token scan2(String source) { |
2092 GatheringErrorListener listener = new GatheringErrorListener(); | 2157 GatheringErrorListener listener = new GatheringErrorListener(); |
2093 Token token = scan(source, listener); | 2158 Token token = scan(source, listener); |
2094 listener.assertNoErrors(); | 2159 listener.assertNoErrors(); |
2095 return token; | 2160 return token; |
2096 } | 2161 } |
2097 } | 2162 } |
| 2163 |
| 2164 /** |
| 2165 * Instances of the class {@code ExpectedLocation} encode information about the
expected location |
| 2166 * of a given offset in source code. |
| 2167 */ |
| 2168 class AbstractScannerTest_ExpectedLocation { |
| 2169 int _offset = 0; |
| 2170 int _lineNumber = 0; |
| 2171 int _columnNumber = 0; |
| 2172 AbstractScannerTest_ExpectedLocation(int offset, int lineNumber, int columnNum
ber) { |
| 2173 this._offset = offset; |
| 2174 this._lineNumber = lineNumber; |
| 2175 this._columnNumber = columnNumber; |
| 2176 } |
| 2177 } |
2098 main() { | 2178 main() { |
2099 CharBufferScannerTest.dartSuite(); | 2179 CharBufferScannerTest.dartSuite(); |
2100 KeywordStateTest.dartSuite(); | 2180 KeywordStateTest.dartSuite(); |
2101 StringScannerTest.dartSuite(); | 2181 StringScannerTest.dartSuite(); |
2102 TokenTypeTest.dartSuite(); | 2182 TokenTypeTest.dartSuite(); |
2103 } | 2183 } |
OLD | NEW |