| 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 | 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 Token, TokenType; | 7 import 'package:front_end/src/scanner/token.dart' |
| 8 show BeginToken, Token, TokenType; |
| 8 import 'package:test/test.dart'; | 9 import 'package:test/test.dart'; |
| 9 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 10 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 10 | 11 |
| 11 main() { | 12 main() { |
| 12 defineReflectiveSuite(() { | 13 defineReflectiveSuite(() { |
| 13 defineReflectiveTests(TokenStreamRewriterTest_NoPrevious); | 14 defineReflectiveTests(TokenStreamRewriterTest_NoPrevious); |
| 14 defineReflectiveTests(TokenStreamRewriterTest_UsingPrevious); | 15 defineReflectiveTests(TokenStreamRewriterTest_UsingPrevious); |
| 15 }); | 16 }); |
| 16 } | 17 } |
| 17 | 18 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 rewriter.insertTokenBefore(d, e); | 98 rewriter.insertTokenBefore(d, e); |
| 98 expect(c.next, same(d)); | 99 expect(c.next, same(d)); |
| 99 expect(d.next, same(e)); | 100 expect(d.next, same(e)); |
| 100 } | 101 } |
| 101 | 102 |
| 102 /// Links together the given [tokens] and adds an EOF token to the end of the | 103 /// Links together the given [tokens] and adds an EOF token to the end of the |
| 103 /// token stream. | 104 /// token stream. |
| 104 /// | 105 /// |
| 105 /// The EOF token is returned. | 106 /// The EOF token is returned. |
| 106 Token _link(Iterable<Token> tokens) { | 107 Token _link(Iterable<Token> tokens) { |
| 107 Token head = new SymbolToken.eof(-1); | 108 Token head = new Token.eof(-1); |
| 108 if (!setPrevious) head.previous = null; | 109 if (!setPrevious) head.previous = null; |
| 109 for (var token in tokens) { | 110 for (var token in tokens) { |
| 110 head.next = token; | 111 head.next = token; |
| 111 if (setPrevious) token.previous = head; | 112 if (setPrevious) token.previous = head; |
| 112 head = token; | 113 head = token; |
| 113 } | 114 } |
| 114 int eofOffset = head.charOffset + head.lexeme.length; | 115 int eofOffset = head.charOffset + head.lexeme.length; |
| 115 if (eofOffset < 0) eofOffset = 0; | 116 if (eofOffset < 0) eofOffset = 0; |
| 116 Token eof = new SymbolToken.eof(eofOffset); | 117 Token eof = new Token.eof(eofOffset); |
| 117 if (!setPrevious) eof.previous = null; | 118 if (!setPrevious) eof.previous = null; |
| 118 head.next = eof; | 119 head.next = eof; |
| 119 if (setPrevious) eof.previous = head; | 120 if (setPrevious) eof.previous = head; |
| 120 return eof; | 121 return eof; |
| 121 } | 122 } |
| 122 | 123 |
| 123 BeginGroupToken _makeBeginGroupToken(int charOffset) { | 124 BeginToken _makeBeginGroupToken(int charOffset) { |
| 124 return new BeginGroupToken(TokenType.OPEN_PAREN, charOffset); | 125 return new BeginToken(TokenType.OPEN_PAREN, charOffset); |
| 125 } | 126 } |
| 126 | 127 |
| 127 StringToken _makeToken(int charOffset, String text) { | 128 StringToken _makeToken(int charOffset, String text) { |
| 128 return new StringToken.fromString(null, text, charOffset); | 129 return new StringToken.fromString(null, text, charOffset); |
| 129 } | 130 } |
| 130 } | 131 } |
| 131 | 132 |
| 132 /// Concrete implementation of [TokenStreamRewriterTest] in which | 133 /// Concrete implementation of [TokenStreamRewriterTest] in which |
| 133 /// [Token.previous] values are set to null. | 134 /// [Token.previous] values are set to null. |
| 134 /// | 135 /// |
| 135 /// This forces [TokenStreamRewriter] to use its more complex heursitc for | 136 /// This forces [TokenStreamRewriter] to use its more complex heursitc for |
| 136 /// finding previous tokens. | 137 /// finding previous tokens. |
| 137 @reflectiveTest | 138 @reflectiveTest |
| 138 class TokenStreamRewriterTest_NoPrevious extends TokenStreamRewriterTest { | 139 class TokenStreamRewriterTest_NoPrevious extends TokenStreamRewriterTest { |
| 139 bool get setPrevious => false; | 140 bool get setPrevious => false; |
| 140 } | 141 } |
| 141 | 142 |
| 142 /// Concrete implementation of [TokenStreamRewriterTest] in which | 143 /// Concrete implementation of [TokenStreamRewriterTest] in which |
| 143 /// [Token.previous] values are set to non-null. | 144 /// [Token.previous] values are set to non-null. |
| 144 /// | 145 /// |
| 145 /// Since [TokenStreamRewriter] makes use of [Token.previous] when it can, | 146 /// Since [TokenStreamRewriter] makes use of [Token.previous] when it can, |
| 146 /// these tests do not exercise the more complex heuristics for finding previous | 147 /// these tests do not exercise the more complex heuristics for finding previous |
| 147 /// tokens. | 148 /// tokens. |
| 148 @reflectiveTest | 149 @reflectiveTest |
| 149 class TokenStreamRewriterTest_UsingPrevious extends TokenStreamRewriterTest { | 150 class TokenStreamRewriterTest_UsingPrevious extends TokenStreamRewriterTest { |
| 150 bool get setPrevious => true; | 151 bool get setPrevious => true; |
| 151 } | 152 } |
| OLD | NEW |