Skip to content

Commit 96e4fce

Browse files
committed
ParseToEnd method
1 parent 2bc4bfe commit 96e4fce

File tree

11 files changed

+89
-43
lines changed

11 files changed

+89
-43
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Reflection;
5+
using Xunit.Sdk;
6+
7+
namespace SimpleStateMachine.StructuralSearch.Tests.Attributes;
8+
9+
public class FilesDataAttribute : DataAttribute
10+
{
11+
private readonly string _folderPath;
12+
13+
public FilesDataAttribute(string folderPath)
14+
{
15+
_folderPath = folderPath;
16+
}
17+
18+
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
19+
{
20+
ArgumentNullException.ThrowIfNull(testMethod);
21+
22+
if (!Directory.Exists(_folderPath))
23+
{
24+
throw new DirectoryNotFoundException($"Could not find folder: {_folderPath}");
25+
}
26+
27+
foreach (var file in Directory.GetFiles(_folderPath))
28+
{
29+
yield return [file];
30+
}
31+
}
32+
}

src/SimpleStateMachine.StructuralSearch.Tests/StringMemberDataAttribute.cs renamed to src/SimpleStateMachine.StructuralSearch.Tests/Attributes/StringMemberDataAttribute.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
using System.Reflection;
44
using Xunit;
55

6-
namespace SimpleStateMachine.StructuralSearch.Tests;
6+
namespace SimpleStateMachine.StructuralSearch.Tests.Attributes;
77

88
[CLSCompliant(false)]
99
public class StringMemberDataAttribute : MemberDataAttributeBase
1010
{
1111
private readonly string _memberName;
1212

1313
public StringMemberDataAttribute(string memberName, params object[] parameters)
14-
: base(memberName, parameters) { }
14+
: base(memberName, parameters)
15+
{
16+
_memberName = memberName;
17+
}
1518

1619
protected override object[] ConvertDataItem(MethodInfo testMethod, object item)
1720
{

src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateParserTests.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.IO;
2-
using Pidgin;
2+
using SimpleStateMachine.StructuralSearch.Extensions;
33
using SimpleStateMachine.StructuralSearch.StructuralSearch;
4+
using SimpleStateMachine.StructuralSearch.Tests.Attributes;
45
using Xunit;
56

67
namespace SimpleStateMachine.StructuralSearch.Tests;
@@ -19,21 +20,18 @@ public static class FindTemplateParserTests
1920
[InlineData("if ($value$ $sign$ null)")]
2021
public static void FindTemplateParsingShouldBeSuccess(string templateStr)
2122
{
22-
var template = FindTemplateParser.Template.Before(CommonParser.Eof).ParseOrThrow(templateStr);
23+
var template = FindTemplateParser.Template.ParseToEnd(templateStr);
2324
}
2425

2526
[Theory]
26-
[InlineData("FindTemplate/NullUnionOperator.txt")]
27-
[InlineData("FindTemplate/AssignmentNullUnionOperator.txt")]
28-
[InlineData("FindTemplate/NestedParenthesised.txt")]
29-
[InlineData("FindTemplate/TernaryOperator.txt")]
27+
[FilesData("FindTemplate")]
3028
public static void FindTemplateFileParsingShouldBeSuccess(string templatePath)
3129
{
3230
var templateStr = File.ReadAllText(templatePath);
33-
var parsers = FindTemplateParser.Template.Before(CommonParser.Eof).ParseOrThrow(templateStr);
31+
var parsers = FindTemplateParser.Template.ParseToEnd(templateStr);
3432
Assert.NotEmpty(parsers);
3533
}
36-
34+
3735
// [Theory]
3836
// [InlineData("FindTemplate/NullUnionOperator.txt", "Source/NullUnionOperator.txt")]
3937
// [InlineData("FindTemplate/AssignmentNullUnionOperator.txt", "Source/AssignmentNullUnionOperator.txt")]

src/SimpleStateMachine.StructuralSearch.Tests/GrammarTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Pidgin;
1+
using SimpleStateMachine.StructuralSearch.Extensions;
22
using SimpleStateMachine.StructuralSearch.Helper;
33
using SimpleStateMachine.StructuralSearch.StructuralSearch;
44
using Xunit;
@@ -15,7 +15,7 @@ public class GrammarTests
1515
public static void StringLiteralParsingShouldBeSuccess(string input)
1616
{
1717
input = $"\"{input}\"";
18-
var result = Grammar.StringLiteral.Before(CommonParser.Eof).ParseOrThrow(input);
18+
var result = Grammar.StringLiteral.ParseToEnd(input);
1919
result = $"\"{EscapeHelper.Escape(result, Constant.StringLiteralCharsToEscape)}\"";
2020
Assert.Equal(input, result);
2121
}

src/SimpleStateMachine.StructuralSearch.Tests/LogicalExpressionParserTests.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
using System;
22
using System.Collections.Generic;
3-
using Pidgin;
3+
using SimpleStateMachine.StructuralSearch.Extensions;
44
using SimpleStateMachine.StructuralSearch.Operator.Logical.Type;
55
using SimpleStateMachine.StructuralSearch.StructuralSearch;
6+
using SimpleStateMachine.StructuralSearch.Tests.Attributes;
67
using Xunit;
78

89
namespace SimpleStateMachine.StructuralSearch.Tests;
@@ -26,7 +27,7 @@ public static IEnumerable<string> StringCompareOperationCases()
2627
[StringMemberData(nameof(StringCompareOperationCases))]
2728
public static void StringCompareOperationParsingShouldBeSuccess(string input)
2829
{
29-
LogicalExpressionParser.StringCompareOperation.Before(CommonParser.Eof).ParseOrThrow(input);
30+
LogicalExpressionParser.StringCompareOperation.ParseToEnd(input);
3031
}
3132

3233
public static IEnumerable<string> IsOperationCases()
@@ -42,14 +43,14 @@ public static IEnumerable<string> IsOperationCases()
4243
[StringMemberData(nameof(IsOperationCases))]
4344
public static void IsOperationParsingShouldBeSuccess(string input)
4445
{
45-
LogicalExpressionParser.IsOperation.Before(CommonParser.Eof).ParseOrThrow(input);
46+
LogicalExpressionParser.IsOperation.ParseToEnd(input);
4647
}
4748

4849
[Theory]
4950
[InlineData("Match \"[a-z]\"")]
5051
public static void MatchOperationParsingShouldBeSuccess(string input)
5152
{
52-
LogicalExpressionParser.MatchOperation.Before(CommonParser.Eof).ParseOrThrow(input);
53+
LogicalExpressionParser.MatchOperation.ParseToEnd(input);
5354
}
5455

5556
[Theory]
@@ -61,14 +62,14 @@ public static void MatchOperationParsingShouldBeSuccess(string input)
6162
[InlineData("In \"123\", \"456\", \"789\"")]
6263
public static void InOperationParsingShouldBeSuccess(string input)
6364
{
64-
LogicalExpressionParser.InOperation.Before(CommonParser.Eof).ParseOrThrow(input);
65+
LogicalExpressionParser.InOperation.ParseToEnd(input);
6566
}
6667

6768
[Theory]
6869
[InlineData("Not \"123\" Equals \"789\"")]
6970
public static void NotOperationParsingShouldBeSuccess(string input)
7071
{
71-
LogicalExpressionParser.NotOperation.Before(CommonParser.Eof).ParseOrThrow(input);
72+
LogicalExpressionParser.NotOperation.ParseToEnd(input);
7273
}
7374

7475
public static IEnumerable<string> BinaryOperationCases()
@@ -86,7 +87,7 @@ public static IEnumerable<string> BinaryOperationCases()
8687
[StringMemberData(nameof(BinaryOperationCases))]
8788
public static void BinaryOperationParsingShouldBeSuccess(string input)
8889
{
89-
LogicalExpressionParser.BinaryOperation.Before(CommonParser.Eof).ParseOrThrow(input);
90+
LogicalExpressionParser.BinaryOperation.ParseToEnd(input);
9091
}
9192

9293
// public static IEnumerable<string> BinaryOperationCases()
@@ -126,7 +127,7 @@ public static void BinaryOperationParsingShouldBeSuccess(string input)
126127
[InlineData("$var$ match \"[a-b]+\"")]
127128
public static void LogicalExpressionParsingShouldBeSuccess(string input)
128129
{
129-
var operation = LogicalExpressionParser.LogicalExpression.Before(CommonParser.Eof).ParseOrThrow(input);
130+
var operation = LogicalExpressionParser.LogicalExpression.ParseToEnd(input);
130131
var result = operation.ToString()!;
131132
Assert.Equal(input.ToLower(), result.ToLower());
132133
}

src/SimpleStateMachine.StructuralSearch.Tests/ParametersParserTests.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4-
using Pidgin;
4+
using SimpleStateMachine.StructuralSearch.Extensions;
55
using SimpleStateMachine.StructuralSearch.Operator.String.Type;
66
using SimpleStateMachine.StructuralSearch.Parameters.Types;
77
using SimpleStateMachine.StructuralSearch.StructuralSearch;
8+
using SimpleStateMachine.StructuralSearch.Tests.Attributes;
89
using Xunit;
910

1011
namespace SimpleStateMachine.StructuralSearch.Tests;
@@ -15,7 +16,7 @@ public static class ParametersParserTests
1516
[InlineData("$var$")]
1617
public static void PlaceholderParsingShouldBeSuccess(string str)
1718
{
18-
var result = ParametersParser.PlaceholderParameter.Before(CommonParser.Eof).ParseOrThrow(str);
19+
var result = ParametersParser.PlaceholderParameter.ParseToEnd(str);
1920
// result = EscapeHelper.Escape(result);
2021
// Assert.Equal(result.ToLower(), str.ToLower());
2122
}
@@ -24,15 +25,15 @@ public static void PlaceholderParsingShouldBeSuccess(string str)
2425
[InlineData("Length")]
2526
public static void PlaceholderLengthParsingShouldBeSuccess(string str)
2627
{
27-
ParametersParser.PlaceholderLength.Before(CommonParser.Eof).ParseOrThrow(str);
28+
ParametersParser.PlaceholderLength.ParseToEnd(str);
2829
}
2930

3031
[Theory]
3132
[InlineData("Input.Length")]
3233
[InlineData("Input.Extensions")]
3334
public static void PlaceholderInputParsingShouldBeSuccess(string str)
3435
{
35-
ParametersParser.PlaceholderInput.Before(CommonParser.Eof).ParseOrThrow(str);
36+
ParametersParser.PlaceholderInput.ParseToEnd(str);
3637
}
3738

3839
public static IEnumerable<string> PlaceholderPositionCases()
@@ -48,7 +49,7 @@ public static IEnumerable<string> PlaceholderPositionCases()
4849
[StringMemberData(nameof(PlaceholderPositionCases))]
4950
public static void PlaceholderPositionParsingShouldBeSuccess(string str)
5051
{
51-
ParametersParser.PlaceholderPosition.Before(CommonParser.Eof).ParseOrThrow(str);
52+
ParametersParser.PlaceholderPosition.ParseToEnd(str);
5253
}
5354

5455
public static IEnumerable<string> ChainableStringCases()
@@ -65,7 +66,7 @@ public static IEnumerable<string> ChainableStringCases()
6566
[StringMemberData(nameof(ChainableStringCases))]
6667
public static void ChainableStringParsingShouldBeSuccess(string str)
6768
{
68-
ParametersParser.ChainableString.Before(CommonParser.Eof).ParseOrThrow(str);
69+
ParametersParser.ChainableString.ParseToEnd(str);
6970
}
7071

7172
public static IEnumerable<string> PropertyAccessCases()
@@ -101,7 +102,7 @@ public static IEnumerable<string> PropertyAccessCases()
101102
// [InlineData("$var$.Trim.TrimEnd.TrimStart.ToUpper.ToLower")]
102103
public static void PropertyAccessParsingShouldBeSuccess(string str)
103104
{
104-
var parameter = ParametersParser.PropertyAccess.Before(CommonParser.Eof).ParseOrThrow(str);
105+
var parameter = ParametersParser.PropertyAccess.ParseToEnd(str);
105106
var result = parameter.ToString()!;
106107
Assert.Equal(result.ToLower(), str.ToLower());
107108
}
@@ -121,7 +122,7 @@ public static void PropertyAccessParsingShouldBeSuccess(string str)
121122
[InlineData("$var$.Trim.Trim")]
122123
public static void StringExpressionParsingShouldBeSuccess(string str)
123124
{
124-
var parameter = ParametersParser.StringExpression.Before(CommonParser.Eof).ParseOrThrow(str);
125+
var parameter = ParametersParser.StringExpression.ParseToEnd(str);
125126
var result = parameter.ToString()!;
126127
Assert.Equal(result.ToLower(), str.ToLower());
127128
}

src/SimpleStateMachine.StructuralSearch.Tests/ReplaceRuleParserTests.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using Pidgin;
1+
using System.IO;
2+
using SimpleStateMachine.StructuralSearch.Extensions;
23
using SimpleStateMachine.StructuralSearch.StructuralSearch;
4+
using SimpleStateMachine.StructuralSearch.Tests.Attributes;
35
using Xunit;
46

57
namespace SimpleStateMachine.StructuralSearch.Tests;
@@ -15,7 +17,7 @@ public static class ReplaceRuleParserTests
1517
[InlineData("if $var1$ equals $var$.Length and Not $var1$ StartsWith \"Test\" then")]
1618
public static void ReplaceRuleConditionParsingShouldBeSuccess(string condition)
1719
{
18-
var logicalOperation = ReplaceRuleParser.ReplaceRuleCondition.Before(CommonParser.Eof).ParseOrThrow(condition);
20+
var logicalOperation = ReplaceRuleParser.ReplaceRuleCondition.ParseToEnd(condition);
1921
var result = logicalOperation.ToString()!;
2022
Assert.Equal(condition.ToLower(), result.ToLower());
2123
}
@@ -26,7 +28,7 @@ public static void ReplaceRuleConditionParsingShouldBeSuccess(string condition)
2628
[InlineData("$var1$ => $var3$.Length")]
2729
public static void AssignmentParsingShouldBeSuccess(string assignmentStr)
2830
{
29-
var assignment = ReplaceRuleParser.Assignment.Before(CommonParser.Eof).ParseOrThrow(assignmentStr);
31+
var assignment = ReplaceRuleParser.Assignment.ParseToEnd(assignmentStr);
3032
var result = assignment.ToString().ToLower();
3133
Assert.Equal(assignmentStr.ToLower(), result.ToLower());
3234
}
@@ -43,8 +45,17 @@ public static void AssignmentParsingShouldBeSuccess(string assignmentStr)
4345
[InlineData("if $var1$ equals $var$.Length and Not $var1$ StartsWith \"Test\" then $var1$ => $var$.offset.Start")]
4446
public static void ReplaceRuleParsingShouldBeSuccess(string replaceRuleStr)
4547
{
46-
var rule = ReplaceRuleParser.ReplaceRule.Before(CommonParser.Eof).ParseOrThrow(replaceRuleStr);
48+
var rule = ReplaceRuleParser.ReplaceRule.ParseToEnd(replaceRuleStr);
4749
var result = rule.ToString().ToLower();
4850
Assert.Equal(replaceRuleStr.ToLower(), result);
4951
}
52+
53+
[Theory]
54+
[FilesData("ReplaceTemplate")]
55+
public static void FindTemplateFileParsingShouldBeSuccess(string templatePath)
56+
{
57+
var templateStr = File.ReadAllText(templatePath);
58+
var parsers = FindTemplateParser.Template.ParseToEnd(templateStr);
59+
Assert.NotEmpty(parsers);
60+
}
5061
}

src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.IO;
2-
using Pidgin;
32
using SimpleStateMachine.StructuralSearch.Context;
3+
using SimpleStateMachine.StructuralSearch.Extensions;
44
using SimpleStateMachine.StructuralSearch.StructuralSearch;
55
using Xunit;
66

@@ -65,7 +65,7 @@ public static void ReplaceBuildShouldBeSuccess(string templatePath, string resul
6565
[InlineData("(test ($var1$.Length) test2)")]
6666
public static void ReplaceTemplateParsingShouldBeSuccess(string templateStr)
6767
{
68-
var replaceBuilder = ReplaceTemplateParser.ReplaceTemplate.Before(CommonParser.Eof).ParseOrThrow(templateStr);
68+
var replaceBuilder = ReplaceTemplateParser.ReplaceTemplate.ParseToEnd(templateStr);
6969
var replaceStr = replaceBuilder.ToString()?.ToLower();
7070
Assert.Equal(replaceStr, templateStr.ToLower());
7171
}

src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,7 @@ public static Parser<char, TResult> BetweenParentheses<T, TResult>(this Parser<c
8282
var squareParentheses= Parser.Map(mapFunc, CommonParser.LeftSquareParenthesis, parser, CommonParser.RightSquareParenthesis);
8383
return Parser.OneOf(parentheses, curlyParentheses, squareParentheses);
8484
}
85+
86+
public static T ParseToEnd<T>(this Parser<char, T> parser, string str)
87+
=> parser.Before(CommonParser.Eof).ParseOrThrow(str);
8588
}

src/SimpleStateMachine.StructuralSearch/StructuralSearch/ReplaceTemplateParser.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
42
using Pidgin;
5-
using SimpleStateMachine.StructuralSearch.CustomParsers;
63
using SimpleStateMachine.StructuralSearch.Extensions;
74
using SimpleStateMachine.StructuralSearch.Parameters;
85

0 commit comments

Comments
 (0)