Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1036)

Side by Side Diff: pkg/front_end/test/scanner_fasta_test.dart

Issue 2923113002: translate remaining fasta scanner error codes (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:convert'; 4 import 'dart:convert';
5 5
6 import 'package:analyzer/src/fasta/token_utils.dart'; 6 import 'package:analyzer/src/fasta/token_utils.dart';
7 import 'package:front_end/src/fasta/fasta_codes.dart'; 7 import 'package:front_end/src/fasta/fasta_codes.dart';
8 import 'package:front_end/src/fasta/scanner/error_token.dart' as fasta; 8 import 'package:front_end/src/fasta/scanner/error_token.dart' as fasta;
9 import 'package:front_end/src/fasta/scanner/string_scanner.dart' as fasta; 9 import 'package:front_end/src/fasta/scanner/string_scanner.dart' as fasta;
10 import 'package:front_end/src/fasta/scanner/token.dart' as fasta; 10 import 'package:front_end/src/fasta/scanner/token.dart' as fasta;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 } 202 }
203 } 203 }
204 204
205 @override 205 @override
206 void test_mismatched_opener_in_interpolation() { 206 void test_mismatched_opener_in_interpolation() {
207 // When openers and closers are mismatched, 207 // When openers and closers are mismatched,
208 // fasta favors considering the opener to be mismatched 208 // fasta favors considering the opener to be mismatched
209 // and inserts synthetic closers as needed. 209 // and inserts synthetic closers as needed.
210 // r'"${({(}}"' is parsed as r'"${({()})}"' 210 // r'"${({(}}"' is parsed as r'"${({()})}"'
211 // where both ')' are synthetic 211 // where both ')' are synthetic
212 var stringStart = _scan(r'"${({(}}"'); 212 ErrorListener listener = new ErrorListener();
213 var interpolationStart = stringStart.next as BeginToken; 213 var interpolationStart =
214 scanWithListener(r'"${({(}}"', listener).next as BeginToken;
ahe 2017/06/06 10:17:16 Use: BeginToken interpolationStart and remove ca
danrubel 2017/06/06 11:50:41 Good suggestion. Done here and elsewhere in this C
214 var openParen1 = interpolationStart.next as BeginToken; 215 var openParen1 = interpolationStart.next as BeginToken;
215 var openBrace = openParen1.next as BeginToken; 216 var openBrace = openParen1.next as BeginToken;
216 var openParen2 = openBrace.next as BeginToken; 217 var openParen2 = openBrace.next as BeginToken;
217 var closeParen2 = openParen2.next; 218 var closeParen2 = openParen2.next;
218 var closeBrace = closeParen2.next; 219 var closeBrace = closeParen2.next;
219 var closeParen1 = closeBrace.next; 220 var closeParen1 = closeBrace.next;
220 var interpolationEnd = closeParen1.next; 221 var interpolationEnd = closeParen1.next;
221 var stringEnd = interpolationEnd.next; 222 var stringEnd = interpolationEnd.next;
222 expect(stringEnd.next.type, TokenType.EOF); 223 expect(stringEnd.next.type, TokenType.EOF);
223 expect(interpolationStart.endToken, same(interpolationEnd)); 224 expect(interpolationStart.endToken, same(interpolationEnd));
224 expect(openParen1.endToken, same(closeParen1)); 225 expect(openParen1.endToken, same(closeParen1));
225 expect(openBrace.endToken, same(closeBrace)); 226 expect(openBrace.endToken, same(closeBrace));
226 expect(openParen2.endToken, same(closeParen2)); 227 expect(openParen2.endToken, same(closeParen2));
228 listener.assertErrors([
229 new TestError(3, ScannerErrorCode.EXPECTED_TOKEN, [')']),
230 new TestError(5, ScannerErrorCode.EXPECTED_TOKEN, [')']),
231 ]);
227 } 232 }
228 233
229 void test_next_previous() { 234 void test_next_previous() {
230 const source = 'int a; /*1*/ /*2*/ /*3*/ B f(){if (a < 2) {}}'; 235 const source = 'int a; /*1*/ /*2*/ /*3*/ B f(){if (a < 2) {}}';
231 Token token = 236 Token token =
232 new fasta.StringScanner(source, includeComments: true).tokenize(); 237 new fasta.StringScanner(source, includeComments: true).tokenize();
233 while (!token.isEof) { 238 while (!token.isEof) {
234 expect(token.next.previous, token); 239 expect(token.next.previous, token);
235 fasta.CommentToken commentToken = token.precedingComments; 240 fasta.CommentToken commentToken = token.precedingComments;
236 while (commentToken != null) { 241 while (commentToken != null) {
237 if (commentToken.next != null) { 242 if (commentToken.next != null) {
238 expect(commentToken.next.previous, commentToken); 243 expect(commentToken.next.previous, commentToken);
239 } 244 }
240 commentToken = commentToken.next; 245 commentToken = commentToken.next;
241 } 246 }
242 token = token.next; 247 token = token.next;
243 } 248 }
244 } 249 }
245 250
246 @override 251 @override
247 void test_unmatched_openers() { 252 void test_unmatched_openers() {
248 var openBrace = _scan('{[(') as BeginToken; 253 ErrorListener listener = new ErrorListener();
254 var openBrace = scanWithListener('{[(', listener) as BeginToken;
ahe 2017/06/06 10:17:16 Ditto.
249 var openBracket = openBrace.next as BeginToken; 255 var openBracket = openBrace.next as BeginToken;
250 var openParen = openBracket.next as BeginToken; 256 var openParen = openBracket.next as BeginToken;
251 var closeParen = openParen.next; 257 var closeParen = openParen.next;
252 var closeBracket = closeParen.next; 258 var closeBracket = closeParen.next;
253 var closeBrace = closeBracket.next; 259 var closeBrace = closeBracket.next;
254 expect(closeBrace.next.type, TokenType.EOF); 260 expect(closeBrace.next.type, TokenType.EOF);
255 expect(openBrace.endToken, same(closeBrace)); 261 expect(openBrace.endToken, same(closeBrace));
256 expect(openBracket.endToken, same(closeBracket)); 262 expect(openBracket.endToken, same(closeBracket));
257 expect(openParen.endToken, same(closeParen)); 263 expect(openParen.endToken, same(closeParen));
258 } 264 listener.assertErrors([
259 265 new TestError(0, ScannerErrorCode.EXPECTED_TOKEN, ['}']),
260 Token _scan(String source, 266 new TestError(1, ScannerErrorCode.EXPECTED_TOKEN, [']']),
261 {bool genericMethodComments: false, 267 new TestError(2, ScannerErrorCode.EXPECTED_TOKEN, [')']),
262 bool lazyAssignmentOperators: false}) { 268 ]);
263 ErrorListener listener = new ErrorListener();
264 Token token = scanWithListener(source, listener,
265 genericMethodComments: genericMethodComments,
266 lazyAssignmentOperators: lazyAssignmentOperators);
267 listener.assertNoErrors();
268 return token;
269 } 269 }
270 } 270 }
271 271
272 /// Base class for scanner tests that examine the token stream in Fasta format. 272 /// Base class for scanner tests that examine the token stream in Fasta format.
273 abstract class ScannerTest_Fasta_Base { 273 abstract class ScannerTest_Fasta_Base {
274 Token scan(String source); 274 Token scan(String source);
275 275
276 expectToken(Token token, TokenType type, int offset, int length, 276 expectToken(Token token, TokenType type, int offset, int length,
277 {bool isSynthetic: false, String lexeme}) { 277 {bool isSynthetic: false, String lexeme}) {
278 String description = '${token.type} $token'; 278 String description = '${token.type} $token';
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 final ErrorListener _listener; 682 final ErrorListener _listener;
683 683
684 ToAnalyzerTokenStreamConverter_WithListener(this._listener); 684 ToAnalyzerTokenStreamConverter_WithListener(this._listener);
685 685
686 @override 686 @override
687 void reportError( 687 void reportError(
688 ScannerErrorCode errorCode, int offset, List<Object> arguments) { 688 ScannerErrorCode errorCode, int offset, List<Object> arguments) {
689 _listener.errors.add(new TestError(offset, errorCode, arguments)); 689 _listener.errors.add(new TestError(offset, errorCode, arguments));
690 } 690 }
691 } 691 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698