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

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

Issue 137863002: Issue 8742. Preserve leading line comments during java2dart translation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Test for block-style comment translation. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // 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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/generated/resolver_test.dart ('k') | pkg/analyzer/test/generated/test_support.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698