public void TestCircularReference() { var nodeContainer = new NodeContainer(); var obj1 = new SimpleClass { Member1 = 3 }; var obj2 = new SimpleClass { Member1 = 3 }; obj1.Member2 = obj2; obj2.Member2 = obj1; var rootNode1 = nodeContainer.GetOrCreateNode(obj1); var rootNode2 = nodeContainer.GetOrCreateNode(obj2); var visitor = new TestVisitor(); visitor.Visit(rootNode1); var expectedNodes = new IContentNode[] { rootNode1, rootNode1[nameof(SimpleClass.Member1)], rootNode1[nameof(SimpleClass.Member2)], rootNode2, rootNode2[nameof(SimpleClass.Member1)], rootNode2[nameof(SimpleClass.Member2)], }; var expectedPaths = new[] { new GraphNodePath(rootNode1), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); visitor.Visit(rootNode2); expectedNodes = new IContentNode[] { rootNode2, rootNode2[nameof(SimpleClass.Member1)], rootNode2[nameof(SimpleClass.Member2)], rootNode1, rootNode1[nameof(SimpleClass.Member1)], rootNode1[nameof(SimpleClass.Member2)], }; expectedPaths = new[] { new GraphNodePath(rootNode2), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestObjectWithStruct() { var nodeContainer = new NodeContainer(); var instance = new StructClass { Member1 = 3, Member2 = new Struct() }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new[] { rootNode, rootNode.TryGetChild(nameof(StructClass.Member1)), rootNode.TryGetChild(nameof(StructClass.Member2)), rootNode.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member1)), rootNode.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)), }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(StructClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(StructClass.Member2)).PushMember(nameof(Struct.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructClass.Member2)).PushMember(nameof(Struct.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestSimpleObject() { var nodeContainer = new NodeContainer(); var instance = new SimpleClass { Member1 = 3, Member2 = new SimpleClass() }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new IGraphNode[] { rootNode, rootNode[nameof(SimpleClass.Member1)], rootNode[nameof(SimpleClass.Member2)], rootNode[nameof(SimpleClass.Member2)].Target, rootNode[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member1)], rootNode[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member2)], }; var expectedPaths = new GraphNodePath[6]; expectedPaths[0] = new GraphNodePath(rootNode); expectedPaths[1] = new GraphNodePath(rootNode); expectedPaths[1].PushMember(nameof(SimpleClass.Member1)); expectedPaths[2] = new GraphNodePath(rootNode); expectedPaths[2].PushMember(nameof(SimpleClass.Member2)); expectedPaths[3] = expectedPaths[2].Clone(); expectedPaths[3].PushTarget(); expectedPaths[4] = expectedPaths[3].Clone(); expectedPaths[4].PushMember(nameof(SimpleClass.Member1)); expectedPaths[5] = expectedPaths[3].Clone(); expectedPaths[5].PushMember(nameof(SimpleClass.Member2)); VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestObjectWithPrimitiveList() { var nodeContainer = new NodeContainer(); var instance = new PrimitiveListClass { Member1 = 3, Member2 = new List <string> { "aaa", "bbb", "ccc" } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new IContentNode[] { rootNode, rootNode[nameof(PrimitiveListClass.Member1)], rootNode[nameof(PrimitiveListClass.Member2)], }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(PrimitiveListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(PrimitiveListClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestSimpleObject() { var nodeContainer = new NodeContainer(); var instance = new SimpleClass { Member1 = 3, Member2 = new SimpleClass() }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new IContentNode[] { rootNode, rootNode[nameof(SimpleClass.Member1)], rootNode[nameof(SimpleClass.Member2)], rootNode[nameof(SimpleClass.Member2)].Target, rootNode[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member1)], rootNode[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member2)], }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestObjectWithPrimitiveList() { var nodeContainer = new NodeContainer(); var instance = new PrimitiveListClass { Member1 = 3, Member2 = new List <string> { "aaa", "bbb", "ccc" } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new IGraphNode[] { rootNode, rootNode[nameof(PrimitiveListClass.Member1)], rootNode[nameof(PrimitiveListClass.Member2)], rootNode[nameof(PrimitiveListClass.Member2)].Target, }; var expectedPaths = new GraphNodePath[4]; expectedPaths[0] = new GraphNodePath(rootNode); expectedPaths[1] = expectedPaths[0].Clone(); expectedPaths[1].PushMember(nameof(PrimitiveListClass.Member1)); expectedPaths[2] = expectedPaths[0].Clone(); expectedPaths[2].PushMember(nameof(PrimitiveListClass.Member2)); expectedPaths[3] = expectedPaths[2].Clone(); expectedPaths[3].PushTarget(); VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void SnQuery_Visitor_Rewrite_CSrv() { var tree = new LogicalPredicate( new [] { new LogicalClause(new LogicalPredicate( new [] { new LogicalClause(new SimplePredicate("F1", new IndexValue("V1")), Occurence.Should), new LogicalClause(new SimplePredicate("F2", new IndexValue("V2")), Occurence.Should) }), Occurence.Must), new LogicalClause(new LogicalPredicate( new [] { new LogicalClause(new SimplePredicate("F3", new IndexValue("V3")), Occurence.Should), new LogicalClause(new RangePredicate("F4", null, new IndexValue(10), true, true), Occurence.Should), }), Occurence.Must), }); var visitor = new TestVisitor(); var rewritten = visitor.Visit(tree); var dumper = new SnQueryToStringVisitor(); dumper.Visit(rewritten); Assert.AreEqual("+(F1:V1 F2:V2222) +(F3:V3 F4:<10)", dumper.Output); }
public void TestSimpleObject() { var nodeContainer = new NodeContainer(); var instance = new SimpleClass { Member1 = 3, Member2 = new SimpleClass() }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new[] { rootNode, rootNode.TryGetChild(nameof(SimpleClass.Member1)), rootNode.TryGetChild(nameof(SimpleClass.Member2)), rootNode.TryGetChild(nameof(SimpleClass.Member2)).Target, rootNode.TryGetChild(nameof(SimpleClass.Member2)).Target.TryGetChild(nameof(SimpleClass.Member1)), rootNode.TryGetChild(nameof(SimpleClass.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)), }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestMultipleReferences() { var nodeContainer = new NodeContainer(); var commonObj = new SimpleClass(); var instance = new SimpleClass2 { Member1 = 3, Member2 = new SimpleClass { Member1 = 4, Member2 = commonObj }, Member3 = new SimpleClass { Member1 = 5, Member2 = commonObj } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new[] { rootNode, rootNode.TryGetChild(nameof(SimpleClass2.Member1)), rootNode.TryGetChild(nameof(SimpleClass2.Member2)), rootNode.TryGetChild(nameof(SimpleClass2.Member2)).Target, rootNode.TryGetChild(nameof(SimpleClass2.Member2)).Target.TryGetChild(nameof(SimpleClass.Member1)), rootNode.TryGetChild(nameof(SimpleClass2.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)), rootNode.TryGetChild(nameof(SimpleClass2.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)).Target, rootNode.TryGetChild(nameof(SimpleClass2.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)).Target.TryGetChild(nameof(SimpleClass.Member1)), rootNode.TryGetChild(nameof(SimpleClass2.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)), rootNode.TryGetChild(nameof(SimpleClass2.Member3)), rootNode.TryGetChild(nameof(SimpleClass2.Member3)).Target, rootNode.TryGetChild(nameof(SimpleClass2.Member3)).Target.TryGetChild(nameof(SimpleClass.Member1)), rootNode.TryGetChild(nameof(SimpleClass2.Member3)).Target.TryGetChild(nameof(SimpleClass.Member2)), rootNode.TryGetChild(nameof(SimpleClass2.Member3)).Target.TryGetChild(nameof(SimpleClass.Member2)).Target, rootNode.TryGetChild(nameof(SimpleClass2.Member3)).Target.TryGetChild(nameof(SimpleClass.Member2)).Target.TryGetChild(nameof(SimpleClass.Member1)), rootNode.TryGetChild(nameof(SimpleClass2.Member3)).Target.TryGetChild(nameof(SimpleClass.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)), }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member2)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member2)).PushTarget(), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member3)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member3)).PushTarget(), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member3)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member3)).PushTarget().PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member3)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member3)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(SimpleClass2.Member3)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void ExecutorVisitorVisit_IfStatement_CreateIfStatementAST(string text, string expected) { var lexer = new Lexer(new StringSource(text)); var parser = new Parser(lexer); var program = parser.Parse(); var testVisitor = new TestVisitor(); testVisitor.Visit(program); Assert.AreEqual(expected, writer.ToString()); }
public void ExecutorVisitorVisit_FuncCall_CreateFuncCallAST(string text) { var lexer = new Lexer(new StringSource(text)); var parser = new Parser(lexer); var program = parser.Parse(); var testVisitor = new TestVisitor(); testVisitor.Visit(program); Assert.AreEqual(text, writer.ToString()); }
public void VisitorTest() { var jsonGrammar = new JsonGrammar(); var result = jsonGrammar.Parser.Parse(json).Value; var testVisitor = new TestVisitor(); testVisitor.Visit(result); foreach (var property in testVisitor.GetType().GetFields().Where(f => f.FieldType == typeof(bool))) Assert.IsTrue((bool)property.GetValue(testVisitor)); }
public Expression Apply(Session session, Expression query) { var visitor = new TestVisitor(); var result = visitor.Visit(query); if (visitor.ClosureRegistered()) { session.Extensions.Set(new ClosureMarker()); } return(result); }
public void VisitorTest() { var jsonGrammar = new JsonGrammar(); var result = jsonGrammar.Parser.Parse(json).Value; var testVisitor = new TestVisitor(); testVisitor.Visit(result); foreach (var property in testVisitor.GetType().GetFields().Where(f => f.FieldType == typeof(bool))) { Assert.IsTrue((bool)property.GetValue(testVisitor)); } }
public void TestObjectWithObjectList() { var nodeContainer = new NodeContainer(); // We also test a null item in the list var instance = new ObjectListClass { Member1 = 3, Member2 = new List <SimpleClass> { new SimpleClass(), null, new SimpleClass() } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); Index index = new Index(2); IGraphNode tempQualifier = rootNode.TryGetChild(nameof(ObjectListClass.Member2)); Index index1 = new Index(2); IGraphNode tempQualifier1 = rootNode.TryGetChild(nameof(ObjectListClass.Member2)); Index index2 = new Index(2); IGraphNode tempQualifier2 = rootNode.TryGetChild(nameof(ObjectListClass.Member2)); Index index3 = new Index(0); IGraphNode tempQualifier3 = rootNode.TryGetChild(nameof(ObjectListClass.Member2)); Index index4 = new Index(0); IGraphNode tempQualifier4 = rootNode.TryGetChild(nameof(ObjectListClass.Member2)); Index index5 = new Index(0); IGraphNode tempQualifier5 = rootNode.TryGetChild(nameof(ObjectListClass.Member2)); var expectedNodes = new[] { rootNode, rootNode.TryGetChild(nameof(ObjectListClass.Member1)), rootNode.TryGetChild(nameof(ObjectListClass.Member2)), tempQualifier4.IndexedTarget(index4), tempQualifier5.IndexedTarget(index5).TryGetChild(nameof(ObjectListClass.Member1)), tempQualifier3.IndexedTarget(index3).TryGetChild(nameof(ObjectListClass.Member2)), tempQualifier1.IndexedTarget(index1), tempQualifier2.IndexedTarget(index2).TryGetChild(nameof(ObjectListClass.Member1)), tempQualifier.IndexedTarget(index).TryGetChild(nameof(ObjectListClass.Member2)), }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(ObjectListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(ObjectListClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(ObjectListClass.Member2)).PushIndex(new Index(0)), new GraphNodePath(rootNode).PushMember(nameof(ObjectListClass.Member2)).PushIndex(new Index(0)).PushMember(nameof(ObjectListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(ObjectListClass.Member2)).PushIndex(new Index(0)).PushMember(nameof(ObjectListClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(ObjectListClass.Member2)).PushIndex(new Index(2)), new GraphNodePath(rootNode).PushMember(nameof(ObjectListClass.Member2)).PushIndex(new Index(2)).PushMember(nameof(ObjectListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(ObjectListClass.Member2)).PushIndex(new Index(2)).PushMember(nameof(ObjectListClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestObjectWithStructList() { var nodeContainer = new NodeContainer(); // We also test a null item in the list var instance = new StructListClass { Member1 = 3, Member2 = new List <Struct> { new Struct(), new Struct() } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); Index index = new Index(0); IContentNode tempQualifier = rootNode[nameof(StructListClass.Member2)]; Index index1 = new Index(0); IContentNode tempQualifier1 = rootNode[nameof(StructListClass.Member2)]; Index index2 = new Index(0); IContentNode tempQualifier2 = rootNode[nameof(StructListClass.Member2)]; Index index3 = new Index(1); IContentNode tempQualifier3 = rootNode[nameof(StructListClass.Member2)]; Index index4 = new Index(1); IContentNode tempQualifier4 = rootNode[nameof(StructListClass.Member2)]; Index index5 = new Index(1); IContentNode tempQualifier5 = rootNode[nameof(StructListClass.Member2)]; var expectedNodes = new IContentNode[] { rootNode, rootNode[nameof(StructListClass.Member1)], rootNode[nameof(StructListClass.Member2)], tempQualifier.IndexedTarget(index), tempQualifier1.IndexedTarget(index1)[nameof(StructListClass.Member1)], tempQualifier2.IndexedTarget(index2)[nameof(StructListClass.Member2)], tempQualifier3.IndexedTarget(index3), tempQualifier4.IndexedTarget(index4)[nameof(StructListClass.Member1)], tempQualifier5.IndexedTarget(index5)[nameof(StructListClass.Member2)], }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)).PushMember(nameof(StructListClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)).PushMember(nameof(StructListClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void Initialize_is_only_called_once() { var span = new ContainerSpan( new ContainerSpan(new ContainerSpan()), new ContentSpan("hello") ); var visitor = new TestVisitor(); visitor.Visit(span); visitor.InitializeCount.Should().Be(1); }
public void TestObjectWithStructList() { var nodeContainer = new NodeContainer(); // We also test a null item in the list var instance = new StructListClass { Member1 = 3, Member2 = new List <Struct> { new Struct(), new Struct() } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new IGraphNode[] { rootNode, rootNode[nameof(StructListClass.Member1)], rootNode[nameof(StructListClass.Member2)], rootNode[nameof(StructListClass.Member2)].Target, rootNode[nameof(StructListClass.Member2)].Target.IndexedTarget(new NodeIndex(0)), rootNode[nameof(StructListClass.Member2)].Target.IndexedTarget(new NodeIndex(0))[nameof(StructListClass.Member1)], rootNode[nameof(StructListClass.Member2)].Target.IndexedTarget(new NodeIndex(0))[nameof(StructListClass.Member2)], rootNode[nameof(StructListClass.Member2)].Target.IndexedTarget(new NodeIndex(1)), rootNode[nameof(StructListClass.Member2)].Target.IndexedTarget(new NodeIndex(1))[nameof(StructListClass.Member1)], rootNode[nameof(StructListClass.Member2)].Target.IndexedTarget(new NodeIndex(1))[nameof(StructListClass.Member2)], }; var expectedPaths = new GraphNodePath[10]; expectedPaths[0] = new GraphNodePath(rootNode); expectedPaths[1] = expectedPaths[0].Clone(); expectedPaths[1].PushMember(nameof(StructListClass.Member1)); expectedPaths[2] = expectedPaths[0].Clone(); expectedPaths[2].PushMember(nameof(StructListClass.Member2)); expectedPaths[3] = expectedPaths[2].Clone(); expectedPaths[3].PushTarget(); expectedPaths[4] = expectedPaths[3].Clone(); expectedPaths[4].PushIndex(new NodeIndex(0)); expectedPaths[5] = expectedPaths[4].Clone(); expectedPaths[5].PushMember(nameof(StructListClass.Member1)); expectedPaths[6] = expectedPaths[4].Clone(); expectedPaths[6].PushMember(nameof(StructListClass.Member2)); expectedPaths[7] = expectedPaths[3].Clone(); expectedPaths[7].PushIndex(new NodeIndex(1)); expectedPaths[8] = expectedPaths[7].Clone(); expectedPaths[8].PushMember(nameof(StructListClass.Member1)); expectedPaths[9] = expectedPaths[7].Clone(); expectedPaths[9].PushMember(nameof(StructListClass.Member2)); VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
static void Main(string[] args) { string comparisonProperty = "Ivan"; Expression <Func <Entity, bool> > e = entity => entity.SubEntity.Any(subEntity => subEntity.SomeProperty == false && subEntity.SubSubEntity.FooProperty.StartsWith(comparisonProperty) && subEntity.SubSubEntity.BarProperty == "Bar" && subEntity.SubSubEntity.SubSubSubEntity.Any(subSubSubEntity => subSubSubEntity.SubSubSubSubEntity.BazProperty == "whatever") ); var v = new TestVisitor(); v.Visit(e); var result = v.Result; }
public void Run() { #region test visitor IList <Personal> list = new List <Personal>(); IQueryable <Personal> queryable = list.AsQueryable(); { TestVisitor visitor = new TestVisitor(); Expression <Func <Personal, bool> > expression = u => u.Age == 12 && u.Name == u.NickName + "123"; //Expression<Func<Personal, bool>> expression = u => !(u.Age >= 12); //Expression expression = Expression.Constant(typeof(Personal)); //string name = "12312"; //Expression<Func<Personal, bool>> expression = u => u.Name == name; visitor.Visit(expression); } { // where visitor //WhereGenerateVisitor visitor = new WhereGenerateVisitor(); ////Expression<Func<Personal, bool>> expression = u => u.Age == 12 && u.Name == u.NickName + "123"; ////string name = "12312"; ////Expression<Func<Personal, bool>> expression = u => u.Name == name; //var data = new { Name = "test" }; //Expression<Func<Personal, bool>> expression = u => u.Name == data.Name; //Console.WriteLine(visitor.Explain(expression)); } {// select visitor //Console.WriteLine(queryable.SelectExpression(u => new { Info = u.Age, Name = "test" })); //Console.WriteLine(queryable.SelectExpression(u => u)); //Console.WriteLine(queryable.SelectExpression(u => u.Name)); //Console.WriteLine(queryable.SelectExpression(u => new { u.Age,u.Name })); //Console.WriteLine(queryable.SelectExpression(u => new { u.Age,u.Name,Back = u.Name })); } #endregion }
public void TestObjectWithStructList() { var nodeContainer = new NodeContainer(); // We also test a null item in the list var instance = new StructListClass { Member1 = 3, Member2 = new List <Struct> { new Struct(), new Struct() } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new[] { rootNode, rootNode.GetChild(nameof(StructListClass.Member1)), rootNode.GetChild(nameof(StructListClass.Member2)), rootNode.GetChild(nameof(StructListClass.Member2)).GetTarget(new Index(0)), rootNode.GetChild(nameof(StructListClass.Member2)).GetTarget(new Index(0)).GetChild(nameof(StructListClass.Member1)), rootNode.GetChild(nameof(StructListClass.Member2)).GetTarget(new Index(0)).GetChild(nameof(StructListClass.Member2)), rootNode.GetChild(nameof(StructListClass.Member2)).GetTarget(new Index(1)), rootNode.GetChild(nameof(StructListClass.Member2)).GetTarget(new Index(1)).GetChild(nameof(StructListClass.Member1)), rootNode.GetChild(nameof(StructListClass.Member2)).GetTarget(new Index(1)).GetChild(nameof(StructListClass.Member2)), }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)).PushMember(nameof(StructListClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)).PushMember(nameof(StructListClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestSimpleObjectInitialPath() { var nodeContainer = new NodeContainer(); var instance = new SimpleClass { Member1 = 3, Member2 = new SimpleClass() }; var rootNode = nodeContainer.GetOrCreateNode(instance); var container = new SimpleClass { Member2 = instance }; var containerNode = nodeContainer.GetOrCreateNode(container); var initialPath = new GraphNodePath(containerNode).PushMember(nameof(SimpleClass.Member2)).PushTarget(); var visitor = new TestVisitor(); visitor.Visit(rootNode, initialPath); var expectedNodes = new[] { rootNode, rootNode.TryGetChild(nameof(SimpleClass.Member1)), rootNode.TryGetChild(nameof(SimpleClass.Member2)), rootNode.TryGetChild(nameof(SimpleClass.Member2)).Target, rootNode.TryGetChild(nameof(SimpleClass.Member2)).Target.TryGetChild(nameof(SimpleClass.Member1)), rootNode.TryGetChild(nameof(SimpleClass.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)), }; var expectedPaths = new[] { new GraphNodePath(containerNode).PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(containerNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(containerNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(containerNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(containerNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(containerNode).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestMultipleReferences() { var nodeContainer = new NodeContainer(); var commonObj = new SimpleClass(); var instance = new SimpleClass2 { Member1 = 3, Member2 = new SimpleClass { Member1 = 4, Member2 = commonObj }, Member3 = new SimpleClass { Member1 = 5, Member2 = commonObj } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new IGraphNode[] { rootNode, rootNode[nameof(SimpleClass2.Member1)], rootNode[nameof(SimpleClass2.Member2)], rootNode[nameof(SimpleClass2.Member2)].Target, rootNode[nameof(SimpleClass2.Member2)].Target[nameof(SimpleClass.Member1)], rootNode[nameof(SimpleClass2.Member2)].Target[nameof(SimpleClass.Member2)], rootNode[nameof(SimpleClass2.Member2)].Target[nameof(SimpleClass.Member2)].Target, rootNode[nameof(SimpleClass2.Member2)].Target[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member1)], rootNode[nameof(SimpleClass2.Member2)].Target[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member2)], rootNode[nameof(SimpleClass2.Member3)], rootNode[nameof(SimpleClass2.Member3)].Target, rootNode[nameof(SimpleClass2.Member3)].Target[nameof(SimpleClass.Member1)], rootNode[nameof(SimpleClass2.Member3)].Target[nameof(SimpleClass.Member2)], rootNode[nameof(SimpleClass2.Member3)].Target[nameof(SimpleClass.Member2)].Target, rootNode[nameof(SimpleClass2.Member3)].Target[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member1)], rootNode[nameof(SimpleClass2.Member3)].Target[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member2)], }; var expectedPaths = new GraphNodePath[16]; expectedPaths[0] = new GraphNodePath(rootNode); expectedPaths[1] = expectedPaths[0].Clone(); expectedPaths[1].PushMember(nameof(SimpleClass2.Member1)); expectedPaths[2] = expectedPaths[0].Clone(); expectedPaths[2].PushMember(nameof(SimpleClass2.Member2)); expectedPaths[3] = expectedPaths[2].Clone(); expectedPaths[3].PushTarget(); expectedPaths[4] = expectedPaths[3].Clone(); expectedPaths[4].PushMember(nameof(SimpleClass.Member1)); expectedPaths[5] = expectedPaths[3].Clone(); expectedPaths[5].PushMember(nameof(SimpleClass.Member2)); expectedPaths[6] = expectedPaths[5].Clone(); expectedPaths[6].PushTarget(); expectedPaths[7] = expectedPaths[6].Clone(); expectedPaths[7].PushMember(nameof(SimpleClass.Member1)); expectedPaths[8] = expectedPaths[6].Clone(); expectedPaths[8].PushMember(nameof(SimpleClass.Member2)); expectedPaths[9] = expectedPaths[0].Clone(); expectedPaths[9].PushMember(nameof(SimpleClass2.Member3)); expectedPaths[10] = expectedPaths[9].Clone(); expectedPaths[10].PushTarget(); expectedPaths[11] = expectedPaths[10].Clone(); expectedPaths[11].PushMember(nameof(SimpleClass.Member1)); expectedPaths[12] = expectedPaths[10].Clone(); expectedPaths[12].PushMember(nameof(SimpleClass.Member2)); expectedPaths[13] = expectedPaths[12].Clone(); expectedPaths[13].PushTarget(); expectedPaths[14] = expectedPaths[13].Clone(); expectedPaths[14].PushMember(nameof(SimpleClass.Member1)); expectedPaths[15] = expectedPaths[13].Clone(); expectedPaths[15].PushMember(nameof(SimpleClass.Member2)); VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void SnQuery_Visitor_VisitNull() { var visitor = new TestVisitor(); Assert.IsNull(visitor.Visit(null)); }
public void SnQuery_Visitor_VisitUnknown() { var visitor = new TestVisitor(); visitor.Visit(new UnknownPredicate()); }
public void ExpectedVirtualsInvolved() { OpenApiVisitorBase visitor = null; visitor = new TestVisitor(); visitor.Enter(default(string)); visitor.Visit(default(OpenApiDocument)); visitor.Visit(default(OpenApiInfo)); visitor.Visit(default(OpenApiContact)); visitor.Visit(default(OpenApiLicense)); visitor.Visit(default(IList <OpenApiServer>)); visitor.Visit(default(OpenApiServer)); visitor.Visit(default(OpenApiPaths)); visitor.Visit(default(OpenApiPathItem)); visitor.Visit(default(OpenApiServerVariable)); visitor.Visit(default(IDictionary <OperationType, OpenApiOperation>)); visitor.Visit(default(OpenApiOperation)); visitor.Visit(default(IList <OpenApiParameter>)); visitor.Visit(default(OpenApiParameter)); visitor.Visit(default(OpenApiRequestBody)); visitor.Visit(default(IDictionary <string, OpenApiHeader>)); visitor.Visit(default(IDictionary <string, OpenApiCallback>)); visitor.Visit(default(OpenApiResponse)); visitor.Visit(default(OpenApiResponses)); visitor.Visit(default(IDictionary <string, OpenApiMediaType>)); visitor.Visit(default(OpenApiMediaType)); visitor.Visit(default(OpenApiEncoding)); visitor.Visit(default(IDictionary <string, OpenApiExample>)); visitor.Visit(default(OpenApiComponents)); visitor.Visit(default(OpenApiExternalDocs)); visitor.Visit(default(OpenApiSchema)); visitor.Visit(default(IDictionary <string, OpenApiLink>)); visitor.Visit(default(OpenApiLink)); visitor.Visit(default(OpenApiCallback)); visitor.Visit(default(OpenApiTag)); visitor.Visit(default(OpenApiHeader)); visitor.Visit(default(OpenApiOAuthFlow)); visitor.Visit(default(OpenApiSecurityRequirement)); visitor.Visit(default(OpenApiSecurityScheme)); visitor.Visit(default(OpenApiExample)); visitor.Visit(default(IList <OpenApiTag>)); visitor.Visit(default(IList <OpenApiSecurityRequirement>)); visitor.Visit(default(IOpenApiExtensible)); visitor.Visit(default(IOpenApiExtension)); visitor.Visit(default(IList <OpenApiExample>)); visitor.Visit(default(IDictionary <string, OpenApiServerVariable>)); visitor.Visit(default(IDictionary <string, OpenApiEncoding>)); visitor.Visit(default(IOpenApiReferenceable)); visitor.Exit(); Assert.True(42 < ((TestVisitor)visitor).CallStack.Count()); }
public void TestCircularReference() { var nodeContainer = new NodeContainer(); var obj1 = new SimpleClass { Member1 = 3 }; var obj2 = new SimpleClass { Member1 = 3 }; obj1.Member2 = obj2; obj2.Member2 = obj1; var rootNode1 = nodeContainer.GetOrCreateNode(obj1); var rootNode2 = nodeContainer.GetOrCreateNode(obj2); var visitor = new TestVisitor(); visitor.Visit(rootNode1); var expectedNodes = new[] { rootNode1, rootNode1.TryGetChild(nameof(SimpleClass.Member1)), rootNode1.TryGetChild(nameof(SimpleClass.Member2)), rootNode2, rootNode2.TryGetChild(nameof(SimpleClass.Member1)), rootNode2.TryGetChild(nameof(SimpleClass.Member2)), }; var expectedPaths = new[] { new GraphNodePath(rootNode1), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode1).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); visitor.Visit(rootNode2); expectedNodes = new[] { rootNode2, rootNode2.TryGetChild(nameof(SimpleClass.Member1)), rootNode2.TryGetChild(nameof(SimpleClass.Member2)), rootNode1, rootNode1.TryGetChild(nameof(SimpleClass.Member1)), rootNode1.TryGetChild(nameof(SimpleClass.Member2)), }; expectedPaths = new[] { new GraphNodePath(rootNode2), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member2)), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member2)).PushTarget(), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member1)), new GraphNodePath(rootNode2).PushMember(nameof(SimpleClass.Member2)).PushTarget().PushMember(nameof(SimpleClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestObjectWithStructList() { var nodeContainer = new NodeContainer(); // We also test a null item in the list var instance = new StructListClass { Member1 = 3, Member2 = new List<Struct> { new Struct(), new Struct() } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); Index index = new Index(0); IGraphNode tempQualifier = rootNode.TryGetChild(nameof(StructListClass.Member2)); Index index1 = new Index(0); IGraphNode tempQualifier1 = rootNode.TryGetChild(nameof(StructListClass.Member2)); Index index2 = new Index(0); IGraphNode tempQualifier2 = rootNode.TryGetChild(nameof(StructListClass.Member2)); Index index3 = new Index(1); IGraphNode tempQualifier3 = rootNode.TryGetChild(nameof(StructListClass.Member2)); Index index4 = new Index(1); IGraphNode tempQualifier4 = rootNode.TryGetChild(nameof(StructListClass.Member2)); Index index5 = new Index(1); IGraphNode tempQualifier5 = rootNode.TryGetChild(nameof(StructListClass.Member2)); var expectedNodes = new[] { rootNode, rootNode.TryGetChild(nameof(StructListClass.Member1)), rootNode.TryGetChild(nameof(StructListClass.Member2)), tempQualifier.IndexedTarget(index), tempQualifier1.IndexedTarget(index1).TryGetChild(nameof(StructListClass.Member1)), tempQualifier2.IndexedTarget(index2).TryGetChild(nameof(StructListClass.Member2)), tempQualifier3.IndexedTarget(index3), tempQualifier4.IndexedTarget(index4).TryGetChild(nameof(StructListClass.Member1)), tempQualifier5.IndexedTarget(index5).TryGetChild(nameof(StructListClass.Member2)), }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(0)).PushMember(nameof(StructListClass.Member2)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)).PushMember(nameof(StructListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(StructListClass.Member2)).PushIndex(new Index(1)).PushMember(nameof(StructListClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }
public void TestObjectWithPrimitiveList() { var nodeContainer = new NodeContainer(); var instance = new PrimitiveListClass { Member1 = 3, Member2 = new List<string> { "aaa", "bbb", "ccc" } }; var rootNode = nodeContainer.GetOrCreateNode(instance); var visitor = new TestVisitor(); visitor.Visit(rootNode); var expectedNodes = new[] { rootNode, rootNode.TryGetChild(nameof(PrimitiveListClass.Member1)), rootNode.TryGetChild(nameof(PrimitiveListClass.Member2)), }; var expectedPaths = new[] { new GraphNodePath(rootNode), new GraphNodePath(rootNode).PushMember(nameof(PrimitiveListClass.Member1)), new GraphNodePath(rootNode).PushMember(nameof(PrimitiveListClass.Member2)), }; VerifyNodesAndPath(expectedNodes, expectedPaths, visitor); }