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

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

Issue 68233003: New analyzer snapshot. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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 // 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 library engine.scanner_test; 4 library engine.scanner_test;
5
4 import 'package:analyzer/src/generated/java_core.dart'; 6 import 'package:analyzer/src/generated/java_core.dart';
5 import 'package:analyzer/src/generated/java_junit.dart'; 7 import 'package:analyzer/src/generated/java_junit.dart';
6 import 'package:analyzer/src/generated/source.dart'; 8 import 'package:analyzer/src/generated/source.dart';
7 import 'package:analyzer/src/generated/error.dart'; 9 import 'package:analyzer/src/generated/error.dart';
8 import 'package:analyzer/src/generated/scanner.dart'; 10 import 'package:analyzer/src/generated/scanner.dart';
9 import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap; 11 import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap;
10 import 'package:unittest/unittest.dart' as _ut; 12 import 'package:unittest/unittest.dart' as _ut;
11 import 'test_support.dart'; 13 import 'test_support.dart';
14
12 class KeywordStateTest extends JUnitTestCase { 15 class KeywordStateTest extends JUnitTestCase {
13 void test_KeywordState() { 16 void test_KeywordState() {
14 List<Keyword> keywords = Keyword.values; 17 List<Keyword> keywords = Keyword.values;
15 int keywordCount = keywords.length; 18 int keywordCount = keywords.length;
16 List<String> textToTest = new List<String>(keywordCount * 3); 19 List<String> textToTest = new List<String>(keywordCount * 3);
17 for (int i = 0; i < keywordCount; i++) { 20 for (int i = 0; i < keywordCount; i++) {
18 String syntax = keywords[i].syntax; 21 String syntax = keywords[i].syntax;
19 textToTest[i] = syntax; 22 textToTest[i] = syntax;
20 textToTest[i + keywordCount] = "${syntax}x"; 23 textToTest[i + keywordCount] = "${syntax}x";
21 textToTest[i + keywordCount * 2] = syntax.substring(0, syntax.length - 1); 24 textToTest[i + keywordCount * 2] = syntax.substring(0, syntax.length - 1);
(...skipping 12 matching lines...) Expand all
34 JUnitTestCase.assertNotNull(state); 37 JUnitTestCase.assertNotNull(state);
35 JUnitTestCase.assertNotNull(state.keyword()); 38 JUnitTestCase.assertNotNull(state.keyword());
36 JUnitTestCase.assertEquals(keywords[i], state.keyword()); 39 JUnitTestCase.assertEquals(keywords[i], state.keyword());
37 } else if (i < keywordCount * 2) { 40 } else if (i < keywordCount * 2) {
38 JUnitTestCase.assertNull(state); 41 JUnitTestCase.assertNull(state);
39 } else { 42 } else {
40 JUnitTestCase.assertNotNull(state); 43 JUnitTestCase.assertNotNull(state);
41 } 44 }
42 } 45 }
43 } 46 }
47
44 static dartSuite() { 48 static dartSuite() {
45 _ut.group('KeywordStateTest', () { 49 _ut.group('KeywordStateTest', () {
46 _ut.test('test_KeywordState', () { 50 _ut.test('test_KeywordState', () {
47 final __test = new KeywordStateTest(); 51 final __test = new KeywordStateTest();
48 runJUnitTest(__test, __test.test_KeywordState); 52 runJUnitTest(__test, __test.test_KeywordState);
49 }); 53 });
50 }); 54 });
51 } 55 }
52 } 56 }
57
53 class CharSequenceReaderTest extends JUnitTestCase { 58 class CharSequenceReaderTest extends JUnitTestCase {
54 void test_advance() { 59 void test_advance() {
55 CharSequenceReader reader = new CharSequenceReader(new CharSequence("x")); 60 CharSequenceReader reader = new CharSequenceReader(new CharSequence("x"));
56 JUnitTestCase.assertEquals(0x78, reader.advance()); 61 JUnitTestCase.assertEquals(0x78, reader.advance());
57 JUnitTestCase.assertEquals(-1, reader.advance()); 62 JUnitTestCase.assertEquals(-1, reader.advance());
58 JUnitTestCase.assertEquals(-1, reader.advance()); 63 JUnitTestCase.assertEquals(-1, reader.advance());
59 } 64 }
65
60 void test_creation() { 66 void test_creation() {
61 JUnitTestCase.assertNotNull(new CharSequenceReader(new CharSequence("x"))); 67 JUnitTestCase.assertNotNull(new CharSequenceReader(new CharSequence("x")));
62 } 68 }
69
63 void test_getOffset() { 70 void test_getOffset() {
64 CharSequenceReader reader = new CharSequenceReader(new CharSequence("x")); 71 CharSequenceReader reader = new CharSequenceReader(new CharSequence("x"));
65 JUnitTestCase.assertEquals(-1, reader.offset); 72 JUnitTestCase.assertEquals(-1, reader.offset);
66 reader.advance(); 73 reader.advance();
67 JUnitTestCase.assertEquals(0, reader.offset); 74 JUnitTestCase.assertEquals(0, reader.offset);
68 reader.advance(); 75 reader.advance();
69 JUnitTestCase.assertEquals(0, reader.offset); 76 JUnitTestCase.assertEquals(0, reader.offset);
70 } 77 }
78
71 void test_getString() { 79 void test_getString() {
72 CharSequenceReader reader = new CharSequenceReader(new CharSequence("xyzzy") ); 80 CharSequenceReader reader = new CharSequenceReader(new CharSequence("xyzzy") );
73 reader.offset = 3; 81 reader.offset = 3;
74 JUnitTestCase.assertEquals("yzz", reader.getString(1, 0)); 82 JUnitTestCase.assertEquals("yzz", reader.getString(1, 0));
75 JUnitTestCase.assertEquals("zzy", reader.getString(2, 1)); 83 JUnitTestCase.assertEquals("zzy", reader.getString(2, 1));
76 } 84 }
85
77 void test_peek() { 86 void test_peek() {
78 CharSequenceReader reader = new CharSequenceReader(new CharSequence("xy")); 87 CharSequenceReader reader = new CharSequenceReader(new CharSequence("xy"));
79 JUnitTestCase.assertEquals(0x78, reader.peek()); 88 JUnitTestCase.assertEquals(0x78, reader.peek());
80 JUnitTestCase.assertEquals(0x78, reader.peek()); 89 JUnitTestCase.assertEquals(0x78, reader.peek());
81 reader.advance(); 90 reader.advance();
82 JUnitTestCase.assertEquals(0x79, reader.peek()); 91 JUnitTestCase.assertEquals(0x79, reader.peek());
83 JUnitTestCase.assertEquals(0x79, reader.peek()); 92 JUnitTestCase.assertEquals(0x79, reader.peek());
84 reader.advance(); 93 reader.advance();
85 JUnitTestCase.assertEquals(-1, reader.peek()); 94 JUnitTestCase.assertEquals(-1, reader.peek());
86 JUnitTestCase.assertEquals(-1, reader.peek()); 95 JUnitTestCase.assertEquals(-1, reader.peek());
87 } 96 }
97
88 void test_setOffset() { 98 void test_setOffset() {
89 CharSequenceReader reader = new CharSequenceReader(new CharSequence("xyz")); 99 CharSequenceReader reader = new CharSequenceReader(new CharSequence("xyz"));
90 reader.offset = 2; 100 reader.offset = 2;
91 JUnitTestCase.assertEquals(2, reader.offset); 101 JUnitTestCase.assertEquals(2, reader.offset);
92 } 102 }
103
93 static dartSuite() { 104 static dartSuite() {
94 _ut.group('CharSequenceReaderTest', () { 105 _ut.group('CharSequenceReaderTest', () {
95 _ut.test('test_advance', () { 106 _ut.test('test_advance', () {
96 final __test = new CharSequenceReaderTest(); 107 final __test = new CharSequenceReaderTest();
97 runJUnitTest(__test, __test.test_advance); 108 runJUnitTest(__test, __test.test_advance);
98 }); 109 });
99 _ut.test('test_creation', () { 110 _ut.test('test_creation', () {
100 final __test = new CharSequenceReaderTest(); 111 final __test = new CharSequenceReaderTest();
101 runJUnitTest(__test, __test.test_creation); 112 runJUnitTest(__test, __test.test_creation);
102 }); 113 });
103 _ut.test('test_getOffset', () { 114 _ut.test('test_getOffset', () {
104 final __test = new CharSequenceReaderTest(); 115 final __test = new CharSequenceReaderTest();
105 runJUnitTest(__test, __test.test_getOffset); 116 runJUnitTest(__test, __test.test_getOffset);
106 }); 117 });
107 _ut.test('test_getString', () { 118 _ut.test('test_getString', () {
108 final __test = new CharSequenceReaderTest(); 119 final __test = new CharSequenceReaderTest();
109 runJUnitTest(__test, __test.test_getString); 120 runJUnitTest(__test, __test.test_getString);
110 }); 121 });
111 _ut.test('test_peek', () { 122 _ut.test('test_peek', () {
112 final __test = new CharSequenceReaderTest(); 123 final __test = new CharSequenceReaderTest();
113 runJUnitTest(__test, __test.test_peek); 124 runJUnitTest(__test, __test.test_peek);
114 }); 125 });
115 _ut.test('test_setOffset', () { 126 _ut.test('test_setOffset', () {
116 final __test = new CharSequenceReaderTest(); 127 final __test = new CharSequenceReaderTest();
117 runJUnitTest(__test, __test.test_setOffset); 128 runJUnitTest(__test, __test.test_setOffset);
118 }); 129 });
119 }); 130 });
120 } 131 }
121 } 132 }
133
122 class TokenTypeTest extends EngineTestCase { 134 class TokenTypeTest extends EngineTestCase {
123 void test_isOperator() { 135 void test_isOperator() {
124 JUnitTestCase.assertTrue(TokenType.AMPERSAND.isOperator); 136 JUnitTestCase.assertTrue(TokenType.AMPERSAND.isOperator);
125 JUnitTestCase.assertTrue(TokenType.AMPERSAND_AMPERSAND.isOperator); 137 JUnitTestCase.assertTrue(TokenType.AMPERSAND_AMPERSAND.isOperator);
126 JUnitTestCase.assertTrue(TokenType.AMPERSAND_EQ.isOperator); 138 JUnitTestCase.assertTrue(TokenType.AMPERSAND_EQ.isOperator);
127 JUnitTestCase.assertTrue(TokenType.BANG.isOperator); 139 JUnitTestCase.assertTrue(TokenType.BANG.isOperator);
128 JUnitTestCase.assertTrue(TokenType.BANG_EQ.isOperator); 140 JUnitTestCase.assertTrue(TokenType.BANG_EQ.isOperator);
129 JUnitTestCase.assertTrue(TokenType.BAR.isOperator); 141 JUnitTestCase.assertTrue(TokenType.BAR.isOperator);
130 JUnitTestCase.assertTrue(TokenType.BAR_BAR.isOperator); 142 JUnitTestCase.assertTrue(TokenType.BAR_BAR.isOperator);
131 JUnitTestCase.assertTrue(TokenType.BAR_EQ.isOperator); 143 JUnitTestCase.assertTrue(TokenType.BAR_EQ.isOperator);
(...skipping 23 matching lines...) Expand all
155 JUnitTestCase.assertTrue(TokenType.PLUS_PLUS.isOperator); 167 JUnitTestCase.assertTrue(TokenType.PLUS_PLUS.isOperator);
156 JUnitTestCase.assertTrue(TokenType.QUESTION.isOperator); 168 JUnitTestCase.assertTrue(TokenType.QUESTION.isOperator);
157 JUnitTestCase.assertTrue(TokenType.SLASH.isOperator); 169 JUnitTestCase.assertTrue(TokenType.SLASH.isOperator);
158 JUnitTestCase.assertTrue(TokenType.SLASH_EQ.isOperator); 170 JUnitTestCase.assertTrue(TokenType.SLASH_EQ.isOperator);
159 JUnitTestCase.assertTrue(TokenType.STAR.isOperator); 171 JUnitTestCase.assertTrue(TokenType.STAR.isOperator);
160 JUnitTestCase.assertTrue(TokenType.STAR_EQ.isOperator); 172 JUnitTestCase.assertTrue(TokenType.STAR_EQ.isOperator);
161 JUnitTestCase.assertTrue(TokenType.TILDE.isOperator); 173 JUnitTestCase.assertTrue(TokenType.TILDE.isOperator);
162 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH.isOperator); 174 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH.isOperator);
163 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH_EQ.isOperator); 175 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH_EQ.isOperator);
164 } 176 }
177
165 void test_isUserDefinableOperator() { 178 void test_isUserDefinableOperator() {
166 JUnitTestCase.assertTrue(TokenType.AMPERSAND.isUserDefinableOperator); 179 JUnitTestCase.assertTrue(TokenType.AMPERSAND.isUserDefinableOperator);
167 JUnitTestCase.assertTrue(TokenType.BAR.isUserDefinableOperator); 180 JUnitTestCase.assertTrue(TokenType.BAR.isUserDefinableOperator);
168 JUnitTestCase.assertTrue(TokenType.CARET.isUserDefinableOperator); 181 JUnitTestCase.assertTrue(TokenType.CARET.isUserDefinableOperator);
169 JUnitTestCase.assertTrue(TokenType.EQ_EQ.isUserDefinableOperator); 182 JUnitTestCase.assertTrue(TokenType.EQ_EQ.isUserDefinableOperator);
170 JUnitTestCase.assertTrue(TokenType.GT.isUserDefinableOperator); 183 JUnitTestCase.assertTrue(TokenType.GT.isUserDefinableOperator);
171 JUnitTestCase.assertTrue(TokenType.GT_EQ.isUserDefinableOperator); 184 JUnitTestCase.assertTrue(TokenType.GT_EQ.isUserDefinableOperator);
172 JUnitTestCase.assertTrue(TokenType.GT_GT.isUserDefinableOperator); 185 JUnitTestCase.assertTrue(TokenType.GT_GT.isUserDefinableOperator);
173 JUnitTestCase.assertTrue(TokenType.INDEX.isUserDefinableOperator); 186 JUnitTestCase.assertTrue(TokenType.INDEX.isUserDefinableOperator);
174 JUnitTestCase.assertTrue(TokenType.INDEX_EQ.isUserDefinableOperator); 187 JUnitTestCase.assertTrue(TokenType.INDEX_EQ.isUserDefinableOperator);
175 JUnitTestCase.assertTrue(TokenType.LT.isUserDefinableOperator); 188 JUnitTestCase.assertTrue(TokenType.LT.isUserDefinableOperator);
176 JUnitTestCase.assertTrue(TokenType.LT_EQ.isUserDefinableOperator); 189 JUnitTestCase.assertTrue(TokenType.LT_EQ.isUserDefinableOperator);
177 JUnitTestCase.assertTrue(TokenType.LT_LT.isUserDefinableOperator); 190 JUnitTestCase.assertTrue(TokenType.LT_LT.isUserDefinableOperator);
178 JUnitTestCase.assertTrue(TokenType.MINUS.isUserDefinableOperator); 191 JUnitTestCase.assertTrue(TokenType.MINUS.isUserDefinableOperator);
179 JUnitTestCase.assertTrue(TokenType.PERCENT.isUserDefinableOperator); 192 JUnitTestCase.assertTrue(TokenType.PERCENT.isUserDefinableOperator);
180 JUnitTestCase.assertTrue(TokenType.PLUS.isUserDefinableOperator); 193 JUnitTestCase.assertTrue(TokenType.PLUS.isUserDefinableOperator);
181 JUnitTestCase.assertTrue(TokenType.SLASH.isUserDefinableOperator); 194 JUnitTestCase.assertTrue(TokenType.SLASH.isUserDefinableOperator);
182 JUnitTestCase.assertTrue(TokenType.STAR.isUserDefinableOperator); 195 JUnitTestCase.assertTrue(TokenType.STAR.isUserDefinableOperator);
183 JUnitTestCase.assertTrue(TokenType.TILDE.isUserDefinableOperator); 196 JUnitTestCase.assertTrue(TokenType.TILDE.isUserDefinableOperator);
184 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH.isUserDefinableOperator); 197 JUnitTestCase.assertTrue(TokenType.TILDE_SLASH.isUserDefinableOperator);
185 } 198 }
199
186 static dartSuite() { 200 static dartSuite() {
187 _ut.group('TokenTypeTest', () { 201 _ut.group('TokenTypeTest', () {
188 _ut.test('test_isOperator', () { 202 _ut.test('test_isOperator', () {
189 final __test = new TokenTypeTest(); 203 final __test = new TokenTypeTest();
190 runJUnitTest(__test, __test.test_isOperator); 204 runJUnitTest(__test, __test.test_isOperator);
191 }); 205 });
192 _ut.test('test_isUserDefinableOperator', () { 206 _ut.test('test_isUserDefinableOperator', () {
193 final __test = new TokenTypeTest(); 207 final __test = new TokenTypeTest();
194 runJUnitTest(__test, __test.test_isUserDefinableOperator); 208 runJUnitTest(__test, __test.test_isUserDefinableOperator);
195 }); 209 });
196 }); 210 });
197 } 211 }
198 } 212 }
213
199 /** 214 /**
200 * The class `TokenFactory` defines utility methods that can be used to create t okens. 215 * The class `TokenFactory` defines utility methods that can be used to create t okens.
201 */ 216 */
202 class TokenFactory { 217 class TokenFactory {
203 static Token token(Keyword keyword) => new KeywordToken(keyword, 0); 218 static Token token(Keyword keyword) => new KeywordToken(keyword, 0);
219
204 static Token token2(String lexeme) => new StringToken(TokenType.STRING, lexeme , 0); 220 static Token token2(String lexeme) => new StringToken(TokenType.STRING, lexeme , 0);
221
205 static Token token3(TokenType type) => new Token(type, 0); 222 static Token token3(TokenType type) => new Token(type, 0);
223
206 static Token token4(TokenType type, String lexeme) => new StringToken(type, le xeme, 0); 224 static Token token4(TokenType type, String lexeme) => new StringToken(type, le xeme, 0);
207 } 225 }
226
208 /** 227 /**
209 * Instances of the class `TokenStreamValidator` are used to validate the correc t construction 228 * Instances of the class `TokenStreamValidator` are used to validate the correc t construction
210 * of a stream of tokens. 229 * of a stream of tokens.
211 */ 230 */
212 class TokenStreamValidator { 231 class TokenStreamValidator {
213
214 /** 232 /**
215 * Validate that the stream of tokens that starts with the given token is corr ect. 233 * Validate that the stream of tokens that starts with the given token is corr ect.
216 * 234 *
217 * @param token the first token in the stream of tokens to be validated 235 * @param token the first token in the stream of tokens to be validated
218 */ 236 */
219 void validate(Token token) { 237 void validate(Token token) {
220 JavaStringBuilder builder = new JavaStringBuilder(); 238 JavaStringBuilder builder = new JavaStringBuilder();
221 validateStream(builder, token); 239 validateStream(builder, token);
222 if (builder.length > 0) { 240 if (builder.length > 0) {
223 JUnitTestCase.fail(builder.toString()); 241 JUnitTestCase.fail(builder.toString());
224 } 242 }
225 } 243 }
244
226 void validateStream(JavaStringBuilder builder, Token token) { 245 void validateStream(JavaStringBuilder builder, Token token) {
227 if (token == null) { 246 if (token == null) {
228 return; 247 return;
229 } 248 }
230 Token previousToken = null; 249 Token previousToken = null;
231 int previousEnd = -1; 250 int previousEnd = -1;
232 Token currentToken = token; 251 Token currentToken = token;
233 while (currentToken != null && currentToken.type != TokenType.EOF) { 252 while (currentToken != null && currentToken.type != TokenType.EOF) {
234 validateStream(builder, currentToken.precedingComments); 253 validateStream(builder, currentToken.precedingComments);
235 TokenType type = currentToken.type; 254 TokenType type = currentToken.type;
(...skipping 12 matching lines...) Expand all
248 builder.append("\r\nInvalid token sequence: "); 267 builder.append("\r\nInvalid token sequence: ");
249 writeToken(builder, previousToken); 268 writeToken(builder, previousToken);
250 builder.append(" followed by "); 269 builder.append(" followed by ");
251 writeToken(builder, currentToken); 270 writeToken(builder, currentToken);
252 } 271 }
253 previousEnd = currentEnd; 272 previousEnd = currentEnd;
254 previousToken = currentToken; 273 previousToken = currentToken;
255 currentToken = currentToken.next; 274 currentToken = currentToken.next;
256 } 275 }
257 } 276 }
277
258 void writeToken(JavaStringBuilder builder, Token token) { 278 void writeToken(JavaStringBuilder builder, Token token) {
259 builder.append("["); 279 builder.append("[");
260 builder.append(token.type); 280 builder.append(token.type);
261 builder.append(", '"); 281 builder.append(", '");
262 builder.append(token.lexeme); 282 builder.append(token.lexeme);
263 builder.append("', "); 283 builder.append("', ");
264 builder.append(token.offset); 284 builder.append(token.offset);
265 builder.append(", "); 285 builder.append(", ");
266 builder.append(token.length); 286 builder.append(token.length);
267 builder.append("]"); 287 builder.append("]");
268 } 288 }
269 } 289 }
290
270 class ScannerTest extends JUnitTestCase { 291 class ScannerTest extends JUnitTestCase {
271 void test_ampersand() { 292 void test_ampersand() {
272 assertToken(TokenType.AMPERSAND, "&"); 293 assertToken(TokenType.AMPERSAND, "&");
273 } 294 }
295
274 void test_ampersand_ampersand() { 296 void test_ampersand_ampersand() {
275 assertToken(TokenType.AMPERSAND_AMPERSAND, "&&"); 297 assertToken(TokenType.AMPERSAND_AMPERSAND, "&&");
276 } 298 }
299
277 void test_ampersand_eq() { 300 void test_ampersand_eq() {
278 assertToken(TokenType.AMPERSAND_EQ, "&="); 301 assertToken(TokenType.AMPERSAND_EQ, "&=");
279 } 302 }
303
280 void test_at() { 304 void test_at() {
281 assertToken(TokenType.AT, "@"); 305 assertToken(TokenType.AT, "@");
282 } 306 }
307
283 void test_backping() { 308 void test_backping() {
284 assertToken(TokenType.BACKPING, "`"); 309 assertToken(TokenType.BACKPING, "`");
285 } 310 }
311
286 void test_backslash() { 312 void test_backslash() {
287 assertToken(TokenType.BACKSLASH, "\\"); 313 assertToken(TokenType.BACKSLASH, "\\");
288 } 314 }
315
289 void test_bang() { 316 void test_bang() {
290 assertToken(TokenType.BANG, "!"); 317 assertToken(TokenType.BANG, "!");
291 } 318 }
319
292 void test_bang_eq() { 320 void test_bang_eq() {
293 assertToken(TokenType.BANG_EQ, "!="); 321 assertToken(TokenType.BANG_EQ, "!=");
294 } 322 }
323
295 void test_bar() { 324 void test_bar() {
296 assertToken(TokenType.BAR, "|"); 325 assertToken(TokenType.BAR, "|");
297 } 326 }
327
298 void test_bar_bar() { 328 void test_bar_bar() {
299 assertToken(TokenType.BAR_BAR, "||"); 329 assertToken(TokenType.BAR_BAR, "||");
300 } 330 }
331
301 void test_bar_eq() { 332 void test_bar_eq() {
302 assertToken(TokenType.BAR_EQ, "|="); 333 assertToken(TokenType.BAR_EQ, "|=");
303 } 334 }
335
304 void test_caret() { 336 void test_caret() {
305 assertToken(TokenType.CARET, "^"); 337 assertToken(TokenType.CARET, "^");
306 } 338 }
339
307 void test_caret_eq() { 340 void test_caret_eq() {
308 assertToken(TokenType.CARET_EQ, "^="); 341 assertToken(TokenType.CARET_EQ, "^=");
309 } 342 }
343
310 void test_close_curly_bracket() { 344 void test_close_curly_bracket() {
311 assertToken(TokenType.CLOSE_CURLY_BRACKET, "}"); 345 assertToken(TokenType.CLOSE_CURLY_BRACKET, "}");
312 } 346 }
347
313 void test_close_paren() { 348 void test_close_paren() {
314 assertToken(TokenType.CLOSE_PAREN, ")"); 349 assertToken(TokenType.CLOSE_PAREN, ")");
315 } 350 }
351
316 void test_close_quare_bracket() { 352 void test_close_quare_bracket() {
317 assertToken(TokenType.CLOSE_SQUARE_BRACKET, "]"); 353 assertToken(TokenType.CLOSE_SQUARE_BRACKET, "]");
318 } 354 }
355
319 void test_colon() { 356 void test_colon() {
320 assertToken(TokenType.COLON, ":"); 357 assertToken(TokenType.COLON, ":");
321 } 358 }
359
322 void test_comma() { 360 void test_comma() {
323 assertToken(TokenType.COMMA, ","); 361 assertToken(TokenType.COMMA, ",");
324 } 362 }
363
325 void test_comment_multi() { 364 void test_comment_multi() {
326 assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment */"); 365 assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment */");
327 } 366 }
367
328 void test_comment_multi_unterminated() { 368 void test_comment_multi_unterminated() {
329 assertError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, 3, "/* x"); 369 assertError(ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT, 3, "/* x");
330 } 370 }
371
331 void test_comment_nested() { 372 void test_comment_nested() {
332 assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment /* within a */ comme nt */"); 373 assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment /* within a */ comme nt */");
333 } 374 }
375
334 void test_comment_single() { 376 void test_comment_single() {
335 assertComment(TokenType.SINGLE_LINE_COMMENT, "// comment"); 377 assertComment(TokenType.SINGLE_LINE_COMMENT, "// comment");
336 } 378 }
379
337 void test_double_both_e() { 380 void test_double_both_e() {
338 assertToken(TokenType.DOUBLE, "0.123e4"); 381 assertToken(TokenType.DOUBLE, "0.123e4");
339 } 382 }
383
340 void test_double_both_E() { 384 void test_double_both_E() {
341 assertToken(TokenType.DOUBLE, "0.123E4"); 385 assertToken(TokenType.DOUBLE, "0.123E4");
342 } 386 }
387
343 void test_double_fraction() { 388 void test_double_fraction() {
344 assertToken(TokenType.DOUBLE, ".123"); 389 assertToken(TokenType.DOUBLE, ".123");
345 } 390 }
391
346 void test_double_fraction_e() { 392 void test_double_fraction_e() {
347 assertToken(TokenType.DOUBLE, ".123e4"); 393 assertToken(TokenType.DOUBLE, ".123e4");
348 } 394 }
395
349 void test_double_fraction_E() { 396 void test_double_fraction_E() {
350 assertToken(TokenType.DOUBLE, ".123E4"); 397 assertToken(TokenType.DOUBLE, ".123E4");
351 } 398 }
399
352 void test_double_missingDigitInExponent() { 400 void test_double_missingDigitInExponent() {
353 assertError(ScannerErrorCode.MISSING_DIGIT, 1, "1e"); 401 assertError(ScannerErrorCode.MISSING_DIGIT, 1, "1e");
354 } 402 }
403
355 void test_double_whole_e() { 404 void test_double_whole_e() {
356 assertToken(TokenType.DOUBLE, "12e4"); 405 assertToken(TokenType.DOUBLE, "12e4");
357 } 406 }
407
358 void test_double_whole_E() { 408 void test_double_whole_E() {
359 assertToken(TokenType.DOUBLE, "12E4"); 409 assertToken(TokenType.DOUBLE, "12E4");
360 } 410 }
411
361 void test_eq() { 412 void test_eq() {
362 assertToken(TokenType.EQ, "="); 413 assertToken(TokenType.EQ, "=");
363 } 414 }
415
364 void test_eq_eq() { 416 void test_eq_eq() {
365 assertToken(TokenType.EQ_EQ, "=="); 417 assertToken(TokenType.EQ_EQ, "==");
366 } 418 }
419
367 void test_gt() { 420 void test_gt() {
368 assertToken(TokenType.GT, ">"); 421 assertToken(TokenType.GT, ">");
369 } 422 }
423
370 void test_gt_eq() { 424 void test_gt_eq() {
371 assertToken(TokenType.GT_EQ, ">="); 425 assertToken(TokenType.GT_EQ, ">=");
372 } 426 }
427
373 void test_gt_gt() { 428 void test_gt_gt() {
374 assertToken(TokenType.GT_GT, ">>"); 429 assertToken(TokenType.GT_GT, ">>");
375 } 430 }
431
376 void test_gt_gt_eq() { 432 void test_gt_gt_eq() {
377 assertToken(TokenType.GT_GT_EQ, ">>="); 433 assertToken(TokenType.GT_GT_EQ, ">>=");
378 } 434 }
435
379 void test_hash() { 436 void test_hash() {
380 assertToken(TokenType.HASH, "#"); 437 assertToken(TokenType.HASH, "#");
381 } 438 }
439
382 void test_hexidecimal() { 440 void test_hexidecimal() {
383 assertToken(TokenType.HEXADECIMAL, "0x1A2B3C"); 441 assertToken(TokenType.HEXADECIMAL, "0x1A2B3C");
384 } 442 }
443
385 void test_hexidecimal_missingDigit() { 444 void test_hexidecimal_missingDigit() {
386 assertError(ScannerErrorCode.MISSING_HEX_DIGIT, 1, "0x"); 445 assertError(ScannerErrorCode.MISSING_HEX_DIGIT, 1, "0x");
387 } 446 }
447
388 void test_identifier() { 448 void test_identifier() {
389 assertToken(TokenType.IDENTIFIER, "result"); 449 assertToken(TokenType.IDENTIFIER, "result");
390 } 450 }
451
391 void test_illegalChar_cyrillicLetter_middle() { 452 void test_illegalChar_cyrillicLetter_middle() {
392 assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "Shche\u0433lov"); 453 assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "Shche\u0433lov");
393 } 454 }
455
394 void test_illegalChar_cyrillicLetter_start() { 456 void test_illegalChar_cyrillicLetter_start() {
395 assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u0429"); 457 assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u0429");
396 } 458 }
459
397 void test_illegalChar_nbsp() { 460 void test_illegalChar_nbsp() {
398 assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u00A0"); 461 assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u00A0");
399 } 462 }
463
400 void test_illegalChar_notLetter() { 464 void test_illegalChar_notLetter() {
401 assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u0312"); 465 assertError(ScannerErrorCode.ILLEGAL_CHARACTER, 0, "\u0312");
402 } 466 }
467
403 void test_index() { 468 void test_index() {
404 assertToken(TokenType.INDEX, "[]"); 469 assertToken(TokenType.INDEX, "[]");
405 } 470 }
471
406 void test_index_eq() { 472 void test_index_eq() {
407 assertToken(TokenType.INDEX_EQ, "[]="); 473 assertToken(TokenType.INDEX_EQ, "[]=");
408 } 474 }
475
409 void test_int() { 476 void test_int() {
410 assertToken(TokenType.INT, "123"); 477 assertToken(TokenType.INT, "123");
411 } 478 }
479
412 void test_int_initialZero() { 480 void test_int_initialZero() {
413 assertToken(TokenType.INT, "0123"); 481 assertToken(TokenType.INT, "0123");
414 } 482 }
483
415 void test_keyword_abstract() { 484 void test_keyword_abstract() {
416 assertKeywordToken("abstract"); 485 assertKeywordToken("abstract");
417 } 486 }
487
418 void test_keyword_as() { 488 void test_keyword_as() {
419 assertKeywordToken("as"); 489 assertKeywordToken("as");
420 } 490 }
491
421 void test_keyword_assert() { 492 void test_keyword_assert() {
422 assertKeywordToken("assert"); 493 assertKeywordToken("assert");
423 } 494 }
495
424 void test_keyword_break() { 496 void test_keyword_break() {
425 assertKeywordToken("break"); 497 assertKeywordToken("break");
426 } 498 }
499
427 void test_keyword_case() { 500 void test_keyword_case() {
428 assertKeywordToken("case"); 501 assertKeywordToken("case");
429 } 502 }
503
430 void test_keyword_catch() { 504 void test_keyword_catch() {
431 assertKeywordToken("catch"); 505 assertKeywordToken("catch");
432 } 506 }
507
433 void test_keyword_class() { 508 void test_keyword_class() {
434 assertKeywordToken("class"); 509 assertKeywordToken("class");
435 } 510 }
511
436 void test_keyword_const() { 512 void test_keyword_const() {
437 assertKeywordToken("const"); 513 assertKeywordToken("const");
438 } 514 }
515
439 void test_keyword_continue() { 516 void test_keyword_continue() {
440 assertKeywordToken("continue"); 517 assertKeywordToken("continue");
441 } 518 }
519
442 void test_keyword_default() { 520 void test_keyword_default() {
443 assertKeywordToken("default"); 521 assertKeywordToken("default");
444 } 522 }
523
445 void test_keyword_do() { 524 void test_keyword_do() {
446 assertKeywordToken("do"); 525 assertKeywordToken("do");
447 } 526 }
527
448 void test_keyword_dynamic() { 528 void test_keyword_dynamic() {
449 assertKeywordToken("dynamic"); 529 assertKeywordToken("dynamic");
450 } 530 }
531
451 void test_keyword_else() { 532 void test_keyword_else() {
452 assertKeywordToken("else"); 533 assertKeywordToken("else");
453 } 534 }
535
454 void test_keyword_enum() { 536 void test_keyword_enum() {
455 assertKeywordToken("enum"); 537 assertKeywordToken("enum");
456 } 538 }
539
457 void test_keyword_export() { 540 void test_keyword_export() {
458 assertKeywordToken("export"); 541 assertKeywordToken("export");
459 } 542 }
543
460 void test_keyword_extends() { 544 void test_keyword_extends() {
461 assertKeywordToken("extends"); 545 assertKeywordToken("extends");
462 } 546 }
547
463 void test_keyword_factory() { 548 void test_keyword_factory() {
464 assertKeywordToken("factory"); 549 assertKeywordToken("factory");
465 } 550 }
551
466 void test_keyword_false() { 552 void test_keyword_false() {
467 assertKeywordToken("false"); 553 assertKeywordToken("false");
468 } 554 }
555
469 void test_keyword_final() { 556 void test_keyword_final() {
470 assertKeywordToken("final"); 557 assertKeywordToken("final");
471 } 558 }
559
472 void test_keyword_finally() { 560 void test_keyword_finally() {
473 assertKeywordToken("finally"); 561 assertKeywordToken("finally");
474 } 562 }
563
475 void test_keyword_for() { 564 void test_keyword_for() {
476 assertKeywordToken("for"); 565 assertKeywordToken("for");
477 } 566 }
567
478 void test_keyword_get() { 568 void test_keyword_get() {
479 assertKeywordToken("get"); 569 assertKeywordToken("get");
480 } 570 }
571
481 void test_keyword_if() { 572 void test_keyword_if() {
482 assertKeywordToken("if"); 573 assertKeywordToken("if");
483 } 574 }
575
484 void test_keyword_implements() { 576 void test_keyword_implements() {
485 assertKeywordToken("implements"); 577 assertKeywordToken("implements");
486 } 578 }
579
487 void test_keyword_import() { 580 void test_keyword_import() {
488 assertKeywordToken("import"); 581 assertKeywordToken("import");
489 } 582 }
583
490 void test_keyword_in() { 584 void test_keyword_in() {
491 assertKeywordToken("in"); 585 assertKeywordToken("in");
492 } 586 }
587
493 void test_keyword_is() { 588 void test_keyword_is() {
494 assertKeywordToken("is"); 589 assertKeywordToken("is");
495 } 590 }
591
496 void test_keyword_library() { 592 void test_keyword_library() {
497 assertKeywordToken("library"); 593 assertKeywordToken("library");
498 } 594 }
595
499 void test_keyword_new() { 596 void test_keyword_new() {
500 assertKeywordToken("new"); 597 assertKeywordToken("new");
501 } 598 }
599
502 void test_keyword_null() { 600 void test_keyword_null() {
503 assertKeywordToken("null"); 601 assertKeywordToken("null");
504 } 602 }
603
505 void test_keyword_operator() { 604 void test_keyword_operator() {
506 assertKeywordToken("operator"); 605 assertKeywordToken("operator");
507 } 606 }
607
508 void test_keyword_part() { 608 void test_keyword_part() {
509 assertKeywordToken("part"); 609 assertKeywordToken("part");
510 } 610 }
611
511 void test_keyword_rethrow() { 612 void test_keyword_rethrow() {
512 assertKeywordToken("rethrow"); 613 assertKeywordToken("rethrow");
513 } 614 }
615
514 void test_keyword_return() { 616 void test_keyword_return() {
515 assertKeywordToken("return"); 617 assertKeywordToken("return");
516 } 618 }
619
517 void test_keyword_set() { 620 void test_keyword_set() {
518 assertKeywordToken("set"); 621 assertKeywordToken("set");
519 } 622 }
623
520 void test_keyword_static() { 624 void test_keyword_static() {
521 assertKeywordToken("static"); 625 assertKeywordToken("static");
522 } 626 }
627
523 void test_keyword_super() { 628 void test_keyword_super() {
524 assertKeywordToken("super"); 629 assertKeywordToken("super");
525 } 630 }
631
526 void test_keyword_switch() { 632 void test_keyword_switch() {
527 assertKeywordToken("switch"); 633 assertKeywordToken("switch");
528 } 634 }
635
529 void test_keyword_this() { 636 void test_keyword_this() {
530 assertKeywordToken("this"); 637 assertKeywordToken("this");
531 } 638 }
639
532 void test_keyword_throw() { 640 void test_keyword_throw() {
533 assertKeywordToken("throw"); 641 assertKeywordToken("throw");
534 } 642 }
643
535 void test_keyword_true() { 644 void test_keyword_true() {
536 assertKeywordToken("true"); 645 assertKeywordToken("true");
537 } 646 }
647
538 void test_keyword_try() { 648 void test_keyword_try() {
539 assertKeywordToken("try"); 649 assertKeywordToken("try");
540 } 650 }
651
541 void test_keyword_typedef() { 652 void test_keyword_typedef() {
542 assertKeywordToken("typedef"); 653 assertKeywordToken("typedef");
543 } 654 }
655
544 void test_keyword_var() { 656 void test_keyword_var() {
545 assertKeywordToken("var"); 657 assertKeywordToken("var");
546 } 658 }
659
547 void test_keyword_void() { 660 void test_keyword_void() {
548 assertKeywordToken("void"); 661 assertKeywordToken("void");
549 } 662 }
663
550 void test_keyword_while() { 664 void test_keyword_while() {
551 assertKeywordToken("while"); 665 assertKeywordToken("while");
552 } 666 }
667
553 void test_keyword_with() { 668 void test_keyword_with() {
554 assertKeywordToken("with"); 669 assertKeywordToken("with");
555 } 670 }
671
556 void test_lineInfo_multilineComment() { 672 void test_lineInfo_multilineComment() {
557 String source = "/*\r *\r */"; 673 String source = "/*\r *\r */";
558 assertLineInfo(source, [ 674 assertLineInfo(source, [
559 new ScannerTest_ExpectedLocation(0, 1, 1), 675 new ScannerTest_ExpectedLocation(0, 1, 1),
560 new ScannerTest_ExpectedLocation(4, 2, 2), 676 new ScannerTest_ExpectedLocation(4, 2, 2),
561 new ScannerTest_ExpectedLocation(source.length - 1, 3, 3)]); 677 new ScannerTest_ExpectedLocation(source.length - 1, 3, 3)]);
562 } 678 }
679
563 void test_lineInfo_multilineString() { 680 void test_lineInfo_multilineString() {
564 String source = "'''a\r\nbc\r\nd'''"; 681 String source = "'''a\r\nbc\r\nd'''";
565 assertLineInfo(source, [ 682 assertLineInfo(source, [
566 new ScannerTest_ExpectedLocation(0, 1, 1), 683 new ScannerTest_ExpectedLocation(0, 1, 1),
567 new ScannerTest_ExpectedLocation(7, 2, 2), 684 new ScannerTest_ExpectedLocation(7, 2, 2),
568 new ScannerTest_ExpectedLocation(source.length - 1, 3, 4)]); 685 new ScannerTest_ExpectedLocation(source.length - 1, 3, 4)]);
569 } 686 }
687
570 void test_lineInfo_simpleClass() { 688 void test_lineInfo_simpleClass() {
571 String source = "class Test {\r\n String s = '...';\r\n int get x => s .MISSING_GETTER;\r\n}"; 689 String source = "class Test {\r\n String s = '...';\r\n int get x => s .MISSING_GETTER;\r\n}";
572 assertLineInfo(source, [ 690 assertLineInfo(source, [
573 new ScannerTest_ExpectedLocation(0, 1, 1), 691 new ScannerTest_ExpectedLocation(0, 1, 1),
574 new ScannerTest_ExpectedLocation(source.indexOf("MISSING_GETTER"), 3, 20 ), 692 new ScannerTest_ExpectedLocation(source.indexOf("MISSING_GETTER"), 3, 20 ),
575 new ScannerTest_ExpectedLocation(source.length - 1, 4, 1)]); 693 new ScannerTest_ExpectedLocation(source.length - 1, 4, 1)]);
576 } 694 }
695
577 void test_lineInfo_slashN() { 696 void test_lineInfo_slashN() {
578 String source = "class Test {\n}"; 697 String source = "class Test {\n}";
579 assertLineInfo(source, [ 698 assertLineInfo(source, [
580 new ScannerTest_ExpectedLocation(0, 1, 1), 699 new ScannerTest_ExpectedLocation(0, 1, 1),
581 new ScannerTest_ExpectedLocation(source.indexOf("}"), 2, 1)]); 700 new ScannerTest_ExpectedLocation(source.indexOf("}"), 2, 1)]);
582 } 701 }
702
583 void test_lt() { 703 void test_lt() {
584 assertToken(TokenType.LT, "<"); 704 assertToken(TokenType.LT, "<");
585 } 705 }
706
586 void test_lt_eq() { 707 void test_lt_eq() {
587 assertToken(TokenType.LT_EQ, "<="); 708 assertToken(TokenType.LT_EQ, "<=");
588 } 709 }
710
589 void test_lt_lt() { 711 void test_lt_lt() {
590 assertToken(TokenType.LT_LT, "<<"); 712 assertToken(TokenType.LT_LT, "<<");
591 } 713 }
714
592 void test_lt_lt_eq() { 715 void test_lt_lt_eq() {
593 assertToken(TokenType.LT_LT_EQ, "<<="); 716 assertToken(TokenType.LT_LT_EQ, "<<=");
594 } 717 }
718
595 void test_minus() { 719 void test_minus() {
596 assertToken(TokenType.MINUS, "-"); 720 assertToken(TokenType.MINUS, "-");
597 } 721 }
722
598 void test_minus_eq() { 723 void test_minus_eq() {
599 assertToken(TokenType.MINUS_EQ, "-="); 724 assertToken(TokenType.MINUS_EQ, "-=");
600 } 725 }
726
601 void test_minus_minus() { 727 void test_minus_minus() {
602 assertToken(TokenType.MINUS_MINUS, "--"); 728 assertToken(TokenType.MINUS_MINUS, "--");
603 } 729 }
730
604 void test_open_curly_bracket() { 731 void test_open_curly_bracket() {
605 assertToken(TokenType.OPEN_CURLY_BRACKET, "{"); 732 assertToken(TokenType.OPEN_CURLY_BRACKET, "{");
606 } 733 }
734
607 void test_open_paren() { 735 void test_open_paren() {
608 assertToken(TokenType.OPEN_PAREN, "("); 736 assertToken(TokenType.OPEN_PAREN, "(");
609 } 737 }
738
610 void test_open_square_bracket() { 739 void test_open_square_bracket() {
611 assertToken(TokenType.OPEN_SQUARE_BRACKET, "["); 740 assertToken(TokenType.OPEN_SQUARE_BRACKET, "[");
612 } 741 }
742
613 void test_openSquareBracket() { 743 void test_openSquareBracket() {
614 assertToken(TokenType.OPEN_SQUARE_BRACKET, "["); 744 assertToken(TokenType.OPEN_SQUARE_BRACKET, "[");
615 } 745 }
746
616 void test_percent() { 747 void test_percent() {
617 assertToken(TokenType.PERCENT, "%"); 748 assertToken(TokenType.PERCENT, "%");
618 } 749 }
750
619 void test_percent_eq() { 751 void test_percent_eq() {
620 assertToken(TokenType.PERCENT_EQ, "%="); 752 assertToken(TokenType.PERCENT_EQ, "%=");
621 } 753 }
754
622 void test_period() { 755 void test_period() {
623 assertToken(TokenType.PERIOD, "."); 756 assertToken(TokenType.PERIOD, ".");
624 } 757 }
758
625 void test_period_period() { 759 void test_period_period() {
626 assertToken(TokenType.PERIOD_PERIOD, ".."); 760 assertToken(TokenType.PERIOD_PERIOD, "..");
627 } 761 }
762
628 void test_period_period_period() { 763 void test_period_period_period() {
629 assertToken(TokenType.PERIOD_PERIOD_PERIOD, "..."); 764 assertToken(TokenType.PERIOD_PERIOD_PERIOD, "...");
630 } 765 }
766
631 void test_periodAfterNumberNotIncluded_identifier() { 767 void test_periodAfterNumberNotIncluded_identifier() {
632 assertTokens("42.isEven()", [ 768 assertTokens("42.isEven()", [
633 new StringToken(TokenType.INT, "42", 0), 769 new StringToken(TokenType.INT, "42", 0),
634 new Token(TokenType.PERIOD, 2), 770 new Token(TokenType.PERIOD, 2),
635 new StringToken(TokenType.IDENTIFIER, "isEven", 3), 771 new StringToken(TokenType.IDENTIFIER, "isEven", 3),
636 new Token(TokenType.OPEN_PAREN, 9), 772 new Token(TokenType.OPEN_PAREN, 9),
637 new Token(TokenType.CLOSE_PAREN, 10)]); 773 new Token(TokenType.CLOSE_PAREN, 10)]);
638 } 774 }
775
639 void test_periodAfterNumberNotIncluded_period() { 776 void test_periodAfterNumberNotIncluded_period() {
640 assertTokens("42..isEven()", [ 777 assertTokens("42..isEven()", [
641 new StringToken(TokenType.INT, "42", 0), 778 new StringToken(TokenType.INT, "42", 0),
642 new Token(TokenType.PERIOD_PERIOD, 2), 779 new Token(TokenType.PERIOD_PERIOD, 2),
643 new StringToken(TokenType.IDENTIFIER, "isEven", 4), 780 new StringToken(TokenType.IDENTIFIER, "isEven", 4),
644 new Token(TokenType.OPEN_PAREN, 10), 781 new Token(TokenType.OPEN_PAREN, 10),
645 new Token(TokenType.CLOSE_PAREN, 11)]); 782 new Token(TokenType.CLOSE_PAREN, 11)]);
646 } 783 }
784
647 void test_plus() { 785 void test_plus() {
648 assertToken(TokenType.PLUS, "+"); 786 assertToken(TokenType.PLUS, "+");
649 } 787 }
788
650 void test_plus_eq() { 789 void test_plus_eq() {
651 assertToken(TokenType.PLUS_EQ, "+="); 790 assertToken(TokenType.PLUS_EQ, "+=");
652 } 791 }
792
653 void test_plus_plus() { 793 void test_plus_plus() {
654 assertToken(TokenType.PLUS_PLUS, "++"); 794 assertToken(TokenType.PLUS_PLUS, "++");
655 } 795 }
796
656 void test_question() { 797 void test_question() {
657 assertToken(TokenType.QUESTION, "?"); 798 assertToken(TokenType.QUESTION, "?");
658 } 799 }
800
659 void test_scriptTag_withArgs() { 801 void test_scriptTag_withArgs() {
660 assertToken(TokenType.SCRIPT_TAG, "#!/bin/dart -debug"); 802 assertToken(TokenType.SCRIPT_TAG, "#!/bin/dart -debug");
661 } 803 }
804
662 void test_scriptTag_withoutSpace() { 805 void test_scriptTag_withoutSpace() {
663 assertToken(TokenType.SCRIPT_TAG, "#!/bin/dart"); 806 assertToken(TokenType.SCRIPT_TAG, "#!/bin/dart");
664 } 807 }
808
665 void test_scriptTag_withSpace() { 809 void test_scriptTag_withSpace() {
666 assertToken(TokenType.SCRIPT_TAG, "#! /bin/dart"); 810 assertToken(TokenType.SCRIPT_TAG, "#! /bin/dart");
667 } 811 }
812
668 void test_semicolon() { 813 void test_semicolon() {
669 assertToken(TokenType.SEMICOLON, ";"); 814 assertToken(TokenType.SEMICOLON, ";");
670 } 815 }
816
671 void test_setSourceStart() { 817 void test_setSourceStart() {
672 int offsetDelta = 42; 818 int offsetDelta = 42;
673 GatheringErrorListener listener = new GatheringErrorListener(); 819 GatheringErrorListener listener = new GatheringErrorListener();
674 Scanner scanner = new Scanner(null, new SubSequenceReader(new CharSequence(" a"), offsetDelta), listener); 820 Scanner scanner = new Scanner(null, new SubSequenceReader(new CharSequence(" a"), offsetDelta), listener);
675 scanner.setSourceStart(3, 9); 821 scanner.setSourceStart(3, 9);
676 scanner.tokenize(); 822 scanner.tokenize();
677 List<int> lineStarts = scanner.lineStarts; 823 List<int> lineStarts = scanner.lineStarts;
678 JUnitTestCase.assertNotNull(lineStarts); 824 JUnitTestCase.assertNotNull(lineStarts);
679 JUnitTestCase.assertEquals(3, lineStarts.length); 825 JUnitTestCase.assertEquals(3, lineStarts.length);
680 JUnitTestCase.assertEquals(33, lineStarts[2]); 826 JUnitTestCase.assertEquals(33, lineStarts[2]);
681 } 827 }
828
682 void test_slash() { 829 void test_slash() {
683 assertToken(TokenType.SLASH, "/"); 830 assertToken(TokenType.SLASH, "/");
684 } 831 }
832
685 void test_slash_eq() { 833 void test_slash_eq() {
686 assertToken(TokenType.SLASH_EQ, "/="); 834 assertToken(TokenType.SLASH_EQ, "/=");
687 } 835 }
836
688 void test_star() { 837 void test_star() {
689 assertToken(TokenType.STAR, "*"); 838 assertToken(TokenType.STAR, "*");
690 } 839 }
840
691 void test_star_eq() { 841 void test_star_eq() {
692 assertToken(TokenType.STAR_EQ, "*="); 842 assertToken(TokenType.STAR_EQ, "*=");
693 } 843 }
844
694 void test_startAndEnd() { 845 void test_startAndEnd() {
695 Token token = scan("a"); 846 Token token = scan("a");
696 Token previous = token.previous; 847 Token previous = token.previous;
697 JUnitTestCase.assertEquals(token, previous.next); 848 JUnitTestCase.assertEquals(token, previous.next);
698 JUnitTestCase.assertEquals(previous, previous.previous); 849 JUnitTestCase.assertEquals(previous, previous.previous);
699 Token next = token.next; 850 Token next = token.next;
700 JUnitTestCase.assertEquals(next, next.next); 851 JUnitTestCase.assertEquals(next, next.next);
701 JUnitTestCase.assertEquals(token, next.previous); 852 JUnitTestCase.assertEquals(token, next.previous);
702 } 853 }
854
703 void test_string_multi_double() { 855 void test_string_multi_double() {
704 assertToken(TokenType.STRING, "\"\"\"line1\nline2\"\"\""); 856 assertToken(TokenType.STRING, "\"\"\"line1\nline2\"\"\"");
705 } 857 }
858
706 void test_string_multi_embeddedQuotes() { 859 void test_string_multi_embeddedQuotes() {
707 assertToken(TokenType.STRING, "\"\"\"line1\n\"\"\nline2\"\"\""); 860 assertToken(TokenType.STRING, "\"\"\"line1\n\"\"\nline2\"\"\"");
708 } 861 }
862
709 void test_string_multi_embeddedQuotes_escapedChar() { 863 void test_string_multi_embeddedQuotes_escapedChar() {
710 assertToken(TokenType.STRING, "\"\"\"a\"\"\\tb\"\"\""); 864 assertToken(TokenType.STRING, "\"\"\"a\"\"\\tb\"\"\"");
711 } 865 }
866
712 void test_string_multi_interpolation_block() { 867 void test_string_multi_interpolation_block() {
713 assertTokens("\"Hello \${name}!\"", [ 868 assertTokens("\"Hello \${name}!\"", [
714 new StringToken(TokenType.STRING, "\"Hello ", 0), 869 new StringToken(TokenType.STRING, "\"Hello ", 0),
715 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7), 870 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
716 new StringToken(TokenType.IDENTIFIER, "name", 9), 871 new StringToken(TokenType.IDENTIFIER, "name", 9),
717 new Token(TokenType.CLOSE_CURLY_BRACKET, 13), 872 new Token(TokenType.CLOSE_CURLY_BRACKET, 13),
718 new StringToken(TokenType.STRING, "!\"", 14)]); 873 new StringToken(TokenType.STRING, "!\"", 14)]);
719 } 874 }
875
720 void test_string_multi_interpolation_identifier() { 876 void test_string_multi_interpolation_identifier() {
721 assertTokens("\"Hello \$name!\"", [ 877 assertTokens("\"Hello \$name!\"", [
722 new StringToken(TokenType.STRING, "\"Hello ", 0), 878 new StringToken(TokenType.STRING, "\"Hello ", 0),
723 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7), 879 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
724 new StringToken(TokenType.IDENTIFIER, "name", 8), 880 new StringToken(TokenType.IDENTIFIER, "name", 8),
725 new StringToken(TokenType.STRING, "!\"", 12)]); 881 new StringToken(TokenType.STRING, "!\"", 12)]);
726 } 882 }
883
727 void test_string_multi_single() { 884 void test_string_multi_single() {
728 assertToken(TokenType.STRING, "'''string'''"); 885 assertToken(TokenType.STRING, "'''string'''");
729 } 886 }
887
730 void test_string_multi_slashEnter() { 888 void test_string_multi_slashEnter() {
731 assertToken(TokenType.STRING, "'''\\\n'''"); 889 assertToken(TokenType.STRING, "'''\\\n'''");
732 } 890 }
891
733 void test_string_multi_unterminated() { 892 void test_string_multi_unterminated() {
734 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "'''string"); 893 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "'''string");
735 } 894 }
895
736 void test_string_raw_multi_double() { 896 void test_string_raw_multi_double() {
737 assertToken(TokenType.STRING, "r\"\"\"line1\nline2\"\"\""); 897 assertToken(TokenType.STRING, "r\"\"\"line1\nline2\"\"\"");
738 } 898 }
899
739 void test_string_raw_multi_single() { 900 void test_string_raw_multi_single() {
740 assertToken(TokenType.STRING, "r'''string'''"); 901 assertToken(TokenType.STRING, "r'''string'''");
741 } 902 }
903
742 void test_string_raw_multi_unterminated() { 904 void test_string_raw_multi_unterminated() {
743 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 9, "r'''string"); 905 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 9, "r'''string");
744 } 906 }
907
745 void test_string_raw_simple_double() { 908 void test_string_raw_simple_double() {
746 assertToken(TokenType.STRING, "r\"string\""); 909 assertToken(TokenType.STRING, "r\"string\"");
747 } 910 }
911
748 void test_string_raw_simple_single() { 912 void test_string_raw_simple_single() {
749 assertToken(TokenType.STRING, "r'string'"); 913 assertToken(TokenType.STRING, "r'string'");
750 } 914 }
915
751 void test_string_raw_simple_unterminated_eof() { 916 void test_string_raw_simple_unterminated_eof() {
752 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "r'string"); 917 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "r'string");
753 } 918 }
919
754 void test_string_raw_simple_unterminated_eol() { 920 void test_string_raw_simple_unterminated_eol() {
755 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "r'string\n"); 921 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "r'string\n");
756 } 922 }
923
757 void test_string_simple_double() { 924 void test_string_simple_double() {
758 assertToken(TokenType.STRING, "\"string\""); 925 assertToken(TokenType.STRING, "\"string\"");
759 } 926 }
927
760 void test_string_simple_escapedDollar() { 928 void test_string_simple_escapedDollar() {
761 assertToken(TokenType.STRING, "'a\\\$b'"); 929 assertToken(TokenType.STRING, "'a\\\$b'");
762 } 930 }
931
763 void test_string_simple_interpolation_adjacentIdentifiers() { 932 void test_string_simple_interpolation_adjacentIdentifiers() {
764 assertTokens("'\$a\$b'", [ 933 assertTokens("'\$a\$b'", [
765 new StringToken(TokenType.STRING, "'", 0), 934 new StringToken(TokenType.STRING, "'", 0),
766 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 935 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
767 new StringToken(TokenType.IDENTIFIER, "a", 2), 936 new StringToken(TokenType.IDENTIFIER, "a", 2),
768 new StringToken(TokenType.STRING, "", 3), 937 new StringToken(TokenType.STRING, "", 3),
769 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3), 938 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
770 new StringToken(TokenType.IDENTIFIER, "b", 4), 939 new StringToken(TokenType.IDENTIFIER, "b", 4),
771 new StringToken(TokenType.STRING, "'", 5)]); 940 new StringToken(TokenType.STRING, "'", 5)]);
772 } 941 }
942
773 void test_string_simple_interpolation_block() { 943 void test_string_simple_interpolation_block() {
774 assertTokens("'Hello \${name}!'", [ 944 assertTokens("'Hello \${name}!'", [
775 new StringToken(TokenType.STRING, "'Hello ", 0), 945 new StringToken(TokenType.STRING, "'Hello ", 0),
776 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7), 946 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 7),
777 new StringToken(TokenType.IDENTIFIER, "name", 9), 947 new StringToken(TokenType.IDENTIFIER, "name", 9),
778 new Token(TokenType.CLOSE_CURLY_BRACKET, 13), 948 new Token(TokenType.CLOSE_CURLY_BRACKET, 13),
779 new StringToken(TokenType.STRING, "!'", 14)]); 949 new StringToken(TokenType.STRING, "!'", 14)]);
780 } 950 }
951
781 void test_string_simple_interpolation_blockWithNestedMap() { 952 void test_string_simple_interpolation_blockWithNestedMap() {
782 assertTokens("'a \${f({'b' : 'c'})} d'", [ 953 assertTokens("'a \${f({'b' : 'c'})} d'", [
783 new StringToken(TokenType.STRING, "'a ", 0), 954 new StringToken(TokenType.STRING, "'a ", 0),
784 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3), 955 new StringToken(TokenType.STRING_INTERPOLATION_EXPRESSION, "\${", 3),
785 new StringToken(TokenType.IDENTIFIER, "f", 5), 956 new StringToken(TokenType.IDENTIFIER, "f", 5),
786 new Token(TokenType.OPEN_PAREN, 6), 957 new Token(TokenType.OPEN_PAREN, 6),
787 new Token(TokenType.OPEN_CURLY_BRACKET, 7), 958 new Token(TokenType.OPEN_CURLY_BRACKET, 7),
788 new StringToken(TokenType.STRING, "'b'", 8), 959 new StringToken(TokenType.STRING, "'b'", 8),
789 new Token(TokenType.COLON, 12), 960 new Token(TokenType.COLON, 12),
790 new StringToken(TokenType.STRING, "'c'", 14), 961 new StringToken(TokenType.STRING, "'c'", 14),
791 new Token(TokenType.CLOSE_CURLY_BRACKET, 17), 962 new Token(TokenType.CLOSE_CURLY_BRACKET, 17),
792 new Token(TokenType.CLOSE_PAREN, 18), 963 new Token(TokenType.CLOSE_PAREN, 18),
793 new Token(TokenType.CLOSE_CURLY_BRACKET, 19), 964 new Token(TokenType.CLOSE_CURLY_BRACKET, 19),
794 new StringToken(TokenType.STRING, " d'", 20)]); 965 new StringToken(TokenType.STRING, " d'", 20)]);
795 } 966 }
967
796 void test_string_simple_interpolation_firstAndLast() { 968 void test_string_simple_interpolation_firstAndLast() {
797 assertTokens("'\$greeting \$name'", [ 969 assertTokens("'\$greeting \$name'", [
798 new StringToken(TokenType.STRING, "'", 0), 970 new StringToken(TokenType.STRING, "'", 0),
799 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 971 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
800 new StringToken(TokenType.IDENTIFIER, "greeting", 2), 972 new StringToken(TokenType.IDENTIFIER, "greeting", 2),
801 new StringToken(TokenType.STRING, " ", 10), 973 new StringToken(TokenType.STRING, " ", 10),
802 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 11), 974 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 11),
803 new StringToken(TokenType.IDENTIFIER, "name", 12), 975 new StringToken(TokenType.IDENTIFIER, "name", 12),
804 new StringToken(TokenType.STRING, "'", 16)]); 976 new StringToken(TokenType.STRING, "'", 16)]);
805 } 977 }
978
806 void test_string_simple_interpolation_identifier() { 979 void test_string_simple_interpolation_identifier() {
807 assertTokens("'Hello \$name!'", [ 980 assertTokens("'Hello \$name!'", [
808 new StringToken(TokenType.STRING, "'Hello ", 0), 981 new StringToken(TokenType.STRING, "'Hello ", 0),
809 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7), 982 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 7),
810 new StringToken(TokenType.IDENTIFIER, "name", 8), 983 new StringToken(TokenType.IDENTIFIER, "name", 8),
811 new StringToken(TokenType.STRING, "!'", 12)]); 984 new StringToken(TokenType.STRING, "!'", 12)]);
812 } 985 }
986
813 void test_string_simple_interpolation_missingIdentifier() { 987 void test_string_simple_interpolation_missingIdentifier() {
814 assertTokens("'\$x\$'", [ 988 assertTokens("'\$x\$'", [
815 new StringToken(TokenType.STRING, "'", 0), 989 new StringToken(TokenType.STRING, "'", 0),
816 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 990 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
817 new StringToken(TokenType.IDENTIFIER, "x", 2), 991 new StringToken(TokenType.IDENTIFIER, "x", 2),
818 new StringToken(TokenType.STRING, "", 3), 992 new StringToken(TokenType.STRING, "", 3),
819 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3), 993 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 3),
820 new StringToken(TokenType.STRING, "'", 4)]); 994 new StringToken(TokenType.STRING, "'", 4)]);
821 } 995 }
996
822 void test_string_simple_interpolation_nonIdentifier() { 997 void test_string_simple_interpolation_nonIdentifier() {
823 assertTokens("'\$1'", [ 998 assertTokens("'\$1'", [
824 new StringToken(TokenType.STRING, "'", 0), 999 new StringToken(TokenType.STRING, "'", 0),
825 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1), 1000 new StringToken(TokenType.STRING_INTERPOLATION_IDENTIFIER, "\$", 1),
826 new StringToken(TokenType.STRING, "1'", 2)]); 1001 new StringToken(TokenType.STRING, "1'", 2)]);
827 } 1002 }
1003
828 void test_string_simple_single() { 1004 void test_string_simple_single() {
829 assertToken(TokenType.STRING, "'string'"); 1005 assertToken(TokenType.STRING, "'string'");
830 } 1006 }
1007
831 void test_string_simple_unterminated_eof() { 1008 void test_string_simple_unterminated_eof() {
832 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 6, "'string"); 1009 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 6, "'string");
833 } 1010 }
1011
834 void test_string_simple_unterminated_eol() { 1012 void test_string_simple_unterminated_eol() {
835 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "'string\r"); 1013 assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 7, "'string\r");
836 } 1014 }
1015
837 void test_tilde() { 1016 void test_tilde() {
838 assertToken(TokenType.TILDE, "~"); 1017 assertToken(TokenType.TILDE, "~");
839 } 1018 }
1019
840 void test_tilde_slash() { 1020 void test_tilde_slash() {
841 assertToken(TokenType.TILDE_SLASH, "~/"); 1021 assertToken(TokenType.TILDE_SLASH, "~/");
842 } 1022 }
1023
843 void test_tilde_slash_eq() { 1024 void test_tilde_slash_eq() {
844 assertToken(TokenType.TILDE_SLASH_EQ, "~/="); 1025 assertToken(TokenType.TILDE_SLASH_EQ, "~/=");
845 } 1026 }
1027
846 void test_unclosedPairInInterpolation() { 1028 void test_unclosedPairInInterpolation() {
847 GatheringErrorListener listener = new GatheringErrorListener(); 1029 GatheringErrorListener listener = new GatheringErrorListener();
848 scan2("'\${(}'", listener); 1030 scan2("'\${(}'", listener);
849 } 1031 }
1032
850 void assertComment(TokenType commentType, String source) { 1033 void assertComment(TokenType commentType, String source) {
851 Token token = scan(source); 1034 Token token = scan(source);
852 JUnitTestCase.assertNotNull(token); 1035 JUnitTestCase.assertNotNull(token);
853 JUnitTestCase.assertEquals(TokenType.EOF, token.type); 1036 JUnitTestCase.assertEquals(TokenType.EOF, token.type);
854 Token comment = token.precedingComments; 1037 Token comment = token.precedingComments;
855 JUnitTestCase.assertNotNull(comment); 1038 JUnitTestCase.assertNotNull(comment);
856 JUnitTestCase.assertEquals(commentType, comment.type); 1039 JUnitTestCase.assertEquals(commentType, comment.type);
857 JUnitTestCase.assertEquals(0, comment.offset); 1040 JUnitTestCase.assertEquals(0, comment.offset);
858 JUnitTestCase.assertEquals(source.length, comment.length); 1041 JUnitTestCase.assertEquals(source.length, comment.length);
859 JUnitTestCase.assertEquals(source, comment.lexeme); 1042 JUnitTestCase.assertEquals(source, comment.lexeme);
(...skipping 29 matching lines...) Expand all
889 */ 1072 */
890 void assertKeywordToken(String source) { 1073 void assertKeywordToken(String source) {
891 Token token = scan(source); 1074 Token token = scan(source);
892 JUnitTestCase.assertNotNull(token); 1075 JUnitTestCase.assertNotNull(token);
893 JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type); 1076 JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type);
894 JUnitTestCase.assertEquals(0, token.offset); 1077 JUnitTestCase.assertEquals(0, token.offset);
895 JUnitTestCase.assertEquals(source.length, token.length); 1078 JUnitTestCase.assertEquals(source.length, token.length);
896 JUnitTestCase.assertEquals(source, token.lexeme); 1079 JUnitTestCase.assertEquals(source, token.lexeme);
897 Object value = token.value(); 1080 Object value = token.value();
898 JUnitTestCase.assertTrue(value is Keyword); 1081 JUnitTestCase.assertTrue(value is Keyword);
899 JUnitTestCase.assertEquals(source, ((value as Keyword)).syntax); 1082 JUnitTestCase.assertEquals(source, (value as Keyword).syntax);
900 token = scan(" ${source} "); 1083 token = scan(" ${source} ");
901 JUnitTestCase.assertNotNull(token); 1084 JUnitTestCase.assertNotNull(token);
902 JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type); 1085 JUnitTestCase.assertEquals(TokenType.KEYWORD, token.type);
903 JUnitTestCase.assertEquals(1, token.offset); 1086 JUnitTestCase.assertEquals(1, token.offset);
904 JUnitTestCase.assertEquals(source.length, token.length); 1087 JUnitTestCase.assertEquals(source.length, token.length);
905 JUnitTestCase.assertEquals(source, token.lexeme); 1088 JUnitTestCase.assertEquals(source, token.lexeme);
906 value = token.value(); 1089 value = token.value();
907 JUnitTestCase.assertTrue(value is Keyword); 1090 JUnitTestCase.assertTrue(value is Keyword);
908 JUnitTestCase.assertEquals(source, ((value as Keyword)).syntax); 1091 JUnitTestCase.assertEquals(source, (value as Keyword).syntax);
909 JUnitTestCase.assertEquals(TokenType.EOF, token.next.type); 1092 JUnitTestCase.assertEquals(TokenType.EOF, token.next.type);
910 } 1093 }
1094
911 void assertLineInfo(String source, List<ScannerTest_ExpectedLocation> expected Locations) { 1095 void assertLineInfo(String source, List<ScannerTest_ExpectedLocation> expected Locations) {
912 GatheringErrorListener listener = new GatheringErrorListener(); 1096 GatheringErrorListener listener = new GatheringErrorListener();
913 scan2(source, listener); 1097 scan2(source, listener);
914 listener.assertNoErrors(); 1098 listener.assertNoErrors();
915 LineInfo info = listener.getLineInfo(new TestSource()); 1099 LineInfo info = listener.getLineInfo(new TestSource());
916 JUnitTestCase.assertNotNull(info); 1100 JUnitTestCase.assertNotNull(info);
917 for (ScannerTest_ExpectedLocation expectedLocation in expectedLocations) { 1101 for (ScannerTest_ExpectedLocation expectedLocation in expectedLocations) {
918 LineInfo_Location location = info.getLocation(expectedLocation._offset); 1102 LineInfo_Location location = info.getLocation(expectedLocation._offset);
919 JUnitTestCase.assertEquals(expectedLocation._lineNumber, location.lineNumb er); 1103 JUnitTestCase.assertEquals(expectedLocation._lineNumber, location.lineNumb er);
920 JUnitTestCase.assertEquals(expectedLocation._columnNumber, location.column Number); 1104 JUnitTestCase.assertEquals(expectedLocation._columnNumber, location.column Number);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 Token expectedToken = expectedTokens[i]; 1166 Token expectedToken = expectedTokens[i];
983 JUnitTestCase.assertEqualsMsg("Wrong type for token ${i}", expectedToken.t ype, token.type); 1167 JUnitTestCase.assertEqualsMsg("Wrong type for token ${i}", expectedToken.t ype, token.type);
984 JUnitTestCase.assertEqualsMsg("Wrong offset for token ${i}", expectedToken .offset, token.offset); 1168 JUnitTestCase.assertEqualsMsg("Wrong offset for token ${i}", expectedToken .offset, token.offset);
985 JUnitTestCase.assertEqualsMsg("Wrong length for token ${i}", expectedToken .length, token.length); 1169 JUnitTestCase.assertEqualsMsg("Wrong length for token ${i}", expectedToken .length, token.length);
986 JUnitTestCase.assertEqualsMsg("Wrong lexeme for token ${i}", expectedToken .lexeme, token.lexeme); 1170 JUnitTestCase.assertEqualsMsg("Wrong lexeme for token ${i}", expectedToken .lexeme, token.lexeme);
987 token = token.next; 1171 token = token.next;
988 JUnitTestCase.assertNotNull(token); 1172 JUnitTestCase.assertNotNull(token);
989 } 1173 }
990 JUnitTestCase.assertEquals(TokenType.EOF, token.type); 1174 JUnitTestCase.assertEquals(TokenType.EOF, token.type);
991 } 1175 }
1176
992 Token scan(String source) { 1177 Token scan(String source) {
993 GatheringErrorListener listener = new GatheringErrorListener(); 1178 GatheringErrorListener listener = new GatheringErrorListener();
994 Token token = scan2(source, listener); 1179 Token token = scan2(source, listener);
995 listener.assertNoErrors(); 1180 listener.assertNoErrors();
996 return token; 1181 return token;
997 } 1182 }
1183
998 Token scan2(String source, GatheringErrorListener listener) { 1184 Token scan2(String source, GatheringErrorListener listener) {
999 Scanner scanner = new Scanner(null, new CharSequenceReader(new CharSequence( source)), listener); 1185 Scanner scanner = new Scanner(null, new CharSequenceReader(new CharSequence( source)), listener);
1000 Token result = scanner.tokenize(); 1186 Token result = scanner.tokenize();
1001 listener.setLineInfo(new TestSource(), scanner.lineStarts); 1187 listener.setLineInfo(new TestSource(), scanner.lineStarts);
1002 return result; 1188 return result;
1003 } 1189 }
1190
1004 static dartSuite() { 1191 static dartSuite() {
1005 _ut.group('ScannerTest', () { 1192 _ut.group('ScannerTest', () {
1006 _ut.test('test_ampersand', () { 1193 _ut.test('test_ampersand', () {
1007 final __test = new ScannerTest(); 1194 final __test = new ScannerTest();
1008 runJUnitTest(__test, __test.test_ampersand); 1195 runJUnitTest(__test, __test.test_ampersand);
1009 }); 1196 });
1010 _ut.test('test_ampersand_ampersand', () { 1197 _ut.test('test_ampersand_ampersand', () {
1011 final __test = new ScannerTest(); 1198 final __test = new ScannerTest();
1012 runJUnitTest(__test, __test.test_ampersand_ampersand); 1199 runJUnitTest(__test, __test.test_ampersand_ampersand);
1013 }); 1200 });
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 final __test = new ScannerTest(); 1834 final __test = new ScannerTest();
1648 runJUnitTest(__test, __test.test_tilde_slash_eq); 1835 runJUnitTest(__test, __test.test_tilde_slash_eq);
1649 }); 1836 });
1650 _ut.test('test_unclosedPairInInterpolation', () { 1837 _ut.test('test_unclosedPairInInterpolation', () {
1651 final __test = new ScannerTest(); 1838 final __test = new ScannerTest();
1652 runJUnitTest(__test, __test.test_unclosedPairInInterpolation); 1839 runJUnitTest(__test, __test.test_unclosedPairInInterpolation);
1653 }); 1840 });
1654 }); 1841 });
1655 } 1842 }
1656 } 1843 }
1844
1657 /** 1845 /**
1658 * Instances of the class `ExpectedLocation` encode information about the expect ed location 1846 * Instances of the class `ExpectedLocation` encode information about the expect ed location
1659 * of a given offset in source code. 1847 * of a given offset in source code.
1660 */ 1848 */
1661 class ScannerTest_ExpectedLocation { 1849 class ScannerTest_ExpectedLocation {
1662 int _offset = 0; 1850 int _offset = 0;
1851
1663 int _lineNumber = 0; 1852 int _lineNumber = 0;
1853
1664 int _columnNumber = 0; 1854 int _columnNumber = 0;
1855
1665 ScannerTest_ExpectedLocation(int offset, int lineNumber, int columnNumber) { 1856 ScannerTest_ExpectedLocation(int offset, int lineNumber, int columnNumber) {
1666 this._offset = offset; 1857 this._offset = offset;
1667 this._lineNumber = lineNumber; 1858 this._lineNumber = lineNumber;
1668 this._columnNumber = columnNumber; 1859 this._columnNumber = columnNumber;
1669 } 1860 }
1670 } 1861 }
1862
1671 class IncrementalScannerTest extends EngineTestCase { 1863 class IncrementalScannerTest extends EngineTestCase {
1864 /**
1865 * The scanner used to perform incremental scanning, or `null` if [scan] has n ot been
1866 * invoked.
1867 */
1868 IncrementalScanner _incrementalScanner;
1869
1870 /**
1871 * The first token from the token stream resulting from parsing the original s ource, or
1872 * `null` if [scan] has not been invoked.
1873 */
1672 Token _originalTokens; 1874 Token _originalTokens;
1673 void test_rescan_addedBeforeIdentifier1() { 1875
1674 IncrementalScanner scanner = assertTokens("a + b;", "xa + b;"); 1876 void fail_delete_identifier_beginning() {
1675 JUnitTestCase.assertEquals("xa", scanner.firstToken.lexeme); 1877 scan("", "ab", "", "s + b;");
1676 JUnitTestCase.assertEquals("xa", scanner.lastToken.lexeme); 1878 assertTokens(["s"]);
1677 } 1879 }
1678 void test_rescan_addedBeforeIdentifier2() { 1880
1679 IncrementalScanner scanner = assertTokens("a + b;", "a + xb;"); 1881 void fail_delete_mergeTokens() {
1680 JUnitTestCase.assertEquals("xb", scanner.firstToken.lexeme); 1882 scan("a", " + b + ", "", "c;");
1681 JUnitTestCase.assertEquals("xb", scanner.lastToken.lexeme); 1883 assertTokens(["ac"]);
1682 } 1884 }
1683 void test_rescan_addedNewIdentifier1() { 1885
1684 IncrementalScanner scanner = assertTokens("a; c;", "a; b c;"); 1886 void fail_replace_multiple_partialFirstAndLast() {
1685 JUnitTestCase.assertEquals("b", scanner.firstToken.lexeme); 1887 scan("a", "a + b", "b * a", "b;");
1686 JUnitTestCase.assertEquals("b", scanner.lastToken.lexeme); 1888 assertTokens(["ab", "*", "ab"]);
1687 } 1889 }
1688 void test_rescan_addedNewIdentifier2() { 1890
1689 IncrementalScanner scanner = assertTokens("a; c;", "a;b c;"); 1891 void test_delete_identifier_end() {
1690 JUnitTestCase.assertEquals("b", scanner.firstToken.lexeme); 1892 scan("a", "bs", "", " + b;");
1691 JUnitTestCase.assertEquals("b", scanner.lastToken.lexeme); 1893 assertTokens(["a"]);
1692 Token oldToken = _originalTokens.next;
1693 JUnitTestCase.assertSame(TokenType.SEMICOLON, oldToken.type);
1694 Token newToken = scanner.tokenMap.get(oldToken);
1695 JUnitTestCase.assertNotNull(newToken);
1696 JUnitTestCase.assertEquals(TokenType.SEMICOLON, newToken.type);
1697 JUnitTestCase.assertNotSame(oldToken, newToken);
1698 } 1894 }
1699 void test_rescan_addedToIdentifier1() { 1895
1700 IncrementalScanner scanner = assertTokens("a + b;", "abs + b;"); 1896 void test_delete_identifier_middle() {
1701 JUnitTestCase.assertEquals("abs", scanner.firstToken.lexeme); 1897 scan("a", "b", "", "s + b;");
1702 JUnitTestCase.assertEquals("abs", scanner.lastToken.lexeme); 1898 assertTokens(["as"]);
1703 Token oldToken = _originalTokens.next;
1704 JUnitTestCase.assertEquals(TokenType.PLUS, oldToken.type);
1705 Token newToken = scanner.tokenMap.get(oldToken);
1706 JUnitTestCase.assertNotNull(newToken);
1707 JUnitTestCase.assertEquals(TokenType.PLUS, newToken.type);
1708 JUnitTestCase.assertNotSame(oldToken, newToken);
1709 } 1899 }
1710 void test_rescan_addedToIdentifier2() { 1900
1711 IncrementalScanner scanner = assertTokens("a + b;", "a + by;"); 1901 void test_insert_afterIdentifier1() {
1712 JUnitTestCase.assertEquals("by", scanner.firstToken.lexeme); 1902 scan("a", "", "bs", " + b;");
1713 JUnitTestCase.assertEquals("by", scanner.lastToken.lexeme); 1903 assertTokens(["abs"]);
1904 assertReplaced(1, "+");
1714 } 1905 }
1715 void test_rescan_appendWhitespace1() { 1906
1716 IncrementalScanner scanner = assertTokens("a + b;", "a + b; "); 1907 void test_insert_afterIdentifier2() {
1717 JUnitTestCase.assertNull(scanner.firstToken); 1908 scan("a + b", "", "y", ";");
1718 JUnitTestCase.assertNull(scanner.lastToken); 1909 assertTokens(["by"]);
1719 } 1910 }
1720 void test_rescan_appendWhitespace2() { 1911
1721 IncrementalScanner scanner = assertTokens("a + b; ", "a + b; "); 1912 void test_insert_beforeIdentifier() {
1722 JUnitTestCase.assertNull(scanner.firstToken); 1913 scan("a + ", "", "x", "b;");
1723 JUnitTestCase.assertNull(scanner.lastToken); 1914 assertTokens(["xb"]);
1724 } 1915 }
1725 void test_rescan_insertedPeriod() { 1916
1726 IncrementalScanner scanner = assertTokens("a + b;", "a + b.;"); 1917 void test_insert_beforeIdentifier_firstToken() {
1727 JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); 1918 scan("", "", "x", "a + b;");
1728 JUnitTestCase.assertEquals(".", scanner.lastToken.lexeme); 1919 assertTokens(["xa"]);
1729 } 1920 }
1730 void test_rescan_insertedPeriodBetweenIdentifiers1() { 1921
1731 IncrementalScanner scanner = assertTokens("a b;", "a. b;"); 1922 void test_insert_convertOneFunctionToTwo() {
1732 JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); 1923 scan("f()", "", " => 0; g()", " {}");
1733 JUnitTestCase.assertEquals(".", scanner.lastToken.lexeme); 1924 assertTokens(["=>", "0", ";", "g", "(", ")"]);
1734 } 1925 }
1735 void test_rescan_insertedPeriodBetweenIdentifiers2() { 1926
1736 IncrementalScanner scanner = assertTokens("a b;", "a .b;"); 1927 void test_insert_newIdentifier1() {
1737 JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); 1928 scan("a; ", "", "b", " c;");
1738 JUnitTestCase.assertEquals(".", scanner.lastToken.lexeme); 1929 assertTokens(["b"]);
1739 } 1930 }
1740 void test_rescan_insertedPeriodBetweenIdentifiers3() { 1931
1741 IncrementalScanner scanner = assertTokens("a b;", "a . b;"); 1932 void test_insert_newIdentifier2() {
1742 JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); 1933 scan("a;", "", "b", " c;");
1743 JUnitTestCase.assertEquals(".", scanner.lastToken.lexeme); 1934 assertTokens(["b"]);
1935 assertReplaced(1, ";");
1744 } 1936 }
1745 void test_rescan_insertedPeriodIdentifier() { 1937
1746 IncrementalScanner scanner = assertTokens("a + b;", "a + b.x;"); 1938 void test_insert_period() {
1747 JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); 1939 scan("a + b", "", ".", ";");
1748 JUnitTestCase.assertEquals("x", scanner.lastToken.lexeme); 1940 assertTokens(["."]);
1749 } 1941 }
1750 void test_rescan_insertedPeriodInsideExistingIdentifier() { 1942
1751 IncrementalScanner scanner = assertTokens("ab;", "a.b;"); 1943 void test_insert_period_betweenIdentifiers1() {
1752 JUnitTestCase.assertEquals("a", scanner.firstToken.lexeme); 1944 scan("a", "", ".", " b");
1753 JUnitTestCase.assertEquals("b", scanner.lastToken.lexeme); 1945 assertTokens(["."]);
1754 } 1946 }
1755 void test_rescan_insertLeadingWhitespace() { 1947
1756 IncrementalScanner scanner = assertTokens("a + b;", " a + b;"); 1948 void test_insert_period_betweenIdentifiers2() {
1757 JUnitTestCase.assertNull(scanner.firstToken); 1949 scan("a ", "", ".", "b;");
1758 JUnitTestCase.assertNull(scanner.lastToken); 1950 assertTokens(["."]);
1759 } 1951 }
1760 void test_rescan_insertWhitespace() { 1952
1761 IncrementalScanner scanner = assertTokens("a + b;", "a + b;"); 1953 void test_insert_period_betweenIdentifiers3() {
1762 JUnitTestCase.assertNull(scanner.firstToken); 1954 scan("a ", "", ".", " b;");
1763 JUnitTestCase.assertNull(scanner.lastToken); 1955 assertTokens(["."]);
1764 } 1956 }
1765 void test_rescan_insertWhitespaceWithMultipleComments() { 1957
1766 IncrementalScanner scanner = assertTokens(EngineTestCase.createSource(["//co mment", "//comment2", "a + b;"]), EngineTestCase.createSource(["//comment", "//c omment2", "a + b;"])); 1958 void test_insert_period_insideExistingIdentifier() {
1767 JUnitTestCase.assertNull(scanner.firstToken); 1959 scan("a", "", ".", "b;");
1768 JUnitTestCase.assertNull(scanner.lastToken); 1960 assertTokens(["a", ".", "b"]);
1769 } 1961 }
1770 void test_rescan_oneFunctionToTwo() { 1962
1771 IncrementalScanner scanner = assertTokens("f() {}", "f() => 0; g() {}"); 1963 void test_insert_periodAndIdentifier() {
1772 JUnitTestCase.assertEquals("=>", scanner.firstToken.lexeme); 1964 scan("a + b", "", ".x", ";");
1773 JUnitTestCase.assertEquals(")", scanner.lastToken.lexeme); 1965 assertTokens([".", "x"]);
1774 } 1966 }
1967
1968 void test_insert_whitespace_beginning_beforeToken() {
1969 scan("", "", " ", "a + b;");
1970 assertTokens([]);
1971 }
1972
1973 void test_insert_whitespace_betweenTokens() {
1974 scan("a ", "", " ", "+ b;");
1975 assertTokens([]);
1976 }
1977
1978 void test_insert_whitespace_end_afterToken() {
1979 scan("a + b;", "", " ", "");
1980 assertTokens([]);
1981 }
1982
1983 void test_insert_whitespace_end_afterWhitespace() {
1984 scan("a + b; ", "", " ", "");
1985 assertTokens([]);
1986 }
1987
1988 void test_insert_whitespace_withMultipleComments() {
1989 scan(EngineTestCase.createSource(["//comment", "//comment2", "a"]), "", " ", " + b;");
1990 assertTokens([]);
1991 }
1992
1993 void test_replace_identifier_beginning() {
1994 scan("", "b", "f", "ell + b;");
1995 assertTokens(["fell"]);
1996 }
1997
1998 void test_replace_identifier_end() {
1999 scan("bel", "l", "t", " + b;");
2000 assertTokens(["belt"]);
2001 }
2002
2003 void test_replace_identifier_middle() {
2004 scan("f", "ir", "ro", "st + b;");
2005 assertTokens(["frost"]);
2006 }
2007
2008 void test_replace_operator_oneForMany() {
2009 scan("a ", "+", "* c -", " b;");
2010 assertTokens(["*", "c", "-"]);
2011 }
2012
2013 void test_replace_operator_oneForOne() {
2014 scan("a ", "+", "*", " b;");
2015 assertTokens(["*"]);
2016 }
2017
1775 void test_tokenMap() { 2018 void test_tokenMap() {
1776 IncrementalScanner scanner = assertTokens("main() {a + b;}", "main() { a + b ;}"); 2019 scan("main() {", "", " ", "a + b;}");
1777 TokenMap tokenMap = scanner.tokenMap; 2020 TokenMap tokenMap = _incrementalScanner.tokenMap;
1778 Token oldToken = _originalTokens; 2021 Token oldToken = _originalTokens;
1779 while (oldToken.type != TokenType.EOF) { 2022 while (oldToken.type != TokenType.EOF) {
1780 Token newToken = tokenMap.get(oldToken); 2023 Token newToken = tokenMap.get(oldToken);
1781 JUnitTestCase.assertNotSame(oldToken, newToken); 2024 JUnitTestCase.assertNotSame(oldToken, newToken);
1782 JUnitTestCase.assertSame(oldToken.type, newToken.type); 2025 JUnitTestCase.assertSame(oldToken.type, newToken.type);
1783 JUnitTestCase.assertEquals(oldToken.lexeme, newToken.lexeme); 2026 JUnitTestCase.assertEquals(oldToken.lexeme, newToken.lexeme);
1784 oldToken = oldToken.next; 2027 oldToken = oldToken.next;
1785 } 2028 }
1786 } 2029 }
1787 IncrementalScanner assertTokens(String originalContents, String modifiedConten ts) { 2030
1788 int originalLength = originalContents.length; 2031 void assertReplaced(int tokenOffset, String lexeme) {
1789 int modifiedLength = modifiedContents.length; 2032 Token oldToken = _originalTokens;
1790 int replaceStart = 0; 2033 for (int i = 0; i < tokenOffset; i++) {
1791 while (replaceStart < originalLength && replaceStart < modifiedLength && ori ginalContents.codeUnitAt(replaceStart) == modifiedContents.codeUnitAt(replaceSta rt)) { 2034 oldToken = oldToken.next;
1792 replaceStart++;
1793 } 2035 }
1794 int originalEnd = originalLength - 1; 2036 JUnitTestCase.assertEquals(lexeme, oldToken.lexeme);
1795 int modifiedEnd = modifiedLength - 1; 2037 Token newToken = _incrementalScanner.tokenMap.get(oldToken);
1796 while (originalEnd >= replaceStart && modifiedEnd >= replaceStart && origina lContents.codeUnitAt(originalEnd) == modifiedContents.codeUnitAt(modifiedEnd)) { 2038 JUnitTestCase.assertNotNull(newToken);
1797 originalEnd--; 2039 JUnitTestCase.assertEquals(lexeme, newToken.lexeme);
1798 modifiedEnd--; 2040 JUnitTestCase.assertNotSame(oldToken, newToken);
2041 }
2042
2043 void assertTokens(List<String> lexemes) {
2044 Token first = _incrementalScanner.firstToken;
2045 Token last = _incrementalScanner.lastToken;
2046 int count = lexemes.length;
2047 if (count == 0) {
2048 JUnitTestCase.assertNull(first);
2049 JUnitTestCase.assertNull(last);
2050 } else if (count == 1) {
2051 JUnitTestCase.assertNotNull(first);
2052 JUnitTestCase.assertEquals(lexemes[0], first.lexeme);
2053 JUnitTestCase.assertSame(first, last);
2054 } else {
2055 for (String lexeme in lexemes) {
2056 JUnitTestCase.assertNotNull(first);
2057 JUnitTestCase.assertEquals(lexeme, first.lexeme);
2058 first = first.next;
2059 }
2060 JUnitTestCase.assertSame(last.next, first);
1799 } 2061 }
2062 }
2063
2064 /**
2065 * Given a description of the original and modified contents, perform an incre mental scan of the
2066 * two pieces of text.
2067 *
2068 * @param prefix the unchanged text before the edit region
2069 * @param removed the text that was removed from the original contents
2070 * @param added the text that was added to the modified contents
2071 * @param suffix the unchanged text after the edit region
2072 */
2073 void scan(String prefix, String removed, String added, String suffix) {
2074 String originalContents = "${prefix}${removed}${suffix}";
2075 String modifiedContents = "${prefix}${added}${suffix}";
2076 int replaceStart = prefix.length;
1800 Source source = new TestSource(); 2077 Source source = new TestSource();
1801 GatheringErrorListener originalListener = new GatheringErrorListener(); 2078 GatheringErrorListener originalListener = new GatheringErrorListener();
1802 Scanner originalScanner = new Scanner(source, new CharSequenceReader(new Cha rSequence(originalContents)), originalListener); 2079 Scanner originalScanner = new Scanner(source, new CharSequenceReader(new Cha rSequence(originalContents)), originalListener);
1803 _originalTokens = originalScanner.tokenize(); 2080 _originalTokens = originalScanner.tokenize();
1804 JUnitTestCase.assertNotNull(_originalTokens); 2081 JUnitTestCase.assertNotNull(_originalTokens);
1805 GatheringErrorListener modifiedListener = new GatheringErrorListener(); 2082 GatheringErrorListener modifiedListener = new GatheringErrorListener();
1806 Scanner modifiedScanner = new Scanner(source, new CharSequenceReader(new Cha rSequence(modifiedContents)), modifiedListener); 2083 Scanner modifiedScanner = new Scanner(source, new CharSequenceReader(new Cha rSequence(modifiedContents)), modifiedListener);
1807 Token modifiedTokens = modifiedScanner.tokenize(); 2084 Token modifiedTokens = modifiedScanner.tokenize();
1808 JUnitTestCase.assertNotNull(modifiedTokens); 2085 JUnitTestCase.assertNotNull(modifiedTokens);
1809 GatheringErrorListener incrementalListener = new GatheringErrorListener(); 2086 GatheringErrorListener incrementalListener = new GatheringErrorListener();
1810 IncrementalScanner incrementalScanner = new IncrementalScanner(source, new C harSequenceReader(new CharSequence(modifiedContents)), incrementalListener); 2087 _incrementalScanner = new IncrementalScanner(source, new CharSequenceReader( new CharSequence(modifiedContents)), incrementalListener);
1811 Token incrementalTokens = incrementalScanner.rescan(_originalTokens, replace Start, originalEnd - replaceStart + 1, modifiedEnd - replaceStart + 1); 2088 Token incrementalTokens = _incrementalScanner.rescan(_originalTokens, replac eStart, removed.length, added.length);
1812 Token incrementalToken = incrementalTokens; 2089 Token incrementalToken = incrementalTokens;
1813 JUnitTestCase.assertNotNull(incrementalToken); 2090 JUnitTestCase.assertNotNull(incrementalToken);
1814 while (incrementalToken.type != TokenType.EOF && modifiedTokens.type != Toke nType.EOF) { 2091 while (incrementalToken.type != TokenType.EOF && modifiedTokens.type != Toke nType.EOF) {
1815 JUnitTestCase.assertSameMsg("Wrong type for token", modifiedTokens.type, i ncrementalToken.type); 2092 JUnitTestCase.assertSameMsg("Wrong type for token", modifiedTokens.type, i ncrementalToken.type);
1816 JUnitTestCase.assertEqualsMsg("Wrong offset for token", modifiedTokens.off set, incrementalToken.offset); 2093 JUnitTestCase.assertEqualsMsg("Wrong offset for token", modifiedTokens.off set, incrementalToken.offset);
1817 JUnitTestCase.assertEqualsMsg("Wrong length for token", modifiedTokens.len gth, incrementalToken.length); 2094 JUnitTestCase.assertEqualsMsg("Wrong length for token", modifiedTokens.len gth, incrementalToken.length);
1818 JUnitTestCase.assertEqualsMsg("Wrong lexeme for token", modifiedTokens.lex eme, incrementalToken.lexeme); 2095 JUnitTestCase.assertEqualsMsg("Wrong lexeme for token", modifiedTokens.lex eme, incrementalToken.lexeme);
1819 incrementalToken = incrementalToken.next; 2096 incrementalToken = incrementalToken.next;
1820 modifiedTokens = modifiedTokens.next; 2097 modifiedTokens = modifiedTokens.next;
1821 } 2098 }
1822 JUnitTestCase.assertSameMsg("Too many tokens", TokenType.EOF, incrementalTok en.type); 2099 JUnitTestCase.assertSameMsg("Too many tokens", TokenType.EOF, incrementalTok en.type);
1823 JUnitTestCase.assertSameMsg("Not enough tokens", TokenType.EOF, modifiedToke ns.type); 2100 JUnitTestCase.assertSameMsg("Not enough tokens", TokenType.EOF, modifiedToke ns.type);
1824 return incrementalScanner;
1825 } 2101 }
2102
1826 static dartSuite() { 2103 static dartSuite() {
1827 _ut.group('IncrementalScannerTest', () { 2104 _ut.group('IncrementalScannerTest', () {
1828 _ut.test('test_rescan_addedBeforeIdentifier1', () { 2105 _ut.test('test_delete_identifier_end', () {
1829 final __test = new IncrementalScannerTest(); 2106 final __test = new IncrementalScannerTest();
1830 runJUnitTest(__test, __test.test_rescan_addedBeforeIdentifier1); 2107 runJUnitTest(__test, __test.test_delete_identifier_end);
1831 }); 2108 });
1832 _ut.test('test_rescan_addedBeforeIdentifier2', () { 2109 _ut.test('test_delete_identifier_middle', () {
1833 final __test = new IncrementalScannerTest(); 2110 final __test = new IncrementalScannerTest();
1834 runJUnitTest(__test, __test.test_rescan_addedBeforeIdentifier2); 2111 runJUnitTest(__test, __test.test_delete_identifier_middle);
1835 }); 2112 });
1836 _ut.test('test_rescan_addedNewIdentifier1', () { 2113 _ut.test('test_insert_afterIdentifier1', () {
1837 final __test = new IncrementalScannerTest(); 2114 final __test = new IncrementalScannerTest();
1838 runJUnitTest(__test, __test.test_rescan_addedNewIdentifier1); 2115 runJUnitTest(__test, __test.test_insert_afterIdentifier1);
1839 }); 2116 });
1840 _ut.test('test_rescan_addedNewIdentifier2', () { 2117 _ut.test('test_insert_afterIdentifier2', () {
1841 final __test = new IncrementalScannerTest(); 2118 final __test = new IncrementalScannerTest();
1842 runJUnitTest(__test, __test.test_rescan_addedNewIdentifier2); 2119 runJUnitTest(__test, __test.test_insert_afterIdentifier2);
1843 }); 2120 });
1844 _ut.test('test_rescan_addedToIdentifier1', () { 2121 _ut.test('test_insert_beforeIdentifier', () {
1845 final __test = new IncrementalScannerTest(); 2122 final __test = new IncrementalScannerTest();
1846 runJUnitTest(__test, __test.test_rescan_addedToIdentifier1); 2123 runJUnitTest(__test, __test.test_insert_beforeIdentifier);
1847 }); 2124 });
1848 _ut.test('test_rescan_addedToIdentifier2', () { 2125 _ut.test('test_insert_beforeIdentifier_firstToken', () {
1849 final __test = new IncrementalScannerTest(); 2126 final __test = new IncrementalScannerTest();
1850 runJUnitTest(__test, __test.test_rescan_addedToIdentifier2); 2127 runJUnitTest(__test, __test.test_insert_beforeIdentifier_firstToken);
1851 }); 2128 });
1852 _ut.test('test_rescan_appendWhitespace1', () { 2129 _ut.test('test_insert_convertOneFunctionToTwo', () {
1853 final __test = new IncrementalScannerTest(); 2130 final __test = new IncrementalScannerTest();
1854 runJUnitTest(__test, __test.test_rescan_appendWhitespace1); 2131 runJUnitTest(__test, __test.test_insert_convertOneFunctionToTwo);
1855 }); 2132 });
1856 _ut.test('test_rescan_appendWhitespace2', () { 2133 _ut.test('test_insert_newIdentifier1', () {
1857 final __test = new IncrementalScannerTest(); 2134 final __test = new IncrementalScannerTest();
1858 runJUnitTest(__test, __test.test_rescan_appendWhitespace2); 2135 runJUnitTest(__test, __test.test_insert_newIdentifier1);
1859 }); 2136 });
1860 _ut.test('test_rescan_insertLeadingWhitespace', () { 2137 _ut.test('test_insert_newIdentifier2', () {
1861 final __test = new IncrementalScannerTest(); 2138 final __test = new IncrementalScannerTest();
1862 runJUnitTest(__test, __test.test_rescan_insertLeadingWhitespace); 2139 runJUnitTest(__test, __test.test_insert_newIdentifier2);
1863 }); 2140 });
1864 _ut.test('test_rescan_insertWhitespace', () { 2141 _ut.test('test_insert_period', () {
1865 final __test = new IncrementalScannerTest(); 2142 final __test = new IncrementalScannerTest();
1866 runJUnitTest(__test, __test.test_rescan_insertWhitespace); 2143 runJUnitTest(__test, __test.test_insert_period);
1867 }); 2144 });
1868 _ut.test('test_rescan_insertWhitespaceWithMultipleComments', () { 2145 _ut.test('test_insert_periodAndIdentifier', () {
1869 final __test = new IncrementalScannerTest(); 2146 final __test = new IncrementalScannerTest();
1870 runJUnitTest(__test, __test.test_rescan_insertWhitespaceWithMultipleComm ents); 2147 runJUnitTest(__test, __test.test_insert_periodAndIdentifier);
1871 }); 2148 });
1872 _ut.test('test_rescan_insertedPeriod', () { 2149 _ut.test('test_insert_period_betweenIdentifiers1', () {
1873 final __test = new IncrementalScannerTest(); 2150 final __test = new IncrementalScannerTest();
1874 runJUnitTest(__test, __test.test_rescan_insertedPeriod); 2151 runJUnitTest(__test, __test.test_insert_period_betweenIdentifiers1);
1875 }); 2152 });
1876 _ut.test('test_rescan_insertedPeriodBetweenIdentifiers1', () { 2153 _ut.test('test_insert_period_betweenIdentifiers2', () {
1877 final __test = new IncrementalScannerTest(); 2154 final __test = new IncrementalScannerTest();
1878 runJUnitTest(__test, __test.test_rescan_insertedPeriodBetweenIdentifiers 1); 2155 runJUnitTest(__test, __test.test_insert_period_betweenIdentifiers2);
1879 }); 2156 });
1880 _ut.test('test_rescan_insertedPeriodBetweenIdentifiers2', () { 2157 _ut.test('test_insert_period_betweenIdentifiers3', () {
1881 final __test = new IncrementalScannerTest(); 2158 final __test = new IncrementalScannerTest();
1882 runJUnitTest(__test, __test.test_rescan_insertedPeriodBetweenIdentifiers 2); 2159 runJUnitTest(__test, __test.test_insert_period_betweenIdentifiers3);
1883 }); 2160 });
1884 _ut.test('test_rescan_insertedPeriodBetweenIdentifiers3', () { 2161 _ut.test('test_insert_period_insideExistingIdentifier', () {
1885 final __test = new IncrementalScannerTest(); 2162 final __test = new IncrementalScannerTest();
1886 runJUnitTest(__test, __test.test_rescan_insertedPeriodBetweenIdentifiers 3); 2163 runJUnitTest(__test, __test.test_insert_period_insideExistingIdentifier) ;
1887 }); 2164 });
1888 _ut.test('test_rescan_insertedPeriodIdentifier', () { 2165 _ut.test('test_insert_whitespace_beginning_beforeToken', () {
1889 final __test = new IncrementalScannerTest(); 2166 final __test = new IncrementalScannerTest();
1890 runJUnitTest(__test, __test.test_rescan_insertedPeriodIdentifier); 2167 runJUnitTest(__test, __test.test_insert_whitespace_beginning_beforeToken );
1891 }); 2168 });
1892 _ut.test('test_rescan_insertedPeriodInsideExistingIdentifier', () { 2169 _ut.test('test_insert_whitespace_betweenTokens', () {
1893 final __test = new IncrementalScannerTest(); 2170 final __test = new IncrementalScannerTest();
1894 runJUnitTest(__test, __test.test_rescan_insertedPeriodInsideExistingIden tifier); 2171 runJUnitTest(__test, __test.test_insert_whitespace_betweenTokens);
1895 }); 2172 });
1896 _ut.test('test_rescan_oneFunctionToTwo', () { 2173 _ut.test('test_insert_whitespace_end_afterToken', () {
1897 final __test = new IncrementalScannerTest(); 2174 final __test = new IncrementalScannerTest();
1898 runJUnitTest(__test, __test.test_rescan_oneFunctionToTwo); 2175 runJUnitTest(__test, __test.test_insert_whitespace_end_afterToken);
2176 });
2177 _ut.test('test_insert_whitespace_end_afterWhitespace', () {
2178 final __test = new IncrementalScannerTest();
2179 runJUnitTest(__test, __test.test_insert_whitespace_end_afterWhitespace);
2180 });
2181 _ut.test('test_insert_whitespace_withMultipleComments', () {
2182 final __test = new IncrementalScannerTest();
2183 runJUnitTest(__test, __test.test_insert_whitespace_withMultipleComments) ;
2184 });
2185 _ut.test('test_replace_identifier_beginning', () {
2186 final __test = new IncrementalScannerTest();
2187 runJUnitTest(__test, __test.test_replace_identifier_beginning);
2188 });
2189 _ut.test('test_replace_identifier_end', () {
2190 final __test = new IncrementalScannerTest();
2191 runJUnitTest(__test, __test.test_replace_identifier_end);
2192 });
2193 _ut.test('test_replace_identifier_middle', () {
2194 final __test = new IncrementalScannerTest();
2195 runJUnitTest(__test, __test.test_replace_identifier_middle);
2196 });
2197 _ut.test('test_replace_operator_oneForMany', () {
2198 final __test = new IncrementalScannerTest();
2199 runJUnitTest(__test, __test.test_replace_operator_oneForMany);
2200 });
2201 _ut.test('test_replace_operator_oneForOne', () {
2202 final __test = new IncrementalScannerTest();
2203 runJUnitTest(__test, __test.test_replace_operator_oneForOne);
1899 }); 2204 });
1900 _ut.test('test_tokenMap', () { 2205 _ut.test('test_tokenMap', () {
1901 final __test = new IncrementalScannerTest(); 2206 final __test = new IncrementalScannerTest();
1902 runJUnitTest(__test, __test.test_tokenMap); 2207 runJUnitTest(__test, __test.test_tokenMap);
1903 }); 2208 });
1904 }); 2209 });
1905 } 2210 }
1906 } 2211 }
2212
1907 main() { 2213 main() {
1908 CharSequenceReaderTest.dartSuite(); 2214 CharSequenceReaderTest.dartSuite();
1909 IncrementalScannerTest.dartSuite(); 2215 IncrementalScannerTest.dartSuite();
1910 KeywordStateTest.dartSuite(); 2216 KeywordStateTest.dartSuite();
1911 ScannerTest.dartSuite(); 2217 ScannerTest.dartSuite();
1912 TokenTypeTest.dartSuite(); 2218 TokenTypeTest.dartSuite();
1913 } 2219 }
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