Exemplo n.º 1
0
        public void TestObjectWithStruct()
        {
            var nodeContainer = new NodeContainer();
            var instance1     = new StructClass {
                Member1 = 3, Member2 = new Struct {
                    Member2 = new SimpleClass()
                }
            };
            var instance2 = new StructClass {
                Member1 = 3, Member2 = new Struct {
                    Member2 = new SimpleClass()
                }
            };
            var source = nodeContainer.GetOrCreateNode(instance1);
            var target = nodeContainer.GetOrCreateNode(instance2);
            var linker = new TestLinker();

            linker.LinkGraph(source, target);
            var expectedLinks = new Dictionary <IGraphNode, IGraphNode>
            {
                { source, target },
                { source.GetChild(nameof(StructClass.Member1)), target.GetChild(nameof(StructClass.Member1)) },
                { source.GetChild(nameof(StructClass.Member2)), target.GetChild(nameof(StructClass.Member2)) },
                { source.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member1)), target.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member1)) },
                { source.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member2)), target.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member2)) },
                { source.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member2)).GetTarget(), target.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member2)).GetTarget() },
                { source.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member2)).GetTarget().GetChild(nameof(SimpleClass.Member1)), target.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member2)).GetTarget().GetChild(nameof(SimpleClass.Member1)) },
                { source.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member2)).GetTarget().GetChild(nameof(SimpleClass.Member2)), target.GetChild(nameof(StructClass.Member2)).GetChild(nameof(Struct.Member2)).GetTarget().GetChild(nameof(SimpleClass.Member2)) },
            };

            VerifyLinks(expectedLinks, linker);
        }
Exemplo n.º 2
0
        public void TestInterfaceMemberDifferentImplementations()
        {
            var nodeContainer = new NodeContainer();
            var instance1     = new InterfaceMember {
                Member1 = 3, Member2 = new Implem1 {
                    Member2Implem1 = new SimpleClass()
                }
            };
            var instance2 = new InterfaceMember {
                Member1 = 3, Member2 = new Implem2 {
                    Member2Implem2 = new SimpleClass()
                }
            };
            var source = nodeContainer.GetOrCreateNode(instance1);
            var target = nodeContainer.GetOrCreateNode(instance2);
            var linker = new TestLinker();

            linker.LinkGraph(source, target);
            var expectedLinks = new Dictionary <IGraphNode, IGraphNode>
            {
                { source, target },
                { source.GetChild(nameof(InterfaceMember.Member1)), target.GetChild(nameof(InterfaceMember.Member1)) },
                { source.GetChild(nameof(InterfaceMember.Member2)), target.GetChild(nameof(InterfaceMember.Member2)) },
                { source.GetChild(nameof(InterfaceMember.Member2)).GetTarget(), target.GetChild(nameof(InterfaceMember.Member2)).GetTarget() },
                { source.GetChild(nameof(InterfaceMember.Member2)).GetTarget().GetChild(nameof(Implem1.Member1Common)), target.GetChild(nameof(InterfaceMember.Member2)).GetTarget().GetChild(nameof(Implem1.Member1Common)) },
                { source.GetChild(nameof(InterfaceMember.Member2)).GetTarget().GetChild(nameof(Implem1.Member2Implem1)), null },
                { source.GetChild(nameof(InterfaceMember.Member2)).GetTarget().GetChild(nameof(Implem1.Member2Implem1)).GetTarget(), null },
                { source.GetChild(nameof(InterfaceMember.Member2)).GetTarget().GetChild(nameof(Implem1.Member2Implem1)).GetTarget().GetChild(nameof(SimpleClass.Member1)), null },
                { source.GetChild(nameof(InterfaceMember.Member2)).GetTarget().GetChild(nameof(Implem1.Member2Implem1)).GetTarget().GetChild(nameof(SimpleClass.Member2)), null },
            };

            VerifyLinks(expectedLinks, linker);
        }
Exemplo n.º 3
0
        public void TestReentrancy()
        {
            var nodeContainer = new NodeContainer();
            var instance1     = new SimpleClass {
                Member1 = 3
            };
            var instance2 = new SimpleClass {
                Member1 = 4
            };

            instance1.Member2 = instance1;
            instance2.Member2 = instance2;
            var source = nodeContainer.GetOrCreateNode(instance1);
            var target = nodeContainer.GetOrCreateNode(instance2);
            var linker = new TestLinker();

            linker.LinkGraph(source, target);
            var expectedLinks = new Dictionary <IGraphNode, IGraphNode>
            {
                { source, target },
                { source.GetChild(nameof(SimpleClass.Member1)), target.GetChild(nameof(SimpleClass.Member1)) },
                { source.GetChild(nameof(SimpleClass.Member2)), target.GetChild(nameof(SimpleClass.Member2)) },
            };

            VerifyLinks(expectedLinks, linker);
        }
Exemplo n.º 4
0
        public void TestSimpleObjectWithNullInTarget()
        {
            var nodeContainer = new NodeContainer();
            var instance1     = new SimpleClass {
                Member1 = 3, Member2 = new SimpleClass()
            };
            var instance2 = new SimpleClass {
                Member1 = 4, Member2 = null
            };
            var source = nodeContainer.GetOrCreateNode(instance1);
            var target = nodeContainer.GetOrCreateNode(instance2);
            var linker = new TestLinker();

            linker.LinkGraph(source, target);
            var expectedLinks = new Dictionary <IContentNode, IContentNode>
            {
                { source, target },
                { source[nameof(SimpleClass.Member1)], target[nameof(SimpleClass.Member1)] },
                { source[nameof(SimpleClass.Member2)], target[nameof(SimpleClass.Member2)] },
                { source[nameof(SimpleClass.Member2)].Target, null },
                { source[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member1)], null },
                { source[nameof(SimpleClass.Member2)].Target[nameof(SimpleClass.Member2)], null },
            };

            VerifyLinks(expectedLinks, linker);
        }
Exemplo n.º 5
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);
            var expectedLinks = new Dictionary <IGraphNode, IGraphNode>
            {
                { source, target },
                { source[nameof(SimpleClass.Member1)], target[nameof(SimpleClass.Member1)] },
                { source[nameof(SimpleClass.Member2)], target[nameof(SimpleClass.Member2)] },
                { source[nameof(SimpleClass.Member2)].Target, target[nameof(SimpleClass.Member2)].Target },
                { source[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(0)), target[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(0)) },
                { source[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(0))[nameof(SimpleClass.Member1)], target[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(0))[nameof(SimpleClass.Member1)] },
                { source[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(0))[nameof(SimpleClass.Member2)], target[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(0))[nameof(SimpleClass.Member2)] },
                { source[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(1)), target[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(1)) },
                { source[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(1))[nameof(SimpleClass.Member1)], target[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(1))[nameof(SimpleClass.Member1)] },
                { source[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(1))[nameof(SimpleClass.Member2)], target[nameof(SimpleClass.Member2)].Target.IndexedTarget(new NodeIndex(1))[nameof(SimpleClass.Member2)] },
            };

            VerifyLinks(expectedLinks, linker);
        }
Exemplo n.º 6
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);
            IContentNode tempQualifier   = source[nameof(SimpleClass.Member2)];
            Index        index1          = new Index(0);
            IContentNode tempQualifier1  = target[nameof(SimpleClass.Member2)];
            Index        index2          = new Index(0);
            IContentNode tempQualifier2  = source[nameof(SimpleClass.Member2)];
            Index        index3          = new Index(0);
            IContentNode tempQualifier3  = target[nameof(SimpleClass.Member2)];
            Index        index4          = new Index(0);
            IContentNode tempQualifier4  = source[nameof(SimpleClass.Member2)];
            Index        index5          = new Index(0);
            IContentNode tempQualifier5  = target[nameof(SimpleClass.Member2)];
            Index        index6          = new Index(1);
            IContentNode tempQualifier6  = source[nameof(SimpleClass.Member2)];
            Index        index7          = new Index(1);
            IContentNode tempQualifier7  = target[nameof(SimpleClass.Member2)];
            Index        index8          = new Index(1);
            IContentNode tempQualifier8  = source[nameof(SimpleClass.Member2)];
            Index        index9          = new Index(1);
            IContentNode tempQualifier9  = target[nameof(SimpleClass.Member2)];
            Index        index10         = new Index(1);
            IContentNode tempQualifier10 = source[nameof(SimpleClass.Member2)];
            Index        index11         = new Index(1);
            IContentNode tempQualifier11 = target[nameof(SimpleClass.Member2)];
            var          expectedLinks   = new Dictionary <IContentNode, IContentNode>
            {
                { source, target },
                { source[nameof(SimpleClass.Member1)], target[nameof(SimpleClass.Member1)] },
                { source[nameof(SimpleClass.Member2)], target[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)] },
            };

            VerifyLinks(expectedLinks, linker);
        }
Exemplo n.º 7
0
 private static void VerifyLinks(Dictionary <IGraphNode, IGraphNode> expectedLinks, TestLinker linker)
 {
     Assert.AreEqual(expectedLinks.Count, linker.LinkedNodes.Count);
     foreach (var link in expectedLinks)
     {
         IGraphNode actualTarget;
         Assert.True(linker.LinkedNodes.TryGetValue(link.Key, out actualTarget));
         Assert.AreEqual(link.Value, actualTarget);
     }
 }
 private static void VerifyLinks(Dictionary<IGraphNode, IGraphNode> expectedLinks, TestLinker linker)
 {
     Assert.AreEqual(expectedLinks.Count, linker.LinkedNodes.Count);
     foreach (var link in expectedLinks)
     {
         IGraphNode actualTarget;
         Assert.True(linker.LinkedNodes.TryGetValue(link.Key, out actualTarget));
         Assert.AreEqual(link.Value, actualTarget);
     }
 }
 public void TestReentrancy()
 {
     var nodeContainer = new NodeContainer();
     var instance1 = new SimpleClass { Member1 = 3 };
     var instance2 = new SimpleClass { Member1 = 4 };
     instance1.Member2 = instance1;
     instance2.Member2 = instance2;
     var source = nodeContainer.GetOrCreateNode(instance1);
     var target = nodeContainer.GetOrCreateNode(instance2);
     var linker = new TestLinker();
     linker.LinkGraph(source, target);
     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)) },
     };
     VerifyLinks(expectedLinks, linker);
 }
 public void TestInterfaceMemberDifferentImplementations()
 {
     var nodeContainer = new NodeContainer();
     var instance1 = new InterfaceMember { Member1 = 3, Member2 = new Implem1 { Member2Implem1 = new SimpleClass() } };
     var instance2 = new InterfaceMember { Member1 = 3, Member2 = new Implem2 { Member2Implem2 = new SimpleClass() } };
     var source = nodeContainer.GetOrCreateNode(instance1);
     var target = nodeContainer.GetOrCreateNode(instance2);
     var linker = new TestLinker();
     linker.LinkGraph(source, target);
     var expectedLinks = new Dictionary<IGraphNode, IGraphNode>
     {
         { source, target },
         { source.TryGetChild(nameof(InterfaceMember.Member1)), target.TryGetChild(nameof(InterfaceMember.Member1)) },
         { source.TryGetChild(nameof(InterfaceMember.Member2)), target.TryGetChild(nameof(InterfaceMember.Member2)) },
         { source.TryGetChild(nameof(InterfaceMember.Member2)).Target, target.TryGetChild(nameof(InterfaceMember.Member2)).Target },
         { source.TryGetChild(nameof(InterfaceMember.Member2)).Target.TryGetChild(nameof(Implem1.Member1Common)), target.TryGetChild(nameof(InterfaceMember.Member2)).Target.TryGetChild(nameof(Implem1.Member1Common)) },
         { source.TryGetChild(nameof(InterfaceMember.Member2)).Target.TryGetChild(nameof(Implem1.Member2Implem1)), null },
         { source.TryGetChild(nameof(InterfaceMember.Member2)).Target.TryGetChild(nameof(Implem1.Member2Implem1)).Target, null },
         { source.TryGetChild(nameof(InterfaceMember.Member2)).Target.TryGetChild(nameof(Implem1.Member2Implem1)).Target.TryGetChild(nameof(SimpleClass.Member1)), null },
         { source.TryGetChild(nameof(InterfaceMember.Member2)).Target.TryGetChild(nameof(Implem1.Member2Implem1)).Target.TryGetChild(nameof(SimpleClass.Member2)), null },
     };
     VerifyLinks(expectedLinks, linker);
 }
 public void TestObjectWithStruct()
 {
     var nodeContainer = new NodeContainer();
     var instance1 = new StructClass { Member1 = 3, Member2 = new Struct { Member2 = new SimpleClass() } };
     var instance2 = new StructClass { Member1 = 3, Member2 = new Struct { Member2 = new SimpleClass() } };
     var source = nodeContainer.GetOrCreateNode(instance1);
     var target = nodeContainer.GetOrCreateNode(instance2);
     var linker = new TestLinker();
     linker.LinkGraph(source, target);
     var expectedLinks = new Dictionary<IGraphNode, IGraphNode>
     {
         { source, target },
         { source.TryGetChild(nameof(StructClass.Member1)), target.TryGetChild(nameof(StructClass.Member1)) },
         { source.TryGetChild(nameof(StructClass.Member2)), target.TryGetChild(nameof(StructClass.Member2)) },
         { source.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member1)), target.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member1)) },
         { source.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)), target.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)) },
         { source.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)).Target, target.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)).Target },
         { source.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)).Target.TryGetChild(nameof(SimpleClass.Member1)), target.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)).Target.TryGetChild(nameof(SimpleClass.Member1)) },
         { source.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)), target.TryGetChild(nameof(StructClass.Member2)).TryGetChild(nameof(Struct.Member2)).Target.TryGetChild(nameof(SimpleClass.Member2)) },
     };
     VerifyLinks(expectedLinks, linker);
 }
 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);
 }