Пример #1
0
        public void TestDeepCloningObjectWithCircularReferences()
        {
            TestClass parent = new TestClass
            {
                Name = "Parent"
            };

            parent.AddChild(new TestClass
            {
                Name = "Child #1"
            });
            parent.AddChild(new TestClass
            {
                Name = "Child #2"
            });

            TestClass clone = DeepCloner.DeepClone(parent);

            Assert.AreNotSame(parent, clone);
            Assert.AreEqual(parent.Name, clone.Name);
            Assert.IsNull(clone.Parent);
            Assert.AreNotSame(parent.Children, clone.Children);

            TestClass[] originalChildren = parent.Children.ToArray();
            TestClass[] cloneChildren    = clone.Children.ToArray();
            Assert.AreEqual(originalChildren.Length, cloneChildren.Length);

            for (int i = 0; i < originalChildren.Length; i++)
            {
                Assert.AreNotSame(originalChildren[i], cloneChildren[i]);
                Assert.AreEqual(originalChildren[i].Name, cloneChildren[i].Name);
                Assert.AreSame(clone, cloneChildren[i].Parent);
            }
        }