Skip to content

Commit c5bf3e7

Browse files
committed
fix FindRule
1 parent a5e51af commit c5bf3e7

File tree

14 files changed

+140
-88
lines changed

14 files changed

+140
-88
lines changed

src/SimpleStateMachine.StructuralSearch.Sandbox/Program.cs

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Pidgin;
77
using SimpleStateMachine.StructuralSearch.Configurations;
88
using SimpleStateMachine.StructuralSearch.Extensions;
9+
using SimpleStateMachine.StructuralSearch.Helper;
910
using SimpleStateMachine.StructuralSearch.Rules;
1011
using YamlDotNet.Serialization;
1112
using YamlDotNet.Serialization.NamingConventions;
@@ -18,42 +19,13 @@ internal static class Program
1819
{
1920
static void Main(string[] args)
2021
{
21-
var t1 = new List<string> { "test" };
22-
var t2 = new List<string> { "test" };
23-
24-
var tr = Equals(t1, t2);
25-
//var tesds = ParametersParser.StringFormatParameter.ParseOrThrow("\"tfasdfa\\\"sd$var$.Lenght\"");
26-
var replaceRule = StructuralSearch.ParseReplaceRule("$var$ equals $var$ => $var$.Trim");
27-
28-
var rule = StructuralSearch.ParseFindRule("$var$ equals $var$.Lenght and Not StartsWith \"123\\\" $var$ \\\"\"");
29-
var rule2 = StructuralSearch.ParseFindRule("$var$ equals $var$.Offset.Start and Not StartsWith \"123\"");
30-
// var result1 = rule.Execute("test");
31-
// var result2 = rule.Execute("10");
32-
// var result3 = rule.Execute("5.3");
33-
34-
var t = ExprParser.ParseOrThrow("2 + 2 + 2");
35-
var resw = t.Invoke();
36-
var test = String("return ")
37-
.Then(AnyCharExcept(';').ManyString())
38-
.Then(Char(';').AtLeastOnceString())
39-
.Before(Char(';'));
40-
41-
// var template = StructuralSearch.ParseTemplate("");
42-
// var test = Parser.OneOf(String("Test"), CommonParser.Empty);
43-
var res = test.ParseOrThrow("return 125;;;;");
44-
45-
46-
// var lookahead = Parser.Lookahead(Char(';').Then(End).Try());
47-
// var t = Parser.String("return ").Then(Any.AtLeastOnceAsStringUntilNot(lookahead));
48-
// var res = t.ParseOrThrow("return 124;;");
49-
// var testTempalte = "if($test$)";
50-
// var testText = "if((value1)&&(value2))";
51-
// var testTextForMatch = "fdjkfnafdjankfjnafkajndaif((value1)&&(value2))";
52-
// var testTempalte2 = "return $value$;";
53-
// var testText2 = "return 125;;;;";
22+
// var config = YmlHelper.Parse(
23+
// @"C:\Users\roman\GitHub\SimpleStateMachine.StructuralSearch\src\SimpleStateMachine.StructuralSearch.Tests\ConfigurationFile\FullConfig.yml");
24+
//
25+
// var parsers = config.Configurations
26+
// .Select(x => new StructuralSearchParser(x));
5427
//
55-
// var parser = StructuralSearch.ParseTemplate(template3);
56-
// var result = parser.ParseOrThrow(example3);
28+
// parsers.
5729
}
5830
}
5931
}

src/SimpleStateMachine.StructuralSearch.Tests/ConfigurationFileTests.cs

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using System.Text.Json;
44
using Pidgin;
55
using SimpleStateMachine.StructuralSearch.Configurations;
6+
using SimpleStateMachine.StructuralSearch.Helper;
7+
using SimpleStateMachine.StructuralSearch.Tests.Mock;
68
using Xunit;
79
using YamlDotNet.Serialization;
810
using YamlDotNet.Serialization.NamingConventions;
@@ -16,12 +18,7 @@ public class ConfigurationFileTests
1618
[InlineData("ConfigurationFile/FullConfig.yml")]
1719
public void ConfigurationFileParsingShouldBeSuccess(string filePath)
1820
{
19-
var yml = File.ReadAllText(filePath);
20-
var deserializer = new DeserializerBuilder()
21-
.WithNamingConvention(PascalCaseNamingConvention.Instance)
22-
.Build();
23-
24-
var cfg = deserializer.Deserialize<ConfigurationFile>(yml);
21+
var cfg = YmlHelper.Parse(filePath);
2522
var mock = Mock();
2623
Assert.Equal(mock, cfg);
2724
}
@@ -37,35 +34,10 @@ private ConfigurationFile Mock()
3734

3835
foreach (var name in names)
3936
{
40-
var fileName = $"{name}.txt";
41-
var findTemplate = FileOrNull("FindTemplate", fileName);
42-
var fileRule = FileOrNull("FindRule", fileName) ;
43-
var replaceTemplate = FileOrNull("ReplaceTemplate", fileName);
44-
var replaceRule = FileOrNull("ReplaceRule", fileName);
45-
46-
var fileRules = fileRule is null ? null : new List<string>{ fileRule };
47-
var replaceRules = replaceRule is null ? null : new List<string>{ replaceRule };
48-
var config = new Configuration
49-
{
50-
FindTemplate = findTemplate,
51-
FindRules = fileRules,
52-
ReplaceTemplate = replaceTemplate,
53-
ReplaceRules = replaceRules
54-
};
55-
37+
var config = ConfigurationMock.GetConfigurationFromFiles(name);
5638
configurationFile.Configurations.Add(config);
5739
}
5840

59-
string? FileOrNull(string folder, string name)
60-
{
61-
var path = Path.Combine(folder, name);
62-
if (!File.Exists(path))
63-
return null;
64-
65-
var file = File.ReadAllText(path);
66-
return file.Replace("\r\n", "\n");
67-
}
68-
6941
return configurationFile;
7042
}
7143
}

src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
using System.Linq;
1+
using System;
2+
using System.IO;
3+
using System.Linq;
24
using Pidgin;
5+
using SimpleStateMachine.StructuralSearch.Rules;
36
using Xunit;
47

58
namespace SimpleStateMachine.StructuralSearch.Tests
@@ -13,12 +16,45 @@ public class FindRuleParserTests
1316
[InlineData("Not equals $var$.offset.Start")]
1417
[InlineData("equals $var$.Lenght and Not StartsWith \"123\"")]
1518
[InlineData("equals $var$.Lenght and Not StartsWith \"\\\"Test\"")]
16-
public void FindRuleParsingShouldBeSuccess(string ruleStr)
19+
[InlineData("Contains $var$.Lenght")]
20+
[InlineData("Contains \"123\"")]
21+
[InlineData("StartsWith $var$.Lenght")]
22+
[InlineData("StartsWith \"123\"")]
23+
[InlineData("EndsWith $var$.Lenght")]
24+
[InlineData("EndsWith \"123\"")]
25+
[InlineData("Match $var$.Lenght")]
26+
[InlineData("Is Int")]
27+
[InlineData("Is DateTime")]
28+
29+
public void FindRuleExprParsingShouldBeSuccess(string ruleStr)
1730
{
1831
var rule = FindRuleParser.Expr.ParseOrThrow(ruleStr);
1932
var _ruleStr = rule.ToString()?.ToLower();
2033
Assert.NotNull(rule);
2134
Assert.Equal(_ruleStr, ruleStr.ToLower());
2235
}
36+
37+
[Theory]
38+
[InlineData("In \"Is\", \"==\", \"!=\", \"is not\"", "In \"Is\",\"==\",\"!=\",\"is not\"")]
39+
[InlineData("In (\"Is\", \"==\", \"!=\", \"is not\")", "In \"Is\",\"==\",\"!=\",\"is not\"")]
40+
public void FindRuleExprParsingShouldBeEqualsCustomResult(string ruleStr, string customResult)
41+
{
42+
var rule = FindRuleParser.Expr.ParseOrThrow(ruleStr);
43+
var _ruleStr = rule.ToString()?.ToLower();
44+
Assert.NotNull(rule);
45+
Assert.Equal(_ruleStr, customResult.ToLower());
46+
}
47+
48+
[Theory]
49+
[InlineData("FindRule/NullUnionOperator.txt", "$sign$ In \"Is\",\"==\",\"!=\",\"is not\"")]
50+
[InlineData("FindRule/AssignmentNullUnionOperator.txt", "$sign$ In \"Is\",\"==\",\"!=\",\"is not\"")]
51+
public void FindRuleParsingFromFileShouldBeSuccess(string filePath, string customResult)
52+
{
53+
var ruleStr = File.ReadAllText(filePath);
54+
var rule = StructuralSearch.ParseFindRule(ruleStr);
55+
var _ruleStr = rule.ToString()?.ToLower();
56+
Assert.NotNull(rule);
57+
Assert.Equal(_ruleStr, customResult.ToLower());
58+
}
2359
}
2460
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System.Collections.Generic;
2+
using System.IO;
3+
using SimpleStateMachine.StructuralSearch.Configurations;
4+
5+
namespace SimpleStateMachine.StructuralSearch.Tests.Mock
6+
{
7+
public static class ConfigurationMock
8+
{
9+
public static Configuration GetConfigurationFromFiles(string name)
10+
{
11+
var fileName = $"{name}.txt";
12+
var findTemplate = FileOrNull("FindTemplate", fileName);
13+
var fileRule = FileOrNull("FindRule", fileName) ;
14+
var replaceTemplate = FileOrNull("ReplaceTemplate", fileName);
15+
var replaceRule = FileOrNull("ReplaceRule", fileName);
16+
17+
var fileRules = fileRule is null ? null : new List<string>{ fileRule };
18+
var replaceRules = replaceRule is null ? null : new List<string>{ replaceRule };
19+
var config = new Configuration
20+
{
21+
FindTemplate = findTemplate,
22+
FindRules = fileRules,
23+
ReplaceTemplate = replaceTemplate,
24+
ReplaceRules = replaceRules
25+
};
26+
return config;
27+
28+
string? FileOrNull(string folder, string name)
29+
{
30+
var path = Path.Combine(folder, name);
31+
if (!File.Exists(path))
32+
return null;
33+
34+
var file = File.ReadAllText(path);
35+
return file.Replace("\r\n", "\n");
36+
}
37+
}
38+
}
39+
}

src/SimpleStateMachine.StructuralSearch.Tests/SimpleStateMachine.StructuralSearch.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1919
<PrivateAssets>all</PrivateAssets>
2020
</PackageReference>
21-
<PackageReference Include="YamlDotNet" Version="11.2.1" />
2221
</ItemGroup>
2322

2423
<ItemGroup>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using SimpleStateMachine.StructuralSearch.Tests.Mock;
2+
using Xunit;
3+
4+
namespace SimpleStateMachine.StructuralSearch.Tests
5+
{
6+
public class StructuralSearchParserTests
7+
{
8+
[Theory]
9+
[InlineData("AssignmentNullUnionOperator")]
10+
[InlineData("NullUnionOperator")]
11+
[InlineData("TernaryOperator")]
12+
public static void StructuralSearchShouldBeSuccess(string exampleName)
13+
{
14+
var config = ConfigurationMock.GetConfigurationFromFiles(exampleName);
15+
var parser = new StructuralSearchParser(config);
16+
17+
}
18+
}
19+
}

src/SimpleStateMachine.StructuralSearch.Tests/Test.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/SimpleStateMachine.StructuralSearch/FindParser.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ public FindParser(SeriesParser parser)
1515
public SourceMatch Parse(ref IParsingContext context, string input)
1616
{
1717
Parser.SetContext(ref context);
18-
var result = Parser.Select(x => string.Join(string.Empty, x)).AsMatch().Parse(input);
18+
var result = Parser.Select(x => string.Join(string.Empty, x))
19+
.AsMatch()
20+
.Parse(input);
1921

2022
return result.Success ? result.Value : SourceMatch.Empty;
2123
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System.IO;
2+
using SimpleStateMachine.StructuralSearch.Configurations;
3+
using YamlDotNet.Serialization;
4+
using YamlDotNet.Serialization.NamingConventions;
5+
6+
namespace SimpleStateMachine.StructuralSearch.Helper
7+
{
8+
public static class YmlHelper
9+
{
10+
public static ConfigurationFile Parse(string filePath)
11+
{
12+
var yml = File.ReadAllText(filePath);
13+
var deserializer = new DeserializerBuilder()
14+
.WithNamingConvention(PascalCaseNamingConvention.Instance)
15+
.Build();
16+
17+
var cfg = deserializer.Deserialize<ConfigurationFile>(yml);
18+
return cfg;
19+
}
20+
}
21+
}

src/SimpleStateMachine.StructuralSearch/Rules/FindRule/InRule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public bool Execute(string value)
2323

2424
public override string ToString()
2525
{
26-
return $"{Type}{Constant.Space}{string.Join(Constant.Space, Parameters.Select(x=>x.ToString()))}";
26+
return $"{Type}{Constant.Space}{string.Join(Constant.Comma, Parameters.Select(x=>x.ToString()))}";
2727
}
2828
}
2929
}

0 commit comments

Comments
 (0)