diff --git a/src/SimpleStateMachine.StructuralSearch.Sandbox/SimpleStateMachine.StructuralSearch.Sandbox.csproj b/src/SimpleStateMachine.StructuralSearch.Sandbox/SimpleStateMachine.StructuralSearch.Sandbox.csproj
index 1b0a13d..64c3f6e 100644
--- a/src/SimpleStateMachine.StructuralSearch.Sandbox/SimpleStateMachine.StructuralSearch.Sandbox.csproj
+++ b/src/SimpleStateMachine.StructuralSearch.Sandbox/SimpleStateMachine.StructuralSearch.Sandbox.csproj
@@ -9,8 +9,8 @@
-
-
+
+
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/FullConfig.yml b/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/FullConfig.yml
index 21dc313..1031fc6 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/FullConfig.yml
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/FullConfig.yml
@@ -1,7 +1,7 @@
Configurations:
# AssignmentNullUnionOperator
- FindTemplate: |-
- if($var$ $sign$ null)
+ if ($var$ $sign$ null)
{
$var$ = $value$;
}
@@ -14,7 +14,7 @@
# NullUnionOperator
- FindTemplate: |-
- if($value$ $sign$ null)
+ if ($value$ $sign$ null)
$var$ = $value2$;
else
$var$ = $value1$;
@@ -29,7 +29,7 @@
# TernaryOperator
- FindTemplate: |-
- if($condition$)
+ if ($condition$)
return $value1$;
else
return $value2$;
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/If.yml b/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/If.yml
index 0de08f3..4edf084 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/If.yml
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/If.yml
@@ -1,5 +1,5 @@
Configurations:
- - FindTemplate: if($var1$ == $var2$)
+ - FindTemplate: if ($var1$ == $var2$)
FindRules:
- $var1$ Is Var
- $var2$ is Var
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/ShortConfig.yml b/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/ShortConfig.yml
index ad1671e..61ad05b 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/ShortConfig.yml
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFile/ShortConfig.yml
@@ -1,7 +1,7 @@
Configurations:
# AssignmentNullUnionOperator
- FindTemplate: |-
- if($var$ $sign$ null)
+ if ($var$ $sign$ null)
{
$var$ = $value$;
}
@@ -13,7 +13,7 @@
# NullUnionOperator
- FindTemplate: |-
- if($value$ $sign$ null)
+ if ($value$ $sign$ null)
$var$ = $value2$;
else
$var$ = $value1$;
@@ -28,7 +28,7 @@
# TernaryOperator
- FindTemplate: |-
- if($condition$)
+ if ($condition$)
return $value1$;
else
return $value2$;
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFileTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFileTests.cs
index 4f4b747..8a0010e 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFileTests.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFileTests.cs
@@ -4,36 +4,35 @@
using SimpleStateMachine.StructuralSearch.Tests.Mock;
using Xunit;
-namespace SimpleStateMachine.StructuralSearch.Tests
+namespace SimpleStateMachine.StructuralSearch.Tests;
+
+public static class ConfigurationFileParserTests
{
- public class ConfigurationFileParserTests
+ [Theory]
+ [InlineData("ConfigurationFile/ShortConfig.yml")]
+ [InlineData("ConfigurationFile/FullConfig.yml")]
+ public static void ConfigurationFileParsingShouldBeSuccess(string filePath)
{
- [Theory]
- [InlineData("ConfigurationFile/ShortConfig.yml")]
- [InlineData("ConfigurationFile/FullConfig.yml")]
- public void ConfigurationFileParsingShouldBeSuccess(string filePath)
- {
- var cfg = YmlHelper.Parse(filePath);
- var mock = Mock();
- Assert.Equal(mock, cfg);
- }
+ var cfg = YmlHelper.Parse(filePath);
+ var mock = Mock();
+ Assert.Equal(mock, cfg);
+ }
- private ConfigurationFile Mock()
- {
- var names = new[] { "AssignmentNullUnionOperator", "NullUnionOperator", "TernaryOperator"};
-
- var configurationFile = new ConfigurationFile
- {
- Configurations = new List()
- };
-
- foreach (var name in names)
- {
- var config = ConfigurationMock.GetConfigurationFromFiles(name);
- configurationFile.Configurations.Add(config);
- }
+ private static ConfigurationFile Mock()
+ {
+ var names = new[] { "AssignmentNullUnionOperator", "NullUnionOperator", "TernaryOperator"};
+
+ var configurationFile = new ConfigurationFile
+ (
+ configurations: new List()
+ );
- return configurationFile;
+ foreach (var name in names)
+ {
+ var config = ConfigurationMock.GetConfigurationFromFiles(name);
+ configurationFile.Configurations.Add(config);
}
+
+ return configurationFile;
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common.cs
index a05456c..c1f4ab3 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common.cs
@@ -6,29 +6,29 @@ public int Method1()
{
var temp = 5;
- if(temp == 6)
+ if (temp == 6)
return 7;
else
return 8;
}
- public void Method2()
+ public static void Method2()
{
int? result;
int? temp1 = 5;
int? temp2 = 5;
- if(temp1 is null)
+ if (temp1 is null)
result = temp2;
else
result = temp1;
}
- public void Method3()
+ public static void Method3()
{
int result;
int? temp1 = 5;
int? temp2 = 5;
- if(temp1 is null)
+ if (temp1 is null)
result = temp2.Value;
else
result = temp1.Value;
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common2.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common2.cs
index 813da5c..558cda3 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common2.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common2.cs
@@ -9,7 +9,7 @@ public int Method1()
return temp == 6 ? 7 : 8;
}
- public void Method2()
+ public static void Method2()
{
int? result;
int? temp1 = 5;
@@ -17,7 +17,7 @@ public void Method2()
result = temp1 ?? temp2;
}
- public void Method3()
+ public static void Method3()
{
int result;
int? temp1 = 5;
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/NullUnionOperator.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/NullUnionOperator.cs
index b9607aa..4264dcb 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/NullUnionOperator.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/NullUnionOperator.cs
@@ -1,40 +1,28 @@
-namespace SimpleStateMachine.StructuralSearch.Tests.ExamplesInput;
+namespace SimpleStateMachine.StructuralSearch.Tests.Examples;
public class NullUnionOperator
{
- public void Test1()
+ public static void Test1()
{
int? result;
int? temp1 = 5;
int? temp2 = 5;
- if(temp1 is null)
+ if (temp1 is null)
result = temp2;
else
result = temp1;
}
- public void Test2()
+ public static void Test2()
{
int? result;
int? temp1 = 6;
int? temp2 = 7;
- if(temp1 is not null)
+ if (temp1 is not null)
result = temp2;
else
result = temp1;
}
-
- public int Test3()
- {
- int? temp3 = 5;
-
- if(temp3 is null)
- return 7;
- else if (temp3 == 8)
- return 9;
- else
- return 10;
- }
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/TernaryOperator.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/TernaryOperator.cs
index 7ee333a..176ec0a 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/TernaryOperator.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/TernaryOperator.cs
@@ -1,4 +1,4 @@
-namespace SimpleStateMachine.StructuralSearch.Tests.ExamplesInput
+namespace SimpleStateMachine.StructuralSearch.Tests.Examples
{
public class TernaryOperator
{
@@ -6,7 +6,7 @@ public int Test1()
{
var temp = 1;
- if(temp == 2)
+ if (temp == 2)
return 3;
else
return 4;
@@ -16,7 +16,7 @@ public int Test2()
{
var temp = 5;
- if(temp == 6)
+ if (temp == 6)
return 7;
else
return 8;
@@ -26,25 +26,13 @@ public int Test3()
{
var temp2 = 1;
- if(temp2 == 2)
+ if (temp2 == 2)
return 3;
else
return 4;
}
- public int Test4()
- {
- var temp3 = 5;
-
- if(temp3 == 6)
- return 7;
- else if (temp3 == 8)
- return 9;
- else
- return 10;
- }
-
- public void Test5()
+ public static void Test5()
{
}
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/NullUnionOperator.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/NullUnionOperator.cs
deleted file mode 100644
index 7f32c29..0000000
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/NullUnionOperator.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-namespace SimpleStateMachine.StructuralSearch.Tests.ExamplesOutput;
-
-public class NullUnionOperator
-{
- public void Test1()
- {
- int? result;
- int? temp1 = 5;
- int? temp2 = 5;
-
- result = temp1 ?? temp2;
- }
-
- public void Test2()
- {
-
- int? result;
- int? temp1 = 6;
- int? temp2 = 7;
- result = temp2 ?? temp1;
- }
-
- public int Test3()
- {
- int? temp3 = 5;
-
- if(temp3 is null)
- return 7;
- else if (temp3 == 8)
- return 9;
- else
- return 10;
- }
-}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/NullUnionOperator.txt b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/NullUnionOperator.txt
new file mode 100644
index 0000000..500370f
--- /dev/null
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/NullUnionOperator.txt
@@ -0,0 +1,22 @@
+namespace SimpleStateMachine.StructuralSearch.Tests.Examples;
+
+public class NullUnionOperator
+{
+ public static void Test1()
+ {
+ int? result;
+ int? temp1 = 5;
+ int? temp2 = 5;
+
+ result = temp1 ?? temp2;
+ }
+
+ public static void Test2()
+ {
+
+ int? result;
+ int? temp1 = 6;
+ int? temp2 = 7;
+ result = temp2 ?? temp1;
+ }
+}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/TernaryOperator.txt b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/TernaryOperator.txt
index 769b318..eacfe83 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/TernaryOperator.txt
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ExamplesOutput/TernaryOperator.txt
@@ -1,6 +1,4 @@
-using System;
-
-namespace SimpleStateMachine.StructuralSearch.Tests.ExamplesInput
+namespace SimpleStateMachine.StructuralSearch.Tests.Examples
{
public class TernaryOperator
{
@@ -25,19 +23,7 @@ namespace SimpleStateMachine.StructuralSearch.Tests.ExamplesInput
return temp2 == 2? 3 : 4;
}
- public int Test4()
- {
- var temp3 = 5;
-
- if(temp3 == 6)
- return 7;
- else if (temp3 == 8)
- return 9;
- else
- return 10;
- }
-
- public void Test5()
+ public static void Test5()
{
}
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs
index d03aad3..01b9b68 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs
@@ -3,75 +3,75 @@
using Pidgin;
using Xunit;
-namespace SimpleStateMachine.StructuralSearch.Tests
+namespace SimpleStateMachine.StructuralSearch.Tests;
+
+public static class FindRuleParserTests
{
- public class FindRuleParserTests
+ [Theory]
+ [InlineData("$var$ equals $var$")]
+ [InlineData("$var$ equals \"\\$\"")]
+ [InlineData("Not $var$ equals $var$.Lenght")]
+ [InlineData("Not $var$ equals $var$.offset.Start")]
+ [InlineData("$var$ equals $var$.Lenght and Not $var$ StartsWith \"123\"")]
+ [InlineData("Not $var$ equals $var$.Lenght and $var$ StartsWith \"123\"")]
+ [InlineData("$var$ equals $var$.Lenght and Not $var$ StartsWith \"\\\"Test\"")]
+ [InlineData("$var$ Contains $var$.Lenght")]
+ [InlineData("not $var$ Contains \"123\"")]
+ [InlineData("$var1$.Lenght Contains $var2$.Lenght")]
+ [InlineData("$var$ Contains \"123\"")]
+ [InlineData("$var$ StartsWith $var$.Lenght")]
+ [InlineData("$var$.Lenght Equals $var$.Lenght")]
+ [InlineData("$var$ StartsWith \"123\"")]
+ [InlineData("$var$ EndsWith $var$.Lenght")]
+ [InlineData("$var$ EndsWith \"123\"")]
+ [InlineData("$var$ Is Int")]
+ [InlineData("$var$ Is DateTime")]
+ [InlineData("$var$ equals $var1$ or $var2$ equals $var1$")]
+ [InlineData("$var$ match \"[a-b]+\"")]
+ public static void FindRuleExprParsingShouldBeSuccess(string ruleStr)
{
- [Theory]
- [InlineData("$var$ equals $var$")]
- [InlineData("$var$ equals \"\\$\"")]
- [InlineData("Not $var$ equals $var$.Lenght")]
- [InlineData("Not $var$ equals $var$.offset.Start")]
- [InlineData("$var$ equals $var$.Lenght and Not $var$ StartsWith \"123\"")]
- [InlineData("Not $var$ equals $var$.Lenght and $var$ StartsWith \"123\"")]
- [InlineData("$var$ equals $var$.Lenght and Not $var$ StartsWith \"\\\"Test\"")]
- [InlineData("$var$ Contains $var$.Lenght")]
- [InlineData("$var1$.Lenght Contains $var2$.Lenght")]
- [InlineData("$var$ Contains \"123\"")]
- [InlineData("$var$ StartsWith $var$.Lenght")]
- [InlineData("$var$.Lenght Equals $var$.Lenght")]
- [InlineData("$var$ StartsWith \"123\"")]
- [InlineData("$var$ EndsWith $var$.Lenght")]
- [InlineData("$var$ EndsWith \"123\"")]
- // [InlineData("$var$ Match $var$.Lenght")]
- [InlineData("$var$ Is Int")]
- [InlineData("$var$ Is DateTime")]
- [InlineData("$var$ equals $var1$ or $var2$ equals $var1$")]
- [InlineData("$var$ match \"[a-b]+\"")]
- public void FindRuleExprParsingShouldBeSuccess(string ruleStr)
- {
- var rule = FindRuleParser.Expr.ParseOrThrow(ruleStr);
- var _ruleStr = rule.ToString()?.ToLower();
- Assert.NotNull(rule);
- Assert.Equal(_ruleStr, ruleStr.ToLower());
- }
+ var rule = FindRuleParser.Expr.ParseOrThrow(ruleStr);
+ var _ruleStr = rule.ToString()?.ToLower();
+ Assert.NotNull(rule);
+ Assert.Equal(_ruleStr, ruleStr.ToLower());
+ }
- [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 void FindRuleExprParsingShouldBeEqualsCustomResult(int number, string ruleStr, string customResult)
- {
- var rule = FindRuleParser.Expr.ParseOrThrow(ruleStr);
- var _ruleStr = rule.ToString()?.ToLower();
- Assert.NotNull(rule);
- Assert.Equal(_ruleStr, customResult.ToLower());
- }
- [Theory]
- [InlineData("FindRule/NullUnionOperator.txt", "$sign$ In \"is\",\"==\",\"!=\",\"is not\"", "$value$ In $value1$,$value2$")]
- [InlineData("FindRule/AssignmentNullUnionOperator.txt", "$sign$ In \"is\",\"==\",\"!=\",\"is not\"")]
- public void FindRuleParsingFromFileShouldBeSuccess(string filePath, params string[] customResult)
- {
- var ruleStr = File.ReadAllText(filePath);
- var rules = ruleStr.Split(Constant.LineFeed)
- .Select(StructuralSearch.ParseFindRule);
- var rulesAsStr = rules.Select(x => x.ToString()).ToArray();
+ [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)
+ {
+ var rule = FindRuleParser.Expr.ParseOrThrow(ruleStr);
+ var ruleAsStr = rule.ToString()?.ToLower();
+ Assert.NotNull(rule);
+ Assert.Equal(ruleAsStr, customResult.ToLower());
+ }
+
+ [Theory]
+ [InlineData("FindRule/NullUnionOperator.txt", "$sign$ In \"is\",\"==\",\"!=\",\"is not\"", "$value$ In $value1$,$value2$")]
+ [InlineData("FindRule/AssignmentNullUnionOperator.txt", "$sign$ In \"is\",\"==\",\"!=\",\"is not\"")]
+ public static void FindRuleParsingFromFileShouldBeSuccess(string filePath, params string[] customResult)
+ {
+ var ruleStr = File.ReadAllText(filePath);
+ var rules = ruleStr.Split(Constant.LineFeed)
+ .Select(StructuralSearch.ParseFindRule);
+ var rulesAsStr = rules.Select(x => x.ToString()).ToArray();
- Assert.True(customResult.SequenceEqual(rulesAsStr));
- }
+ Assert.True(customResult.SequenceEqual(rulesAsStr));
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/AssignmentNullUnionOperator.txt b/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/AssignmentNullUnionOperator.txt
index 5451914..8bdab63 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/AssignmentNullUnionOperator.txt
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/AssignmentNullUnionOperator.txt
@@ -1,4 +1,4 @@
-if($var$ $sign$ null)
+if ($var$ $sign$ null)
{
$var$ = $value$;
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/NullUnionOperator.txt b/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/NullUnionOperator.txt
index 38d96cb..04906bb 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/NullUnionOperator.txt
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/NullUnionOperator.txt
@@ -1,4 +1,4 @@
-if($value$ $sign$ null)
+if ($value$ $sign$ null)
$var$ = $value2$;
else
$var$ = $value1$;
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/TernaryOperator.txt b/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/TernaryOperator.txt
index 808476d..d0aae65 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/TernaryOperator.txt
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplate/TernaryOperator.txt
@@ -1,4 +1,4 @@
-if($condition$)
+if ($condition$)
return $value1$;
else
return $value2$;
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateParserTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateParserTests.cs
index e1a6e9b..36d1d4a 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateParserTests.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateParserTests.cs
@@ -3,56 +3,55 @@
using Pidgin;
using Xunit;
-namespace SimpleStateMachine.StructuralSearch.Tests
+namespace SimpleStateMachine.StructuralSearch.Tests;
+
+public static class FindTemplateTests
{
- public class FindTemplateTests
+ [Theory]
+ [InlineData("FindTemplate/NullUnionOperator.txt")]
+ [InlineData("FindTemplate/AssignmentNullUnionOperator.txt")]
+ [InlineData("FindTemplate/NestedParenthesised.txt")]
+ [InlineData("FindTemplate/TernaryOperator.txt")]
+ public static void FindTemplateFromFileParsingShouldBeSuccess(string templatePath)
{
- [Theory]
- [InlineData("FindTemplate/NullUnionOperator.txt")]
- [InlineData("FindTemplate/AssignmentNullUnionOperator.txt")]
- [InlineData("FindTemplate/NestedParenthesised.txt")]
- [InlineData("FindTemplate/TernaryOperator.txt")]
- public void FindTemplateFromFileParsingShouldBeSuccess(string templatePath)
- {
- var findTemplate = File.ReadAllText(templatePath);
- var template = StructuralSearch.ParseFindTemplate(findTemplate);
+ var findTemplate = File.ReadAllText(templatePath);
+ var template = StructuralSearch.ParseFindTemplate(findTemplate);
- Assert.NotNull(template);
- }
+ Assert.NotNull(template);
+ }
- [Theory]
- [InlineData("FindTemplate/NullUnionOperator.txt", "Source/NullUnionOperator.txt")]
- [InlineData("FindTemplate/AssignmentNullUnionOperator.txt", "Source/AssignmentNullUnionOperator.txt")]
- [InlineData("FindTemplate/NestedParenthesised.txt", "Source/NestedParenthesised.txt")]
- [InlineData("FindTemplate/TernaryOperator.txt", "Source/TernaryOperator.txt")]
- public void SourceParsingBeFindTemplateShouldBeSuccess(string templatePath, string sourcePath)
- {
- var findTemplate = File.ReadAllText(templatePath);
- var source = File.ReadAllText(sourcePath);
- var input = Input.String(source);
- var findParser = StructuralSearch.ParseFindTemplate(findTemplate);
- IParsingContext parsingContext = new ParsingContext(input);
- var matches = findParser.Parse(ref parsingContext);
- Assert.Single(matches);
+ [Theory]
+ [InlineData("FindTemplate/NullUnionOperator.txt", "Source/NullUnionOperator.txt")]
+ [InlineData("FindTemplate/AssignmentNullUnionOperator.txt", "Source/AssignmentNullUnionOperator.txt")]
+ [InlineData("FindTemplate/NestedParenthesised.txt", "Source/NestedParenthesised.txt")]
+ [InlineData("FindTemplate/TernaryOperator.txt", "Source/TernaryOperator.txt")]
+ public static void SourceParsingBeFindTemplateShouldBeSuccess(string templatePath, string sourcePath)
+ {
+ var findTemplate = File.ReadAllText(templatePath);
+ var source = File.ReadAllText(sourcePath);
+ var input = Input.String(source);
+ var findParser = StructuralSearch.ParseFindTemplate(findTemplate);
+ IParsingContext parsingContext = new ParsingContext(input);
+ var matches = findParser.Parse(ref parsingContext);
+ Assert.Single(matches);
- var match = matches.First();
+ var match = matches.First();
- Assert.NotNull(findParser);
- Assert.Equal(match.Match.Lenght, source.Length);
- }
+ Assert.NotNull(findParser);
+ Assert.Equal(match.Match.Lenght, source.Length);
+ }
- [Theory]
- [InlineData("( $var$")]
- public void FindTemplateParsingShouldBeFail(string templateStr)
- {
- Assert.Throws(() => StructuralSearch.ParseFindTemplate(templateStr));
- }
+ [Theory]
+ [InlineData("( $var$")]
+ public static void FindTemplateParsingShouldBeFail(string templateStr)
+ {
+ Assert.Throws(() => StructuralSearch.ParseFindTemplate(templateStr));
+ }
- [Theory]
- [InlineData("( $var$ )")]
- public void FindTemplateParsingShouldBeSuccess(string templateStr)
- {
- var template = StructuralSearch.ParseFindTemplate(templateStr);
- }
+ [Theory]
+ [InlineData("( $var$ )")]
+ public static void FindTemplateParsingShouldBeSuccess(string templateStr)
+ {
+ var template = StructuralSearch.ParseFindTemplate(templateStr);
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ParameterParserTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ParameterParserTests.cs
index fccc50e..e7a0a38 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ParameterParserTests.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ParameterParserTests.cs
@@ -3,7 +3,7 @@
namespace SimpleStateMachine.StructuralSearch.Tests;
-public class ParameterParserTests
+public static class ParameterParserTests
{
[Theory]
[InlineData("\\\"132\\\"")]
@@ -14,18 +14,18 @@ public class ParameterParserTests
[InlineData(" ")]
[InlineData("( )")]
[InlineData("( )( )")]
- public void StringParameterParsingShouldBeSuccess(string str)
+ public static void StringParameterParsingShouldBeSuccess(string str)
{
var parameter = ParametersParser.StringParameter.ParseOrThrow(str);
- var parameterStr = parameter.ToString().ToLower();
- Assert.Equal(parameterStr.ToLower(), str.ToLower());
+ var parameterStr = parameter.ToString()?.ToLower();
+ Assert.Equal(parameterStr?.ToLower(), str.ToLower());
}
[Theory]
[InlineData("\"132\"")]
[InlineData("( ")]
[InlineData("( )(")]
- public void StringParameterParsingShouldBeFail(string str)
+ public static void StringParameterParsingShouldBeFail(string str)
{
Assert.Throws(() =>
{
@@ -42,16 +42,16 @@ public void StringParameterParsingShouldBeFail(string str)
[InlineData("\"123$var1$.Lenght456\"")]
[InlineData("\" \\\"132\\\" \"")]
[InlineData("\" \"")]
- public void StringFormatParameterParsingShouldBeSuccess(string str)
+ public static void StringFormatParameterParsingShouldBeSuccess(string str)
{
var parameter = ParametersParser.StringFormatParameter.ParseOrThrow(str);
- var parameterStr = parameter.ToString().ToLower();
- Assert.Equal(parameterStr.ToLower(), str.ToLower());
+ var parameterStr = parameter.ToString()?.ToLower();
+ Assert.Equal(parameterStr?.ToLower(), str.ToLower());
}
[Theory]
[InlineData("\\\"132\\\"")]
- public void StringFormatParameterParsingShouldBeFail(string str)
+ public static void StringFormatParameterParsingShouldBeFail(string str)
{
Assert.Throws(() => ParametersParser.StringFormatParameter.ParseOrThrow(str));
}
@@ -64,11 +64,11 @@ public void StringFormatParameterParsingShouldBeFail(string str)
[InlineData("$var$.RemoveSubStr(\"123\")")]
[InlineData("$var$.Lenght.RemoveSubStr(\"123\")")]
[InlineData("$var$.Lenght.Trim.RemoveSubStr(\"123\")")]
- public void ParameterParsingShouldBeSuccess(string str)
+ public static void ParameterParsingShouldBeSuccess(string str)
{
var parameter = ParametersParser.Parameter.ParseOrThrow(str);
- var parameterStr = parameter.ToString().ToLower();
- Assert.Equal(parameterStr.ToLower(), str.ToLower());
+ var parameterStr = parameter.ToString()?.ToLower();
+ Assert.Equal(parameterStr?.ToLower(), str.ToLower());
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/PlaceholderParserTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/PlaceholderParserTests.cs
index 85441fe..019e215 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/PlaceholderParserTests.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/PlaceholderParserTests.cs
@@ -2,55 +2,42 @@
using Pidgin;
using Xunit;
-namespace SimpleStateMachine.StructuralSearch.Tests
+namespace SimpleStateMachine.StructuralSearch.Tests;
+
+public static class PlaceholderParserTests
{
- public class PlaceholderParserTests
+ [Theory]
+ [InlineData("($test$)", "(value )", "value ")]
+ [InlineData("($test$ )", "(value )", "value")]
+ [InlineData("($test$)", "(value (test))", "value (test)")]
+ [InlineData("($test$)", "(value (test) )", "value (test) ")]
+ public static void TemplateParsingShouldBeSuccess(string template, string source, string result)
{
- [Fact]
- public void FindTemplateShouldBeNotEmpty()
- {
- Assert.Throws(() => StructuralSearch.ParseFindTemplate(string.Empty));
- }
-
- [Theory]
- [InlineData("($test$)", "(value )", "value ")]
- [InlineData("($test$ )", "(value )", "value")]
- [InlineData("($test$)", "(value (test))", "value (test)")]
- [InlineData("($test$)", "(value (test) )", "value (test) ")]
- public void TemplateParsingShouldBeSuccess(string template, string source, string result)
- {
- var input = Input.String(source);
- IParsingContext parsingContext = new ParsingContext(input);
- var templateParser = StructuralSearch.ParseFindTemplate(template);
- var matches = templateParser.Parse(ref parsingContext);
+ var input = Input.String(source);
+ IParsingContext parsingContext = new ParsingContext(input);
+ var templateParser = StructuralSearch.ParseFindTemplate(template);
+ var matches = templateParser.Parse(ref parsingContext);
- Assert.Single(matches);
- var match = matches.First();
- Assert.Single(match.Placeholders);
- var placeholder = match.Placeholders.First();
-
- Assert.Equal(placeholder.Value.Value, result);
- }
-
- [Theory]
- [InlineData("$var$;", "test;;", "test")]
- [InlineData("$var$;.", "test;;;.", "test;;")]
- public void TemplateParsingShouldBeSuccess2(string template, string source, params string[] values)
- {
- var input = Input.String(source);
- IParsingContext parsingContext = new ParsingContext(input);
- var templateParser = StructuralSearch.ParseFindTemplate(template);
- var matches = templateParser.Parse(ref parsingContext);
- Assert.Single(matches);
- var match = matches.First();
- Assert.Equal(match.Placeholders.Count, values.Length);
+ Assert.Single(matches);
+ var match = matches.First();
+ Assert.Single(match.Placeholders);
+ var placeholder = match.Placeholders.First();
- Assert.Equal(match.Placeholders.Select(x=> x.Value.Value), values);
+ Assert.Equal(placeholder.Value.Value, result);
+ }
- // var templateStr = File.ReadAllText(templatePath);
- // var template = StructuralSearch.ParseTemplate(templateStr);
- //
- // Assert.NotNull(template);
- }
+ [Theory]
+ [InlineData("$var$;", "test;;", "test")]
+ [InlineData("$var$;.", "test;;;.", "test;;")]
+ public static void TemplateParsingShouldBeSuccess2(string template, string source, params string[] values)
+ {
+ var input = Input.String(source);
+ IParsingContext parsingContext = new ParsingContext(input);
+ var templateParser = StructuralSearch.ParseFindTemplate(template);
+ var matches = templateParser.Parse(ref parsingContext);
+ Assert.Single(matches);
+ var match = matches.First();
+ Assert.Equal(match.Placeholders.Count, values.Length);
+ Assert.Equal(match.Placeholders.Select(x=> x.Value.Value), values);
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceRuleParserTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceRuleParserTests.cs
index f8a95b0..8a04377 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceRuleParserTests.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceRuleParserTests.cs
@@ -1,46 +1,44 @@
using Pidgin;
using Xunit;
-namespace SimpleStateMachine.StructuralSearch.Tests
+namespace SimpleStateMachine.StructuralSearch.Tests;
+
+public static class ReplaceRuleParserTests
{
- public class ReplaceRuleParserTests
+ [Theory]
+ [InlineData("$var1$ equals $var2$ then $var1$ => \"test $var3$\"")]
+ [InlineData("$var1$ equals \"\\$\" then $var1$ => \"\\$\",$var2$ => \"132\"")]
+ [InlineData("_ then $var1$ => \"test $var3$.Lenght\"")]
+ [InlineData("_ then $var1$ => \"\\$\",$var2$ => \"132\"")]
+ [InlineData("Not $var1$ equals $var$.Lenght then $var1$ => $var$.Lenght")]
+ [InlineData("Not $var1$ equals $var$.offset.Start then $var1$ => $var$.offset.Start")]
+ [InlineData("$var1$ equals $var$.Lenght and Not $var1$ StartsWith \"123\" then $var1$ => $var$.offset.Start.Trim")]
+ [InlineData("$var1$ equals $var$.Lenght and Not $var1$ StartsWith \"123\" then $var1$ => $var$.offset.Start.Trim,$var2$ => $var$.offset.Start.Trim")]
+ [InlineData("$var1$ equals $var$.Lenght and Not $var1$ StartsWith \"\\\"Test\" then $var1$ => $var$.offset.Start.ToUpper")]
+ public static void ReplaceRuleParsingShouldBeSuccess(string replaceRule)
{
- [Theory]
- [InlineData("$var1$ equals $var2$ then $var1$ => \"test $var3$\"")]
- [InlineData("$var1$ equals \"\\$\" then $var1$ => \"\\$\",$var2$ => \"132\"")]
- [InlineData("_ then $var1$ => \"test $var3$.Lenght\"")]
- [InlineData("_ then $var1$ => \"\\$\",$var2$ => \"132\"")]
- [InlineData("Not $var1$ equals $var$.Lenght then $var1$ => $var$.Lenght")]
- [InlineData("Not $var1$ equals $var$.offset.Start then $var1$ => $var$.offset.Start")]
- [InlineData("$var1$ equals $var$.Lenght and Not $var1$ StartsWith \"123\" then $var1$ => $var$.offset.Start.Trim")]
- [InlineData("$var1$ equals $var$.Lenght and Not $var1$ StartsWith \"123\" then $var1$ => $var$.offset.Start.Trim,$var2$ => $var$.offset.Start.Trim")]
- [InlineData("$var1$ equals $var$.Lenght and Not $var1$ StartsWith \"\\\"Test\" then $var1$ => $var$.offset.Start.ToUpper")]
- public void ReplaceRuleParsingShouldBeSuccess(string replaceRule)
- {
- var rule = StructuralSearch.ParseReplaceRule(replaceRule);
- var ruleStr = rule.ToString().ToLower();
- Assert.NotNull(rule);
- Assert.Equal(ruleStr, replaceRule.ToLower());
- }
-
- [Theory]
- [InlineData("($var1$ equals $var2$) then $var1$ => \"test $var3$\"", "$var1$ equals $var2$ then $var1$ => \"test $var3$\"")]
- public void ReplaceRuleShouldBeEqualsString(string replaceRule, string customResult)
- {
- var rule = StructuralSearch.ParseReplaceRule(replaceRule);
- var ruleStr = rule.ToString().ToLower();
- Assert.NotNull(rule);
- Assert.Equal(ruleStr, customResult.ToLower());
- }
+ var rule = StructuralSearch.ParseReplaceRule(replaceRule);
+ var ruleStr = rule.ToString().ToLower();
+ Assert.NotNull(rule);
+ Assert.Equal(ruleStr, replaceRule.ToLower());
+ }
- [Theory]
- [InlineData("$var1$ equals $var2$ then $var1$ => (\"test $var3$\"")]
- [InlineData("($var1$ equals $var2$ then $var1$ => \"test $var3$\"")]
- [InlineData("$var1$ equals $var2$ then ($var1$) => \"test $var3$\"")]
- public void ReplaceRuleParsingShouldBeFail(string replaceRuleStr)
- {
- Assert.Throws(() => StructuralSearch.ParseReplaceRule(replaceRuleStr));
- }
+ [Theory]
+ [InlineData("($var1$ equals $var2$) then $var1$ => \"test $var3$\"", "$var1$ equals $var2$ then $var1$ => \"test $var3$\"")]
+ public static void ReplaceRuleShouldBeEqualsString(string replaceRule, string customResult)
+ {
+ var rule = StructuralSearch.ParseReplaceRule(replaceRule);
+ var ruleStr = rule.ToString().ToLower();
+ Assert.NotNull(rule);
+ Assert.Equal(ruleStr, customResult.ToLower());
+ }
+ [Theory]
+ [InlineData("$var1$ equals $var2$ then $var1$ => (\"test $var3$\"")]
+ [InlineData("($var1$ equals $var2$ then $var1$ => \"test $var3$\"")]
+ [InlineData("$var1$ equals $var2$ then ($var1$) => \"test $var3$\"")]
+ public static void ReplaceRuleParsingShouldBeFail(string replaceRuleStr)
+ {
+ Assert.Throws(() => StructuralSearch.ParseReplaceRule(replaceRuleStr));
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs
index dd5151f..42ef7a1 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs
@@ -3,88 +3,87 @@
using Pidgin;
using Xunit;
-namespace SimpleStateMachine.StructuralSearch.Tests
+namespace SimpleStateMachine.StructuralSearch.Tests;
+
+public static class ReplaceTemplateTests
{
- public class ReplaceTemplateTests
+ [Theory]
+ [InlineData("ReplaceTemplate/NullUnionOperator.txt", 6)]
+ [InlineData("ReplaceTemplate/AssignmentNullUnionOperator.txt", 4)]
+ [InlineData("ReplaceTemplate/TernaryOperator.txt", 7)]
+ public static void ReplaceTemplateParsingShouldHaveStepCount(string templatePath, int stepsCount)
{
- [Theory]
- [InlineData("ReplaceTemplate/NullUnionOperator.txt", 6)]
- [InlineData("ReplaceTemplate/AssignmentNullUnionOperator.txt", 4)]
- [InlineData("ReplaceTemplate/TernaryOperator.txt", 7)]
- public void ReplaceTemplateParsingShouldHaveStepCount(string templatePath, int stepsCount)
- {
- var replaceTemplate = File.ReadAllText(templatePath);
- var replaceBuilder = StructuralSearch.ParseReplaceTemplate(replaceTemplate);
- var result = replaceBuilder.Build(ParsingContext.Empty);
+ var replaceTemplate = File.ReadAllText(templatePath);
+ var replaceBuilder = StructuralSearch.ParseReplaceTemplate(replaceTemplate);
+ var result = replaceBuilder.Build(ParsingContext.Empty);
- Assert.NotNull(replaceTemplate);
- Assert.Equal(replaceBuilder.Steps.Count(), stepsCount);
- }
+ Assert.NotNull(replaceTemplate);
+ Assert.Equal(replaceBuilder.Steps.Count(), stepsCount);
+ }
- [Theory]
- [InlineData("ReplaceTemplate/NullUnionOperator.txt", "ReplaceResult/NullUnionOperator.txt",
- new[] { "var", "sign", "value1", "value2"},
- new[] { "temp", "is", "var1", "var2"})]
- [InlineData("ReplaceTemplate/AssignmentNullUnionOperator.txt", "ReplaceResult/AssignmentNullUnionOperator.txt",
- new[] { "var", "value" },
- new[] { "temp", "12" })]
- [InlineData("ReplaceTemplate/TernaryOperator.txt", "ReplaceResult/TernaryOperator.txt",
- new[] { "condition", "value1", "value2" },
- new[] { "temp == 125", "12", "15" })]
- public void ReplaceBuildShouldBeSuccess(string templatePath, string resultPath, string[] keys, string[] values)
- {
- var replaceTemplate = File.ReadAllText(templatePath);
- var replaceResult = File.ReadAllText(resultPath);
- var replaceBuilder = StructuralSearch.ParseReplaceTemplate(replaceTemplate);
+ [Theory]
+ [InlineData("ReplaceTemplate/NullUnionOperator.txt", "ReplaceResult/NullUnionOperator.txt",
+ new[] { "var", "sign", "value1", "value2"},
+ new[] { "temp", "is", "var1", "var2"})]
+ [InlineData("ReplaceTemplate/AssignmentNullUnionOperator.txt", "ReplaceResult/AssignmentNullUnionOperator.txt",
+ new[] { "var", "value" },
+ new[] { "temp", "12" })]
+ [InlineData("ReplaceTemplate/TernaryOperator.txt", "ReplaceResult/TernaryOperator.txt",
+ new[] { "condition", "value1", "value2" },
+ new[] { "temp == 125", "12", "15" })]
+ public static void ReplaceBuildShouldBeSuccess(string templatePath, string resultPath, string[] keys, string[] values)
+ {
+ var replaceTemplate = File.ReadAllText(templatePath);
+ var replaceResult = File.ReadAllText(resultPath);
+ var replaceBuilder = StructuralSearch.ParseReplaceTemplate(replaceTemplate);
- var parsingContext = new ParsingContext(Input.Empty);
- for (int i = 0; i < keys.Length; i++)
- {
- parsingContext.AddPlaceholder(Placeholder.CreateEmpty(parsingContext, keys[i], values[i]));
- }
+ var parsingContext = new ParsingContext(Input.Empty);
+ for (int i = 0; i < keys.Length; i++)
+ {
+ parsingContext.AddPlaceholder(Placeholder.CreateEmpty(parsingContext, keys[i], values[i]));
+ }
- var result = replaceBuilder.Build(parsingContext);
+ var result = replaceBuilder.Build(parsingContext);
- Assert.NotNull(replaceTemplate);
- Assert.NotNull(replaceResult);
- Assert.Equal(replaceResult, result);
- }
+ Assert.NotNull(replaceTemplate);
+ Assert.NotNull(replaceResult);
+ Assert.Equal(replaceResult, result);
+ }
- // TODO validation parenthesis for parameters
+ // 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 void ReplaceTemplateParsingShouldBeSuccess(int number, string templateStr)
- {
- var replaceBuilder = StructuralSearch.ParseReplaceTemplate(templateStr);
- var replaceStr = replaceBuilder.ToString().ToLower();
- Assert.Equal(replaceStr, templateStr.ToLower());
- }
+ [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)
+ {
+ var replaceBuilder = StructuralSearch.ParseReplaceTemplate(templateStr);
+ var replaceStr = replaceBuilder.ToString()?.ToLower();
+ Assert.Equal(replaceStr, templateStr.ToLower());
+ }
- [Theory]
- [InlineData("(test $var1$.Lenght")]
- [InlineData("test ($var1$.Lenght")]
- [InlineData("test $var1$.Lenght)")]
- [InlineData(" ( ")]
- [InlineData("test ( ")]
- public void ReplaceTemplateParsingShouldBeFail(string templateStr)
- {
- Assert.Throws(() => StructuralSearch.ParseReplaceTemplate(templateStr));
- }
+ [Theory]
+ [InlineData("(test $var1$.Lenght")]
+ [InlineData("test ($var1$.Lenght")]
+ [InlineData("test $var1$.Lenght)")]
+ [InlineData(" ( ")]
+ [InlineData("test ( ")]
+ public static void ReplaceTemplateParsingShouldBeFail(string templateStr)
+ {
+ Assert.Throws(() => StructuralSearch.ParseReplaceTemplate(templateStr));
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/SimpleStateMachine.StructuralSearch.Tests.csproj b/src/SimpleStateMachine.StructuralSearch.Tests/SimpleStateMachine.StructuralSearch.Tests.csproj
index c1d25e0..20d0b43 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/SimpleStateMachine.StructuralSearch.Tests.csproj
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/SimpleStateMachine.StructuralSearch.Tests.csproj
@@ -5,12 +5,13 @@
enable
false
10
+ enable
-
-
-
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -25,7 +26,7 @@
-
+
Always
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/Source/AssignmentNullUnionOperator.txt b/src/SimpleStateMachine.StructuralSearch.Tests/Source/AssignmentNullUnionOperator.txt
index 6d83033..66dda22 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/Source/AssignmentNullUnionOperator.txt
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/Source/AssignmentNullUnionOperator.txt
@@ -1,4 +1,4 @@
-if(temp == null)
+if (temp == null)
{
temp = 12;
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/Source/NullUnionOperator.txt b/src/SimpleStateMachine.StructuralSearch.Tests/Source/NullUnionOperator.txt
index df34cb0..17cedab 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/Source/NullUnionOperator.txt
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/Source/NullUnionOperator.txt
@@ -1,4 +1,4 @@
-if(var1 is null)
+if (var1 is null)
temp = var2;
else
temp = var1;
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/Source/TernaryOperator.txt b/src/SimpleStateMachine.StructuralSearch.Tests/Source/TernaryOperator.txt
index a6fa515..feffe9a 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/Source/TernaryOperator.txt
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/Source/TernaryOperator.txt
@@ -1,4 +1,4 @@
-if(temp == 125)
+if (temp == 125)
return 12;
else
return 15;
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch.Tests/StructurSearchParserTests.cs b/src/SimpleStateMachine.StructuralSearch.Tests/StructurSearchParserTests.cs
index 0fc0a77..d767d11 100644
--- a/src/SimpleStateMachine.StructuralSearch.Tests/StructurSearchParserTests.cs
+++ b/src/SimpleStateMachine.StructuralSearch.Tests/StructurSearchParserTests.cs
@@ -1,115 +1,55 @@
-using System;
-using System.IO;
+using System.IO;
using System.Linq;
-using SimpleStateMachine.StructuralSearch.Configurations;
-using SimpleStateMachine.StructuralSearch.Helper;
using SimpleStateMachine.StructuralSearch.Tests.Mock;
using Xunit;
-namespace SimpleStateMachine.StructuralSearch.Tests
+namespace SimpleStateMachine.StructuralSearch.Tests;
+
+public static class StructuralSearchParserTests
{
- public class StructuralSearchParserTests
+ [Theory]
+ [InlineData("NullUnionOperator", "ExamplesInput/NullUnionOperator.cs", 2)]
+ [InlineData("TernaryOperator", "ExamplesInput/TernaryOperator.cs", 3)]
+ public static void StructuralSearchShouldBeSuccess(string exampleName, string exampleFilePath, int matchesCount)
{
- [Theory]
- // [InlineData("AssignmentNullUnionOperator")]
- [InlineData("NullUnionOperator", "ExamplesInput/NullUnionOperator.cs", 2)]
- [InlineData("TernaryOperator", "ExamplesInput/TernaryOperator.cs", 3)]
- public static void StructuralSearchShouldBeSuccess(string exampleName, string exampleFilePath, int matchesCount)
- {
- var config = ConfigurationMock.GetConfigurationFromFiles(exampleName);
- var parser = new StructuralSearchParser(config);
+ var config = ConfigurationMock.GetConfigurationFromFiles(exampleName);
+ var parser = new StructuralSearchParser(config);
- var fileInfo = new FileInfo(exampleFilePath);
- var input = Input.File(fileInfo);
- IParsingContext context = new ParsingContext(input);
+ var fileInfo = new FileInfo(exampleFilePath);
+ var input = Input.File(fileInfo);
+ IParsingContext context = new ParsingContext(input);
- var matches = parser.Parse(ref context);
- Assert.Equal(matches.Count(), matchesCount);
- }
+ var matches = parser.Parse(ref context);
+ Assert.Equal(matches.Count(), matchesCount);
+ }
- [Theory]
- // [InlineData("AssignmentNullUnionOperator")]
- [InlineData("NullUnionOperator", 2)]
- [InlineData("TernaryOperator", 3)]
- public static void StructuralSearchShouldBe(string exampleName, int matchesCount)
- {
- var startTime = System.Diagnostics.Stopwatch.StartNew();
- var config = ConfigurationMock.GetConfigurationFromFiles(exampleName);
- var inputFilePath = Path.Combine($"ExamplesInput/{exampleName}.cs");
- var resultFilePath = Path.Combine($"ExamplesOutput/{exampleName}.txt");
- var outputFilePath = Path.Combine($"{exampleName}.cs");
-
- var parser = new StructuralSearchParser(config);
-
- var inputFileInfo = new FileInfo(inputFilePath);
- var input = Input.File(inputFileInfo);
- IParsingContext context = new ParsingContext(input);
- var matches = parser.Parse(ref context);
- matches = parser.ApplyFindRule(ref context, matches);
- matches = parser.ApplyReplaceRule(ref context, matches);
- var replaceMatches = parser.GetReplaceMatches(ref context, matches);
- var outputFileInfo = new FileInfo(outputFilePath);
- var output = Output.File(outputFileInfo);
- output.Replace(input, replaceMatches);
- startTime.Stop();
- var resultTime = startTime.Elapsed;
+ [Theory]
+ [InlineData("NullUnionOperator", 2)]
+ [InlineData("TernaryOperator", 3)]
+ public static void StructuralSearchShouldBe(string exampleName, int matchesCount)
+ {
+ var config = ConfigurationMock.GetConfigurationFromFiles(exampleName);
+ var directory = Directory.GetCurrentDirectory();
+ var inputFilePath = Path.Combine(directory, $"ExamplesInput/{exampleName}.cs");
+ var resultFilePath = Path.Combine(directory, $"ExamplesOutput/{exampleName}.txt");
+ var outputFilePath = Path.Combine(directory, $"{exampleName}.cs");
- // Assert.Equal(matches.Count(), matchesCount);
- //
- // var resultStr = File.ReadAllText(resultFilePath);
- // var outputStr = File.ReadAllText(outputFilePath);
- // Assert.Equal(resultStr, outputStr);
- }
-
- [Theory]
- [InlineData("ConfigurationFile/if.yml")]
- public static void StructuralSearchFromConfig(string configPath)
- {
- var config = YmlHelper.Parse(configPath).Configurations.First();
- var inputFileInfo = new FileInfo("ExamplesInput/Test.txt");
+ var parser = new StructuralSearchParser(config);
- int count = 100;
- long result = 0;
- for (int i = 0; i < count; i++)
- {
- var res = Test(config, inputFileInfo);
- Console.WriteLine(res);
- result += res;
- }
- var t = result/count;
- Console.WriteLine($"SR: {t}");
- }
-
- private static long Test(Configuration config, FileInfo inputFileInfo)
- {
- var startTime = System.Diagnostics.Stopwatch.StartNew();
- var input = Input.File(inputFileInfo);
- var parser = new StructuralSearchParser(config);
+ var inputFileInfo = new FileInfo(inputFilePath);
+ var input = Input.File(inputFileInfo);
+ IParsingContext context = new ParsingContext(input);
+ var matches = parser.Parse(ref context);
+ matches = parser.ApplyFindRule(ref context, matches);
+ matches = parser.ApplyReplaceRule(ref context, matches);
+ var replaceMatches = parser.GetReplaceMatches(ref context, matches);
+ var outputFileInfo = new FileInfo(outputFilePath);
+ var output = Output.File(outputFileInfo);
+ output.Replace(input, replaceMatches);
- IParsingContext context = new ParsingContext(input);
- var matches = parser.Parse(ref context);
- matches = parser.ApplyFindRule(ref context, matches);
- matches = parser.ApplyReplaceRule(ref context, matches);
- var replaceMatches = parser.GetReplaceMatches(ref context, matches);
- startTime.Stop();
- var resultTime = startTime.Elapsed;
- return resultTime.Ticks;
- }
-
- // private static long Test(Configuration config, FileInfo inputFileInfo)
- // {
- // var startTime = System.Diagnostics.Stopwatch.StartNew();
- // var input = Input.File(inputFileInfo);
- // var parser = new StructuralSearchParser(config);
- //
- // IParsingContext context = new ParsingContext(input);
- // var matches = parser.Parse(ref context);
- // matches = parser.ApplyFindRule(ref context, matches);
- // matches = parser.ApplyReplaceRule(ref context, matches);
- // var replaceMatches = parser.GetReplaceMatches(ref context, matches);
- // startTime.Stop();
- // var resultTime = startTime.Elapsed;
- // return resultTime.Ticks;
- // }
+ Assert.Equal(matches.Count(), matchesCount);
+ var resultStr = File.ReadAllText(resultFilePath);
+ var outputStr = File.ReadAllText(outputFilePath);
+ Assert.Equal(resultStr, outputStr);
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/Configurations/Configuration.cs b/src/SimpleStateMachine.StructuralSearch/Configurations/Configuration.cs
index 192d9bf..fb9c754 100644
--- a/src/SimpleStateMachine.StructuralSearch/Configurations/Configuration.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Configurations/Configuration.cs
@@ -6,17 +6,17 @@ namespace SimpleStateMachine.StructuralSearch.Configurations
{
public class Configuration : IEquatable
{
- public string FindTemplate { get; init; }
+ public string? FindTemplate { get; init; }
public List? FindRules { get; init; }
- public string ReplaceTemplate { get; init; }
+ public string? ReplaceTemplate { get; init; }
public List? ReplaceRules { get; init; }
public bool Equals(Configuration? other)
{
- var findTemplateEquals = FindTemplate == other.FindTemplate;
- var findRulesEquals = EnumerableHelper.SequenceNullableEqual(FindRules, other.FindRules);
- var replaceTemplateEquals = ReplaceTemplate == other.ReplaceTemplate;
- var replaceRulesEquals = EnumerableHelper.SequenceNullableEqual(ReplaceRules, other.ReplaceRules);
+ var findTemplateEquals = FindTemplate == other?.FindTemplate;
+ var findRulesEquals = EnumerableHelper.SequenceNullableEqual(FindRules, other?.FindRules);
+ var replaceTemplateEquals = ReplaceTemplate == other?.ReplaceTemplate;
+ var replaceRulesEquals = EnumerableHelper.SequenceNullableEqual(ReplaceRules, other?.ReplaceRules);
return findTemplateEquals && findRulesEquals && replaceTemplateEquals && replaceRulesEquals;
}
diff --git a/src/SimpleStateMachine.StructuralSearch/Configurations/ConfigurationFile.cs b/src/SimpleStateMachine.StructuralSearch/Configurations/ConfigurationFile.cs
index b64512c..c599235 100644
--- a/src/SimpleStateMachine.StructuralSearch/Configurations/ConfigurationFile.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Configurations/ConfigurationFile.cs
@@ -6,11 +6,22 @@ namespace SimpleStateMachine.StructuralSearch.Configurations
{
public class ConfigurationFile: IEquatable
{
+ // Use for deserialization
+ public ConfigurationFile()
+ {
+ Configurations = new List();
+ }
+
+ public ConfigurationFile(List configurations)
+ {
+ Configurations = configurations;
+ }
+
public List Configurations { get; init; }
public bool Equals(ConfigurationFile? other)
{
- return Configurations.SequenceEqual(other.Configurations);
+ return other?.Configurations != null && Configurations.SequenceEqual(other.Configurations);
}
public override bool Equals(object? obj)
diff --git a/src/SimpleStateMachine.StructuralSearch/Constant.cs b/src/SimpleStateMachine.StructuralSearch/Constant.cs
index ad7334f..5a9dbba 100644
--- a/src/SimpleStateMachine.StructuralSearch/Constant.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Constant.cs
@@ -95,7 +95,7 @@ public static partial class Constant
///
/// Char: '='
///
- private const char Equals = '=';
+ private new const char Equals = '=';
///
/// Char: '>'
diff --git a/src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs b/src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs
index c99137a..f63889b 100644
--- a/src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs
@@ -35,7 +35,7 @@ public static Parser> UntilNot(this Parser<
public static bool TryParse(this Parser parser, string value, out string? result)
{
- if(parser is null)
+ if (parser is null)
throw new ArgumentNullException(nameof(parser));
var res = parser.Parse(value);
diff --git a/src/SimpleStateMachine.StructuralSearch/FindParser.cs b/src/SimpleStateMachine.StructuralSearch/FindParser.cs
index af066c5..62eb6d4 100644
--- a/src/SimpleStateMachine.StructuralSearch/FindParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/FindParser.cs
@@ -8,6 +8,8 @@ namespace SimpleStateMachine.StructuralSearch
{
public class FindParser : IFindParser
{
+ public static readonly IFindParser Empty = new EmptyFindParser();
+
private SeriesParser Parser { get; }
public FindParser(SeriesParser parser)
{
diff --git a/src/SimpleStateMachine.StructuralSearch/Helper/EnumerableHelper.cs b/src/SimpleStateMachine.StructuralSearch/Helper/EnumerableHelper.cs
index 1de3b69..88ebfc5 100644
--- a/src/SimpleStateMachine.StructuralSearch/Helper/EnumerableHelper.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Helper/EnumerableHelper.cs
@@ -9,8 +9,11 @@ public static bool SequenceNullableEqual(IEnumerable? first, I
{
if (first is null && second is null)
return true;
+
+ if (first is null || second is null)
+ return false;
- return Enumerable.SequenceEqual(first, second);
+ return first.SequenceEqual(second);
}
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/Helper/YmlHelper.cs b/src/SimpleStateMachine.StructuralSearch/Helper/YmlHelper.cs
index 14e6369..e89e53c 100644
--- a/src/SimpleStateMachine.StructuralSearch/Helper/YmlHelper.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Helper/YmlHelper.cs
@@ -9,12 +9,12 @@ public static class YmlHelper
{
public static ConfigurationFile Parse(string filePath)
{
- var yml = File.ReadAllText(filePath);
+ var textReader = File.OpenText(filePath);
var deserializer = new DeserializerBuilder()
.WithNamingConvention(PascalCaseNamingConvention.Instance)
.Build();
- var cfg = deserializer.Deserialize(yml);
+ var cfg = deserializer.Deserialize(textReader);
return cfg;
}
}
diff --git a/src/SimpleStateMachine.StructuralSearch/IFindParser.cs b/src/SimpleStateMachine.StructuralSearch/IFindParser.cs
index 4396976..bbd858c 100644
--- a/src/SimpleStateMachine.StructuralSearch/IFindParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/IFindParser.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
namespace SimpleStateMachine.StructuralSearch
{
@@ -6,4 +7,12 @@ public interface IFindParser
{
IEnumerable Parse(ref IParsingContext context);
}
+
+ public class EmptyFindParser: IFindParser
+ {
+ public IEnumerable Parse(ref IParsingContext context)
+ {
+ return Array.Empty();
+ }
+ }
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/Parsers/DebugParser.cs b/src/SimpleStateMachine.StructuralSearch/Parsers/DebugParser.cs
index 7c4ff59..a25c590 100644
--- a/src/SimpleStateMachine.StructuralSearch/Parsers/DebugParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Parsers/DebugParser.cs
@@ -2,7 +2,7 @@
namespace SimpleStateMachine.StructuralSearch
{
- public class DebugParser: Parser
+ public class DebugParser : Parser
{
private readonly Parser _parser;
public DebugParser(Parser parser)
diff --git a/src/SimpleStateMachine.StructuralSearch/Parsers/LookaheadParser.cs b/src/SimpleStateMachine.StructuralSearch/Parsers/LookaheadParser.cs
deleted file mode 100644
index 40910ab..0000000
--- a/src/SimpleStateMachine.StructuralSearch/Parsers/LookaheadParser.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using Pidgin;
-
-namespace SimpleStateMachine.StructuralSearch
-{
- internal sealed class LookaheadParser : Parser
- {
- private readonly Parser _parser;
-
- public LookaheadParser(Parser parser)
- {
- this._parser = parser;
- }
-
- public override bool TryParse(ref ParseState state, ref PooledList> expecteds, out T result)
- {
- state.PushBookmark();
- if (this._parser.TryParse(ref state, ref expecteds, out result))
- {
- state.Rewind();
- return true;
- }
- state.PopBookmark();
- return false;
- }
- }
-}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/Parsers/Parsers.cs b/src/SimpleStateMachine.StructuralSearch/Parsers/Parsers.cs
index 7c89093..1b436ce 100644
--- a/src/SimpleStateMachine.StructuralSearch/Parsers/Parsers.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Parsers/Parsers.cs
@@ -110,11 +110,6 @@ public static Parser EnumValue(TEnum value, bool ignoreCase
return Parsers.String(value.ToString(), ignoreCase).AsEnum(ignoreCase);
}
- public static Parser Lookahead(Parser parser) =>
- parser != null ? (Parser)
- new LookaheadParser(parser)
- : throw new ArgumentNullException(nameof (parser));
-
public static Parser> Match(Parser parser)
{
return Map((oldPos, oldOffset, result, newPos, newOffset) =>
diff --git a/src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs b/src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs
index b128523..d4aaee7 100644
--- a/src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs
@@ -19,29 +19,33 @@ public PlaceholderParser(string name)
public override Parser BuildParser(Func?> next,
Func?> nextNext)
{
- var _next = next();
- var _nextNext = nextNext();
+ var nextParser = next();
+ var nextNextParser = nextNext();
+ if (nextParser is null)
+ return EmptyParser.AlwaysNotCorrectString;
+
Parser lookahead;
- if (_nextNext is not null)
+ if (nextNextParser is not null)
{
- lookahead = Parsers.Lookahead(_next.Then(_nextNext, (s1, s2) =>
+
+ lookahead = Parser.Lookahead(nextParser.Then(nextNextParser, (s1, s2) =>
{
OnLookahead = () => new List>
{
- new(_next, s1, s1.Length),
- new(_nextNext, s2, s2.Length),
+ new(nextParser, s1, s1.Length),
+ new(nextNextParser, s2, s2.Length),
};
return Unit.Value;
}).Try());
}
else
{
- lookahead = Parsers.Lookahead(_next.Select(s =>
+ lookahead = Parser.Lookahead(nextParser.Select(s =>
{
OnLookahead = () => new List>
{
- new(_next, s, s.Length)
+ new(nextParser, s, s.Length)
};
return Unit.Value;
}).Try());
diff --git a/src/SimpleStateMachine.StructuralSearch/Rules/FindRule/EmptyRule.cs b/src/SimpleStateMachine.StructuralSearch/Rules/FindRule/EmptyRule.cs
new file mode 100644
index 0000000..00ebcbf
--- /dev/null
+++ b/src/SimpleStateMachine.StructuralSearch/Rules/FindRule/EmptyRule.cs
@@ -0,0 +1,18 @@
+namespace SimpleStateMachine.StructuralSearch.Rules;
+
+public class EmptyRule: IRule
+{
+ public bool Execute()
+ {
+ return true;
+
+ }
+ public void SetContext(ref IParsingContext context)
+ {
+ }
+}
+
+public static class Rule
+{
+ public static readonly IRule Empty = new EmptyRule();
+}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/Rules/ReplaceRule/IReplaceRule.cs b/src/SimpleStateMachine.StructuralSearch/Rules/ReplaceRule/IReplaceRule.cs
new file mode 100644
index 0000000..216b18e
--- /dev/null
+++ b/src/SimpleStateMachine.StructuralSearch/Rules/ReplaceRule/IReplaceRule.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using SimpleStateMachine.StructuralSearch.Rules;
+
+namespace SimpleStateMachine.StructuralSearch;
+
+public interface IReplaceRule : IContextDependent
+{
+ IEnumerable Rules { get; }
+ IRule ConditionRule { get; }
+}
+
+public class EmptyReplaceRule : IReplaceRule
+{
+ public IEnumerable Rules { get; } = Array.Empty();
+ public IRule ConditionRule => Rule.Empty;
+
+ public void SetContext(ref IParsingContext context)
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/Rules/ReplaceRule/ReplaceRule.cs b/src/SimpleStateMachine.StructuralSearch/Rules/ReplaceRule/ReplaceRule.cs
index 9582410..56e1929 100644
--- a/src/SimpleStateMachine.StructuralSearch/Rules/ReplaceRule/ReplaceRule.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Rules/ReplaceRule/ReplaceRule.cs
@@ -3,12 +3,13 @@
namespace SimpleStateMachine.StructuralSearch
{
- public class ReplaceRule: IContextDependent
+ public class ReplaceRule : IReplaceRule
{
- public readonly IRule ConditionRule;
+ public static readonly IReplaceRule Empty = new EmptyReplaceRule();
public IEnumerable Rules { get; }
-
+ public IRule ConditionRule { get; }
+
public ReplaceRule(IRule conditionRule, IEnumerable rules)
{
ConditionRule = conditionRule;
diff --git a/src/SimpleStateMachine.StructuralSearch/SimpleStateMachine.StructuralSearch.csproj b/src/SimpleStateMachine.StructuralSearch/SimpleStateMachine.StructuralSearch.csproj
index c80f09b..5786197 100644
--- a/src/SimpleStateMachine.StructuralSearch/SimpleStateMachine.StructuralSearch.csproj
+++ b/src/SimpleStateMachine.StructuralSearch/SimpleStateMachine.StructuralSearch.csproj
@@ -7,8 +7,8 @@
-
-
+
+
diff --git a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindRulesParser.cs b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindRulesParser.cs
index 1653bd3..174bc4a 100644
--- a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindRulesParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindRulesParser.cs
@@ -75,9 +75,11 @@ internal static readonly Parser> Not
)
);
- internal static IRule ParseTemplate(string str)
+ internal static IRule ParseTemplate(string? str)
{
- return Expr.Before(CommonParser.EOF).ParseOrThrow(str);
+ return string.IsNullOrEmpty(str)
+ ? Rule.Empty
+ : Expr.Before(CommonParser.EOF).ParseOrThrow(str);
}
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindTemplateParser.cs b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindTemplateParser.cs
index 98c298c..5a6911d 100644
--- a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindTemplateParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindTemplateParser.cs
@@ -53,54 +53,11 @@ static FindTemplateParser()
private static readonly Parser SeriesParser;
- internal static IFindParser ParseTemplate(string str)
+ internal static IFindParser ParseTemplate(string? str)
{
- return SeriesParser.Select(parser => new FindParser(parser)).ParseOrThrow(str);
+ return string.IsNullOrEmpty(str)
+ ? FindParser.Empty
+ : SeriesParser.Select(parser => new FindParser(parser)).ParseOrThrow(str);
}
-
-
-
-
- // static FindTemplateParser()
- // {
- // Parenthesised = Parsers.BetweenOneOfChars(ParserToParser.StringcMatch,
- // Parser.Rec(() => Term.Or(Empty)),
- // Constant.AllParenthesised);
- //
- // Term = Parser.OneOf(Parenthesised, Token)
- // .AtLeastOnce();
- //
- //
- // TemplateParser = Term;
- // }
-
-
- // internal static readonly Parser> Empty =
- // ParserToParser.ResultAsMatch(CommonParser.Empty);
- //
- // internal static readonly Parser> AnyString =
- // ParserToParser.ResultAsMatch(CommonParser.AnyString).Try();
- //
- // internal static readonly Parser> WhiteSpaces =
- // ParserToParser.ResultAsMatch(CommonParser.WhiteSpaces).Try();
- //
- // internal static readonly Parser> Placeholder =
- // CommonTemplateParser.Placeholder
- // .Select(name => new PlaceholderParser(name))
- // .Cast>();
- //
- // internal static readonly Parser> Token =
- // Parser.OneOf(AnyString, Placeholder, WhiteSpaces);
- //
- // internal static readonly Parser> Term;
- //
- // internal static readonly Parser> Parenthesised;
- //
- // private static readonly Parser> TemplateParser;
- //
- // internal static Parser ParseTemplate(string str)
- // {
- // return TemplateParser.ParseOrThrow(str);
- // }
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceRuleParser.cs b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceRuleParser.cs
index 27b9261..bb72c15 100644
--- a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceRuleParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceRuleParser.cs
@@ -32,9 +32,11 @@ public static class ReplaceRuleParser
.Try()
.TrimStart();
- internal static ReplaceRule ParseTemplate(string str)
+ internal static IReplaceRule ParseTemplate(string? str)
{
- return ReplaceRule.Before(CommonParser.EOF).ParseOrThrow(str);
+ return string.IsNullOrEmpty(str)
+ ? SimpleStateMachine.StructuralSearch.ReplaceRule.Empty
+ : ReplaceRule.Before(CommonParser.EOF).ParseOrThrow(str);
}
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceTemplateParser.cs b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceTemplateParser.cs
index 3be7771..858e7e2 100644
--- a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceTemplateParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceTemplateParser.cs
@@ -8,7 +8,7 @@
namespace SimpleStateMachine.StructuralSearch
{
- internal class ReplaceTemplateParser
+ internal static class ReplaceTemplateParser
{
static ReplaceTemplateParser()
{
@@ -47,9 +47,11 @@ static ReplaceTemplateParser()
public static readonly Parser> ParenthesisedParameters;
public static readonly Parser> Parameters;
- internal static IReplaceBuilder ParseTemplate(string str)
+ internal static IReplaceBuilder ParseTemplate(string? str)
{
- return Parameters
+ return string.IsNullOrEmpty(str)
+ ? ReplaceBuilder.Empty
+ : Parameters
.Select(steps => new ReplaceBuilder(steps))
.ParseOrThrow(str);
}
diff --git a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/StructuralSearch.cs b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/StructuralSearch.cs
index 4b38916..22101cb 100644
--- a/src/SimpleStateMachine.StructuralSearch/StructuralSearch/StructuralSearch.cs
+++ b/src/SimpleStateMachine.StructuralSearch/StructuralSearch/StructuralSearch.cs
@@ -1,20 +1,21 @@
-using SimpleStateMachine.StructuralSearch.ReplaceTemplate;
+using System.Diagnostics.CodeAnalysis;
+using SimpleStateMachine.StructuralSearch.ReplaceTemplate;
using SimpleStateMachine.StructuralSearch.Rules;
namespace SimpleStateMachine.StructuralSearch
{
public static class StructuralSearch
{
- public static IFindParser ParseFindTemplate(string template)
+ public static IFindParser ParseFindTemplate(string? template)
=> FindTemplateParser.ParseTemplate(template);
- public static IReplaceBuilder ParseReplaceTemplate(string template)
+ public static IReplaceBuilder ParseReplaceTemplate(string? template)
=> ReplaceTemplateParser.ParseTemplate(template);
- public static IRule ParseFindRule(string template)
+ public static IRule ParseFindRule(string? template)
=> FindRuleParser.ParseTemplate(template);
- public static ReplaceRule ParseReplaceRule(string template)
+ public static IReplaceRule ParseReplaceRule(string? template)
=> ReplaceRuleParser.ParseTemplate(template);
}
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/StructuralSearchParser.cs b/src/SimpleStateMachine.StructuralSearch/StructuralSearchParser.cs
index d6bf563..9de570b 100644
--- a/src/SimpleStateMachine.StructuralSearch/StructuralSearchParser.cs
+++ b/src/SimpleStateMachine.StructuralSearch/StructuralSearchParser.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using SimpleStateMachine.StructuralSearch.Configurations;
using SimpleStateMachine.StructuralSearch.Extensions;
@@ -13,7 +14,7 @@ public class StructuralSearchParser
private readonly IFindParser _findParser;
private readonly IReadOnlyList _findRules;
private readonly IReplaceBuilder _replaceBuilder;
- private readonly IReadOnlyList _replaceRules;
+ private readonly IReadOnlyList _replaceRules;
public StructuralSearchParser(Configuration configuration)
{
@@ -23,8 +24,7 @@ public StructuralSearchParser(Configuration configuration)
.EmptyIfNull()
.Select(StructuralSearch.ParseFindRule).ToList();
- if(!string.IsNullOrEmpty(configuration.ReplaceTemplate))
- _replaceBuilder = StructuralSearch.ParseReplaceTemplate(configuration.ReplaceTemplate);
+ _replaceBuilder = StructuralSearch.ParseReplaceTemplate(configuration.ReplaceTemplate);
_replaceRules = configuration.ReplaceRules
.EmptyIfNull()
@@ -117,7 +117,7 @@ private void SetFindRulesContext(ref IParsingContext context)
{
foreach (var findRule in _findRules)
{
- if(findRule is IContextDependent contextDependent)
+ if (findRule is IContextDependent contextDependent)
contextDependent.SetContext(ref context);
}
}
@@ -126,7 +126,7 @@ private void SetReplaceRulesContext(ref IParsingContext context)
{
foreach (var replaceRule in _replaceRules)
{
- if(replaceRule is IContextDependent contextDependent)
+ if (replaceRule is IContextDependent contextDependent)
contextDependent.SetContext(ref context);
}
}
diff --git a/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/IReplaceBuilder.cs b/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/IReplaceBuilder.cs
index 0a9fc50..03e3b13 100644
--- a/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/IReplaceBuilder.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/IReplaceBuilder.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using SimpleStateMachine.StructuralSearch.Rules;
namespace SimpleStateMachine.StructuralSearch.ReplaceTemplate
@@ -8,4 +9,14 @@ public interface IReplaceBuilder
IEnumerable Steps { get; }
string Build(IParsingContext context);
}
+
+ public class EmptyReplaceBuilder: IReplaceBuilder
+ {
+ public IEnumerable Steps { get; } = Array.Empty();
+
+ public string Build(IParsingContext context)
+ {
+ return string.Empty;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/PlaceholderReplace.cs b/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/PlaceholderReplace.cs
index e1a0b3f..4746e19 100644
--- a/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/PlaceholderReplace.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/PlaceholderReplace.cs
@@ -3,7 +3,6 @@
public class PlaceholderReplace : IReplaceStep, IContextDependent
{
private IParsingContext _context;
-
private readonly string _name;
public PlaceholderReplace(string name)
diff --git a/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/ReplaceBuilder.cs b/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/ReplaceBuilder.cs
index 4ebe621..4519916 100644
--- a/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/ReplaceBuilder.cs
+++ b/src/SimpleStateMachine.StructuralSearch/Templates/ReplaceTemplate/ReplaceBuilder.cs
@@ -6,6 +6,8 @@ namespace SimpleStateMachine.StructuralSearch.ReplaceTemplate
{
public class ReplaceBuilder : IReplaceBuilder
{
+ public static readonly IReplaceBuilder Empty = new EmptyReplaceBuilder();
+
public IEnumerable Steps { get; }
public ReplaceBuilder(IEnumerable steps)