Example #1
0
        public void TestChangeStructListItemMember()
        {
            var nodeContainer = new NodeContainer();
            var obj           = new[] { "aa", "bb", "cc" };
            var instance      = new ComplexClass {
                Member7 = new List <Struct> {
                    new Struct(), new Struct {
                        Member1 = obj[0]
                    }
                }
            };
            var rootNode = nodeContainer.GetOrCreateNode(instance);
            var dynNode  = DynamicNode.FromNode(rootNode);

            Assert.AreEqual(instance.Member7[1].Member1, (string)dynNode.Member7[1].Member1);
            Assert.AreEqual(obj[0], (string)dynNode.Member7[1].Member1);
            dynNode.Member7[1].Member1 = obj[1];
            Assert.AreEqual(obj[1], (string)dynNode.Member7[1].Member1);
            Assert.AreEqual(instance.Member7[1].Member1, (string)dynNode.Member7[1].Member1);
            Index      index         = new Index(1);
            IGraphNode tempQualifier = rootNode.TryGetChild(nameof(ComplexClass.Member7));

            tempQualifier.IndexedTarget(index).TryGetChild(nameof(SimpleClass.Member1)).Content.Update(obj[2]);
            Assert.AreEqual(obj[2], (string)dynNode.Member7[1].Member1);
            Assert.AreEqual(instance.Member7[1].Member1, (string)dynNode.Member7[1].Member1);
        }
Example #2
0
        public void TestChangeReferenceListItemMember()
        {
            var nodeContainer = new NodeContainer();
            var obj           = new[] { 3, 4, 5 };
            var instance      = new ComplexClass {
                Member6 = new List <SimpleClass> {
                    new SimpleClass(), new SimpleClass {
                        Member1 = obj[0]
                    }
                }
            };
            var rootNode = nodeContainer.GetOrCreateNode(instance);
            var dynNode  = DynamicNode.FromNode(rootNode);

            Assert.AreEqual(instance.Member6[1].Member1, (int)dynNode.Member6[1].Member1);
            Assert.AreEqual(obj[0], (int)dynNode.Member6[1].Member1);
            dynNode.Member6[1].Member1 = obj[1];
            Assert.AreEqual(obj[1], (int)dynNode.Member6[1].Member1);
            Assert.AreEqual(instance.Member6[1].Member1, (int)dynNode.Member6[1].Member1);
            Index      index         = new Index(1);
            IGraphNode tempQualifier = rootNode.TryGetChild(nameof(ComplexClass.Member6));

            tempQualifier.IndexedTarget(index).TryGetChild(nameof(SimpleClass.Member1)).Content.Update(obj[2]);
            Assert.AreEqual(obj[2], (int)dynNode.Member6[1].Member1);
            Assert.AreEqual(instance.Member6[1].Member1, (int)dynNode.Member6[1].Member1);
        }
        public void TestChangeStructListItemMember()
        {
            var nodeContainer = new NodeContainer();
            var obj           = new[] { "aa", "bb", "cc" };
            var instance      = new ComplexClass {
                Member7 = new List <Struct> {
                    new Struct(), new Struct {
                        Member1 = obj[0]
                    }
                }
            };
            var        rootNode      = nodeContainer.GetOrCreateNode(instance);
            var        listener      = new GraphNodeChangeListener(rootNode);
            Index      index         = new Index(1);
            IGraphNode tempQualifier = rootNode.TryGetChild(nameof(ComplexClass.Member7));
            var        node          = tempQualifier.IndexedTarget(index).TryGetChild(nameof(SimpleClass.Member1));

            Assert.AreEqual(obj[0], node.Content.Retrieve());
            TestContentChange(listener, node, ContentChangeType.ValueChange, Index.Empty, obj[0], obj[1], () => node.Content.Update(obj[1], Index.Empty));
            Assert.AreEqual(obj[1], node.Content.Retrieve());
            // TODO: would be nice to be able to keep the same boxed node!
            //Assert.AreEqual(node, rootNode.GetChild(nameof(ComplexClass.Member7)).GetTarget(new Index(1)).GetChild(nameof(SimpleClass.Member1)));
            TestContentChange(listener, node, ContentChangeType.ValueChange, Index.Empty, obj[1], obj[2], () => node.Content.Update(obj[2], Index.Empty));
            Assert.AreEqual(obj[2], node.Content.Retrieve());
            //Assert.AreEqual(node, rootNode.GetChild(nameof(ComplexClass.Member7)).GetTarget(new Index(1)).GetChild(nameof(SimpleClass.Member1)));
        }
Example #4
0
        public void TestObjectWithListOfReferences()
        {
            var nodeContainer = new NodeContainer();
            var instance1     = new ObjectListClass {
                Member1 = 3, Member2 = new List <SimpleClass> {
                    new SimpleClass(), new SimpleClass()
                }
            };
            var instance2 = new ObjectListClass {
                Member1 = 3, Member2 = new List <SimpleClass> {
                    new SimpleClass(), new SimpleClass()
                }
            };
            var source = nodeContainer.GetOrCreateNode(instance1);
            var target = nodeContainer.GetOrCreateNode(instance2);
            var linker = new TestLinker();

            linker.LinkGraph(source, target);
            Index      index           = new Index(0);
            IGraphNode tempQualifier   = source.TryGetChild(nameof(SimpleClass.Member2));
            Index      index1          = new Index(0);
            IGraphNode tempQualifier1  = target.TryGetChild(nameof(SimpleClass.Member2));
            Index      index2          = new Index(0);
            IGraphNode tempQualifier2  = source.TryGetChild(nameof(SimpleClass.Member2));
            Index      index3          = new Index(0);
            IGraphNode tempQualifier3  = target.TryGetChild(nameof(SimpleClass.Member2));
            Index      index4          = new Index(0);
            IGraphNode tempQualifier4  = source.TryGetChild(nameof(SimpleClass.Member2));
            Index      index5          = new Index(0);
            IGraphNode tempQualifier5  = target.TryGetChild(nameof(SimpleClass.Member2));
            Index      index6          = new Index(1);
            IGraphNode tempQualifier6  = source.TryGetChild(nameof(SimpleClass.Member2));
            Index      index7          = new Index(1);
            IGraphNode tempQualifier7  = target.TryGetChild(nameof(SimpleClass.Member2));
            Index      index8          = new Index(1);
            IGraphNode tempQualifier8  = source.TryGetChild(nameof(SimpleClass.Member2));
            Index      index9          = new Index(1);
            IGraphNode tempQualifier9  = target.TryGetChild(nameof(SimpleClass.Member2));
            Index      index10         = new Index(1);
            IGraphNode tempQualifier10 = source.TryGetChild(nameof(SimpleClass.Member2));
            Index      index11         = new Index(1);
            IGraphNode tempQualifier11 = target.TryGetChild(nameof(SimpleClass.Member2));
            var        expectedLinks   = new Dictionary <IGraphNode, IGraphNode>
            {
                { source, target },
                { source.TryGetChild(nameof(SimpleClass.Member1)), target.TryGetChild(nameof(SimpleClass.Member1)) },
                { source.TryGetChild(nameof(SimpleClass.Member2)), target.TryGetChild(nameof(SimpleClass.Member2)) },
                { tempQualifier.IndexedTarget(index), tempQualifier1.IndexedTarget(index1) },
                { tempQualifier2.IndexedTarget(index2).TryGetChild(nameof(SimpleClass.Member1)), tempQualifier3.IndexedTarget(index3).TryGetChild(nameof(SimpleClass.Member1)) },
                { tempQualifier4.IndexedTarget(index4).TryGetChild(nameof(SimpleClass.Member2)), tempQualifier5.IndexedTarget(index5).TryGetChild(nameof(SimpleClass.Member2)) },
                { tempQualifier6.IndexedTarget(index6), tempQualifier7.IndexedTarget(index7) },
                { tempQualifier8.IndexedTarget(index8).TryGetChild(nameof(SimpleClass.Member1)), tempQualifier9.IndexedTarget(index9).TryGetChild(nameof(SimpleClass.Member1)) },
                { tempQualifier10.IndexedTarget(index10).TryGetChild(nameof(SimpleClass.Member2)), tempQualifier11.IndexedTarget(index11).TryGetChild(nameof(SimpleClass.Member2)) },
            };

            VerifyLinks(expectedLinks, linker);
        }
Example #5
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);
            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 TestChangeReferenceListItemMember()
        {
            var nodeContainer = new NodeContainer();
            var obj           = new[] { 3, 4, 5 };
            var instance      = new ComplexClass {
                Member6 = new List <SimpleClass> {
                    new SimpleClass(), new SimpleClass {
                        Member1 = obj[0]
                    }
                }
            };
            var        rootNode      = nodeContainer.GetOrCreateNode(instance);
            var        listener      = new GraphNodeChangeListener(rootNode);
            Index      index         = new Index(1);
            IGraphNode tempQualifier = rootNode.TryGetChild(nameof(ComplexClass.Member6));
            var        node          = tempQualifier.IndexedTarget(index).TryGetChild(nameof(SimpleClass.Member1));

            Assert.AreEqual(obj[0], node.Content.Retrieve());
            TestContentChange(listener, node, ContentChangeType.ValueChange, Index.Empty, obj[0], obj[1], () => node.Content.Update(obj[1], Index.Empty));
            Assert.AreEqual(obj[1], node.Content.Retrieve());
            TestContentChange(listener, node, ContentChangeType.ValueChange, Index.Empty, obj[1], obj[2], () => node.Content.Update(obj[2], Index.Empty));
            Assert.AreEqual(obj[2], node.Content.Retrieve());
        }
Example #7
0
        public void TestCustomFindTargetReference()
        {
            var nodeContainer = new NodeContainer();
            var instance1     = new ObjectListClass {
                Member1 = 3, Member2 = new List <SimpleClass> {
                    new SimpleClass {
                        Member1 = 1
                    }, new SimpleClass {
                        Member1 = 2
                    }, new SimpleClass {
                        Member1 = 3
                    }
                }
            };
            var instance2 = new ObjectListClass {
                Member1 = 3, Member2 = new List <SimpleClass> {
                    new SimpleClass {
                        Member1 = 2
                    }, new SimpleClass {
                        Member1 = 4
                    }, new SimpleClass {
                        Member1 = 1
                    }
                }
            };
            var source = nodeContainer.GetOrCreateNode(instance1);
            var target = nodeContainer.GetOrCreateNode(instance2);
            var linker = new CustomFindTargetReferenceLinker();

            linker.LinkGraph(source, target);
            // Expected links by index: 0 -> 2, 1 -> 0, 2 -> null
            Index      index           = new Index(0);
            IGraphNode tempQualifier   = source[nameof(SimpleClass.Member2)];
            Index      index1          = new Index(2);
            IGraphNode tempQualifier1  = target[nameof(SimpleClass.Member2)];
            Index      index2          = new Index(0);
            IGraphNode tempQualifier2  = source[nameof(SimpleClass.Member2)];
            Index      index3          = new Index(2);
            IGraphNode tempQualifier3  = target[nameof(SimpleClass.Member2)];
            Index      index4          = new Index(0);
            IGraphNode tempQualifier4  = source[nameof(SimpleClass.Member2)];
            Index      index5          = new Index(2);
            IGraphNode tempQualifier5  = target[nameof(SimpleClass.Member2)];
            Index      index6          = new Index(1);
            IGraphNode tempQualifier6  = source[nameof(SimpleClass.Member2)];
            Index      index7          = new Index(0);
            IGraphNode tempQualifier7  = target.TryGetChild(nameof(SimpleClass.Member2));
            Index      index8          = new Index(1);
            IGraphNode tempQualifier8  = source[nameof(SimpleClass.Member2)];
            Index      index9          = new Index(0);
            IGraphNode tempQualifier9  = target[nameof(SimpleClass.Member2)];
            Index      index10         = new Index(1);
            IGraphNode tempQualifier10 = source[nameof(SimpleClass.Member2)];
            Index      index11         = new Index(0);
            IGraphNode tempQualifier11 = target[nameof(SimpleClass.Member2)];
            Index      index12         = new Index(2);
            IGraphNode tempQualifier12 = source[nameof(SimpleClass.Member2)];
            Index      index13         = new Index(2);
            IGraphNode tempQualifier13 = source[nameof(SimpleClass.Member2)];
            Index      index14         = new Index(2);
            IGraphNode tempQualifier14 = source[nameof(SimpleClass.Member2)];
            var        expectedLinks   = new Dictionary <IGraphNode, IGraphNode>
            {
                { source, target },
                { source[nameof(SimpleClass.Member1)], target.TryGetChild(nameof(SimpleClass.Member1)) },
                { source[nameof(SimpleClass.Member2)], target.TryGetChild(nameof(SimpleClass.Member2)) },
                { tempQualifier.IndexedTarget(index), tempQualifier1.IndexedTarget(index1) },
                { tempQualifier2.IndexedTarget(index2)[nameof(SimpleClass.Member1)], tempQualifier3.IndexedTarget(index3)[nameof(SimpleClass.Member1)] },
                { tempQualifier4.IndexedTarget(index4)[nameof(SimpleClass.Member2)], tempQualifier5.IndexedTarget(index5)[nameof(SimpleClass.Member2)] },
                { tempQualifier6.IndexedTarget(index6), tempQualifier7.IndexedTarget(index7) },
                { tempQualifier8.IndexedTarget(index8)[nameof(SimpleClass.Member1)], tempQualifier9.IndexedTarget(index9)[nameof(SimpleClass.Member1)] },
                { tempQualifier10.IndexedTarget(index10)[nameof(SimpleClass.Member2)], tempQualifier11.IndexedTarget(index11)[nameof(SimpleClass.Member2)] },
                { tempQualifier12.IndexedTarget(index12), null },
                { tempQualifier13.IndexedTarget(index13)[nameof(SimpleClass.Member1)], null },
                { tempQualifier14.IndexedTarget(index14)[nameof(SimpleClass.Member2)], null },
            };

            VerifyLinks(expectedLinks, linker);
        }