| OLD | NEW |
| 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 // This code was auto-generated, is not intended to be edited, and is subject to | 5 // This code was auto-generated, is not intended to be edited, and is subject to |
| 6 // significant change. Please see the README file for more information. | 6 // significant change. Please see the README file for more information. |
| 7 | 7 |
| 8 library engine.scanner_test; | 8 library engine.scanner_test; |
| 9 | 9 |
| 10 import 'package:analyzer/src/generated/java_core.dart'; | 10 import 'package:analyzer/src/generated/java_core.dart'; |
| 11 import 'package:analyzer/src/generated/java_junit.dart'; | 11 import 'package:analyzer/src/generated/java_junit.dart'; |
| 12 import 'package:analyzer/src/generated/source.dart'; | 12 import 'package:analyzer/src/generated/source.dart'; |
| 13 import 'package:analyzer/src/generated/error.dart'; | 13 import 'package:analyzer/src/generated/error.dart'; |
| 14 import 'package:analyzer/src/generated/scanner.dart'; | 14 import 'package:analyzer/src/generated/scanner.dart'; |
| 15 import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap; | 15 import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap; |
| 16 import 'package:unittest/unittest.dart' as _ut; | 16 import 'package:unittest/unittest.dart' as _ut; |
| 17 import 'test_support.dart'; | 17 import 'test_support.dart'; |
| 18 | 18 |
| 19 class KeywordStateTest extends JUnitTestCase { | 19 class KeywordStateTest extends JUnitTestCase { |
| 20 void test_KeywordState() { | 20 void test_KeywordState() { |
| 21 // |
| 22 // Generate the test data to be scanned. |
| 23 // |
| 21 List<Keyword> keywords = Keyword.values; | 24 List<Keyword> keywords = Keyword.values; |
| 22 int keywordCount = keywords.length; | 25 int keywordCount = keywords.length; |
| 23 List<String> textToTest = new List<String>(keywordCount * 3); | 26 List<String> textToTest = new List<String>(keywordCount * 3); |
| 24 for (int i = 0; i < keywordCount; i++) { | 27 for (int i = 0; i < keywordCount; i++) { |
| 25 String syntax = keywords[i].syntax; | 28 String syntax = keywords[i].syntax; |
| 26 textToTest[i] = syntax; | 29 textToTest[i] = syntax; |
| 27 textToTest[i + keywordCount] = "${syntax}x"; | 30 textToTest[i + keywordCount] = "${syntax}x"; |
| 28 textToTest[i + keywordCount * 2] = syntax.substring(0, syntax.length - 1); | 31 textToTest[i + keywordCount * 2] = syntax.substring(0, syntax.length - 1); |
| 29 } | 32 } |
| 33 // |
| 34 // Scan each of the identifiers. |
| 35 // |
| 30 KeywordState firstState = KeywordState.KEYWORD_STATE; | 36 KeywordState firstState = KeywordState.KEYWORD_STATE; |
| 31 for (int i = 0; i < textToTest.length; i++) { | 37 for (int i = 0; i < textToTest.length; i++) { |
| 32 String text = textToTest[i]; | 38 String text = textToTest[i]; |
| 33 int index = 0; | 39 int index = 0; |
| 34 int length = text.length; | 40 int length = text.length; |
| 35 KeywordState state = firstState; | 41 KeywordState state = firstState; |
| 36 while (index < length && state != null) { | 42 while (index < length && state != null) { |
| 37 state = state.next(text.codeUnitAt(index)); | 43 state = state.next(text.codeUnitAt(index)); |
| 38 index++; | 44 index++; |
| 39 } | 45 } |
| 40 if (i < keywordCount) { | 46 if (i < keywordCount) { |
| 47 // keyword |
| 41 JUnitTestCase.assertNotNull(state); | 48 JUnitTestCase.assertNotNull(state); |
| 42 JUnitTestCase.assertNotNull(state.keyword()); | 49 JUnitTestCase.assertNotNull(state.keyword()); |
| 43 JUnitTestCase.assertEquals(keywords[i], state.keyword()); | 50 JUnitTestCase.assertEquals(keywords[i], state.keyword()); |
| 44 } else if (i < keywordCount * 2) { | 51 } else if (i < keywordCount * 2) { |
| 52 // keyword + "x" |
| 45 JUnitTestCase.assertNull(state); | 53 JUnitTestCase.assertNull(state); |
| 46 } else { | 54 } else { |
| 55 // keyword.substring(0, keyword.length() - 1) |
| 47 JUnitTestCase.assertNotNull(state); | 56 JUnitTestCase.assertNotNull(state); |
| 48 } | 57 } |
| 49 } | 58 } |
| 50 } | 59 } |
| 51 | 60 |
| 52 static dartSuite() { | 61 static dartSuite() { |
| 53 _ut.group('KeywordStateTest', () { | 62 _ut.group('KeywordStateTest', () { |
| 54 _ut.test('test_KeywordState', () { | 63 _ut.test('test_KeywordState', () { |
| 55 final __test = new KeywordStateTest(); | 64 final __test = new KeywordStateTest(); |
| 56 runJUnitTest(__test, __test.test_KeywordState); | 65 runJUnitTest(__test, __test.test_KeywordState); |
| (...skipping 979 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 void test_tilde_slash_eq() { | 1045 void test_tilde_slash_eq() { |
| 1037 assertToken(TokenType.TILDE_SLASH_EQ, "~/="); | 1046 assertToken(TokenType.TILDE_SLASH_EQ, "~/="); |
| 1038 } | 1047 } |
| 1039 | 1048 |
| 1040 void test_unclosedPairInInterpolation() { | 1049 void test_unclosedPairInInterpolation() { |
| 1041 GatheringErrorListener listener = new GatheringErrorListener(); | 1050 GatheringErrorListener listener = new GatheringErrorListener(); |
| 1042 scan2("'\${(}'", listener); | 1051 scan2("'\${(}'", listener); |
| 1043 } | 1052 } |
| 1044 | 1053 |
| 1045 void assertComment(TokenType commentType, String source) { | 1054 void assertComment(TokenType commentType, String source) { |
| 1055 // |
| 1056 // Test without a trailing end-of-line marker |
| 1057 // |
| 1046 Token token = scan(source); | 1058 Token token = scan(source); |
| 1047 JUnitTestCase.assertNotNull(token); | 1059 JUnitTestCase.assertNotNull(token); |
| 1048 JUnitTestCase.assertEquals(TokenType.EOF, token.type); | 1060 JUnitTestCase.assertEquals(TokenType.EOF, token.type); |
| 1049 Token comment = token.precedingComments; | 1061 Token comment = token.precedingComments; |
| 1050 JUnitTestCase.assertNotNull(comment); | 1062 JUnitTestCase.assertNotNull(comment); |
| 1051 JUnitTestCase.assertEquals(commentType, comment.type); | 1063 JUnitTestCase.assertEquals(commentType, comment.type); |
| 1052 JUnitTestCase.assertEquals(0, comment.offset); | 1064 JUnitTestCase.assertEquals(0, comment.offset); |
| 1053 JUnitTestCase.assertEquals(source.length, comment.length); | 1065 JUnitTestCase.assertEquals(source.length, comment.length); |
| 1054 JUnitTestCase.assertEquals(source, comment.lexeme); | 1066 JUnitTestCase.assertEquals(source, comment.lexeme); |
| 1067 // |
| 1068 // Test with a trailing end-of-line marker |
| 1069 // |
| 1055 token = scan("${source}\n"); | 1070 token = scan("${source}\n"); |
| 1056 JUnitTestCase.assertNotNull(token); | 1071 JUnitTestCase.assertNotNull(token); |
| 1057 JUnitTestCase.assertEquals(TokenType.EOF, token.type); | 1072 JUnitTestCase.assertEquals(TokenType.EOF, token.type); |
| 1058 comment = token.precedingComments; | 1073 comment = token.precedingComments; |
| 1059 JUnitTestCase.assertNotNull(comment); | 1074 JUnitTestCase.assertNotNull(comment); |
| 1060 JUnitTestCase.assertEquals(commentType, comment.type); | 1075 JUnitTestCase.assertEquals(commentType, comment.type); |
| 1061 JUnitTestCase.assertEquals(0, comment.offset); | 1076 JUnitTestCase.assertEquals(0, comment.offset); |
| 1062 JUnitTestCase.assertEquals(source.length, comment.length); | 1077 JUnitTestCase.assertEquals(source.length, comment.length); |
| 1063 JUnitTestCase.assertEquals(source, comment.lexeme); | 1078 JUnitTestCase.assertEquals(source, comment.lexeme); |
| 1064 } | 1079 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1124 * @param source the source to be scanned to produce the actual token | 1139 * @param source the source to be scanned to produce the actual token |
| 1125 */ | 1140 */ |
| 1126 Token assertToken(TokenType expectedType, String source) { | 1141 Token assertToken(TokenType expectedType, String source) { |
| 1127 Token originalToken = scan(source); | 1142 Token originalToken = scan(source); |
| 1128 JUnitTestCase.assertNotNull(originalToken); | 1143 JUnitTestCase.assertNotNull(originalToken); |
| 1129 JUnitTestCase.assertEquals(expectedType, originalToken.type); | 1144 JUnitTestCase.assertEquals(expectedType, originalToken.type); |
| 1130 JUnitTestCase.assertEquals(0, originalToken.offset); | 1145 JUnitTestCase.assertEquals(0, originalToken.offset); |
| 1131 JUnitTestCase.assertEquals(source.length, originalToken.length); | 1146 JUnitTestCase.assertEquals(source.length, originalToken.length); |
| 1132 JUnitTestCase.assertEquals(source, originalToken.lexeme); | 1147 JUnitTestCase.assertEquals(source, originalToken.lexeme); |
| 1133 if (identical(expectedType, TokenType.SCRIPT_TAG)) { | 1148 if (identical(expectedType, TokenType.SCRIPT_TAG)) { |
| 1149 // Adding space before the script tag is not allowed, and adding text at t
he end changes nothing. |
| 1134 return originalToken; | 1150 return originalToken; |
| 1135 } else if (identical(expectedType, TokenType.SINGLE_LINE_COMMENT)) { | 1151 } else if (identical(expectedType, TokenType.SINGLE_LINE_COMMENT)) { |
| 1152 // Adding space to an end-of-line comment changes the comment. |
| 1136 Token tokenWithSpaces = scan(" ${source}"); | 1153 Token tokenWithSpaces = scan(" ${source}"); |
| 1137 JUnitTestCase.assertNotNull(tokenWithSpaces); | 1154 JUnitTestCase.assertNotNull(tokenWithSpaces); |
| 1138 JUnitTestCase.assertEquals(expectedType, tokenWithSpaces.type); | 1155 JUnitTestCase.assertEquals(expectedType, tokenWithSpaces.type); |
| 1139 JUnitTestCase.assertEquals(1, tokenWithSpaces.offset); | 1156 JUnitTestCase.assertEquals(1, tokenWithSpaces.offset); |
| 1140 JUnitTestCase.assertEquals(source.length, tokenWithSpaces.length); | 1157 JUnitTestCase.assertEquals(source.length, tokenWithSpaces.length); |
| 1141 JUnitTestCase.assertEquals(source, tokenWithSpaces.lexeme); | 1158 JUnitTestCase.assertEquals(source, tokenWithSpaces.lexeme); |
| 1142 return originalToken; | 1159 return originalToken; |
| 1143 } else if (identical(expectedType, TokenType.INT) || identical(expectedType,
TokenType.DOUBLE)) { | 1160 } else if (identical(expectedType, TokenType.INT) || identical(expectedType,
TokenType.DOUBLE)) { |
| 1144 Token tokenWithLowerD = scan("${source}d"); | 1161 Token tokenWithLowerD = scan("${source}d"); |
| 1145 JUnitTestCase.assertNotNull(tokenWithLowerD); | 1162 JUnitTestCase.assertNotNull(tokenWithLowerD); |
| (...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1889 */ | 1906 */ |
| 1890 IncrementalScanner _incrementalScanner; | 1907 IncrementalScanner _incrementalScanner; |
| 1891 | 1908 |
| 1892 /** | 1909 /** |
| 1893 * The first token from the token stream resulting from performing an incremen
tal scan, or | 1910 * The first token from the token stream resulting from performing an incremen
tal scan, or |
| 1894 * `null` if [scan] has not been invoked. | 1911 * `null` if [scan] has not been invoked. |
| 1895 */ | 1912 */ |
| 1896 Token _incrementalTokens; | 1913 Token _incrementalTokens; |
| 1897 | 1914 |
| 1898 void test_delete_identifier_beginning() { | 1915 void test_delete_identifier_beginning() { |
| 1916 // "abs + b;" |
| 1917 // "s + b;") |
| 1899 scan("", "ab", "", "s + b;"); | 1918 scan("", "ab", "", "s + b;"); |
| 1900 assertTokens(-1, 1, ["s", "+", "b", ";"]); | 1919 assertTokens(-1, 1, ["s", "+", "b", ";"]); |
| 1901 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1920 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1902 } | 1921 } |
| 1903 | 1922 |
| 1904 void test_delete_identifier_end() { | 1923 void test_delete_identifier_end() { |
| 1924 // "abs + b;" |
| 1925 // "a + b;") |
| 1905 scan("a", "bs", "", " + b;"); | 1926 scan("a", "bs", "", " + b;"); |
| 1906 assertTokens(-1, 1, ["a", "+", "b", ";"]); | 1927 assertTokens(-1, 1, ["a", "+", "b", ";"]); |
| 1907 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1928 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1908 } | 1929 } |
| 1909 | 1930 |
| 1910 void test_delete_identifier_middle() { | 1931 void test_delete_identifier_middle() { |
| 1932 // "abs + b;" |
| 1933 // "as + b;") |
| 1911 scan("a", "b", "", "s + b;"); | 1934 scan("a", "b", "", "s + b;"); |
| 1912 assertTokens(-1, 1, ["as", "+", "b", ";"]); | 1935 assertTokens(-1, 1, ["as", "+", "b", ";"]); |
| 1913 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1936 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1914 } | 1937 } |
| 1915 | 1938 |
| 1916 void test_delete_mergeTokens() { | 1939 void test_delete_mergeTokens() { |
| 1940 // "a + b + c;" |
| 1941 // "ac;") |
| 1917 scan("a", " + b + ", "", "c;"); | 1942 scan("a", " + b + ", "", "c;"); |
| 1918 assertTokens(-1, 1, ["ac", ";"]); | 1943 assertTokens(-1, 1, ["ac", ";"]); |
| 1919 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1944 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1920 } | 1945 } |
| 1921 | 1946 |
| 1922 void test_insert_afterIdentifier1() { | 1947 void test_insert_afterIdentifier1() { |
| 1948 // "a + b;" |
| 1949 // "abs + b;" |
| 1923 scan("a", "", "bs", " + b;"); | 1950 scan("a", "", "bs", " + b;"); |
| 1924 assertTokens(-1, 1, ["abs", "+", "b", ";"]); | 1951 assertTokens(-1, 1, ["abs", "+", "b", ";"]); |
| 1925 assertReplaced(1, "+"); | 1952 assertReplaced(1, "+"); |
| 1926 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1953 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1927 } | 1954 } |
| 1928 | 1955 |
| 1929 void test_insert_afterIdentifier2() { | 1956 void test_insert_afterIdentifier2() { |
| 1957 // "a + b;" |
| 1958 // "a + by;" |
| 1930 scan("a + b", "", "y", ";"); | 1959 scan("a + b", "", "y", ";"); |
| 1931 assertTokens(1, 3, ["a", "+", "by", ";"]); | 1960 assertTokens(1, 3, ["a", "+", "by", ";"]); |
| 1932 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1961 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1933 } | 1962 } |
| 1934 | 1963 |
| 1935 void test_insert_beforeIdentifier() { | 1964 void test_insert_beforeIdentifier() { |
| 1965 // "a + b;" |
| 1966 // "a + xb;") |
| 1936 scan("a + ", "", "x", "b;"); | 1967 scan("a + ", "", "x", "b;"); |
| 1937 assertTokens(1, 3, ["a", "+", "xb", ";"]); | 1968 assertTokens(1, 3, ["a", "+", "xb", ";"]); |
| 1938 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1969 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1939 } | 1970 } |
| 1940 | 1971 |
| 1941 void test_insert_beforeIdentifier_firstToken() { | 1972 void test_insert_beforeIdentifier_firstToken() { |
| 1973 // "a + b;" |
| 1974 // "xa + b;" |
| 1942 scan("", "", "x", "a + b;"); | 1975 scan("", "", "x", "a + b;"); |
| 1943 assertTokens(-1, 1, ["xa", "+", "b", ";"]); | 1976 assertTokens(-1, 1, ["xa", "+", "b", ";"]); |
| 1944 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1977 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1945 } | 1978 } |
| 1946 | 1979 |
| 1947 void test_insert_convertOneFunctionToTwo() { | 1980 void test_insert_convertOneFunctionToTwo() { |
| 1981 // "f() {}" |
| 1982 // "f() => 0; g() {}" |
| 1948 scan("f()", "", " => 0; g()", " {}"); | 1983 scan("f()", "", " => 0; g()", " {}"); |
| 1949 assertTokens(2, 9, ["f", "(", ")", "=>", "0", ";", "g", "(", ")", "{", "}"])
; | 1984 assertTokens(2, 9, ["f", "(", ")", "=>", "0", ";", "g", "(", ")", "{", "}"])
; |
| 1950 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1985 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1951 } | 1986 } |
| 1952 | 1987 |
| 1953 void test_insert_end() { | 1988 void test_insert_end() { |
| 1989 // "class A {}" |
| 1990 // "class A {} class B {}" |
| 1954 scan("class A {}", "", " class B {}", ""); | 1991 scan("class A {}", "", " class B {}", ""); |
| 1955 assertTokens(3, 8, ["class", "A", "{", "}", "class", "B", "{", "}"]); | 1992 assertTokens(3, 8, ["class", "A", "{", "}", "class", "B", "{", "}"]); |
| 1956 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 1993 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1957 } | 1994 } |
| 1958 | 1995 |
| 1959 void test_insert_insideIdentifier() { | 1996 void test_insert_insideIdentifier() { |
| 1997 // "cob;" |
| 1998 // "cow.b;" |
| 1960 scan("co", "", "w.", "b;"); | 1999 scan("co", "", "w.", "b;"); |
| 1961 assertTokens(-1, 3, ["cow", ".", "b", ";"]); | 2000 assertTokens(-1, 3, ["cow", ".", "b", ";"]); |
| 1962 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2001 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1963 } | 2002 } |
| 1964 | 2003 |
| 1965 void test_insert_newIdentifier1() { | 2004 void test_insert_newIdentifier1() { |
| 2005 // "a; c;" |
| 2006 // "a; b c;" |
| 1966 scan("a; ", "", "b", " c;"); | 2007 scan("a; ", "", "b", " c;"); |
| 1967 assertTokens(1, 3, ["a", ";", "b", "c", ";"]); | 2008 assertTokens(1, 3, ["a", ";", "b", "c", ";"]); |
| 1968 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2009 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1969 } | 2010 } |
| 1970 | 2011 |
| 1971 void test_insert_newIdentifier2() { | 2012 void test_insert_newIdentifier2() { |
| 2013 // "a; c;" |
| 2014 // "a;b c;" |
| 1972 scan("a;", "", "b", " c;"); | 2015 scan("a;", "", "b", " c;"); |
| 1973 assertTokens(1, 3, ["a", ";", "b", "c", ";"]); | 2016 assertTokens(1, 3, ["a", ";", "b", "c", ";"]); |
| 1974 assertReplaced(1, ";"); | 2017 assertReplaced(1, ";"); |
| 1975 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2018 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1976 } | 2019 } |
| 1977 | 2020 |
| 1978 void test_insert_period() { | 2021 void test_insert_period() { |
| 2022 // "a + b;" |
| 2023 // "a + b.;" |
| 1979 scan("a + b", "", ".", ";"); | 2024 scan("a + b", "", ".", ";"); |
| 1980 assertTokens(2, 4, ["a", "+", "b", ".", ";"]); | 2025 assertTokens(2, 4, ["a", "+", "b", ".", ";"]); |
| 1981 } | 2026 } |
| 1982 | 2027 |
| 1983 void test_insert_period_betweenIdentifiers1() { | 2028 void test_insert_period_betweenIdentifiers1() { |
| 2029 // "a b;" |
| 2030 // "a. b;" |
| 1984 scan("a", "", ".", " b;"); | 2031 scan("a", "", ".", " b;"); |
| 1985 assertTokens(0, 2, ["a", ".", "b", ";"]); | 2032 assertTokens(0, 2, ["a", ".", "b", ";"]); |
| 1986 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2033 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1987 } | 2034 } |
| 1988 | 2035 |
| 1989 void test_insert_period_betweenIdentifiers2() { | 2036 void test_insert_period_betweenIdentifiers2() { |
| 2037 // "a b;" |
| 2038 // "a .b;" |
| 1990 scan("a ", "", ".", "b;"); | 2039 scan("a ", "", ".", "b;"); |
| 1991 assertTokens(0, 2, ["a", ".", "b", ";"]); | 2040 assertTokens(0, 2, ["a", ".", "b", ";"]); |
| 1992 } | 2041 } |
| 1993 | 2042 |
| 1994 void test_insert_period_betweenIdentifiers3() { | 2043 void test_insert_period_betweenIdentifiers3() { |
| 2044 // "a b;" |
| 2045 // "a . b;" |
| 1995 scan("a ", "", ".", " b;"); | 2046 scan("a ", "", ".", " b;"); |
| 1996 assertTokens(0, 2, ["a", ".", "b", ";"]); | 2047 assertTokens(0, 2, ["a", ".", "b", ";"]); |
| 1997 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2048 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 1998 } | 2049 } |
| 1999 | 2050 |
| 2000 void test_insert_period_insideExistingIdentifier() { | 2051 void test_insert_period_insideExistingIdentifier() { |
| 2052 // "ab;" |
| 2053 // "a.b;" |
| 2001 scan("a", "", ".", "b;"); | 2054 scan("a", "", ".", "b;"); |
| 2002 assertTokens(-1, 3, ["a", ".", "b", ";"]); | 2055 assertTokens(-1, 3, ["a", ".", "b", ";"]); |
| 2003 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2056 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 2004 } | 2057 } |
| 2005 | 2058 |
| 2006 void test_insert_periodAndIdentifier() { | 2059 void test_insert_periodAndIdentifier() { |
| 2060 // "a + b;" |
| 2061 // "a + b.x;" |
| 2007 scan("a + b", "", ".x", ";"); | 2062 scan("a + b", "", ".x", ";"); |
| 2008 assertTokens(2, 5, ["a", "+", "b", ".", "x", ";"]); | 2063 assertTokens(2, 5, ["a", "+", "b", ".", "x", ";"]); |
| 2009 } | 2064 } |
| 2010 | 2065 |
| 2011 void test_insert_whitespace_beginning_beforeToken() { | 2066 void test_insert_whitespace_beginning_beforeToken() { |
| 2067 // "a + b;" |
| 2068 // " a + b;" |
| 2012 scan("", "", " ", "a + b;"); | 2069 scan("", "", " ", "a + b;"); |
| 2013 assertTokens(0, 1, ["a", "+", "b", ";"]); | 2070 assertTokens(0, 1, ["a", "+", "b", ";"]); |
| 2014 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); | 2071 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); |
| 2015 } | 2072 } |
| 2016 | 2073 |
| 2017 void test_insert_whitespace_betweenTokens() { | 2074 void test_insert_whitespace_betweenTokens() { |
| 2075 // "a + b;" |
| 2076 // "a + b;" |
| 2018 scan("a ", "", " ", "+ b;"); | 2077 scan("a ", "", " ", "+ b;"); |
| 2019 assertTokens(1, 2, ["a", "+", "b", ";"]); | 2078 assertTokens(1, 2, ["a", "+", "b", ";"]); |
| 2020 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); | 2079 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); |
| 2021 } | 2080 } |
| 2022 | 2081 |
| 2023 void test_insert_whitespace_end_afterToken() { | 2082 void test_insert_whitespace_end_afterToken() { |
| 2083 // "a + b;" |
| 2084 // "a + b; " |
| 2024 scan("a + b;", "", " ", ""); | 2085 scan("a + b;", "", " ", ""); |
| 2025 assertTokens(3, 4, ["a", "+", "b", ";"]); | 2086 assertTokens(3, 4, ["a", "+", "b", ";"]); |
| 2026 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); | 2087 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); |
| 2027 } | 2088 } |
| 2028 | 2089 |
| 2029 void test_insert_whitespace_end_afterWhitespace() { | 2090 void test_insert_whitespace_end_afterWhitespace() { |
| 2091 // "a + b; " |
| 2092 // "a + b; " |
| 2030 scan("a + b; ", "", " ", ""); | 2093 scan("a + b; ", "", " ", ""); |
| 2031 assertTokens(3, 4, ["a", "+", "b", ";"]); | 2094 assertTokens(3, 4, ["a", "+", "b", ";"]); |
| 2032 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); | 2095 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); |
| 2033 } | 2096 } |
| 2034 | 2097 |
| 2035 void test_insert_whitespace_withMultipleComments() { | 2098 void test_insert_whitespace_withMultipleComments() { |
| 2099 // "//comment", "//comment2", "a + b;" |
| 2100 // "//comment", "//comment2", "a + b;" |
| 2036 scan(EngineTestCase.createSource(["//comment", "//comment2", "a"]), "", " ",
" + b;"); | 2101 scan(EngineTestCase.createSource(["//comment", "//comment2", "a"]), "", " ",
" + b;"); |
| 2037 assertTokens(1, 2, ["a", "+", "b", ";"]); | 2102 assertTokens(1, 2, ["a", "+", "b", ";"]); |
| 2038 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); | 2103 JUnitTestCase.assertFalse(_incrementalScanner.hasNonWhitespaceChange()); |
| 2039 } | 2104 } |
| 2040 | 2105 |
| 2041 void test_replace_identifier_beginning() { | 2106 void test_replace_identifier_beginning() { |
| 2107 // "bell + b;" |
| 2108 // "fell + b;") |
| 2042 scan("", "b", "f", "ell + b;"); | 2109 scan("", "b", "f", "ell + b;"); |
| 2043 assertTokens(-1, 1, ["fell", "+", "b", ";"]); | 2110 assertTokens(-1, 1, ["fell", "+", "b", ";"]); |
| 2044 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2111 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 2045 } | 2112 } |
| 2046 | 2113 |
| 2047 void test_replace_identifier_end() { | 2114 void test_replace_identifier_end() { |
| 2115 // "bell + b;" |
| 2116 // "belt + b;") |
| 2048 scan("bel", "l", "t", " + b;"); | 2117 scan("bel", "l", "t", " + b;"); |
| 2049 assertTokens(-1, 1, ["belt", "+", "b", ";"]); | 2118 assertTokens(-1, 1, ["belt", "+", "b", ";"]); |
| 2050 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2119 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 2051 } | 2120 } |
| 2052 | 2121 |
| 2053 void test_replace_identifier_middle() { | 2122 void test_replace_identifier_middle() { |
| 2123 // "first + b;" |
| 2124 // "frost + b;") |
| 2054 scan("f", "ir", "ro", "st + b;"); | 2125 scan("f", "ir", "ro", "st + b;"); |
| 2055 assertTokens(-1, 1, ["frost", "+", "b", ";"]); | 2126 assertTokens(-1, 1, ["frost", "+", "b", ";"]); |
| 2056 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2127 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 2057 } | 2128 } |
| 2058 | 2129 |
| 2059 void test_replace_multiple_partialFirstAndLast() { | 2130 void test_replace_multiple_partialFirstAndLast() { |
| 2131 // "aa + bb;" |
| 2132 // "ab * ab;") |
| 2060 scan("a", "a + b", "b * a", "b;"); | 2133 scan("a", "a + b", "b * a", "b;"); |
| 2061 assertTokens(-1, 3, ["ab", "*", "ab", ";"]); | 2134 assertTokens(-1, 3, ["ab", "*", "ab", ";"]); |
| 2062 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2135 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 2063 } | 2136 } |
| 2064 | 2137 |
| 2065 void test_replace_operator_oneForMany() { | 2138 void test_replace_operator_oneForMany() { |
| 2139 // "a + b;" |
| 2140 // "a * c - b;") |
| 2066 scan("a ", "+", "* c -", " b;"); | 2141 scan("a ", "+", "* c -", " b;"); |
| 2067 assertTokens(0, 4, ["a", "*", "c", "-", "b", ";"]); | 2142 assertTokens(0, 4, ["a", "*", "c", "-", "b", ";"]); |
| 2068 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2143 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 2069 } | 2144 } |
| 2070 | 2145 |
| 2071 void test_replace_operator_oneForOne() { | 2146 void test_replace_operator_oneForOne() { |
| 2147 // "a + b;" |
| 2148 // "a * b;") |
| 2072 scan("a ", "+", "*", " b;"); | 2149 scan("a ", "+", "*", " b;"); |
| 2073 assertTokens(0, 2, ["a", "*", "b", ";"]); | 2150 assertTokens(0, 2, ["a", "*", "b", ";"]); |
| 2074 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); | 2151 JUnitTestCase.assertTrue(_incrementalScanner.hasNonWhitespaceChange()); |
| 2075 } | 2152 } |
| 2076 | 2153 |
| 2077 void test_tokenMap() { | 2154 void test_tokenMap() { |
| 2155 // "main() {a + b;}" |
| 2156 // "main() { a + b;}" |
| 2078 scan("main() {", "", " ", "a + b;}"); | 2157 scan("main() {", "", " ", "a + b;}"); |
| 2079 TokenMap tokenMap = _incrementalScanner.tokenMap; | 2158 TokenMap tokenMap = _incrementalScanner.tokenMap; |
| 2080 Token oldToken = _originalTokens; | 2159 Token oldToken = _originalTokens; |
| 2081 while (oldToken.type != TokenType.EOF) { | 2160 while (oldToken.type != TokenType.EOF) { |
| 2082 Token newToken = tokenMap.get(oldToken); | 2161 Token newToken = tokenMap.get(oldToken); |
| 2083 JUnitTestCase.assertNotSame(oldToken, newToken); | 2162 JUnitTestCase.assertNotSame(oldToken, newToken); |
| 2084 JUnitTestCase.assertSame(oldToken.type, newToken.type); | 2163 JUnitTestCase.assertSame(oldToken.type, newToken.type); |
| 2085 JUnitTestCase.assertEquals(oldToken.lexeme, newToken.lexeme); | 2164 JUnitTestCase.assertEquals(oldToken.lexeme, newToken.lexeme); |
| 2086 oldToken = oldToken.next; | 2165 oldToken = oldToken.next; |
| 2087 } | 2166 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2153 * Given a description of the original and modified contents, perform an incre
mental scan of the | 2232 * Given a description of the original and modified contents, perform an incre
mental scan of the |
| 2154 * two pieces of text. Verify that the incremental scan produced the same toke
ns as those that | 2233 * two pieces of text. Verify that the incremental scan produced the same toke
ns as those that |
| 2155 * would be produced by a full scan of the new contents. | 2234 * would be produced by a full scan of the new contents. |
| 2156 * | 2235 * |
| 2157 * @param prefix the unchanged text before the edit region | 2236 * @param prefix the unchanged text before the edit region |
| 2158 * @param removed the text that was removed from the original contents | 2237 * @param removed the text that was removed from the original contents |
| 2159 * @param added the text that was added to the modified contents | 2238 * @param added the text that was added to the modified contents |
| 2160 * @param suffix the unchanged text after the edit region | 2239 * @param suffix the unchanged text after the edit region |
| 2161 */ | 2240 */ |
| 2162 void scan(String prefix, String removed, String added, String suffix) { | 2241 void scan(String prefix, String removed, String added, String suffix) { |
| 2242 // |
| 2243 // Compute the information needed to perform the test. |
| 2244 // |
| 2163 String originalContents = "${prefix}${removed}${suffix}"; | 2245 String originalContents = "${prefix}${removed}${suffix}"; |
| 2164 String modifiedContents = "${prefix}${added}${suffix}"; | 2246 String modifiedContents = "${prefix}${added}${suffix}"; |
| 2165 int replaceStart = prefix.length; | 2247 int replaceStart = prefix.length; |
| 2166 Source source = new TestSource(); | 2248 Source source = new TestSource(); |
| 2249 // |
| 2250 // Scan the original contents. |
| 2251 // |
| 2167 GatheringErrorListener originalListener = new GatheringErrorListener(); | 2252 GatheringErrorListener originalListener = new GatheringErrorListener(); |
| 2168 Scanner originalScanner = new Scanner(source, new CharSequenceReader(new Cha
rSequence(originalContents)), originalListener); | 2253 Scanner originalScanner = new Scanner(source, new CharSequenceReader(new Cha
rSequence(originalContents)), originalListener); |
| 2169 _originalTokens = originalScanner.tokenize(); | 2254 _originalTokens = originalScanner.tokenize(); |
| 2170 JUnitTestCase.assertNotNull(_originalTokens); | 2255 JUnitTestCase.assertNotNull(_originalTokens); |
| 2256 // |
| 2257 // Scan the modified contents. |
| 2258 // |
| 2171 GatheringErrorListener modifiedListener = new GatheringErrorListener(); | 2259 GatheringErrorListener modifiedListener = new GatheringErrorListener(); |
| 2172 Scanner modifiedScanner = new Scanner(source, new CharSequenceReader(new Cha
rSequence(modifiedContents)), modifiedListener); | 2260 Scanner modifiedScanner = new Scanner(source, new CharSequenceReader(new Cha
rSequence(modifiedContents)), modifiedListener); |
| 2173 Token modifiedTokens = modifiedScanner.tokenize(); | 2261 Token modifiedTokens = modifiedScanner.tokenize(); |
| 2174 JUnitTestCase.assertNotNull(modifiedTokens); | 2262 JUnitTestCase.assertNotNull(modifiedTokens); |
| 2263 // |
| 2264 // Incrementally scan the modified contents. |
| 2265 // |
| 2175 GatheringErrorListener incrementalListener = new GatheringErrorListener(); | 2266 GatheringErrorListener incrementalListener = new GatheringErrorListener(); |
| 2176 _incrementalScanner = new IncrementalScanner(source, new CharSequenceReader(
new CharSequence(modifiedContents)), incrementalListener); | 2267 _incrementalScanner = new IncrementalScanner(source, new CharSequenceReader(
new CharSequence(modifiedContents)), incrementalListener); |
| 2177 _incrementalTokens = _incrementalScanner.rescan(_originalTokens, replaceStar
t, removed.length, added.length); | 2268 _incrementalTokens = _incrementalScanner.rescan(_originalTokens, replaceStar
t, removed.length, added.length); |
| 2269 // |
| 2270 // Validate that the results of the incremental scan are the same as the ful
l scan of the |
| 2271 // modified source. |
| 2272 // |
| 2178 Token incrementalToken = _incrementalTokens; | 2273 Token incrementalToken = _incrementalTokens; |
| 2179 JUnitTestCase.assertNotNull(incrementalToken); | 2274 JUnitTestCase.assertNotNull(incrementalToken); |
| 2180 while (incrementalToken.type != TokenType.EOF && modifiedTokens.type != Toke
nType.EOF) { | 2275 while (incrementalToken.type != TokenType.EOF && modifiedTokens.type != Toke
nType.EOF) { |
| 2181 JUnitTestCase.assertSameMsg("Wrong type for token", modifiedTokens.type, i
ncrementalToken.type); | 2276 JUnitTestCase.assertSameMsg("Wrong type for token", modifiedTokens.type, i
ncrementalToken.type); |
| 2182 JUnitTestCase.assertEqualsMsg("Wrong offset for token", modifiedTokens.off
set, incrementalToken.offset); | 2277 JUnitTestCase.assertEqualsMsg("Wrong offset for token", modifiedTokens.off
set, incrementalToken.offset); |
| 2183 JUnitTestCase.assertEqualsMsg("Wrong length for token", modifiedTokens.len
gth, incrementalToken.length); | 2278 JUnitTestCase.assertEqualsMsg("Wrong length for token", modifiedTokens.len
gth, incrementalToken.length); |
| 2184 JUnitTestCase.assertEqualsMsg("Wrong lexeme for token", modifiedTokens.lex
eme, incrementalToken.lexeme); | 2279 JUnitTestCase.assertEqualsMsg("Wrong lexeme for token", modifiedTokens.lex
eme, incrementalToken.lexeme); |
| 2185 incrementalToken = incrementalToken.next; | 2280 incrementalToken = incrementalToken.next; |
| 2186 modifiedTokens = modifiedTokens.next; | 2281 modifiedTokens = modifiedTokens.next; |
| 2187 } | 2282 } |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2319 } | 2414 } |
| 2320 } | 2415 } |
| 2321 | 2416 |
| 2322 main() { | 2417 main() { |
| 2323 CharSequenceReaderTest.dartSuite(); | 2418 CharSequenceReaderTest.dartSuite(); |
| 2324 IncrementalScannerTest.dartSuite(); | 2419 IncrementalScannerTest.dartSuite(); |
| 2325 KeywordStateTest.dartSuite(); | 2420 KeywordStateTest.dartSuite(); |
| 2326 ScannerTest.dartSuite(); | 2421 ScannerTest.dartSuite(); |
| 2327 TokenTypeTest.dartSuite(); | 2422 TokenTypeTest.dartSuite(); |
| 2328 } | 2423 } |
| OLD | NEW |