108 lines
3.3 KiB
C#
108 lines
3.3 KiB
C#
|
using DD.Persistence.Filter.Interpreter;
|
|||
|
using DD.Persistence.Filter.Models;
|
|||
|
using DD.Persistence.Filter.Models.Enumerations;
|
|||
|
using Newtonsoft.Json;
|
|||
|
|
|||
|
namespace DD.Persistence.Test;
|
|||
|
public class TreeBuilderShould
|
|||
|
{
|
|||
|
[Fact]
|
|||
|
public void TestTreeBuilding()
|
|||
|
{
|
|||
|
//arrange
|
|||
|
var treeString = "(\"A\"==1)||(\"B\"==2)&&(\"C\"==3)||((\"D\"==4)||(\"E\"==5))&&(\"F\"==6)";
|
|||
|
|
|||
|
//act
|
|||
|
var root = treeString.BuildTree();
|
|||
|
|
|||
|
//assert
|
|||
|
Assert.NotNull(root);
|
|||
|
|
|||
|
var expectedRoot = JsonConvert.SerializeObject(new TVertex(
|
|||
|
OperationEnum.And,
|
|||
|
new TVertex(
|
|||
|
OperationEnum.And,
|
|||
|
new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TLeaf(OperationEnum.Equal, "A", 1),
|
|||
|
new TLeaf(OperationEnum.Equal, "B", 2)
|
|||
|
),
|
|||
|
new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TLeaf(OperationEnum.Equal, "C", 3),
|
|||
|
new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TLeaf(OperationEnum.Equal, "D", 4),
|
|||
|
new TLeaf(OperationEnum.Equal, "E", 5)
|
|||
|
)
|
|||
|
)
|
|||
|
),
|
|||
|
new TLeaf(OperationEnum.Equal, "F", 6)
|
|||
|
));
|
|||
|
var actualRoot = JsonConvert.SerializeObject(root);
|
|||
|
Assert.Equal(expectedRoot, actualRoot);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void TestTreeOperations()
|
|||
|
{
|
|||
|
//arrange
|
|||
|
var treeString = "(\"A\"==1)||(\"B\"!=1)||(\"C\">1)||(\"D\">=1)||(\"E\"<1)||(\"F\"<=1)";
|
|||
|
|
|||
|
//act
|
|||
|
var root = treeString.BuildTree();
|
|||
|
|
|||
|
//assert
|
|||
|
Assert.NotNull(root);
|
|||
|
|
|||
|
var expectedRoot = JsonConvert.SerializeObject(new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TLeaf(OperationEnum.Equal, "A", 1),
|
|||
|
new TLeaf(OperationEnum.NotEqual, "B", 1)
|
|||
|
),
|
|||
|
new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TLeaf(OperationEnum.Greate, "C", 1),
|
|||
|
new TLeaf(OperationEnum.GreateOrEqual, "D", 1)
|
|||
|
)
|
|||
|
),
|
|||
|
new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TLeaf(OperationEnum.Less, "E", 1),
|
|||
|
new TLeaf(OperationEnum.LessOrEqual, "F", 1)
|
|||
|
)
|
|||
|
));
|
|||
|
var actualRoot = JsonConvert.SerializeObject(root);
|
|||
|
Assert.Equal(expectedRoot, actualRoot);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void TestLeafValues()
|
|||
|
{
|
|||
|
//arrange
|
|||
|
var treeString = "(\"A\"==1.2345)||(\"B\"==12345)||(\"C\"==\"12345\")";
|
|||
|
|
|||
|
//act
|
|||
|
var root = treeString.BuildTree();
|
|||
|
|
|||
|
//assert
|
|||
|
Assert.NotNull(root);
|
|||
|
|
|||
|
var expectedRoot = JsonConvert.SerializeObject(new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TVertex(
|
|||
|
OperationEnum.Or,
|
|||
|
new TLeaf(OperationEnum.Equal, "A", 1.2345),
|
|||
|
new TLeaf(OperationEnum.Equal, "B", 12345)
|
|||
|
),
|
|||
|
new TLeaf(OperationEnum.Equal, "C", "12345")
|
|||
|
));
|
|||
|
var actualRoot = JsonConvert.SerializeObject(root);
|
|||
|
Assert.Equal(expectedRoot, actualRoot);
|
|||
|
}
|
|||
|
}
|