public void Clone_WithArray_WithCircularReference_ShouldWork() { var original = new TestObject_WithCircularReference[] { new TestObject_WithCircularReference { Id = 1, Name = "Test1" }, new TestObject_WithCircularReference { Id = 2, Name = "Test2" } }; original[0].Child = original[1]; original[1].Child = original[0]; var clone = Cloner.Clone(original, CloneMethod.Deep); for (var i = 0; i < original.Length; i++) { Assert.AreEqual(original[i].Name, clone[i].Name); Assert.AreEqual(original[i].Child.Name, clone[i].Child.Name); Assert.AreEqual(original[i].Child.Child.Name, clone[i].Child.Child.Name); } Assert.IsTrue(ReferenceEquals(clone[0], clone[1].Child), "When cloning circular references, referential integrity should be preserved"); Assert.IsTrue(ReferenceEquals(clone[1], clone[0].Child), "When cloning circular references, referential integrity should be preserved"); }
public void Clone_WithCircularReference_ShouldWork() { var original = new TestObject_WithCircularReference { Id = 1, Name = "Test" }; original.Child = original; var clone = Cloner.Clone(original, CloneMethod.Deep); Assert.AreEqual(original.Name, clone.Name); Assert.AreEqual(original.Child.Name, clone.Child.Name); Assert.AreEqual(original.Child.Child.Name, clone.Child.Child.Name); Assert.IsTrue(ReferenceEquals(clone, clone.Child), "When cloning circular references, referential integrity should be preserved"); }