Use SyntaxFacts to generate tokens for tests
This commit is contained in:
parent
0f06f09187
commit
4a15e9dd72
@ -1,4 +1,5 @@
|
|||||||
using Parser.Internal;
|
using System;
|
||||||
|
using Parser.Internal;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
@ -24,12 +25,22 @@ namespace Parser.Tests
|
|||||||
|
|
||||||
public static IEnumerable<object[]> SingleTokensData()
|
public static IEnumerable<object[]> SingleTokensData()
|
||||||
{
|
{
|
||||||
return SingleTokens().Select(pair => new object[] { pair.kind, pair.text });
|
return GetTokens().Select(pair => new object[] { pair.kind, pair.text });
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<(TokenKind kind, string text)> SingleTokens()
|
public static IEnumerable<(TokenKind kind, string text)> GetTokens()
|
||||||
{
|
{
|
||||||
return new[]
|
var fixedTokens = Enum.GetValues(typeof(TokenKind))
|
||||||
|
.Cast<TokenKind>()
|
||||||
|
.Select(k => (kind: k, text: SyntaxFacts.GetText(k)))
|
||||||
|
.Where(t => !(t.text is null))
|
||||||
|
.Where(t => !(SyntaxFacts.IsUnaryTokenKind(t.kind)
|
||||||
|
|| SyntaxFacts.IsOpeningToken(t.kind)
|
||||||
|
|| SyntaxFacts.IsClosingToken(t.kind)
|
||||||
|
|| t.kind == TokenKind.Transpose));
|
||||||
|
|
||||||
|
|
||||||
|
var dynamicTokens = new[]
|
||||||
{
|
{
|
||||||
(TokenKind.Identifier, "a"),
|
(TokenKind.Identifier, "a"),
|
||||||
(TokenKind.Identifier, "abc"),
|
(TokenKind.Identifier, "abc"),
|
||||||
@ -39,44 +50,9 @@ namespace Parser.Tests
|
|||||||
(TokenKind.NumberLiteral, "14.5e-3"),
|
(TokenKind.NumberLiteral, "14.5e-3"),
|
||||||
(TokenKind.NumberLiteral, "3.14e8"),
|
(TokenKind.NumberLiteral, "3.14e8"),
|
||||||
(TokenKind.StringLiteral, "'what is that'"),
|
(TokenKind.StringLiteral, "'what is that'"),
|
||||||
(TokenKind.DoubleQuotedStringLiteral, "\"Another ' string\""),
|
(TokenKind.DoubleQuotedStringLiteral, "\"Another ' string\"")
|
||||||
|
|
||||||
(TokenKind.Assignment, "="),
|
|
||||||
(TokenKind.Equality, "=="),
|
|
||||||
(TokenKind.Inequality, "~="),
|
|
||||||
(TokenKind.LogicalAnd, "&&"),
|
|
||||||
(TokenKind.LogicalOr, "||"),
|
|
||||||
(TokenKind.BitwiseAnd, "&"),
|
|
||||||
(TokenKind.BitwiseOr, "|"),
|
|
||||||
(TokenKind.Less, "<"),
|
|
||||||
(TokenKind.LessOrEqual, "<="),
|
|
||||||
(TokenKind.Greater, ">"),
|
|
||||||
(TokenKind.GreaterOrEqual, ">="),
|
|
||||||
(TokenKind.Not, "~"),
|
|
||||||
(TokenKind.Plus, "+"),
|
|
||||||
(TokenKind.Minus, "-"),
|
|
||||||
(TokenKind.Multiply, "*"),
|
|
||||||
(TokenKind.Divide, "/"),
|
|
||||||
(TokenKind.Power, "^"),
|
|
||||||
(TokenKind.Backslash, "\\"),
|
|
||||||
(TokenKind.DotMultiply, ".*"),
|
|
||||||
(TokenKind.DotDivide, "./"),
|
|
||||||
(TokenKind.DotPower, ".^"),
|
|
||||||
(TokenKind.DotBackslash, ".\\"),
|
|
||||||
(TokenKind.DotTranspose, ".'"),
|
|
||||||
(TokenKind.At, "@"),
|
|
||||||
(TokenKind.Colon, ":"),
|
|
||||||
(TokenKind.QuestionMark, "?"),
|
|
||||||
(TokenKind.Comma, ","),
|
|
||||||
(TokenKind.Semicolon, ";"),
|
|
||||||
//(TokenKind.OpeningBrace, "{"),
|
|
||||||
//(TokenKind.ClosingBrace, "}"),
|
|
||||||
//(TokenKind.OpeningSquareBracket, "["),
|
|
||||||
//(TokenKind.ClosingSquareBracket, "]"),
|
|
||||||
//(TokenKind.OpeningBracket, "("),
|
|
||||||
//(TokenKind.ClosingBracket, ")"),
|
|
||||||
(TokenKind.Dot, "."),
|
|
||||||
};
|
};
|
||||||
|
return fixedTokens.Concat(dynamicTokens);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -158,13 +158,14 @@ namespace Parser.Internal
|
|||||||
private static readonly string[] StringFromKind =
|
private static readonly string[] StringFromKind =
|
||||||
{
|
{
|
||||||
null, // None = 0,
|
null, // None = 0,
|
||||||
"", // EndOfFile = 1,
|
null, // BadToken = 1,
|
||||||
null, // Identifier = 2,
|
null, // EndOfFile = 2,
|
||||||
null, // NumberLiteral = 3,
|
null, // Identifier = 3,
|
||||||
null, // StringLiteral = 4,
|
null, // NumberLiteral = 4,
|
||||||
null, // DoubleQuotedStringLiteral = 5,
|
null, // StringLiteral = 5,
|
||||||
null, // UnquotedStringLiteral = 6
|
null, // DoubleQuotedStringLiteral = 6,
|
||||||
null, null, null, null, null, null, null, null, null, null, null, null, null,
|
null, // UnquotedStringLiteral = 7
|
||||||
|
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||||
"=", // Assignment = 20,
|
"=", // Assignment = 20,
|
||||||
"==", // Equality = 21,
|
"==", // Equality = 21,
|
||||||
"~=", // Inequality = 22,
|
"~=", // Inequality = 22,
|
||||||
@ -201,7 +202,7 @@ namespace Parser.Internal
|
|||||||
"(", // OpeningBracket = 53,
|
"(", // OpeningBracket = 53,
|
||||||
")", // ClosingBracket = 54,
|
")", // ClosingBracket = 54,
|
||||||
".", // Dot = 55,
|
".", // Dot = 55,
|
||||||
"...", // DotDotDot = 56,
|
null, // DotDotDot = 56, // This is not used at the moment.
|
||||||
|
|
||||||
"+", // UnaryPlus = 57,
|
"+", // UnaryPlus = 57,
|
||||||
"-", // UnaryMinus = 58,
|
"-", // UnaryMinus = 58,
|
||||||
@ -211,7 +212,12 @@ namespace Parser.Internal
|
|||||||
|
|
||||||
public static string GetText(TokenKind kind)
|
public static string GetText(TokenKind kind)
|
||||||
{
|
{
|
||||||
return StringFromKind[(int) kind];
|
if ((int) kind < (int) TokenKind.File)
|
||||||
|
{
|
||||||
|
return StringFromKind[(int) kind];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsUnaryOperator(TokenKind kind)
|
public static bool IsUnaryOperator(TokenKind kind)
|
||||||
@ -228,6 +234,20 @@ namespace Parser.Internal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool IsUnaryTokenKind(TokenKind kind)
|
||||||
|
{
|
||||||
|
switch (kind)
|
||||||
|
{
|
||||||
|
case TokenKind.UnaryPlus:
|
||||||
|
case TokenKind.UnaryMinus:
|
||||||
|
case TokenKind.UnaryNot:
|
||||||
|
case TokenKind.UnaryQuestionMark:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static bool IsBinaryOperator(TokenKind kind)
|
public static bool IsBinaryOperator(TokenKind kind)
|
||||||
{
|
{
|
||||||
switch (kind)
|
switch (kind)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user