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); }
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); }
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); }
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); }
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); }
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); }
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); }