| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library engine.incremental_scanner_test; | 5 library engine.incremental_scanner_test; |
| 6 | 6 |
| 7 import 'package:analyzer/src/generated/engine.dart'; | 7 import 'package:analyzer/src/generated/engine.dart'; |
| 8 import 'package:analyzer/src/generated/incremental_scanner.dart'; | 8 import 'package:analyzer/src/generated/incremental_scanner.dart'; |
| 9 import 'package:analyzer/src/generated/scanner.dart'; | 9 import 'package:analyzer/src/generated/scanner.dart'; |
| 10 import 'package:analyzer/src/generated/source.dart'; | 10 import 'package:analyzer/src/generated/source.dart'; |
| 11 import 'package:unittest/unittest.dart'; | 11 import 'package:unittest/unittest.dart'; |
| 12 | 12 |
| 13 import '../reflective_tests.dart'; | 13 import '../reflective_tests.dart'; |
| 14 import '../utils.dart'; |
| 14 import 'test_support.dart'; | 15 import 'test_support.dart'; |
| 15 | 16 |
| 16 main() { | 17 main() { |
| 17 groupSep = ' | '; | 18 initializeTestEnvironment(); |
| 18 runReflectiveTests(IncrementalScannerTest); | 19 runReflectiveTests(IncrementalScannerTest); |
| 19 } | 20 } |
| 20 | 21 |
| 21 @reflectiveTest | 22 @reflectiveTest |
| 22 class IncrementalScannerTest extends EngineTestCase { | 23 class IncrementalScannerTest extends EngineTestCase { |
| 23 /** | 24 /** |
| 24 * The first token from the token stream resulting from parsing the original | 25 * The first token from the token stream resulting from parsing the original |
| 25 * source, or `null` if [scan] has not been invoked. | 26 * source, or `null` if [scan] has not been invoked. |
| 26 */ | 27 */ |
| 27 Token _originalTokens; | 28 Token _originalTokens; |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 // "a + b; " | 311 // "a + b; " |
| 311 // "a + b; " | 312 // "a + b; " |
| 312 _scan("a + b; ", "", " ", ""); | 313 _scan("a + b; ", "", " ", ""); |
| 313 _assertTokens(3, 4, ["a", "+", "b", ";"]); | 314 _assertTokens(3, 4, ["a", "+", "b", ";"]); |
| 314 expect(_incrementalScanner.hasNonWhitespaceChange, isFalse); | 315 expect(_incrementalScanner.hasNonWhitespaceChange, isFalse); |
| 315 } | 316 } |
| 316 | 317 |
| 317 void test_insert_whitespace_withMultipleComments() { | 318 void test_insert_whitespace_withMultipleComments() { |
| 318 // "//comment1", "//comment2", "a + b;" | 319 // "//comment1", "//comment2", "a + b;" |
| 319 // "//comment1", "//comment2", "a + b;" | 320 // "//comment1", "//comment2", "a + b;" |
| 320 _scan(r''' | 321 _scan( |
| 322 r''' |
| 321 //comment1 | 323 //comment1 |
| 322 //comment2 | 324 //comment2 |
| 323 a''', "", " ", " + b;"); | 325 a''', |
| 326 "", |
| 327 " ", |
| 328 " + b;"); |
| 324 _assertTokens(1, 2, ["a", "+", "b", ";"]); | 329 _assertTokens(1, 2, ["a", "+", "b", ";"]); |
| 325 expect(_incrementalScanner.hasNonWhitespaceChange, isFalse); | 330 expect(_incrementalScanner.hasNonWhitespaceChange, isFalse); |
| 326 } | 331 } |
| 327 | 332 |
| 328 void test_replace_identifier_beginning() { | 333 void test_replace_identifier_beginning() { |
| 329 // "bell + b;" | 334 // "bell + b;" |
| 330 // "fell + b;" | 335 // "fell + b;" |
| 331 _scan("", "b", "f", "ell + b;"); | 336 _scan("", "b", "f", "ell + b;"); |
| 332 _assertTokens(-1, 1, ["fell", "+", "b", ";"]); | 337 _assertTokens(-1, 1, ["fell", "+", "b", ";"]); |
| 333 expect(_incrementalScanner.hasNonWhitespaceChange, isTrue); | 338 expect(_incrementalScanner.hasNonWhitespaceChange, isTrue); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 } | 411 } |
| 407 } | 412 } |
| 408 | 413 |
| 409 /** | 414 /** |
| 410 * Assert that the [expected] token is equal to the [actual] token. | 415 * Assert that the [expected] token is equal to the [actual] token. |
| 411 */ | 416 */ |
| 412 void _assertEqualTokens(Token actual, Token expected) { | 417 void _assertEqualTokens(Token actual, Token expected) { |
| 413 expect(actual.type, same(expected.type), reason: "Wrong type for token"); | 418 expect(actual.type, same(expected.type), reason: "Wrong type for token"); |
| 414 expect(actual.lexeme, expected.lexeme, reason: "Wrong lexeme for token"); | 419 expect(actual.lexeme, expected.lexeme, reason: "Wrong lexeme for token"); |
| 415 expect(actual.offset, expected.offset, | 420 expect(actual.offset, expected.offset, |
| 416 reason: "Wrong offset for token ('${actual.lexeme}' != '${expected.lexem
e}')"); | 421 reason: |
| 422 "Wrong offset for token ('${actual.lexeme}' != '${expected.lexeme}')
"); |
| 417 expect(actual.length, expected.length, | 423 expect(actual.length, expected.length, |
| 418 reason: "Wrong length for token ('${actual.lexeme}' != '${expected.lexem
e}')"); | 424 reason: |
| 425 "Wrong length for token ('${actual.lexeme}' != '${expected.lexeme}')
"); |
| 419 } | 426 } |
| 420 | 427 |
| 421 /** | 428 /** |
| 422 * Assert that the result of the incremental scan matches the given list of | 429 * Assert that the result of the incremental scan matches the given list of |
| 423 * [lexemes] and that the left and right tokens correspond to the tokens at | 430 * [lexemes] and that the left and right tokens correspond to the tokens at |
| 424 * the [leftIndex] and [rightIndex]. | 431 * the [leftIndex] and [rightIndex]. |
| 425 */ | 432 */ |
| 426 void _assertTokens(int leftIndex, int rightIndex, List<String> lexemes) { | 433 void _assertTokens(int leftIndex, int rightIndex, List<String> lexemes) { |
| 427 int count = lexemes.length; | 434 int count = lexemes.length; |
| 428 expect(leftIndex >= -1 && leftIndex < count, isTrue, | 435 expect(leftIndex >= -1 && leftIndex < count, isTrue, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 modifiedTokens.type != TokenType.EOF) { | 521 modifiedTokens.type != TokenType.EOF) { |
| 515 _assertEqualTokens(incrementalToken, modifiedTokens); | 522 _assertEqualTokens(incrementalToken, modifiedTokens); |
| 516 Token incrementalComment = incrementalToken.precedingComments; | 523 Token incrementalComment = incrementalToken.precedingComments; |
| 517 Token modifiedComment = modifiedTokens.precedingComments; | 524 Token modifiedComment = modifiedTokens.precedingComments; |
| 518 while (incrementalComment != null && modifiedComment != null) { | 525 while (incrementalComment != null && modifiedComment != null) { |
| 519 _assertEqualTokens(incrementalComment, modifiedComment); | 526 _assertEqualTokens(incrementalComment, modifiedComment); |
| 520 incrementalComment = incrementalComment.next; | 527 incrementalComment = incrementalComment.next; |
| 521 modifiedComment = modifiedComment.next; | 528 modifiedComment = modifiedComment.next; |
| 522 } | 529 } |
| 523 expect(incrementalComment, isNull, | 530 expect(incrementalComment, isNull, |
| 524 reason: "Too many comment tokens preceeding '${incrementalToken.lexeme
}'"); | 531 reason: |
| 532 "Too many comment tokens preceeding '${incrementalToken.lexeme}'")
; |
| 525 expect(modifiedComment, isNull, | 533 expect(modifiedComment, isNull, |
| 526 reason: "Not enough comment tokens preceeding '${incrementalToken.lexe
me}'"); | 534 reason: |
| 535 "Not enough comment tokens preceeding '${incrementalToken.lexeme}'
"); |
| 527 incrementalToken = incrementalToken.next; | 536 incrementalToken = incrementalToken.next; |
| 528 modifiedTokens = modifiedTokens.next; | 537 modifiedTokens = modifiedTokens.next; |
| 529 } | 538 } |
| 530 expect(incrementalToken.type, same(TokenType.EOF), | 539 expect(incrementalToken.type, same(TokenType.EOF), |
| 531 reason: "Too many tokens"); | 540 reason: "Too many tokens"); |
| 532 expect(modifiedTokens.type, same(TokenType.EOF), | 541 expect(modifiedTokens.type, same(TokenType.EOF), |
| 533 reason: "Not enough tokens"); | 542 reason: "Not enough tokens"); |
| 534 // TODO(brianwilkerson) Verify that the errors are correct? | 543 // TODO(brianwilkerson) Verify that the errors are correct? |
| 535 } | 544 } |
| 536 } | 545 } |
| OLD | NEW |