diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs index 01b9b68..b15d11c 100644 --- a/src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs +++ b/src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs @@ -37,24 +37,23 @@ public static void FindRuleExprParsingShouldBeSuccess(string ruleStr) } [Theory] - [InlineData(0, "$var$ In \"Is\", \"==\", \"!=\", \"is not\"", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(1, "$var$ In (\"Is\", \"==\", \"!=\", \"is not\")", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(2, "$var$ In \"Is\",\"==\",\"!=\",\"is not\"", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(3, "$var$ In (\"Is\",\"==\",\"!=\",\"is not\")", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(4, "$var$ In(\"Is\",\"==\",\"!=\",\"is not\")", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(5, "$var$ In ( \"Is\",\"==\",\"!=\",\"is not\" ) ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(6, "$var$ In ( \"Is\",\"==\",\"!=\",\"is not\" )", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(7, "$var$ In ( \"Is\",\"==\",\"!=\",\"is not\") ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(8, "$var$ In (\"Is\",\"==\",\"!=\",\"is not\" ) ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(9, "$var$ In (\"Is\",\"==\",\"!=\",\"is not\" )", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(10, "$var$ In (\"Is\",\"==\",\"!=\",\"is not\") ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(11, "$var$ In( \"Is\",\"==\",\"!=\",\"is not\" ) ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(12, "$var$ In( \"Is\",\"==\",\"!=\",\"is not\" )", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(13, "$var$ In( \"Is\",\"==\",\"!=\",\"is not\") ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - [InlineData(14, "Not ($var$ equals $var$.Lenght and $var$ StartsWith \"123\")", "Not $var$ equals $var$.Lenght and $var$ StartsWith \"123\"")] - [InlineData(15, "Not ($var$ equals $var$.Lenght)", "Not $var$ equals $var$.Lenght")] - [InlineData(16, "$var$ In( \"Is\",\"==\",\"!=\",\"is not\" )", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] - public static void FindRuleExprParsingShouldBeEqualsCustomResult(int number, string ruleStr, string customResult) + [InlineData("$var$ In \"Is\", \"==\", \"!=\", \"is not\"", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In (\"Is\", \"==\", \"!=\", \"is not\")", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In \"Is\",\"==\",\"!=\",\"is not\"", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In (\"Is\",\"==\",\"!=\",\"is not\")", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In(\"Is\",\"==\",\"!=\",\"is not\")", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In ( \"Is\",\"==\",\"!=\",\"is not\" ) ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In ( \"Is\",\"==\",\"!=\",\"is not\" )", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In ( \"Is\",\"==\",\"!=\",\"is not\") ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In (\"Is\",\"==\",\"!=\",\"is not\" ) ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In (\"Is\",\"==\",\"!=\",\"is not\" )", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In (\"Is\",\"==\",\"!=\",\"is not\") ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In( \"Is\",\"==\",\"!=\",\"is not\" ) ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In( \"Is\",\"==\",\"!=\",\"is not\" )", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("$var$ In( \"Is\",\"==\",\"!=\",\"is not\") ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")] + [InlineData("Not ($var$ equals $var$.Lenght and $var$ StartsWith \"123\")", "Not $var$ equals $var$.Lenght and $var$ StartsWith \"123\"")] + [InlineData("Not ($var$ equals $var$.Lenght)", "Not $var$ equals $var$.Lenght")] + public static void FindRuleExprParsingShouldBeEqualsCustomResult(string ruleStr, string customResult) { var rule = FindRuleParser.Expr.ParseOrThrow(ruleStr); var ruleAsStr = rule.ToString()?.ToLower(); diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs index 6654852..f834d59 100644 --- a/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs +++ b/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs @@ -54,23 +54,23 @@ public static void ReplaceBuildShouldBeSuccess(string templatePath, string resul // TODO validation parenthesis for parameters [Theory] - [InlineData(0, "test $var1$.Lenght")] - [InlineData(1, "(test) $var1$.Lenght")] - [InlineData(2, "test ($var1$.Lenght)")] - [InlineData(3, "(test $var1$.Lenght)")] - [InlineData(4, "test ")] - [InlineData(5, "($var1$.Lenght)")] - [InlineData(6, " ($var1$.Lenght)")] - [InlineData(7, " ( )")] - [InlineData(8, "test ( )")] - [InlineData(9, " (test $var1$.Lenght)")] - [InlineData(10, "(test) ($var1$.Lenght)")] - [InlineData(11, "((test) $var1$.Lenght)")] - [InlineData(12, "(test ($var1$.Lenght))")] - [InlineData(13, "((test) ($var1$.Lenght))")] - [InlineData(14, "()")] - [InlineData(15, "(test ($var1$.Lenght) test2)")] - public static void ReplaceTemplateParsingShouldBeSuccess(int number, string templateStr) + [InlineData("test $var1$.Lenght")] + [InlineData("(test) $var1$.Lenght")] + [InlineData("test ($var1$.Lenght)")] + [InlineData("(test $var1$.Lenght)")] + [InlineData("test ")] + [InlineData("($var1$.Lenght)")] + [InlineData(" ($var1$.Lenght)")] + [InlineData(" ( )")] + [InlineData("test ( )")] + [InlineData(" (test $var1$.Lenght)")] + [InlineData("(test) ($var1$.Lenght)")] + [InlineData("((test) $var1$.Lenght)")] + [InlineData("(test ($var1$.Lenght))")] + [InlineData("((test) ($var1$.Lenght))")] + [InlineData("()")] + [InlineData("(test ($var1$.Lenght) test2)")] + public static void ReplaceTemplateParsingShouldBeSuccess(string templateStr) { var replaceBuilder = StructuralSearch.ParseReplaceTemplate(templateStr); var replaceStr = replaceBuilder.ToString()?.ToLower(); diff --git a/src/SimpleStateMachine.StructuralSearch/EmptyParsingContext.cs b/src/SimpleStateMachine.StructuralSearch/EmptyParsingContext.cs index 99fd037..8f99a7a 100644 --- a/src/SimpleStateMachine.StructuralSearch/EmptyParsingContext.cs +++ b/src/SimpleStateMachine.StructuralSearch/EmptyParsingContext.cs @@ -36,7 +36,7 @@ public void Fill(IReadOnlyDictionary placeholders) throw new System.NotImplementedException(); } - public void Clear() + public IReadOnlyDictionary Clear() { throw new System.NotImplementedException(); } diff --git a/src/SimpleStateMachine.StructuralSearch/FindParser.cs b/src/SimpleStateMachine.StructuralSearch/FindParser.cs index 7844cb9..ed351bd 100644 --- a/src/SimpleStateMachine.StructuralSearch/FindParser.cs +++ b/src/SimpleStateMachine.StructuralSearch/FindParser.cs @@ -28,7 +28,7 @@ public IEnumerable Parse(ref IParsingContext context) .Match() .ThenInvoke(match => { - var placeholders= parsingContext.SwitchOnNew(); + var placeholders = parsingContext.Clear(); matches.Add(new FindParserResult(match, placeholders)); }) .ThenReturn(Unit.Value) @@ -38,7 +38,7 @@ public IEnumerable Parse(ref IParsingContext context) .ThenInvoke(x => { res.Append(x); - parsingContext.SwitchOnNew(); + parsingContext.Clear(); }) .ThenReturn(Unit.Value); diff --git a/src/SimpleStateMachine.StructuralSearch/IParsingContext.cs b/src/SimpleStateMachine.StructuralSearch/IParsingContext.cs index 689b032..dc96a3a 100644 --- a/src/SimpleStateMachine.StructuralSearch/IParsingContext.cs +++ b/src/SimpleStateMachine.StructuralSearch/IParsingContext.cs @@ -7,13 +7,10 @@ public interface IParsingContext IInput Input { get; } bool TryGetPlaceholder(string name, out IPlaceholder value); - void AddPlaceholder(IPlaceholder placeholder); - IPlaceholder GetPlaceholder(string name); - IReadOnlyDictionary SwitchOnNew(); void Fill(IReadOnlyDictionaryplaceholders); - void Clear(); + IReadOnlyDictionary Clear(); } } \ No newline at end of file diff --git a/src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs b/src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs index 4d83abc..c7721ad 100644 --- a/src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs +++ b/src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs @@ -55,7 +55,7 @@ public override Parser BuildParser(Func?> nex var simpleString = CommonTemplateParser.StringWithPlshd; var token = Parser.OneOf(simpleString, CommonParser.WhiteSpaces).Try(); - Parser term = null; + Parser? term = null; var parenthesised = Parsers.BetweenOneOfChars(x => Parser.Char(x).AsString(), expr: Parser.Rec(() => term), diff --git a/src/SimpleStateMachine.StructuralSearch/ParsingContext.cs b/src/SimpleStateMachine.StructuralSearch/ParsingContext.cs index 77880e1..bd26cd5 100644 --- a/src/SimpleStateMachine.StructuralSearch/ParsingContext.cs +++ b/src/SimpleStateMachine.StructuralSearch/ParsingContext.cs @@ -29,19 +29,10 @@ public IPlaceholder GetPlaceholder(string name) { return Placeholders[name]; } - - public IReadOnlyDictionary SwitchOnNew() - { - var placeholders = Placeholders - .OrderBy(x=> x.Value.Offset.Start) - .ToDictionary(x=> x.Key, x=> x.Value); - Clear(); - return placeholders; - } - + public void Fill(IReadOnlyDictionary placeholders) { - Clear(); + ClearInternal(); foreach (var placeholder in placeholders) { @@ -49,9 +40,20 @@ public void Fill(IReadOnlyDictionary placeholders) } } - public void Clear() + public IReadOnlyDictionary Clear() + { + var placeholders = Placeholders + .OrderBy(x=> x.Value.Offset.Start) + .ToDictionary(x=> x.Key, x=> x.Value); + + ClearInternal(); + + return placeholders; + } + + private void ClearInternal() { - Placeholders.Clear(); + Placeholders.Clear();; } } } \ No newline at end of file