Index: pkg/front_end/test/scanner_fasta_test.dart |
diff --git a/pkg/front_end/test/scanner_fasta_test.dart b/pkg/front_end/test/scanner_fasta_test.dart |
index 67f3582c546c195628afee01b191120bb7e9cb62..52c459557b53ed20b6b3569abd93f20e6323b587 100644 |
--- a/pkg/front_end/test/scanner_fasta_test.dart |
+++ b/pkg/front_end/test/scanner_fasta_test.dart |
@@ -203,22 +203,6 @@ main() {} |
} |
@override |
- @failingTest |
- void test_mismatched_closer() { |
- // TODO(paulberry,ahe): Fasta and analyzer recover this error differently. |
- // Figure out which recovery technique we want the front end to use. |
- super.test_mismatched_closer(); |
- } |
- |
- @override |
- @failingTest |
- void test_mismatched_opener() { |
- // TODO(paulberry,ahe): Fasta and analyzer recover this error differently. |
- // Figure out which recovery technique we want the front end to use. |
- super.test_mismatched_opener(); |
- } |
- |
- @override |
void test_mismatched_opener_in_interpolation() { |
// When openers and closers are mismatched, |
// fasta favors considering the opener to be mismatched |
@@ -301,6 +285,34 @@ abstract class ScannerTest_Fasta_Base { |
} |
} |
+ void test_string_simple_interpolation_missingIdentifier() { |
+ Token token = scan("'\$x\$'"); |
+ expectToken(token, TokenType.STRING, 0, 1, lexeme: "'"); |
+ |
+ token = token.next; |
+ expectToken(token, TokenType.STRING_INTERPOLATION_IDENTIFIER, 1, 1); |
+ |
+ token = token.next; |
+ expectToken(token, TokenType.IDENTIFIER, 2, 1, lexeme: 'x'); |
+ |
+ token = token.next; |
+ expectToken(token, TokenType.STRING, 3, 0, lexeme: '', isSynthetic: true); |
+ |
+ token = token.next; |
+ expectToken(token, TokenType.STRING_INTERPOLATION_IDENTIFIER, 3, 1); |
+ |
+ token = token.next; |
+ expectToken(token, TokenType.IDENTIFIER, 4, 0, |
+ lexeme: '', isSynthetic: true); |
+ |
+ token = token.next; |
+ expect((token as fasta.ErrorToken).errorCode, |
+ same(codeUnexpectedDollarInString)); |
+ |
+ token = token.next; |
+ expectToken(token, TokenType.STRING, 4, 1, lexeme: "'"); |
+ } |
+ |
void test_string_simple_unterminated_interpolation_block() { |
Token token = scan(r'"foo ${bar'); |
expectToken(token, TokenType.STRING, 0, 5, lexeme: '"foo '); |
@@ -393,6 +405,10 @@ abstract class ScannerTest_Fasta_Base { |
expectToken(token, TokenType.STRING_INTERPOLATION_IDENTIFIER, 5, 1); |
token = token.next; |
+ expectToken(token, TokenType.IDENTIFIER, 6, 0, |
+ isSynthetic: true, lexeme: ''); |
+ |
+ token = token.next; |
expect((token as fasta.ErrorToken).errorCode, |
same(codeUnexpectedDollarInString)); |
expect((token as fasta.UnterminatedToken).start, r'$'); |