| OLD | NEW |
| 1 // This code was auto-generated, is not intended to be edited, and is subject to | 1 // This code was auto-generated, is not intended to be edited, and is subject to |
| 2 // significant change. Please see the README file for more information. | 2 // significant change. Please see the README file for more information. |
| 3 |
| 3 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |