Exemple #1
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #10
0
        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());
        }
Exemple #11
0
        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);
            }
Exemple #14
0
        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);
        }
Exemple #16
0
        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);
        }
Exemple #18
0
        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);
        }
Exemple #19
0
    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
        }
Exemple #21
0
        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);
        }
Exemple #23
0
        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);
        }
Exemple #24
0
        public void SnQuery_Visitor_VisitNull()
        {
            var visitor = new TestVisitor();

            Assert.IsNull(visitor.Visit(null));
        }
Exemple #25
0
        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);
 }