| Index: pkg/front_end/test/scanner_roundtrip_test.dart
|
| diff --git a/pkg/front_end/test/scanner_roundtrip_test.dart b/pkg/front_end/test/scanner_roundtrip_test.dart
|
| index aa3d3d385518d5d4ecbc1465a1df49b432f933ee..0b27e6b80ee71525adeab77915b8237a05f754b8 100644
|
| --- a/pkg/front_end/test/scanner_roundtrip_test.dart
|
| +++ b/pkg/front_end/test/scanner_roundtrip_test.dart
|
| @@ -3,7 +3,9 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| import 'package:front_end/src/fasta/analyzer/token_utils.dart';
|
| +import 'package:front_end/src/fasta/scanner/precedence.dart';
|
| import 'package:front_end/src/scanner/token.dart';
|
| +import 'package:front_end/src/fasta/scanner/string_scanner.dart';
|
| import 'package:test/test.dart';
|
| import 'package:test_reflective_loader/test_reflective_loader.dart';
|
|
|
| @@ -117,4 +119,148 @@ class ScannerTest_RoundTrip extends ScannerTest {
|
| reason: keyword.name);
|
| }
|
| }
|
| +
|
| + var allTokenTypes = new Set<TokenType>.from([
|
| + TokenType.EOF,
|
| + TokenType.DOUBLE,
|
| + TokenType.HEXADECIMAL,
|
| + TokenType.IDENTIFIER,
|
| + TokenType.INT,
|
| + TokenType.KEYWORD,
|
| + TokenType.MULTI_LINE_COMMENT,
|
| + TokenType.SCRIPT_TAG,
|
| + TokenType.SINGLE_LINE_COMMENT,
|
| + TokenType.STRING,
|
| + TokenType.AMPERSAND,
|
| + TokenType.AMPERSAND_AMPERSAND,
|
| + TokenType.AMPERSAND_AMPERSAND_EQ,
|
| + TokenType.AMPERSAND_EQ,
|
| + TokenType.AT,
|
| + TokenType.BANG,
|
| + TokenType.BANG_EQ,
|
| + TokenType.BAR,
|
| + TokenType.BAR_BAR,
|
| + TokenType.BAR_BAR_EQ,
|
| + TokenType.BAR_EQ,
|
| + TokenType.COLON,
|
| + TokenType.COMMA,
|
| + TokenType.CARET,
|
| + TokenType.CARET_EQ,
|
| + TokenType.CLOSE_CURLY_BRACKET,
|
| + TokenType.CLOSE_PAREN,
|
| + TokenType.CLOSE_SQUARE_BRACKET,
|
| + TokenType.EQ,
|
| + TokenType.EQ_EQ,
|
| + TokenType.FUNCTION,
|
| + TokenType.GT,
|
| + TokenType.GT_EQ,
|
| + TokenType.GT_GT,
|
| + TokenType.GT_GT_EQ,
|
| + TokenType.HASH,
|
| + TokenType.INDEX,
|
| + TokenType.INDEX_EQ,
|
| + TokenType.LT,
|
| + TokenType.LT_EQ,
|
| + TokenType.LT_LT,
|
| + TokenType.LT_LT_EQ,
|
| + TokenType.MINUS,
|
| + TokenType.MINUS_EQ,
|
| + TokenType.MINUS_MINUS,
|
| + TokenType.OPEN_CURLY_BRACKET,
|
| + TokenType.OPEN_PAREN,
|
| + TokenType.OPEN_SQUARE_BRACKET,
|
| + TokenType.PERCENT,
|
| + TokenType.PERCENT_EQ,
|
| + TokenType.PERIOD,
|
| + TokenType.PERIOD_PERIOD,
|
| + TokenType.PLUS,
|
| + TokenType.PLUS_EQ,
|
| + TokenType.PLUS_PLUS,
|
| + TokenType.QUESTION,
|
| + TokenType.QUESTION_PERIOD,
|
| + TokenType.QUESTION_QUESTION,
|
| + TokenType.QUESTION_QUESTION_EQ,
|
| + TokenType.SEMICOLON,
|
| + TokenType.SLASH,
|
| + TokenType.SLASH_EQ,
|
| + TokenType.STAR,
|
| + TokenType.STAR_EQ,
|
| + TokenType.STRING_INTERPOLATION_EXPRESSION,
|
| + TokenType.STRING_INTERPOLATION_IDENTIFIER,
|
| + TokenType.TILDE,
|
| + TokenType.TILDE_SLASH,
|
| + TokenType.TILDE_SLASH_EQ,
|
| + TokenType.BACKPING,
|
| + TokenType.BACKSLASH,
|
| + TokenType.PERIOD_PERIOD_PERIOD,
|
| + TokenType.GENERIC_METHOD_TYPE_LIST,
|
| + TokenType.GENERIC_METHOD_TYPE_ASSIGN,
|
| + ]);
|
| +
|
| + void test_isOperator() {
|
| + var operatorTokenTypes = new Set<TokenType>.from([
|
| + TokenType.AMPERSAND,
|
| + TokenType.AMPERSAND_AMPERSAND,
|
| + TokenType.AMPERSAND_AMPERSAND_EQ,
|
| + TokenType.AMPERSAND_EQ,
|
| + TokenType.BANG,
|
| + TokenType.BANG_EQ,
|
| + TokenType.BAR,
|
| + TokenType.BAR_BAR,
|
| + TokenType.BAR_BAR_EQ,
|
| + TokenType.BAR_EQ,
|
| + TokenType.CARET,
|
| + TokenType.CARET_EQ,
|
| + TokenType.EQ,
|
| + TokenType.EQ_EQ,
|
| + TokenType.GT,
|
| + TokenType.GT_EQ,
|
| + TokenType.GT_GT,
|
| + TokenType.GT_GT_EQ,
|
| + TokenType.INDEX,
|
| + TokenType.INDEX_EQ,
|
| + TokenType.LT,
|
| + TokenType.LT_EQ,
|
| + TokenType.LT_LT,
|
| + TokenType.LT_LT_EQ,
|
| + TokenType.MINUS,
|
| + TokenType.MINUS_EQ,
|
| + TokenType.MINUS_MINUS,
|
| + TokenType.PERCENT,
|
| + TokenType.PERCENT_EQ,
|
| + TokenType.PERIOD_PERIOD,
|
| + TokenType.PLUS,
|
| + TokenType.PLUS_EQ,
|
| + TokenType.PLUS_PLUS,
|
| + TokenType.QUESTION,
|
| + TokenType.QUESTION_PERIOD,
|
| + TokenType.QUESTION_QUESTION,
|
| + TokenType.QUESTION_QUESTION_EQ,
|
| + TokenType.SLASH,
|
| + TokenType.SLASH_EQ,
|
| + TokenType.STAR,
|
| + TokenType.STAR_EQ,
|
| + TokenType.TILDE,
|
| + TokenType.TILDE_SLASH,
|
| + TokenType.TILDE_SLASH_EQ,
|
| + ]);
|
| +
|
| + void assertIsOperator(String source, bool isOperator) {
|
| + if (source == null || source.isEmpty) return;
|
| + var scanner = new StringScanner(source, includeComments: true);
|
| + var token = scanner.tokenize();
|
| + expect(token.isOperator, isOperator, reason: source);
|
| + }
|
| +
|
| + var operatorLexemes =
|
| + new Set.from(operatorTokenTypes.map((tt) => tt.lexeme));
|
| +
|
| + for (PrecedenceInfo info in PrecedenceInfo.all) {
|
| + assertIsOperator(info.value, operatorLexemes.contains(info.value));
|
| + }
|
| +
|
| + for (TokenType tt in new List.from(allTokenTypes)) {
|
| + assertIsOperator(tt.lexeme, operatorTokenTypes.contains(tt));
|
| + }
|
| + }
|
| }
|
|
|