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