| 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'; |
| 11 import 'package:analyzer-experimental/src/generated/error.dart'; | 11 import 'package:analyzer-experimental/src/generated/error.dart'; |
| 12 import 'package:analyzer-experimental/src/generated/scanner.dart'; | 12 import 'package:analyzer-experimental/src/generated/scanner.dart'; |
| 13 import 'package:unittest/unittest.dart' as _ut; | 13 import 'package:unittest/unittest.dart' as _ut; |
| 14 import 'test_support.dart'; | 14 import 'test_support.dart'; |
| 15 | 15 |
| 16 class KeywordStateTest extends JUnitTestCase { |
| 17 void test_KeywordState() { |
| 18 List<Keyword> keywords = Keyword.values; |
| 19 int keywordCount = keywords.length; |
| 20 List<String> textToTest = new List<String>(keywordCount * 3); |
| 21 for (int i = 0; i < keywordCount; i++) { |
| 22 String syntax3 = keywords[i].syntax; |
| 23 textToTest[i] = syntax3; |
| 24 textToTest[i + keywordCount] = "${syntax3}x"; |
| 25 textToTest[i + keywordCount * 2] = syntax3.substring(0, syntax3.length - 1
); |
| 26 } |
| 27 KeywordState firstState = KeywordState.KEYWORD_STATE; |
| 28 for (int i = 0; i < textToTest.length; i++) { |
| 29 String text = textToTest[i]; |
| 30 int index = 0; |
| 31 int length10 = text.length; |
| 32 KeywordState state = firstState; |
| 33 while (index < length10 && state != null) { |
| 34 state = state.next(text.codeUnitAt(index)); |
| 35 index++; |
| 36 } |
| 37 if (i < keywordCount) { |
| 38 JUnitTestCase.assertNotNull(state); |
| 39 JUnitTestCase.assertNotNull(state.keyword()); |
| 40 JUnitTestCase.assertEquals(keywords[i], state.keyword()); |
| 41 } else if (i < keywordCount * 2) { |
| 42 JUnitTestCase.assertNull(state); |
| 43 } else { |
| 44 JUnitTestCase.assertNotNull(state); |
| 45 } |
| 46 } |
| 47 } |
| 48 static dartSuite() { |
| 49 _ut.group('KeywordStateTest', () { |
| 50 _ut.test('test_KeywordState', () { |
| 51 final __test = new KeywordStateTest(); |
| 52 runJUnitTest(__test, __test.test_KeywordState); |
| 53 }); |
| 54 }); |
| 55 } |
| 56 } |
| 57 class TokenTypeTest extends EngineTestCase { |
| 58 void test_isOperator() { |
| 59 JUnitTestCase.assertTrue(TokenType.AMPERSAND.isOperator()); |
| 60 JUnitTestCase.assertTrue(TokenType.AMPERSAND_AMPERSAND.isOperator()); |
| 61 JUnitTestCase.assertTrue(TokenType.AMPERSAND_EQ.isOperator()); |
| 62 JUnitTestCase.assertTrue(TokenType.BANG.isOperator()); |
| 63 JUnitTestCase.assertTrue(TokenType.BANG_EQ.isOperator()); |
| 64 JUnitTestCase.assertTrue(TokenType.BAR.isOperator()); |
| 65 JUnitTestCase.assertTrue(TokenType.BAR_BAR.isOperator()); |
| 66 JUnitTestCase.assertTrue(TokenType.BAR_EQ.isOperator()); |
| 67 JUnitTestCase.assertTrue(TokenType.CARET.isOperator()); |
| 68 JUnitTestCase.assertTrue(TokenType.CARET_EQ.isOperator()); |
| 69 JUnitTestCase.assertTrue(TokenType.EQ.isOperator()); |
| 70 JUnitTestCase.assertTrue(TokenType.EQ_EQ.isOperator()); |
| 71 JUnitTestCase.assertTrue(TokenType.GT.isOperator()); |
| 72 JUnitTestCase.assertTrue(TokenType.GT_EQ.isOperator()); |
| 73 JUnitTestCase.assertTrue(TokenType.GT_GT.isOperator()); |
| 74 JUnitTestCase.assertTrue(TokenType.GT_GT_EQ.isOperator()); |
| 75 JUnitTestCase.assertTrue(TokenType.INDEX.isOperator()); |
| 76 JUnitTestCase.assertTrue(TokenType.INDEX_EQ.isOperator()); |
| 77 JUnitTestCase.assertTrue(TokenType.IS.isOperator()); |
| 78 JUnitTestCase.assertTrue(TokenType.LT.isOperator()); |
| 79 JUnitTestCase.assertTrue(TokenType.LT_EQ.isOperator()); |
| 80 JUnitTestCase.assertTrue(TokenType.LT_LT.isOperator()); |
| 81 JUnitTestCase.assertTrue(TokenType.LT_LT_EQ.isOperator()); |
| 82 JUnitTestCase.assertTrue(TokenType.MINUS.isOperator()); |
| 83 JUnitTestCase.assertTrue(TokenType.MINUS_EQ.isOperator()); |
| 84 JUnitTestCase.assertTrue(TokenType.MINUS_MINUS.isOperator()); |
| 85 JUnitTestCase.assertTrue(TokenType.PERCENT.isOperator()); |
| 86 JUnitTestCase.assertTrue(TokenType.PERCENT_EQ.isOperator()); |
| 87 JUnitTestCase.assertTrue(TokenType.PERIOD_PERIOD.isOperator()); |
| 88 JUnitTestCase.assertTrue(TokenType.PLUS.isOperator()); |
| 89 JUnitTestCase.assertTrue(TokenType.PLUS_EQ.isOperator()); |
| 90 JUnitTestCase.assertTrue(TokenType.PLUS_PLUS.isOperator()); |
| 91 JUnitTestCase.assertTrue(TokenType.QUESTION.isOperator()); |
| 92 JUnitTestCase.assertTrue(TokenType.SLASH.isOperator()); |
| 93 JUnitTestCase.assertTrue(TokenType.SLASH_EQ.isOperator()); |
| 94 JUnitTestCase.assertTrue(TokenType.STAR.isOperator()); |
| 95 JUnitTestCase.assertTrue(TokenType.STAR_EQ.isOperator()); |
| 96 JUnitTestCase.assertTrue(TokenType.TILDE.isOperator()); |
| 97 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH.isOperator()); |
| 98 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH_EQ.isOperator()); |
| 99 } |
| 100 void test_isUserDefinableOperator() { |
| 101 JUnitTestCase.assertTrue(TokenType.AMPERSAND.isUserDefinableOperator()); |
| 102 JUnitTestCase.assertTrue(TokenType.BAR.isUserDefinableOperator()); |
| 103 JUnitTestCase.assertTrue(TokenType.CARET.isUserDefinableOperator()); |
| 104 JUnitTestCase.assertTrue(TokenType.EQ_EQ.isUserDefinableOperator()); |
| 105 JUnitTestCase.assertTrue(TokenType.GT.isUserDefinableOperator()); |
| 106 JUnitTestCase.assertTrue(TokenType.GT_EQ.isUserDefinableOperator()); |
| 107 JUnitTestCase.assertTrue(TokenType.GT_GT.isUserDefinableOperator()); |
| 108 JUnitTestCase.assertTrue(TokenType.INDEX.isUserDefinableOperator()); |
| 109 JUnitTestCase.assertTrue(TokenType.INDEX_EQ.isUserDefinableOperator()); |
| 110 JUnitTestCase.assertTrue(TokenType.LT.isUserDefinableOperator()); |
| 111 JUnitTestCase.assertTrue(TokenType.LT_EQ.isUserDefinableOperator()); |
| 112 JUnitTestCase.assertTrue(TokenType.LT_LT.isUserDefinableOperator()); |
| 113 JUnitTestCase.assertTrue(TokenType.MINUS.isUserDefinableOperator()); |
| 114 JUnitTestCase.assertTrue(TokenType.PERCENT.isUserDefinableOperator()); |
| 115 JUnitTestCase.assertTrue(TokenType.PLUS.isUserDefinableOperator()); |
| 116 JUnitTestCase.assertTrue(TokenType.SLASH.isUserDefinableOperator()); |
| 117 JUnitTestCase.assertTrue(TokenType.STAR.isUserDefinableOperator()); |
| 118 JUnitTestCase.assertTrue(TokenType.TILDE.isUserDefinableOperator()); |
| 119 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH.isUserDefinableOperator()); |
| 120 } |
| 121 static dartSuite() { |
| 122 _ut.group('TokenTypeTest', () { |
| 123 _ut.test('test_isOperator', () { |
| 124 final __test = new TokenTypeTest(); |
| 125 runJUnitTest(__test, __test.test_isOperator); |
| 126 }); |
| 127 _ut.test('test_isUserDefinableOperator', () { |
| 128 final __test = new TokenTypeTest(); |
| 129 runJUnitTest(__test, __test.test_isUserDefinableOperator); |
| 130 }); |
| 131 }); |
| 132 } |
| 133 } |
| 134 /** |
| 135 * The class {@code TokenFactory} defines utility methods that can be used to cr
eate tokens. |
| 136 */ |
| 137 class TokenFactory { |
| 138 static Token token(Keyword keyword) => new KeywordToken(keyword, 0); |
| 139 static Token token2(String lexeme) => new StringToken(TokenType.STRING, lexeme
, 0); |
| 140 static Token token3(TokenType type) => new Token(type, 0); |
| 141 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 } |
| 16 class CharBufferScannerTest extends AbstractScannerTest { | 148 class CharBufferScannerTest extends AbstractScannerTest { |
| 17 Token scan(String source, GatheringErrorListener listener) { | 149 Token scan(String source, GatheringErrorListener listener) { |
| 18 CharBuffer buffer = CharBuffer.wrap(source); | 150 CharBuffer buffer = CharBuffer.wrap(source); |
| 19 CharBufferScanner scanner = new CharBufferScanner(null, buffer, listener); | 151 CharBufferScanner scanner = new CharBufferScanner(null, buffer, listener); |
| 20 Token result = scanner.tokenize(); | 152 Token result = scanner.tokenize(); |
| 21 listener.setLineInfo(new TestSource(), scanner.lineStarts); | 153 listener.setLineInfo(new TestSource(), scanner.lineStarts); |
| 22 return result; | 154 return result; |
| 23 } | 155 } |
| 24 static dartSuite() { | 156 static dartSuite() { |
| 25 _ut.group('CharBufferScannerTest', () { | 157 _ut.group('CharBufferScannerTest', () { |
| (...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 final __test = new CharBufferScannerTest(); | 767 final __test = new CharBufferScannerTest(); |
| 636 runJUnitTest(__test, __test.test_tilde_slash_eq); | 768 runJUnitTest(__test, __test.test_tilde_slash_eq); |
| 637 }); | 769 }); |
| 638 _ut.test('test_unclosedPairInInterpolation', () { | 770 _ut.test('test_unclosedPairInInterpolation', () { |
| 639 final __test = new CharBufferScannerTest(); | 771 final __test = new CharBufferScannerTest(); |
| 640 runJUnitTest(__test, __test.test_unclosedPairInInterpolation); | 772 runJUnitTest(__test, __test.test_unclosedPairInInterpolation); |
| 641 }); | 773 }); |
| 642 }); | 774 }); |
| 643 } | 775 } |
| 644 } | 776 } |
| 645 /** | |
| 646 * Instances of the class {@code TokenStreamValidator} are used to validate the
correct construction | |
| 647 * of a stream of tokens. | |
| 648 */ | |
| 649 class TokenStreamValidator { | |
| 650 /** | |
| 651 * Validate that the stream of tokens that starts with the given token is corr
ect. | |
| 652 * @param token the first token in the stream of tokens to be validated | |
| 653 */ | |
| 654 void validate(Token token) { | |
| 655 StringBuffer builder = new StringBuffer(); | |
| 656 validateStream(builder, token); | |
| 657 if (builder.length > 0) { | |
| 658 JUnitTestCase.fail(builder.toString()); | |
| 659 } | |
| 660 } | |
| 661 void validateStream(StringBuffer builder, Token token) { | |
| 662 if (token == null) { | |
| 663 return; | |
| 664 } | |
| 665 Token previousToken = null; | |
| 666 int previousEnd = -1; | |
| 667 Token currentToken = token; | |
| 668 while (currentToken != null && currentToken.type != TokenType.EOF) { | |
| 669 validateStream(builder, currentToken.precedingComments); | |
| 670 TokenType type23 = currentToken.type; | |
| 671 if (identical(type23, TokenType.OPEN_CURLY_BRACKET) || identical(type23, T
okenType.OPEN_PAREN) || identical(type23, TokenType.OPEN_SQUARE_BRACKET) || iden
tical(type23, TokenType.STRING_INTERPOLATION_EXPRESSION)) { | |
| 672 if (currentToken is! BeginToken) { | |
| 673 builder.add("\r\nExpected BeginToken, found "); | |
| 674 builder.add(currentToken.runtimeType.toString()); | |
| 675 builder.add(" "); | |
| 676 writeToken(builder, currentToken); | |
| 677 } | |
| 678 } | |
| 679 int currentStart = currentToken.offset; | |
| 680 int currentLength = currentToken.length; | |
| 681 int currentEnd = currentStart + currentLength - 1; | |
| 682 if (currentStart <= previousEnd) { | |
| 683 builder.add("\r\nInvalid token sequence: "); | |
| 684 writeToken(builder, previousToken); | |
| 685 builder.add(" followed by "); | |
| 686 writeToken(builder, currentToken); | |
| 687 } | |
| 688 previousEnd = currentEnd; | |
| 689 previousToken = currentToken; | |
| 690 currentToken = currentToken.next; | |
| 691 } | |
| 692 } | |
| 693 void writeToken(StringBuffer builder, Token token) { | |
| 694 builder.add("["); | |
| 695 builder.add(token.type); | |
| 696 builder.add(", '"); | |
| 697 builder.add(token.lexeme); | |
| 698 builder.add("', "); | |
| 699 builder.add(token.offset); | |
| 700 builder.add(", "); | |
| 701 builder.add(token.length); | |
| 702 builder.add("]"); | |
| 703 } | |
| 704 } | |
| 705 class TokenTypeTest extends EngineTestCase { | |
| 706 void test_isOperator() { | |
| 707 JUnitTestCase.assertTrue(TokenType.AMPERSAND.isOperator()); | |
| 708 JUnitTestCase.assertTrue(TokenType.AMPERSAND_AMPERSAND.isOperator()); | |
| 709 JUnitTestCase.assertTrue(TokenType.AMPERSAND_EQ.isOperator()); | |
| 710 JUnitTestCase.assertTrue(TokenType.BANG.isOperator()); | |
| 711 JUnitTestCase.assertTrue(TokenType.BANG_EQ.isOperator()); | |
| 712 JUnitTestCase.assertTrue(TokenType.BAR.isOperator()); | |
| 713 JUnitTestCase.assertTrue(TokenType.BAR_BAR.isOperator()); | |
| 714 JUnitTestCase.assertTrue(TokenType.BAR_EQ.isOperator()); | |
| 715 JUnitTestCase.assertTrue(TokenType.CARET.isOperator()); | |
| 716 JUnitTestCase.assertTrue(TokenType.CARET_EQ.isOperator()); | |
| 717 JUnitTestCase.assertTrue(TokenType.EQ.isOperator()); | |
| 718 JUnitTestCase.assertTrue(TokenType.EQ_EQ.isOperator()); | |
| 719 JUnitTestCase.assertTrue(TokenType.GT.isOperator()); | |
| 720 JUnitTestCase.assertTrue(TokenType.GT_EQ.isOperator()); | |
| 721 JUnitTestCase.assertTrue(TokenType.GT_GT.isOperator()); | |
| 722 JUnitTestCase.assertTrue(TokenType.GT_GT_EQ.isOperator()); | |
| 723 JUnitTestCase.assertTrue(TokenType.INDEX.isOperator()); | |
| 724 JUnitTestCase.assertTrue(TokenType.INDEX_EQ.isOperator()); | |
| 725 JUnitTestCase.assertTrue(TokenType.IS.isOperator()); | |
| 726 JUnitTestCase.assertTrue(TokenType.LT.isOperator()); | |
| 727 JUnitTestCase.assertTrue(TokenType.LT_EQ.isOperator()); | |
| 728 JUnitTestCase.assertTrue(TokenType.LT_LT.isOperator()); | |
| 729 JUnitTestCase.assertTrue(TokenType.LT_LT_EQ.isOperator()); | |
| 730 JUnitTestCase.assertTrue(TokenType.MINUS.isOperator()); | |
| 731 JUnitTestCase.assertTrue(TokenType.MINUS_EQ.isOperator()); | |
| 732 JUnitTestCase.assertTrue(TokenType.MINUS_MINUS.isOperator()); | |
| 733 JUnitTestCase.assertTrue(TokenType.PERCENT.isOperator()); | |
| 734 JUnitTestCase.assertTrue(TokenType.PERCENT_EQ.isOperator()); | |
| 735 JUnitTestCase.assertTrue(TokenType.PERIOD_PERIOD.isOperator()); | |
| 736 JUnitTestCase.assertTrue(TokenType.PLUS.isOperator()); | |
| 737 JUnitTestCase.assertTrue(TokenType.PLUS_EQ.isOperator()); | |
| 738 JUnitTestCase.assertTrue(TokenType.PLUS_PLUS.isOperator()); | |
| 739 JUnitTestCase.assertTrue(TokenType.QUESTION.isOperator()); | |
| 740 JUnitTestCase.assertTrue(TokenType.SLASH.isOperator()); | |
| 741 JUnitTestCase.assertTrue(TokenType.SLASH_EQ.isOperator()); | |
| 742 JUnitTestCase.assertTrue(TokenType.STAR.isOperator()); | |
| 743 JUnitTestCase.assertTrue(TokenType.STAR_EQ.isOperator()); | |
| 744 JUnitTestCase.assertTrue(TokenType.TILDE.isOperator()); | |
| 745 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH.isOperator()); | |
| 746 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH_EQ.isOperator()); | |
| 747 } | |
| 748 void test_isUserDefinableOperator() { | |
| 749 JUnitTestCase.assertTrue(TokenType.AMPERSAND.isUserDefinableOperator()); | |
| 750 JUnitTestCase.assertTrue(TokenType.BAR.isUserDefinableOperator()); | |
| 751 JUnitTestCase.assertTrue(TokenType.CARET.isUserDefinableOperator()); | |
| 752 JUnitTestCase.assertTrue(TokenType.EQ_EQ.isUserDefinableOperator()); | |
| 753 JUnitTestCase.assertTrue(TokenType.GT.isUserDefinableOperator()); | |
| 754 JUnitTestCase.assertTrue(TokenType.GT_EQ.isUserDefinableOperator()); | |
| 755 JUnitTestCase.assertTrue(TokenType.GT_GT.isUserDefinableOperator()); | |
| 756 JUnitTestCase.assertTrue(TokenType.INDEX.isUserDefinableOperator()); | |
| 757 JUnitTestCase.assertTrue(TokenType.INDEX_EQ.isUserDefinableOperator()); | |
| 758 JUnitTestCase.assertTrue(TokenType.LT.isUserDefinableOperator()); | |
| 759 JUnitTestCase.assertTrue(TokenType.LT_EQ.isUserDefinableOperator()); | |
| 760 JUnitTestCase.assertTrue(TokenType.LT_LT.isUserDefinableOperator()); | |
| 761 JUnitTestCase.assertTrue(TokenType.MINUS.isUserDefinableOperator()); | |
| 762 JUnitTestCase.assertTrue(TokenType.PERCENT.isUserDefinableOperator()); | |
| 763 JUnitTestCase.assertTrue(TokenType.PLUS.isUserDefinableOperator()); | |
| 764 JUnitTestCase.assertTrue(TokenType.SLASH.isUserDefinableOperator()); | |
| 765 JUnitTestCase.assertTrue(TokenType.STAR.isUserDefinableOperator()); | |
| 766 JUnitTestCase.assertTrue(TokenType.TILDE.isUserDefinableOperator()); | |
| 767 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH.isUserDefinableOperator()); | |
| 768 } | |
| 769 static dartSuite() { | |
| 770 _ut.group('TokenTypeTest', () { | |
| 771 _ut.test('test_isOperator', () { | |
| 772 final __test = new TokenTypeTest(); | |
| 773 runJUnitTest(__test, __test.test_isOperator); | |
| 774 }); | |
| 775 _ut.test('test_isUserDefinableOperator', () { | |
| 776 final __test = new TokenTypeTest(); | |
| 777 runJUnitTest(__test, __test.test_isUserDefinableOperator); | |
| 778 }); | |
| 779 }); | |
| 780 } | |
| 781 } | |
| 782 /** | |
| 783 * The class {@code TokenFactory} defines utility methods that can be used to cr
eate tokens. | |
| 784 */ | |
| 785 class TokenFactory { | |
| 786 static Token token(Keyword keyword) => new KeywordToken(keyword, 0); | |
| 787 static Token token2(String lexeme) => new StringToken(TokenType.STRING, lexeme
, 0); | |
| 788 static Token token3(TokenType type) => new Token(type, 0); | |
| 789 static Token token4(TokenType type, String lexeme) => new StringToken(type, le
xeme, 0); | |
| 790 /** | |
| 791 * Prevent the creation of instances of this class. | |
| 792 */ | |
| 793 TokenFactory() { | |
| 794 } | |
| 795 } | |
| 796 class KeywordStateTest extends JUnitTestCase { | |
| 797 void test_KeywordState() { | |
| 798 List<Keyword> keywords = Keyword.values; | |
| 799 int keywordCount = keywords.length; | |
| 800 List<String> textToTest = new List<String>(keywordCount * 3); | |
| 801 for (int i = 0; i < keywordCount; i++) { | |
| 802 String syntax3 = keywords[i].syntax; | |
| 803 textToTest[i] = syntax3; | |
| 804 textToTest[i + keywordCount] = "${syntax3}x"; | |
| 805 textToTest[i + keywordCount * 2] = syntax3.substring(0, syntax3.length - 1
); | |
| 806 } | |
| 807 KeywordState firstState = KeywordState.KEYWORD_STATE; | |
| 808 for (int i = 0; i < textToTest.length; i++) { | |
| 809 String text = textToTest[i]; | |
| 810 int index = 0; | |
| 811 int length10 = text.length; | |
| 812 KeywordState state = firstState; | |
| 813 while (index < length10 && state != null) { | |
| 814 state = state.next(text.codeUnitAt(index)); | |
| 815 index++; | |
| 816 } | |
| 817 if (i < keywordCount) { | |
| 818 JUnitTestCase.assertNotNull(state); | |
| 819 JUnitTestCase.assertNotNull(state.keyword()); | |
| 820 JUnitTestCase.assertEquals(keywords[i], state.keyword()); | |
| 821 } else if (i < keywordCount * 2) { | |
| 822 JUnitTestCase.assertNull(state); | |
| 823 } else { | |
| 824 JUnitTestCase.assertNotNull(state); | |
| 825 } | |
| 826 } | |
| 827 } | |
| 828 static dartSuite() { | |
| 829 _ut.group('KeywordStateTest', () { | |
| 830 _ut.test('test_KeywordState', () { | |
| 831 final __test = new KeywordStateTest(); | |
| 832 runJUnitTest(__test, __test.test_KeywordState); | |
| 833 }); | |
| 834 }); | |
| 835 } | |
| 836 } | |
| 837 class StringScannerTest extends AbstractScannerTest { | 777 class StringScannerTest extends AbstractScannerTest { |
| 838 void test_setSourceStart() { | 778 void test_setSourceStart() { |
| 839 int offsetDelta = 42; | 779 int offsetDelta = 42; |
| 840 GatheringErrorListener listener = new GatheringErrorListener(); | 780 GatheringErrorListener listener = new GatheringErrorListener(); |
| 841 StringScanner scanner = new StringScanner(null, "a", listener); | 781 StringScanner scanner = new StringScanner(null, "a", listener); |
| 842 scanner.setSourceStart(3, 9, offsetDelta); | 782 scanner.setSourceStart(3, 9, offsetDelta); |
| 843 scanner.tokenize(); | 783 scanner.tokenize(); |
| 844 List<int> lineStarts2 = scanner.lineStarts; | 784 List<int> lineStarts2 = scanner.lineStarts; |
| 845 JUnitTestCase.assertNotNull(lineStarts2); | 785 JUnitTestCase.assertNotNull(lineStarts2); |
| 846 JUnitTestCase.assertEquals(3, lineStarts2.length); | 786 JUnitTestCase.assertEquals(3, lineStarts2.length); |
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1470 final __test = new StringScannerTest(); | 1410 final __test = new StringScannerTest(); |
| 1471 runJUnitTest(__test, __test.test_tilde_slash_eq); | 1411 runJUnitTest(__test, __test.test_tilde_slash_eq); |
| 1472 }); | 1412 }); |
| 1473 _ut.test('test_unclosedPairInInterpolation', () { | 1413 _ut.test('test_unclosedPairInInterpolation', () { |
| 1474 final __test = new StringScannerTest(); | 1414 final __test = new StringScannerTest(); |
| 1475 runJUnitTest(__test, __test.test_unclosedPairInInterpolation); | 1415 runJUnitTest(__test, __test.test_unclosedPairInInterpolation); |
| 1476 }); | 1416 }); |
| 1477 }); | 1417 }); |
| 1478 } | 1418 } |
| 1479 } | 1419 } |
| 1420 /** |
| 1421 * Instances of the class {@code TokenStreamValidator} are used to validate the
correct construction |
| 1422 * of a stream of tokens. |
| 1423 */ |
| 1424 class TokenStreamValidator { |
| 1425 /** |
| 1426 * Validate that the stream of tokens that starts with the given token is corr
ect. |
| 1427 * @param token the first token in the stream of tokens to be validated |
| 1428 */ |
| 1429 void validate(Token token) { |
| 1430 StringBuffer builder = new StringBuffer(); |
| 1431 validateStream(builder, token); |
| 1432 if (builder.length > 0) { |
| 1433 JUnitTestCase.fail(builder.toString()); |
| 1434 } |
| 1435 } |
| 1436 void validateStream(StringBuffer builder, Token token) { |
| 1437 if (token == null) { |
| 1438 return; |
| 1439 } |
| 1440 Token previousToken = null; |
| 1441 int previousEnd = -1; |
| 1442 Token currentToken = token; |
| 1443 while (currentToken != null && currentToken.type != TokenType.EOF) { |
| 1444 validateStream(builder, currentToken.precedingComments); |
| 1445 TokenType type28 = currentToken.type; |
| 1446 if (identical(type28, TokenType.OPEN_CURLY_BRACKET) || identical(type28, T
okenType.OPEN_PAREN) || identical(type28, TokenType.OPEN_SQUARE_BRACKET) || iden
tical(type28, TokenType.STRING_INTERPOLATION_EXPRESSION)) { |
| 1447 if (currentToken is! BeginToken) { |
| 1448 builder.write("\r\nExpected BeginToken, found "); |
| 1449 builder.write(currentToken.runtimeType.toString()); |
| 1450 builder.write(" "); |
| 1451 writeToken(builder, currentToken); |
| 1452 } |
| 1453 } |
| 1454 int currentStart = currentToken.offset; |
| 1455 int currentLength = currentToken.length; |
| 1456 int currentEnd = currentStart + currentLength - 1; |
| 1457 if (currentStart <= previousEnd) { |
| 1458 builder.write("\r\nInvalid token sequence: "); |
| 1459 writeToken(builder, previousToken); |
| 1460 builder.write(" followed by "); |
| 1461 writeToken(builder, currentToken); |
| 1462 } |
| 1463 previousEnd = currentEnd; |
| 1464 previousToken = currentToken; |
| 1465 currentToken = currentToken.next; |
| 1466 } |
| 1467 } |
| 1468 void writeToken(StringBuffer builder, Token token) { |
| 1469 builder.write("["); |
| 1470 builder.write(token.type); |
| 1471 builder.write(", '"); |
| 1472 builder.write(token.lexeme); |
| 1473 builder.write("', "); |
| 1474 builder.write(token.offset); |
| 1475 builder.write(", "); |
| 1476 builder.write(token.length); |
| 1477 builder.write("]"); |
| 1478 } |
| 1479 } |
| 1480 abstract class AbstractScannerTest extends JUnitTestCase { | 1480 abstract class AbstractScannerTest extends JUnitTestCase { |
| 1481 void test_ampersand() { | 1481 void test_ampersand() { |
| 1482 assertToken(TokenType.AMPERSAND, "&"); | 1482 assertToken(TokenType.AMPERSAND, "&"); |
| 1483 } | 1483 } |
| 1484 void test_ampersand_ampersand() { | 1484 void test_ampersand_ampersand() { |
| 1485 assertToken(TokenType.AMPERSAND_AMPERSAND, "&&"); | 1485 assertToken(TokenType.AMPERSAND_AMPERSAND, "&&"); |
| 1486 } | 1486 } |
| 1487 void test_ampersand_eq() { | 1487 void test_ampersand_eq() { |
| 1488 assertToken(TokenType.AMPERSAND_EQ, "&="); | 1488 assertToken(TokenType.AMPERSAND_EQ, "&="); |
| 1489 } | 1489 } |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1857 assertToken(TokenType.SLASH_EQ, "/="); | 1857 assertToken(TokenType.SLASH_EQ, "/="); |
| 1858 } | 1858 } |
| 1859 void test_star() { | 1859 void test_star() { |
| 1860 assertToken(TokenType.STAR, "*"); | 1860 assertToken(TokenType.STAR, "*"); |
| 1861 } | 1861 } |
| 1862 void test_star_eq() { | 1862 void test_star_eq() { |
| 1863 assertToken(TokenType.STAR_EQ, "*="); | 1863 assertToken(TokenType.STAR_EQ, "*="); |
| 1864 } | 1864 } |
| 1865 void test_startAndEnd() { | 1865 void test_startAndEnd() { |
| 1866 Token token = scan2("a"); | 1866 Token token = scan2("a"); |
| 1867 Token previous3 = token.previous; | 1867 Token previous5 = token.previous; |
| 1868 JUnitTestCase.assertEquals(token, previous3.next); | 1868 JUnitTestCase.assertEquals(token, previous5.next); |
| 1869 JUnitTestCase.assertEquals(previous3, previous3.previous); | 1869 JUnitTestCase.assertEquals(previous5, previous5.previous); |
| 1870 Token next7 = token.next; | 1870 Token next7 = token.next; |
| 1871 JUnitTestCase.assertEquals(next7, next7.next); | 1871 JUnitTestCase.assertEquals(next7, next7.next); |
| 1872 JUnitTestCase.assertEquals(token, next7.previous); | 1872 JUnitTestCase.assertEquals(token, next7.previous); |
| 1873 } | 1873 } |
| 1874 void test_string_multi_double() { | 1874 void test_string_multi_double() { |
| 1875 assertToken(TokenType.STRING, "\"\"\"multi-line\nstring\"\"\""); | 1875 assertToken(TokenType.STRING, "\"\"\"multi-line\nstring\"\"\""); |
| 1876 } | 1876 } |
| 1877 void test_string_multi_interpolation_block() { | 1877 void test_string_multi_interpolation_block() { |
| 1878 assertTokens("\"Hello \${name}!\"", [new StringToken(TokenType.STRING, "\"He
llo ", 0), new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
new StringToken(TokenType.IDENTIFIER, "name", 9), new Token(TokenType.CLOSE_CUR
LY_BRACKET, 13), new StringToken(TokenType.STRING, "!\"", 14)]); | 1878 assertTokens("\"Hello \${name}!\"", [new StringToken(TokenType.STRING, "\"He
llo ", 0), new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
new StringToken(TokenType.IDENTIFIER, "name", 9), new Token(TokenType.CLOSE_CUR
LY_BRACKET, 13), new StringToken(TokenType.STRING, "!\"", 14)]); |
| 1879 } | 1879 } |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2054 listener.assertNoErrors(); | 2054 listener.assertNoErrors(); |
| 2055 return token; | 2055 return token; |
| 2056 } | 2056 } |
| 2057 } | 2057 } |
| 2058 main() { | 2058 main() { |
| 2059 CharBufferScannerTest.dartSuite(); | 2059 CharBufferScannerTest.dartSuite(); |
| 2060 KeywordStateTest.dartSuite(); | 2060 KeywordStateTest.dartSuite(); |
| 2061 StringScannerTest.dartSuite(); | 2061 StringScannerTest.dartSuite(); |
| 2062 TokenTypeTest.dartSuite(); | 2062 TokenTypeTest.dartSuite(); |
| 2063 } | 2063 } |
| OLD | NEW |