Skip to content

Commit 285a698

Browse files
committed
Fix parsers, check on EOF
1 parent 86cf7f5 commit 285a698

File tree

9 files changed

+53
-12
lines changed

9 files changed

+53
-12
lines changed

src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,17 @@ public void FindRuleExprParsingShouldBeEqualsCustomResult(string ruleStr, string
4949
Assert.NotNull(rule);
5050
Assert.Equal(_ruleStr, customResult.ToLower());
5151
}
52-
5352
[Theory]
54-
[InlineData("FindRule/NullUnionOperator.txt", "$sign$ In \"Is\",\"==\",\"!=\",\"is not\"")]
53+
[InlineData("FindRule/NullUnionOperator.txt", "$sign$ In \"Is\",\"==\",\"!=\",\"is not\"", "$value$ In $value1$,\"$value1$.Value\",$value2$,\"$value2$.Value\"")]
5554
[InlineData("FindRule/AssignmentNullUnionOperator.txt", "$sign$ In \"Is\",\"==\",\"!=\",\"is not\"")]
56-
public void FindRuleParsingFromFileShouldBeSuccess(string filePath, string customResult)
55+
public void FindRuleParsingFromFileShouldBeSuccess(string filePath, params string[] customResult)
5756
{
5857
var ruleStr = File.ReadAllText(filePath);
59-
var rule = StructuralSearch.ParseFindRule(ruleStr);
60-
var _ruleStr = rule.ToString()?.ToLower();
61-
Assert.NotNull(rule);
62-
Assert.Equal(_ruleStr, customResult.ToLower());
58+
var rules = ruleStr.Split(Constant.LineFeed)
59+
.Select(StructuralSearch.ParseFindRule);
60+
var rulesAsStr = rules.Select(x => x.ToString()).ToArray();
61+
62+
Assert.True(customResult.SequenceEqual(rulesAsStr));
6363
}
6464
}
6565
}

src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateParserTests.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class FindTemplateTests
1212
[InlineData("FindTemplate/AssignmentNullUnionOperator.txt")]
1313
[InlineData("FindTemplate/NestedParenthesised.txt")]
1414
[InlineData("FindTemplate/TernaryOperator.txt")]
15-
public void TemplateParsingShouldBeSuccess(string templatePath)
15+
public void FindTemplateParsingShouldBeSuccess(string templatePath)
1616
{
1717
var findTemplate = File.ReadAllText(templatePath);
1818
var template = StructuralSearch.ParseFindTemplate(findTemplate);
@@ -40,5 +40,12 @@ public void SourceParsingBeFindTemplateShouldBeSuccess(string templatePath, stri
4040
Assert.NotNull(findParser);
4141
Assert.Equal(match.Match.Lenght, source.Length);
4242
}
43+
44+
[Theory]
45+
[InlineData("( $var$")]
46+
public void FindTemplateParsingShouldBeFail(string templateStr)
47+
{
48+
Assert.Throws<ParseException>(() => StructuralSearch.ParseFindTemplate(templateStr));
49+
}
4350
}
4451
}

src/SimpleStateMachine.StructuralSearch.Tests/ReplaceRuleParserTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,24 @@ public void ReplaceRuleParsingShouldBeSuccess(string replaceRule)
2424
Assert.Equal(ruleStr, replaceRule.ToLower());
2525
}
2626

27+
[Theory]
28+
[InlineData("($var1$ equals $var2$) then $var1$ => \"test $var3$\"", "$var1$ equals $var2$ then $var1$ => \"test $var3$\"")]
29+
public void ReplaceRuleShouldBeEqualsString(string replaceRule, string customResult)
30+
{
31+
var rule = StructuralSearch.ParseReplaceRule(replaceRule);
32+
var ruleStr = rule.ToString().ToLower();
33+
Assert.NotNull(rule);
34+
Assert.Equal(ruleStr, customResult.ToLower());
35+
}
36+
37+
[Theory]
38+
[InlineData("$var1$ equals $var2$ then $var1$ => (\"test $var3$\"")]
39+
[InlineData("($var1$ equals $var2$ then $var1$ => \"test $var3$\"")]
40+
[InlineData("$var1$ equals $var2$ then ($var1$) => \"test $var3$\"")]
41+
public void ReplaceRuleParsingShouldBeFail(string replaceRuleStr)
42+
{
43+
Assert.Throws<ParseException>(() => StructuralSearch.ParseReplaceRule(replaceRuleStr));
44+
}
45+
2746
}
2847
}

src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.IO;
33
using System.Linq;
4+
using Pidgin;
45
using SimpleStateMachine.StructuralSearch.Tests.Mock;
56
using Xunit;
67

@@ -53,11 +54,22 @@ public void ReplaceBuildShouldBeSuccess(string templatePath, string resultPath,
5354

5455
[Theory]
5556
[InlineData("test $var1$.Lenght")]
57+
[InlineData("(test $var1$.Lenght)")]
58+
[InlineData("test ($var1$.Lenght)")]
5659
public void ReplaceTemplateParsingShouldBeSuccess(string templateStr)
5760
{
5861
var replaceBuilder = StructuralSearch.ParseReplaceTemplate(templateStr);
5962
var replaceStr = replaceBuilder.ToString().ToLower();
6063
Assert.Equal(replaceStr, templateStr.ToLower());
6164
}
65+
66+
[Theory]
67+
[InlineData("(test $var1$.Lenght")]
68+
[InlineData("test ($var1$.Lenght")]
69+
[InlineData("test $var1$.Lenght)")]
70+
public void ReplaceTemplateParsingShouldBeFail(string templateStr)
71+
{
72+
Assert.Throws<ParseException>(() => StructuralSearch.ParseReplaceTemplate(templateStr));
73+
}
6274
}
6375
}

src/SimpleStateMachine.StructuralSearch/StructuralSearch/CommonParser.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ internal static readonly Parser<char, char> AnyChar
1515
internal static readonly Parser<char, char> Space
1616
= Char(Constant.Space);
1717

18+
internal static readonly Parser<char, Unit> EOF
19+
= Parser<char>.End;
20+
1821
internal static readonly Parser<char, string> AnyString
1922
= AnyChar.AtLeastOnceString();
2023

src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindRulesParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ internal static readonly Parser<char, Func<IRule, IRule>> Not
7171

7272
internal static IRule ParseTemplate(string str)
7373
{
74-
return Expr.ParseOrThrow(str);
74+
return Expr.Before(CommonParser.EOF).ParseOrThrow(str);
7575
}
7676
}
7777
}

src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindTemplateParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ static FindTemplateParser()
1717
.MergerMany();
1818

1919
TemplateParser = Parser.OneOf(Parenthesised, Token)
20-
.AtLeastOnce()
20+
.AtLeastOnceUntil(CommonParser.EOF)
2121
.MergerMany();
2222

2323
SeriesParser = TemplateParser.Select(parsers => new SeriesParser(parsers));

src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceRuleParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public static class ReplaceRuleParser
4242

4343
internal static ReplaceRule ParseTemplate(string str)
4444
{
45-
return ReplaceRule.ParseOrThrow(str);
45+
return ReplaceRule.Before(CommonParser.EOF).ParseOrThrow(str);
4646
}
4747
}
4848
}

src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceTemplateParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ static ReplaceTemplateParser()
1818
.MergerMany();
1919

2020
TemplateParser = Parser.OneOf(Parenthesised, Token)
21-
.AtLeastOnce()
21+
.AtLeastOnceUntil(CommonParser.EOF)
2222
.MergerMany();
2323
}
2424

0 commit comments

Comments
 (0)