diff --git a/src/Domain/HydraScript.Domain.FrontEnd/Lexer/TokenTypesJson.cs b/src/Domain/HydraScript.Domain.FrontEnd/Lexer/TokenTypesJson.cs index 9719705..e981f97 100644 --- a/src/Domain/HydraScript.Domain.FrontEnd/Lexer/TokenTypesJson.cs +++ b/src/Domain/HydraScript.Domain.FrontEnd/Lexer/TokenTypesJson.cs @@ -31,12 +31,12 @@ public static class TokenTypesJson }, { "tag": "NullLiteral", - "pattern": "null", + "pattern": "(? +public class LexerSuccessData : TheoryData { - public IEnumerator GetEnumerator() + public LexerSuccessData() { - yield return new object[] { "a + b - c return while do" }; - yield return new object[] { "=> abc null true false" }; - yield return new object[] { "{ . } , ( ) [] =?:" }; + Add("a + b - c return while do"); + Add("=> abc null true false"); + Add("{ . } , ( ) [] =?:"); } - - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } -public class LexerFailData : IEnumerable +public class LexerFailData : TheoryData { - public IEnumerator GetEnumerator() + public LexerFailData() { - yield return new object[] { "a + v $$$" }; - yield return new object[] { "kkk &" }; - yield return new object[] { "|| |" }; + Add("a + v $$$"); + Add("kkk &"); + Add("|| |"); } +} - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); +public class LexerKeywordInsideIdentData : TheoryData +{ + public LexerKeywordInsideIdentData() + { + Add("constExpr"); + Add("letVarConst"); + Add("nullObj"); + Add("trueStmt"); + Add("falseStmt"); + Add("returnResult"); + } } \ No newline at end of file diff --git a/tests/HydraScript.Tests/Unit/FrontEnd/RegexLexerTests.cs b/tests/HydraScript.Tests/Unit/FrontEnd/RegexLexerTests.cs index 454921e..75e9bc6 100644 --- a/tests/HydraScript.Tests/Unit/FrontEnd/RegexLexerTests.cs +++ b/tests/HydraScript.Tests/Unit/FrontEnd/RegexLexerTests.cs @@ -1,5 +1,6 @@ using HydraScript.Domain.FrontEnd.Lexer; using HydraScript.Domain.FrontEnd.Lexer.Impl; +using HydraScript.Domain.FrontEnd.Lexer.TokenTypes; using HydraScript.Infrastructure; using HydraScript.Tests.TestData; using Xunit; @@ -44,4 +45,12 @@ public void GetTokensSkipIgnorableTypesTest() var tokens = _regexLexer.GetTokens(text); Assert.DoesNotContain(_regexLexer.Structure.FindByTag("Comment"), tokens.Select(x => x.Type)); } + + [Theory, ClassData(typeof(LexerKeywordInsideIdentData))] + public void GetTokens_KeywordInsideIdent_Ident(string input) + { + var tokens = _regexLexer.GetTokens(input); + var token = tokens.First(); + token.Type.Should().Be(new TokenType("Ident")); + } } \ No newline at end of file