Index: dart/pkg/analyzer/test/generated/scanner_test.dart |
=================================================================== |
--- dart/pkg/analyzer/test/generated/scanner_test.dart (revision 29785) |
+++ dart/pkg/analyzer/test/generated/scanner_test.dart (working copy) |
@@ -6,6 +6,7 @@ |
import 'package:analyzer/src/generated/source.dart'; |
import 'package:analyzer/src/generated/error.dart'; |
import 'package:analyzer/src/generated/scanner.dart'; |
+import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap; |
import 'package:unittest/unittest.dart' as _ut; |
import 'test_support.dart'; |
class KeywordStateTest extends JUnitTestCase { |
@@ -727,7 +728,7 @@ |
assertToken(TokenType.STRING, "'''string'''"); |
} |
void test_string_multi_slashEnter() { |
- assertError(ScannerErrorCode.CHARACTER_EXPECTED_AFTER_SLASH, 0, "'''\\\n'''"); |
+ assertToken(TokenType.STRING, "'''\\\n'''"); |
} |
void test_string_multi_unterminated() { |
assertError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 8, "'''string"); |
@@ -1667,17 +1668,123 @@ |
this._columnNumber = columnNumber; |
} |
} |
-class IncrementalScannerTest extends JUnitTestCase { |
- void test_rescan_addedToIdentifier() { |
- assertTokens("a + b;", "abs + b;"); |
+class IncrementalScannerTest extends EngineTestCase { |
+ Token _originalTokens; |
+ void test_rescan_addedBeforeIdentifier1() { |
+ IncrementalScanner scanner = assertTokens("a + b;", "xa + b;"); |
+ JUnitTestCase.assertEquals("xa", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals("xa", scanner.lastToken.lexeme); |
} |
+ void test_rescan_addedBeforeIdentifier2() { |
+ IncrementalScanner scanner = assertTokens("a + b;", "a + xb;"); |
+ JUnitTestCase.assertEquals("xb", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals("xb", scanner.lastToken.lexeme); |
+ } |
+ void test_rescan_addedNewIdentifier1() { |
+ IncrementalScanner scanner = assertTokens("a; c;", "a; b c;"); |
+ JUnitTestCase.assertEquals("b", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals("b", scanner.lastToken.lexeme); |
+ } |
+ void test_rescan_addedNewIdentifier2() { |
+ IncrementalScanner scanner = assertTokens("a; c;", "a;b c;"); |
+ JUnitTestCase.assertEquals("b", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals("b", scanner.lastToken.lexeme); |
+ Token oldToken = _originalTokens.next; |
+ JUnitTestCase.assertSame(TokenType.SEMICOLON, oldToken.type); |
+ Token newToken = scanner.tokenMap.get(oldToken); |
+ JUnitTestCase.assertNotNull(newToken); |
+ JUnitTestCase.assertEquals(TokenType.SEMICOLON, newToken.type); |
+ JUnitTestCase.assertNotSame(oldToken, newToken); |
+ } |
+ void test_rescan_addedToIdentifier1() { |
+ IncrementalScanner scanner = assertTokens("a + b;", "abs + b;"); |
+ JUnitTestCase.assertEquals("abs", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals("abs", scanner.lastToken.lexeme); |
+ Token oldToken = _originalTokens.next; |
+ JUnitTestCase.assertEquals(TokenType.PLUS, oldToken.type); |
+ Token newToken = scanner.tokenMap.get(oldToken); |
+ JUnitTestCase.assertNotNull(newToken); |
+ JUnitTestCase.assertEquals(TokenType.PLUS, newToken.type); |
+ JUnitTestCase.assertNotSame(oldToken, newToken); |
+ } |
+ void test_rescan_addedToIdentifier2() { |
+ IncrementalScanner scanner = assertTokens("a + b;", "a + by;"); |
+ JUnitTestCase.assertEquals("by", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals("by", scanner.lastToken.lexeme); |
+ } |
+ void test_rescan_appendWhitespace1() { |
+ IncrementalScanner scanner = assertTokens("a + b;", "a + b; "); |
+ JUnitTestCase.assertNull(scanner.firstToken); |
+ JUnitTestCase.assertNull(scanner.lastToken); |
+ } |
+ void test_rescan_appendWhitespace2() { |
+ IncrementalScanner scanner = assertTokens("a + b; ", "a + b; "); |
+ JUnitTestCase.assertNull(scanner.firstToken); |
+ JUnitTestCase.assertNull(scanner.lastToken); |
+ } |
void test_rescan_insertedPeriod() { |
- assertTokens("a + b;", "a + b.;"); |
+ IncrementalScanner scanner = assertTokens("a + b;", "a + b.;"); |
+ JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals(".", scanner.lastToken.lexeme); |
} |
+ void test_rescan_insertedPeriodBetweenIdentifiers1() { |
+ IncrementalScanner scanner = assertTokens("a b;", "a. b;"); |
+ JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals(".", scanner.lastToken.lexeme); |
+ } |
+ void test_rescan_insertedPeriodBetweenIdentifiers2() { |
+ IncrementalScanner scanner = assertTokens("a b;", "a .b;"); |
+ JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals(".", scanner.lastToken.lexeme); |
+ } |
+ void test_rescan_insertedPeriodBetweenIdentifiers3() { |
+ IncrementalScanner scanner = assertTokens("a b;", "a . b;"); |
+ JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals(".", scanner.lastToken.lexeme); |
+ } |
+ void test_rescan_insertedPeriodIdentifier() { |
+ IncrementalScanner scanner = assertTokens("a + b;", "a + b.x;"); |
+ JUnitTestCase.assertEquals(".", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals("x", scanner.lastToken.lexeme); |
+ } |
+ void test_rescan_insertedPeriodInsideExistingIdentifier() { |
+ IncrementalScanner scanner = assertTokens("ab;", "a.b;"); |
+ JUnitTestCase.assertEquals("a", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals("b", scanner.lastToken.lexeme); |
+ } |
+ void test_rescan_insertLeadingWhitespace() { |
+ IncrementalScanner scanner = assertTokens("a + b;", " a + b;"); |
+ JUnitTestCase.assertNull(scanner.firstToken); |
+ JUnitTestCase.assertNull(scanner.lastToken); |
+ } |
+ void test_rescan_insertWhitespace() { |
+ IncrementalScanner scanner = assertTokens("a + b;", "a + b;"); |
+ JUnitTestCase.assertNull(scanner.firstToken); |
+ JUnitTestCase.assertNull(scanner.lastToken); |
+ } |
+ void test_rescan_insertWhitespaceWithMultipleComments() { |
+ IncrementalScanner scanner = assertTokens(EngineTestCase.createSource(["//comment", "//comment2", "a + b;"]), EngineTestCase.createSource(["//comment", "//comment2", "a + b;"])); |
+ JUnitTestCase.assertNull(scanner.firstToken); |
+ JUnitTestCase.assertNull(scanner.lastToken); |
+ } |
void test_rescan_oneFunctionToTwo() { |
- assertTokens("f() {}", "f() => 0; g() {}"); |
+ IncrementalScanner scanner = assertTokens("f() {}", "f() => 0; g() {}"); |
+ JUnitTestCase.assertEquals("=>", scanner.firstToken.lexeme); |
+ JUnitTestCase.assertEquals(")", scanner.lastToken.lexeme); |
} |
- void assertTokens(String originalContents, String modifiedContents) { |
+ void test_tokenMap() { |
+ IncrementalScanner scanner = assertTokens("main() {a + b;}", "main() { a + b;}"); |
+ TokenMap tokenMap = scanner.tokenMap; |
+ Token oldToken = _originalTokens; |
+ while (oldToken.type != TokenType.EOF) { |
+ Token newToken = tokenMap.get(oldToken); |
+ JUnitTestCase.assertNotSame(oldToken, newToken); |
+ JUnitTestCase.assertSame(oldToken.type, newToken.type); |
+ JUnitTestCase.assertEquals(oldToken.lexeme, newToken.lexeme); |
+ oldToken = oldToken.next; |
+ } |
+ } |
+ IncrementalScanner assertTokens(String originalContents, String modifiedContents) { |
int originalLength = originalContents.length; |
int modifiedLength = modifiedContents.length; |
int replaceStart = 0; |
@@ -1693,41 +1800,107 @@ |
Source source = new TestSource(); |
GatheringErrorListener originalListener = new GatheringErrorListener(); |
Scanner originalScanner = new Scanner(source, new CharSequenceReader(new CharSequence(originalContents)), originalListener); |
- Token originalToken = originalScanner.tokenize(); |
- JUnitTestCase.assertNotNull(originalToken); |
+ _originalTokens = originalScanner.tokenize(); |
+ JUnitTestCase.assertNotNull(_originalTokens); |
GatheringErrorListener modifiedListener = new GatheringErrorListener(); |
Scanner modifiedScanner = new Scanner(source, new CharSequenceReader(new CharSequence(modifiedContents)), modifiedListener); |
- Token modifiedToken = modifiedScanner.tokenize(); |
- JUnitTestCase.assertNotNull(modifiedToken); |
+ Token modifiedTokens = modifiedScanner.tokenize(); |
+ JUnitTestCase.assertNotNull(modifiedTokens); |
GatheringErrorListener incrementalListener = new GatheringErrorListener(); |
IncrementalScanner incrementalScanner = new IncrementalScanner(source, new CharSequenceReader(new CharSequence(modifiedContents)), incrementalListener); |
- Token incrementalToken = incrementalScanner.rescan(originalToken, replaceStart, originalEnd - replaceStart + 1, modifiedEnd - replaceStart + 1); |
+ Token incrementalTokens = incrementalScanner.rescan(_originalTokens, replaceStart, originalEnd - replaceStart + 1, modifiedEnd - replaceStart + 1); |
+ Token incrementalToken = incrementalTokens; |
JUnitTestCase.assertNotNull(incrementalToken); |
- while (incrementalToken.type != TokenType.EOF && modifiedToken.type != TokenType.EOF) { |
- JUnitTestCase.assertSameMsg("Wrong type for token", modifiedToken.type, incrementalToken.type); |
- JUnitTestCase.assertEqualsMsg("Wrong offset for token", modifiedToken.offset, incrementalToken.offset); |
- JUnitTestCase.assertEqualsMsg("Wrong length for token", modifiedToken.length, incrementalToken.length); |
- JUnitTestCase.assertEqualsMsg("Wrong lexeme for token", modifiedToken.lexeme, incrementalToken.lexeme); |
+ while (incrementalToken.type != TokenType.EOF && modifiedTokens.type != TokenType.EOF) { |
+ JUnitTestCase.assertSameMsg("Wrong type for token", modifiedTokens.type, incrementalToken.type); |
+ JUnitTestCase.assertEqualsMsg("Wrong offset for token", modifiedTokens.offset, incrementalToken.offset); |
+ JUnitTestCase.assertEqualsMsg("Wrong length for token", modifiedTokens.length, incrementalToken.length); |
+ JUnitTestCase.assertEqualsMsg("Wrong lexeme for token", modifiedTokens.lexeme, incrementalToken.lexeme); |
incrementalToken = incrementalToken.next; |
- modifiedToken = modifiedToken.next; |
+ modifiedTokens = modifiedTokens.next; |
} |
JUnitTestCase.assertSameMsg("Too many tokens", TokenType.EOF, incrementalToken.type); |
- JUnitTestCase.assertSameMsg("Not enough tokens", TokenType.EOF, modifiedToken.type); |
+ JUnitTestCase.assertSameMsg("Not enough tokens", TokenType.EOF, modifiedTokens.type); |
+ return incrementalScanner; |
} |
static dartSuite() { |
_ut.group('IncrementalScannerTest', () { |
- _ut.test('test_rescan_addedToIdentifier', () { |
+ _ut.test('test_rescan_addedBeforeIdentifier1', () { |
final __test = new IncrementalScannerTest(); |
- runJUnitTest(__test, __test.test_rescan_addedToIdentifier); |
+ runJUnitTest(__test, __test.test_rescan_addedBeforeIdentifier1); |
}); |
+ _ut.test('test_rescan_addedBeforeIdentifier2', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_addedBeforeIdentifier2); |
+ }); |
+ _ut.test('test_rescan_addedNewIdentifier1', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_addedNewIdentifier1); |
+ }); |
+ _ut.test('test_rescan_addedNewIdentifier2', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_addedNewIdentifier2); |
+ }); |
+ _ut.test('test_rescan_addedToIdentifier1', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_addedToIdentifier1); |
+ }); |
+ _ut.test('test_rescan_addedToIdentifier2', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_addedToIdentifier2); |
+ }); |
+ _ut.test('test_rescan_appendWhitespace1', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_appendWhitespace1); |
+ }); |
+ _ut.test('test_rescan_appendWhitespace2', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_appendWhitespace2); |
+ }); |
+ _ut.test('test_rescan_insertLeadingWhitespace', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_insertLeadingWhitespace); |
+ }); |
+ _ut.test('test_rescan_insertWhitespace', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_insertWhitespace); |
+ }); |
+ _ut.test('test_rescan_insertWhitespaceWithMultipleComments', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_insertWhitespaceWithMultipleComments); |
+ }); |
_ut.test('test_rescan_insertedPeriod', () { |
final __test = new IncrementalScannerTest(); |
runJUnitTest(__test, __test.test_rescan_insertedPeriod); |
}); |
+ _ut.test('test_rescan_insertedPeriodBetweenIdentifiers1', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_insertedPeriodBetweenIdentifiers1); |
+ }); |
+ _ut.test('test_rescan_insertedPeriodBetweenIdentifiers2', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_insertedPeriodBetweenIdentifiers2); |
+ }); |
+ _ut.test('test_rescan_insertedPeriodBetweenIdentifiers3', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_insertedPeriodBetweenIdentifiers3); |
+ }); |
+ _ut.test('test_rescan_insertedPeriodIdentifier', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_insertedPeriodIdentifier); |
+ }); |
+ _ut.test('test_rescan_insertedPeriodInsideExistingIdentifier', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_rescan_insertedPeriodInsideExistingIdentifier); |
+ }); |
_ut.test('test_rescan_oneFunctionToTwo', () { |
final __test = new IncrementalScannerTest(); |
runJUnitTest(__test, __test.test_rescan_oneFunctionToTwo); |
}); |
+ _ut.test('test_tokenMap', () { |
+ final __test = new IncrementalScannerTest(); |
+ runJUnitTest(__test, __test.test_tokenMap); |
+ }); |
}); |
} |
} |