OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |