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

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

Issue 2895803002: add fasta.scanner support for lazy assignment operators (Closed)
Patch Set: address comments Created 3 years, 7 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 4
5 import 'dart:convert' show UTF8; 5 import 'dart:convert' show UTF8;
6 6
7 import 'package:front_end/src/fasta/scanner/recover.dart' 7 import 'package:front_end/src/fasta/scanner/recover.dart'
8 show defaultRecoveryStrategy; 8 show defaultRecoveryStrategy;
9 import 'package:front_end/src/fasta/scanner.dart' as fasta; 9 import 'package:front_end/src/fasta/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 17 matching lines...) Expand all
28 /// token stream before verifying assertions. 28 /// token stream before verifying assertions.
29 /// 29 ///
30 /// These tests help to validate the correctness of the analyzer->Fasta token 30 /// These tests help to validate the correctness of the analyzer->Fasta token
31 /// stream conversion. 31 /// stream conversion.
32 @reflectiveTest 32 @reflectiveTest
33 class ScannerTest_Replacement extends ScannerTest { 33 class ScannerTest_Replacement extends ScannerTest {
34 @override 34 @override
35 analyzer.Token scanWithListener(String source, ErrorListener listener, 35 analyzer.Token scanWithListener(String source, ErrorListener listener,
36 {bool genericMethodComments: false, 36 {bool genericMethodComments: false,
37 bool lazyAssignmentOperators: false}) { 37 bool lazyAssignmentOperators: false}) {
38 // Note: Fasta always supports lazy assignment operators (`&&=` and `||=`),
39 // so we can ignore the `lazyAssignmentOperators` flag.
40 // TODO(danrubel): once lazyAssignmentOperators are fully supported by
41 // Dart, remove this flag.
42 fasta.ScannerResult result = fasta.scanString(source, 38 fasta.ScannerResult result = fasta.scanString(source,
43 includeComments: true, scanGenericMethodComments: genericMethodComments, 39 includeComments: true,
40 scanGenericMethodComments: genericMethodComments,
41 scanLazyAssignmentOperators: lazyAssignmentOperators,
44 recover: ((List<int> bytes, fasta.Token tokens, List<int> lineStarts) { 42 recover: ((List<int> bytes, fasta.Token tokens, List<int> lineStarts) {
45 // perform recovery as a separate step 43 // perform recovery as a separate step
46 // so that the token stream can be validated before and after recovery 44 // so that the token stream can be validated before and after recovery
47 return tokens; 45 return tokens;
48 })); 46 }));
49 fasta.Token tokens = result.tokens; 47 fasta.Token tokens = result.tokens;
50 assertValidTokenStream(tokens); 48 assertValidTokenStream(tokens);
51 assertValidBeginTokens(tokens); 49 assertValidBeginTokens(tokens);
52 if (result.hasErrors) { 50 if (result.hasErrors) {
53 List<int> bytes = UTF8.encode(source); 51 List<int> bytes = UTF8.encode(source);
54 tokens = defaultRecoveryStrategy(bytes, tokens, result.lineStarts); 52 tokens = defaultRecoveryStrategy(bytes, tokens, result.lineStarts);
55 assertValidTokenStream(tokens, errorsFirst: true); 53 assertValidTokenStream(tokens, errorsFirst: true);
56 } 54 }
57 return extractErrors(tokens, listener); 55 return extractErrors(tokens, listener);
58 } 56 }
59 57
60 @override
61 @failingTest
62 void test_ampersand_ampersand_eq() {
63 // TODO(paulberry,ahe): Fasta scanner doesn't support lazy assignment
64 // operators.
65 super.test_ampersand_ampersand_eq();
66 }
67
68 @override
69 @failingTest
70 void test_bar_bar_eq() {
71 // TODO(paulberry,ahe): Fasta scanner doesn't support lazy assignment
72 // operators.
73 super.test_bar_bar_eq();
74 }
75
76 void _assertOpenClosePair(String source) { 58 void _assertOpenClosePair(String source) {
77 fasta.BeginGroupToken open = _scan(source); 59 fasta.BeginGroupToken open = _scan(source);
78 fasta.Token close = open.next; 60 fasta.Token close = open.next;
79 expect(close.next.isEof, isTrue); 61 expect(close.next.isEof, isTrue);
80 expect(open.endGroup, close); 62 expect(open.endGroup, close);
81 expect(open.isSynthetic, isFalse); 63 expect(open.isSynthetic, isFalse);
82 expect(close.isSynthetic, isFalse); 64 expect(close.isSynthetic, isFalse);
83 } 65 }
84 66
85 void _assertOpenOnly(String source) { 67 void _assertOpenOnly(String source) {
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 } else if (token is fasta.UnmatchedToken) { 351 } else if (token is fasta.UnmatchedToken) {
370 expect(lastClosedGroup?.endGroup?.next, same(token), 352 expect(lastClosedGroup?.endGroup?.next, same(token),
371 reason: 'Unexpected error token for group: $lastClosedGroup'); 353 reason: 'Unexpected error token for group: $lastClosedGroup');
372 expect(token.begin, lastClosedGroup); 354 expect(token.begin, lastClosedGroup);
373 } 355 }
374 token = token.next; 356 token = token.next;
375 } 357 }
376 expect(openerStack, isEmpty, reason: 'Missing closers'); 358 expect(openerStack, isEmpty, reason: 'Missing closers');
377 } 359 }
378 } 360 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698