| 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/analyzer/token_utils.dart'; | 5 import 'package:front_end/src/fasta/analyzer/token_utils.dart'; |
| 6 import 'package:front_end/src/fasta/scanner/precedence.dart'; |
| 6 import 'package:front_end/src/scanner/token.dart'; | 7 import 'package:front_end/src/scanner/token.dart'; |
| 8 import 'package:front_end/src/fasta/scanner/string_scanner.dart'; |
| 7 import 'package:test/test.dart'; | 9 import 'package:test/test.dart'; |
| 8 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 10 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 9 | 11 |
| 10 import 'scanner_fasta_test.dart'; | 12 import 'scanner_fasta_test.dart'; |
| 11 import 'scanner_test.dart'; | 13 import 'scanner_test.dart'; |
| 12 | 14 |
| 13 main() { | 15 main() { |
| 14 defineReflectiveSuite(() { | 16 defineReflectiveSuite(() { |
| 15 defineReflectiveTests(ScannerTest_RoundTrip); | 17 defineReflectiveTests(ScannerTest_RoundTrip); |
| 16 }); | 18 }); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 Keyword.PART, | 112 Keyword.PART, |
| 111 Keyword.SET, | 113 Keyword.SET, |
| 112 Keyword.STATIC, | 114 Keyword.STATIC, |
| 113 Keyword.TYPEDEF, | 115 Keyword.TYPEDEF, |
| 114 ]); | 116 ]); |
| 115 for (Keyword keyword in Keyword.values) { | 117 for (Keyword keyword in Keyword.values) { |
| 116 expect(keyword.isPseudoKeyword, pseudoAnalyzerKeywords.contains(keyword), | 118 expect(keyword.isPseudoKeyword, pseudoAnalyzerKeywords.contains(keyword), |
| 117 reason: keyword.name); | 119 reason: keyword.name); |
| 118 } | 120 } |
| 119 } | 121 } |
| 122 |
| 123 var allTokenTypes = new Set<TokenType>.from([ |
| 124 TokenType.EOF, |
| 125 TokenType.DOUBLE, |
| 126 TokenType.HEXADECIMAL, |
| 127 TokenType.IDENTIFIER, |
| 128 TokenType.INT, |
| 129 TokenType.KEYWORD, |
| 130 TokenType.MULTI_LINE_COMMENT, |
| 131 TokenType.SCRIPT_TAG, |
| 132 TokenType.SINGLE_LINE_COMMENT, |
| 133 TokenType.STRING, |
| 134 TokenType.AMPERSAND, |
| 135 TokenType.AMPERSAND_AMPERSAND, |
| 136 TokenType.AMPERSAND_AMPERSAND_EQ, |
| 137 TokenType.AMPERSAND_EQ, |
| 138 TokenType.AT, |
| 139 TokenType.BANG, |
| 140 TokenType.BANG_EQ, |
| 141 TokenType.BAR, |
| 142 TokenType.BAR_BAR, |
| 143 TokenType.BAR_BAR_EQ, |
| 144 TokenType.BAR_EQ, |
| 145 TokenType.COLON, |
| 146 TokenType.COMMA, |
| 147 TokenType.CARET, |
| 148 TokenType.CARET_EQ, |
| 149 TokenType.CLOSE_CURLY_BRACKET, |
| 150 TokenType.CLOSE_PAREN, |
| 151 TokenType.CLOSE_SQUARE_BRACKET, |
| 152 TokenType.EQ, |
| 153 TokenType.EQ_EQ, |
| 154 TokenType.FUNCTION, |
| 155 TokenType.GT, |
| 156 TokenType.GT_EQ, |
| 157 TokenType.GT_GT, |
| 158 TokenType.GT_GT_EQ, |
| 159 TokenType.HASH, |
| 160 TokenType.INDEX, |
| 161 TokenType.INDEX_EQ, |
| 162 TokenType.LT, |
| 163 TokenType.LT_EQ, |
| 164 TokenType.LT_LT, |
| 165 TokenType.LT_LT_EQ, |
| 166 TokenType.MINUS, |
| 167 TokenType.MINUS_EQ, |
| 168 TokenType.MINUS_MINUS, |
| 169 TokenType.OPEN_CURLY_BRACKET, |
| 170 TokenType.OPEN_PAREN, |
| 171 TokenType.OPEN_SQUARE_BRACKET, |
| 172 TokenType.PERCENT, |
| 173 TokenType.PERCENT_EQ, |
| 174 TokenType.PERIOD, |
| 175 TokenType.PERIOD_PERIOD, |
| 176 TokenType.PLUS, |
| 177 TokenType.PLUS_EQ, |
| 178 TokenType.PLUS_PLUS, |
| 179 TokenType.QUESTION, |
| 180 TokenType.QUESTION_PERIOD, |
| 181 TokenType.QUESTION_QUESTION, |
| 182 TokenType.QUESTION_QUESTION_EQ, |
| 183 TokenType.SEMICOLON, |
| 184 TokenType.SLASH, |
| 185 TokenType.SLASH_EQ, |
| 186 TokenType.STAR, |
| 187 TokenType.STAR_EQ, |
| 188 TokenType.STRING_INTERPOLATION_EXPRESSION, |
| 189 TokenType.STRING_INTERPOLATION_IDENTIFIER, |
| 190 TokenType.TILDE, |
| 191 TokenType.TILDE_SLASH, |
| 192 TokenType.TILDE_SLASH_EQ, |
| 193 TokenType.BACKPING, |
| 194 TokenType.BACKSLASH, |
| 195 TokenType.PERIOD_PERIOD_PERIOD, |
| 196 TokenType.GENERIC_METHOD_TYPE_LIST, |
| 197 TokenType.GENERIC_METHOD_TYPE_ASSIGN, |
| 198 ]); |
| 199 |
| 200 void test_isOperator() { |
| 201 var operatorTokenTypes = new Set<TokenType>.from([ |
| 202 TokenType.AMPERSAND, |
| 203 TokenType.AMPERSAND_AMPERSAND, |
| 204 TokenType.AMPERSAND_AMPERSAND_EQ, |
| 205 TokenType.AMPERSAND_EQ, |
| 206 TokenType.BANG, |
| 207 TokenType.BANG_EQ, |
| 208 TokenType.BAR, |
| 209 TokenType.BAR_BAR, |
| 210 TokenType.BAR_BAR_EQ, |
| 211 TokenType.BAR_EQ, |
| 212 TokenType.CARET, |
| 213 TokenType.CARET_EQ, |
| 214 TokenType.EQ, |
| 215 TokenType.EQ_EQ, |
| 216 TokenType.GT, |
| 217 TokenType.GT_EQ, |
| 218 TokenType.GT_GT, |
| 219 TokenType.GT_GT_EQ, |
| 220 TokenType.INDEX, |
| 221 TokenType.INDEX_EQ, |
| 222 TokenType.LT, |
| 223 TokenType.LT_EQ, |
| 224 TokenType.LT_LT, |
| 225 TokenType.LT_LT_EQ, |
| 226 TokenType.MINUS, |
| 227 TokenType.MINUS_EQ, |
| 228 TokenType.MINUS_MINUS, |
| 229 TokenType.PERCENT, |
| 230 TokenType.PERCENT_EQ, |
| 231 TokenType.PERIOD_PERIOD, |
| 232 TokenType.PLUS, |
| 233 TokenType.PLUS_EQ, |
| 234 TokenType.PLUS_PLUS, |
| 235 TokenType.QUESTION, |
| 236 TokenType.QUESTION_PERIOD, |
| 237 TokenType.QUESTION_QUESTION, |
| 238 TokenType.QUESTION_QUESTION_EQ, |
| 239 TokenType.SLASH, |
| 240 TokenType.SLASH_EQ, |
| 241 TokenType.STAR, |
| 242 TokenType.STAR_EQ, |
| 243 TokenType.TILDE, |
| 244 TokenType.TILDE_SLASH, |
| 245 TokenType.TILDE_SLASH_EQ, |
| 246 ]); |
| 247 |
| 248 void assertIsOperator(String source, bool isOperator) { |
| 249 if (source == null || source.isEmpty) return; |
| 250 var scanner = new StringScanner(source, includeComments: true); |
| 251 var token = scanner.tokenize(); |
| 252 expect(token.isOperator, isOperator, reason: source); |
| 253 } |
| 254 |
| 255 var operatorLexemes = |
| 256 new Set.from(operatorTokenTypes.map((tt) => tt.lexeme)); |
| 257 |
| 258 for (PrecedenceInfo info in PrecedenceInfo.all) { |
| 259 assertIsOperator(info.value, operatorLexemes.contains(info.value)); |
| 260 } |
| 261 |
| 262 for (TokenType tt in new List.from(allTokenTypes)) { |
| 263 assertIsOperator(tt.lexeme, operatorTokenTypes.contains(tt)); |
| 264 } |
| 265 } |
| 120 } | 266 } |
| OLD | NEW |