| Index: pkg/front_end/test/scanner_test.dart
|
| diff --git a/pkg/front_end/test/scanner_test.dart b/pkg/front_end/test/scanner_test.dart
|
| index 4a60cc7c4276d6025d4b580866f3a52315240559..176c8f69fa580203685c80c1a1b6fb0b14a69fb6 100644
|
| --- a/pkg/front_end/test/scanner_test.dart
|
| +++ b/pkg/front_end/test/scanner_test.dart
|
| @@ -779,17 +779,34 @@ abstract class ScannerTestBase {
|
| }
|
|
|
| void test_mismatched_closer() {
|
| - // When openers and closers are mismatched, analyzer favors considering the
|
| - // closer to be mismatched, which means that `(])` parses as a pair of
|
| - // matched parentheses with an unmatched closing bracket between them.
|
| + // Normally when openers and closers are mismatched
|
| + // fasta favors considering the opener to be mismatched,
|
| + // and inserts synthetic closers as needed.
|
| + // In this particular case, fasta cannot find an opener for ']'
|
| + // and thus marks ']' as an error and moves on.
|
| ErrorListener listener = new ErrorListener();
|
| BeginToken openParen = scanWithListener('(])', listener);
|
| + var closeBracket = openParen.next;
|
| + var closeParen = closeBracket.next;
|
| + expect(closeParen.next.type, TokenType.EOF);
|
| + expect(openParen.endToken, same(closeParen));
|
| + listener.assertNoErrors();
|
| + }
|
| +
|
| + void test_mismatched_closer2() {
|
| + // When openers and closers are mismatched, analyzer favors considering the
|
| + // closer to be mismatched, which means that `[(])` parses as a pair of
|
| + // matched parenthesis with an unmatched open bracket before them
|
| + // and an unmatched closing bracket between them.
|
| + ErrorListener listener = new ErrorListener();
|
| + BeginToken openBracket = scanWithListener('[(])', listener);
|
| + BeginToken openParen = openBracket.next;
|
| if (usingFasta) {
|
| - // When openers and closers are mismatched,
|
| + // When openers and closers are mismatched
|
| // fasta favors considering the opener to be mismatched,
|
| // and inserts synthetic closers as needed.
|
| - // `(])` is parsed as `()])` where the first `)` is synthetic
|
| - // and the trailing `])` are unmatched.
|
| + // `[(])` is parsed as `[()])` where the first `)` is synthetic
|
| + // and the trailing `)` is unmatched.
|
| var closeParen = openParen.next;
|
| expect(closeParen.isSynthetic, isTrue);
|
| var closeBracket = closeParen.next;
|
| @@ -797,14 +814,16 @@ abstract class ScannerTestBase {
|
| var closeParen2 = closeBracket.next;
|
| expect(closeParen2.isSynthetic, isFalse);
|
| expect(closeParen2.next.type, TokenType.EOF);
|
| + expect(openBracket.endToken, same(closeBracket));
|
| expect(openParen.endToken, same(closeParen));
|
| listener.assertErrors([
|
| - new TestError(0, ScannerErrorCode.EXPECTED_TOKEN, [')']),
|
| + new TestError(1, ScannerErrorCode.EXPECTED_TOKEN, [')']),
|
| ]);
|
| } else {
|
| var closeBracket = openParen.next;
|
| var closeParen = closeBracket.next;
|
| expect(closeParen.next.type, TokenType.EOF);
|
| + expect(openBracket.endToken, isNull);
|
| expect(openParen.endToken, same(closeParen));
|
| listener.assertNoErrors();
|
| }
|
|
|