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

Side by Side Diff: pkg/front_end/test/fasta/parser/token_stream_rewriter_test.dart

Issue 2872433005: more work aligning fasta.Token with analyzer.Token (Closed)
Patch Set: 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 'package:front_end/src/fasta/parser/token_stream_rewriter.dart'; 5 import 'package:front_end/src/fasta/parser/token_stream_rewriter.dart';
6 import 'package:front_end/src/fasta/scanner/token.dart'; 6 import 'package:front_end/src/fasta/scanner/token.dart';
7 import 'package:front_end/src/scanner/token.dart' show TokenType; 7 import 'package:front_end/src/scanner/token.dart' show TokenType;
8 import 'package:test/test.dart'; 8 import 'package:test/test.dart';
9 import 'package:test_reflective_loader/test_reflective_loader.dart'; 9 import 'package:test_reflective_loader/test_reflective_loader.dart';
10 10
11 main() { 11 main() {
12 defineReflectiveSuite(() { 12 defineReflectiveSuite(() {
13 defineReflectiveTests(TokenStreamRewriterTest_NoPrevious); 13 defineReflectiveTests(TokenStreamRewriterTest_NoPrevious);
14 defineReflectiveTests(TokenStreamRewriterTest_UsingPrevious); 14 defineReflectiveTests(TokenStreamRewriterTest_UsingPrevious);
15 }); 15 });
16 } 16 }
17 17
18 /// Abstract base class for tests of [TokenStreamRewriter]. 18 /// Abstract base class for tests of [TokenStreamRewriter].
19 abstract class TokenStreamRewriterTest { 19 abstract class TokenStreamRewriterTest {
20 /// Indicates whether the tests should set up [Token.previousToken]. 20 /// Indicates whether the tests should set up [Token.previous].
21 bool get setPrevious; 21 bool get setPrevious;
22 22
23 void test_insert_at_end() { 23 void test_insert_at_end() {
24 var a = _makeToken(0, 'a'); 24 var a = _makeToken(0, 'a');
25 var b = _makeToken(1, 'b'); 25 var b = _makeToken(1, 'b');
26 var eof = _link([a]); 26 var eof = _link([a]);
27 var rewriter = new TokenStreamRewriter(a); 27 var rewriter = new TokenStreamRewriter(a);
28 rewriter.insertTokenBefore(b, eof); 28 rewriter.insertTokenBefore(b, eof);
29 expect(rewriter.firstToken, same(a)); 29 expect(rewriter.firstToken, same(a));
30 expect(a.next, same(b)); 30 expect(a.next, same(b));
31 expect(b.next, same(eof)); 31 expect(b.next, same(eof));
32 expect(eof.previousToken, same(b)); 32 expect(eof.previous, same(b));
33 expect(b.previousToken, same(a)); 33 expect(b.previous, same(a));
34 } 34 }
35 35
36 void test_insert_at_start() { 36 void test_insert_at_start() {
37 var a = _makeToken(0, 'a'); 37 var a = _makeToken(0, 'a');
38 var b = _makeToken(1, 'b'); 38 var b = _makeToken(1, 'b');
39 _link([b]); 39 _link([b]);
40 var rewriter = new TokenStreamRewriter(b); 40 var rewriter = new TokenStreamRewriter(b);
41 rewriter.insertTokenBefore(a, b); 41 rewriter.insertTokenBefore(a, b);
42 expect(rewriter.firstToken, same(a)); 42 expect(rewriter.firstToken, same(a));
43 expect(a.next, same(b)); 43 expect(a.next, same(b));
44 expect(a.previousToken.next, same(a)); 44 expect(a.previous.next, same(a));
45 expect(b.previousToken, same(a)); 45 expect(b.previous, same(a));
46 } 46 }
47 47
48 void test_resume_at_previous_insertion_point() { 48 void test_resume_at_previous_insertion_point() {
49 var a = _makeToken(0, 'a'); 49 var a = _makeToken(0, 'a');
50 var b = _makeToken(1, 'b'); 50 var b = _makeToken(1, 'b');
51 var c = _makeToken(2, 'c'); 51 var c = _makeToken(2, 'c');
52 var d = _makeToken(3, 'd'); 52 var d = _makeToken(3, 'd');
53 var e = _makeToken(4, 'e'); 53 var e = _makeToken(4, 'e');
54 _link([a, b, e]); 54 _link([a, b, e]);
55 var rewriter = new TokenStreamRewriter(a); 55 var rewriter = new TokenStreamRewriter(a);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 expect(c.next, same(d)); 98 expect(c.next, same(d));
99 expect(d.next, same(e)); 99 expect(d.next, same(e));
100 } 100 }
101 101
102 /// Links together the given [tokens] and adds an EOF token to the end of the 102 /// Links together the given [tokens] and adds an EOF token to the end of the
103 /// token stream. 103 /// token stream.
104 /// 104 ///
105 /// The EOF token is returned. 105 /// The EOF token is returned.
106 Token _link(Iterable<Token> tokens) { 106 Token _link(Iterable<Token> tokens) {
107 Token head = new SymbolToken.eof(-1); 107 Token head = new SymbolToken.eof(-1);
108 if (!setPrevious) head.previousToken = null; 108 if (!setPrevious) head.previous = null;
109 for (var token in tokens) { 109 for (var token in tokens) {
110 head.next = token; 110 head.next = token;
111 if (setPrevious) token.previousToken = head; 111 if (setPrevious) token.previous = head;
112 head = token; 112 head = token;
113 } 113 }
114 int eofOffset = head.charOffset + head.lexeme.length; 114 int eofOffset = head.charOffset + head.lexeme.length;
115 if (eofOffset < 0) eofOffset = 0; 115 if (eofOffset < 0) eofOffset = 0;
116 Token eof = new SymbolToken.eof(eofOffset); 116 Token eof = new SymbolToken.eof(eofOffset);
117 if (!setPrevious) eof.previousToken = null; 117 if (!setPrevious) eof.previous = null;
118 head.next = eof; 118 head.next = eof;
119 if (setPrevious) eof.previousToken = head; 119 if (setPrevious) eof.previous = head;
120 return eof; 120 return eof;
121 } 121 }
122 122
123 BeginGroupToken _makeBeginGroupToken(int charOffset) { 123 BeginGroupToken _makeBeginGroupToken(int charOffset) {
124 return new BeginGroupToken(TokenType.OPEN_PAREN, charOffset); 124 return new BeginGroupToken(TokenType.OPEN_PAREN, charOffset);
125 } 125 }
126 126
127 StringToken _makeToken(int charOffset, String text) { 127 StringToken _makeToken(int charOffset, String text) {
128 return new StringToken.fromString(null, text, charOffset); 128 return new StringToken.fromString(null, text, charOffset);
129 } 129 }
130 } 130 }
131 131
132 /// Concrete implementation of [TokenStreamRewriterTest] in which 132 /// Concrete implementation of [TokenStreamRewriterTest] in which
133 /// [Token.previousToken] values are set to null. 133 /// [Token.previous] values are set to null.
134 /// 134 ///
135 /// This forces [TokenStreamRewriter] to use its more complex heursitc for 135 /// This forces [TokenStreamRewriter] to use its more complex heursitc for
136 /// finding previous tokens. 136 /// finding previous tokens.
137 @reflectiveTest 137 @reflectiveTest
138 class TokenStreamRewriterTest_NoPrevious extends TokenStreamRewriterTest { 138 class TokenStreamRewriterTest_NoPrevious extends TokenStreamRewriterTest {
139 bool get setPrevious => false; 139 bool get setPrevious => false;
140 } 140 }
141 141
142 /// Concrete implementation of [TokenStreamRewriterTest] in which 142 /// Concrete implementation of [TokenStreamRewriterTest] in which
143 /// [Token.previousToken] values are set to non-null. 143 /// [Token.previous] values are set to non-null.
144 /// 144 ///
145 /// Since [TokenStreamRewriter] makes use of [Token.previousToken] when it can, 145 /// Since [TokenStreamRewriter] makes use of [Token.previous] when it can,
146 /// these tests do not exercise the more complex heuristics for finding previous 146 /// these tests do not exercise the more complex heuristics for finding previous
147 /// tokens. 147 /// tokens.
148 @reflectiveTest 148 @reflectiveTest
149 class TokenStreamRewriterTest_UsingPrevious extends TokenStreamRewriterTest { 149 class TokenStreamRewriterTest_UsingPrevious extends TokenStreamRewriterTest {
150 bool get setPrevious => true; 150 bool get setPrevious => true;
151 } 151 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698