22using System . Collections . Generic ;
33using System . Linq ;
44using Pidgin ;
5+ using SimpleStateMachine . StructuralSearch . Extensions ;
56using SimpleStateMachine . StructuralSearch . Operator . Logical . Type ;
67using SimpleStateMachine . StructuralSearch . StructuralSearch ;
78using Xunit ;
@@ -10,75 +11,126 @@ namespace SimpleStateMachine.StructuralSearch.Tests;
1011
1112public static class LogicalExpressionParserTests
1213{
14+ public static IEnumerable < string > StringCompareOperationCases ( )
15+ {
16+ // var parameters = ["$var$", "\"123\"", "$var$.Len"]
17+ foreach ( var @operator in Enum . GetNames < StringCompareOperator > ( ) )
18+ {
19+ yield return $ "{ @operator } $var$";
20+ yield return $ "{ @operator } $var$";
21+ yield return $ "{ @operator } \" 123\" ";
22+ yield return $ "{ @operator } \" 123\" ";
23+ yield return $ "{ @operator } $var$";
24+ }
25+ }
26+
1327 [ Theory ]
14- [ InlineData ( "Equals $var$" ) ]
15- [ InlineData ( "Contains $var$" ) ]
16- [ InlineData ( "StartsWith $var$" ) ]
17- [ InlineData ( "EndsWith $var$" ) ]
28+ [ StringMemberData ( nameof ( StringCompareOperationCases ) ) ]
1829 public static void StringCompareOperationParsingShouldBeSuccess ( string input )
1930 {
2031 LogicalExpressionParser . StringCompareOperation . Before ( CommonParser . Eof ) . ParseOrThrow ( input ) ;
2132 }
2233
23- public static IEnumerable < object [ ] > GetParameterTypeNames ( )
24- => Enum . GetNames < ParameterType > ( ) . Select ( x => new object [ ] { $ "Is { x } " } ) ;
34+ public static IEnumerable < string > IsOperationCases ( )
35+ {
36+ foreach ( var type in Enum . GetNames < ParameterType > ( ) )
37+ {
38+ yield return $ "Is { type } ";
39+ yield return $ "Is { type } ";
40+ }
41+ }
2542
2643 [ Theory ]
27- [ MemberData ( nameof ( GetParameterTypeNames ) ) ]
44+ [ StringMemberData ( nameof ( IsOperationCases ) ) ]
2845 public static void IsOperationParsingShouldBeSuccess ( string input )
2946 {
3047 LogicalExpressionParser . IsOperation . Before ( CommonParser . Eof ) . ParseOrThrow ( input ) ;
3148 }
3249
3350 [ Theory ]
34- [ InlineData ( "Match [a-z]" ) ]
51+ [ InlineData ( "Match \" [a-z]\" " ) ]
3552 public static void MatchOperationParsingShouldBeSuccess ( string input )
3653 {
3754 LogicalExpressionParser . MatchOperation . Before ( CommonParser . Eof ) . ParseOrThrow ( input ) ;
3855 }
3956
4057 [ Theory ]
41- [ InlineData ( "In 123, 456, 789" ) ]
42- [ InlineData ( "In 123,456,789" ) ]
58+ [ InlineData ( "In \" 123\" ,\" 456\" ,\" 789\" " ) ]
59+ [ InlineData ( "In \" 123\" ,\" 456\" ,\" 789\" " ) ]
60+ [ InlineData ( "In \" 123\" , \" 456\" , \" 789\" " ) ]
61+ [ InlineData ( "In \" 123\" , \" 456\" , \" 789\" " ) ]
62+ [ InlineData ( "In \" 123\" , \" 456\" , \" 789\" " ) ]
63+ [ InlineData ( "In \" 123\" , \" 456\" , \" 789\" " ) ]
4364 public static void InOperationParsingShouldBeSuccess ( string input )
4465 {
4566 LogicalExpressionParser . InOperation . Before ( CommonParser . Eof ) . ParseOrThrow ( input ) ;
4667 }
47-
68+
4869 [ Theory ]
49- [ InlineData ( "Not 123 Equals 789" ) ]
70+ [ InlineData ( "Not \" 123\" Equals \" 789\" " ) ]
5071 public static void NotOperationParsingShouldBeSuccess ( string input )
5172 {
5273 LogicalExpressionParser . NotOperation . Before ( CommonParser . Eof ) . ParseOrThrow ( input ) ;
5374 }
5475
76+ public static IEnumerable < string > BinaryOperationCases ( )
77+ {
78+ foreach ( var @operator in Enum . GetNames < LogicalBinaryOperator > ( ) )
79+ {
80+ yield return $ "{ @operator } $var$ Equals $var$";
81+ yield return $ "{ @operator } $var$ Equals $var$";
82+ yield return $ "{ @operator } $var$ Equals $var$";
83+ yield return $ "{ @operator } $var$ Equals $var$";
84+ }
85+ }
86+
87+ [ Theory ]
88+ [ StringMemberData ( nameof ( BinaryOperationCases ) ) ]
89+ public static void BinaryOperationParsingShouldBeSuccess ( string input )
90+ {
91+ LogicalExpressionParser . BinaryOperation . Before ( CommonParser . Eof ) . ParseOrThrow ( input ) ;
92+ }
93+
94+ // public static IEnumerable<string> BinaryOperationCases()
95+ // {
96+ // foreach (var access in ParametersParserTests.PropertyAccessCases())
97+ // {
98+ // foreach (var VARIABLE in COLLECTION)
99+ // {
100+ //
101+ // }
102+ // yield return $"{@operator} $var$ Equals $var$";
103+ // yield return $"{@operator} $var$ Equals $var$";
104+ // yield return $"{@operator} $var$ Equals $var$";
105+ // yield return $"{@operator} $var$ Equals $var$";
106+ // }
107+ // }
108+
55109 [ Theory ]
56110 [ InlineData ( "$var$ equals $var$" ) ]
57111 [ InlineData ( "$var$ equals \" $\" " ) ]
58- [ InlineData ( "Not $var$ equals $var$.Lenght " ) ]
112+ [ InlineData ( "Not $var$ equals $var$.Length " ) ]
59113 [ InlineData ( "Not $var$ equals $var$.offset.Start" ) ]
60- [ InlineData ( "$var$ equals $var$.Lenght and Not $var$ StartsWith \" 123\" " ) ]
61- [ InlineData ( "Not $var$ equals $var$.Lenght and $var$ StartsWith \" 123\" " ) ]
62- [ InlineData ( "$var$ Contains $var$.Lenght " ) ]
114+ [ InlineData ( "$var$ equals $var$.Length and Not $var$ StartsWith \" 123\" " ) ]
115+ [ InlineData ( "Not $var$ equals $var$.Length and $var$ StartsWith \" 123\" " ) ]
116+ [ InlineData ( "$var$ Contains $var$.Length " ) ]
63117 [ InlineData ( "not $var$ Contains \" 123\" " ) ]
64- [ InlineData ( "$var1$.Lenght Contains $var2$.Lenght " ) ]
118+ [ InlineData ( "$var1$.Length Contains $var2$.Length " ) ]
65119 [ InlineData ( "$var$ Contains \" 123\" " ) ]
66- [ InlineData ( "$var$ StartsWith $var$.Lenght " ) ]
67- [ InlineData ( "$var$.Lenght Equals $var$.Lenght " ) ]
120+ [ InlineData ( "$var$ StartsWith $var$.Length " ) ]
121+ [ InlineData ( "$var$.Length Equals $var$.Length " ) ]
68122 [ InlineData ( "$var$ StartsWith \" 123\" " ) ]
69- [ InlineData ( "$var$ EndsWith $var$.Lenght " ) ]
123+ [ InlineData ( "$var$ EndsWith $var$.Length " ) ]
70124 [ InlineData ( "$var$ EndsWith \" 123\" " ) ]
71125 [ InlineData ( "$var$ Is Int" ) ]
72126 [ InlineData ( "$var$ Is DateTime" ) ]
73127 [ InlineData ( "$var$ equals $var1$ or $var2$ equals $var1$" ) ]
74- [ InlineData ( "$var$ match [a-b]+" ) ]
75- public static void FindRuleExprParsingShouldBeSuccess ( string input )
128+ [ InlineData ( "$var$ match \" [a-b]+\" " ) ]
129+ public static void LogicalExpressionParsingShouldBeSuccess ( string input )
76130 {
77- var t = TemplatesParser . Template ;
78- var rule = LogicalExpressionParser . LogicalExpression . Before ( CommonParser . Eof ) . ParseOrThrow ( input ) ;
79- var _ruleStr = rule . ToString ( ) ? . ToLower ( ) ;
80- Assert . NotNull ( rule ) ;
81- Assert . Equal ( input . ToLower ( ) , _ruleStr ) ;
131+ var operation = LogicalExpressionParser . LogicalExpression . Before ( CommonParser . Eof ) . ParseOrThrow ( input ) ;
132+ var result = operation . ToString ( ) ! ;
133+ Assert . Equal ( input . ToLower ( ) , result . ToLower ( ) ) ;
82134 }
83135
84136 // [Theory]
@@ -96,8 +148,8 @@ public static void FindRuleExprParsingShouldBeSuccess(string input)
96148 // [InlineData("$var$ In( \"Is\",\"==\",\"!=\",\"is not\" ) ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")]
97149 // [InlineData("$var$ In( \"Is\",\"==\",\"!=\",\"is not\" )", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")]
98150 // [InlineData("$var$ In( \"Is\",\"==\",\"!=\",\"is not\") ", "$var$ In \"Is\",\"==\",\"!=\",\"is not\"")]
99- // [InlineData("Not ($var$ equals $var$.Lenght and $var$ StartsWith \"123\")", "Not $var$ equals $var$.Lenght and $var$ StartsWith \"123\"")]
100- // [InlineData("Not ($var$ equals $var$.Lenght )", "Not $var$ equals $var$.Lenght ")]
151+ // [InlineData("Not ($var$ equals $var$.Length and $var$ StartsWith \"123\")", "Not $var$ equals $var$.Length and $var$ StartsWith \"123\"")]
152+ // [InlineData("Not ($var$ equals $var$.Length )", "Not $var$ equals $var$.Length ")]
101153 // public static void FindRuleExprParsingShouldBeEqualsCustomResult(string ruleStr, string customResult)
102154 // {
103155 // var rule = LogicalExpressionParser.LogicalExpression.ParseOrThrow(ruleStr);
0 commit comments