Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Data/MacroStabilityInwardsSlidingCurve.cs =================================================================== diff -u -r0f736d81afe800a482dff027fe93128a5e967114 -r2dad5be3afa753e3665b8bbf03c348e3946d251f --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Data/MacroStabilityInwardsSlidingCurve.cs (.../MacroStabilityInwardsSlidingCurve.cs) (revision 0f736d81afe800a482dff027fe93128a5e967114) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Data/MacroStabilityInwardsSlidingCurve.cs (.../MacroStabilityInwardsSlidingCurve.cs) (revision 2dad5be3afa753e3665b8bbf03c348e3946d251f) @@ -21,13 +21,14 @@ using System; using System.Collections.Generic; +using System.Linq; namespace Ringtoets.MacroStabilityInwards.Data { /// /// The macro stability inwards sliding curve. /// - public class MacroStabilityInwardsSlidingCurve + public class MacroStabilityInwardsSlidingCurve : ICloneable { /// /// Creates a new instance of . @@ -67,17 +68,17 @@ /// /// Gets the left circle. /// - public MacroStabilityInwardsSlidingCircle LeftCircle { get; } + public MacroStabilityInwardsSlidingCircle LeftCircle { get; private set; } /// /// Gets the right circle. /// - public MacroStabilityInwardsSlidingCircle RightCircle { get; } + public MacroStabilityInwardsSlidingCircle RightCircle { get; private set; } /// /// Gets the slices. /// - public IEnumerable Slices { get; } + public IEnumerable Slices { get; private set; } /// /// Gets the non iterated horizontal force. @@ -88,5 +89,15 @@ /// Gets the iterated horizontal force. /// public double IteratedHorizontalForce { get; } + + public object Clone() + { + var clone = (MacroStabilityInwardsSlidingCurve) MemberwiseClone(); + clone.LeftCircle = (MacroStabilityInwardsSlidingCircle) LeftCircle.Clone(); + clone.RightCircle = (MacroStabilityInwardsSlidingCircle) RightCircle.Clone(); + clone.Slices = Slices.Select(s => (MacroStabilityInwardsSlice) s.Clone()).ToArray(); + + return clone; + } } } \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.Test/MacroStabilityInwardsSlidingCurveTest.cs =================================================================== diff -u -r0f736d81afe800a482dff027fe93128a5e967114 -r2dad5be3afa753e3665b8bbf03c348e3946d251f --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.Test/MacroStabilityInwardsSlidingCurveTest.cs (.../MacroStabilityInwardsSlidingCurveTest.cs) (revision 0f736d81afe800a482dff027fe93128a5e967114) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.Test/MacroStabilityInwardsSlidingCurveTest.cs (.../MacroStabilityInwardsSlidingCurveTest.cs) (revision 2dad5be3afa753e3665b8bbf03c348e3946d251f) @@ -21,7 +21,7 @@ using System; using System.Linq; -using Core.Common.Base.Geometry; +using Core.Common.Data.TestUtil; using NUnit.Framework; using Ringtoets.MacroStabilityInwards.Data.TestUtil; @@ -81,8 +81,7 @@ MacroStabilityInwardsSlidingCircle leftCircle = MacroStabilityInwardsSlidingCircleTestFactory.Create(); var slices = new[] { - new MacroStabilityInwardsSlice(new Point2D(0, 0), new Point2D(0, 0), new Point2D(0, 0), new Point2D(0, 0), - new MacroStabilityInwardsSlice.ConstructionProperties()) + MacroStabilityInwardsSliceTestFactory.CreateSlice() }; double nonIteratedHorizontalForce = random.NextDouble(); @@ -92,11 +91,33 @@ var curve = new MacroStabilityInwardsSlidingCurve(leftCircle, rightCircle, slices, nonIteratedHorizontalForce, iteratedHorizontalForce); // Assert + Assert.IsInstanceOf(curve); + Assert.AreSame(leftCircle, curve.LeftCircle); Assert.AreSame(rightCircle, curve.RightCircle); Assert.AreEqual(nonIteratedHorizontalForce, curve.NonIteratedHorizontalForce); Assert.AreEqual(iteratedHorizontalForce, curve.IteratedHorizontalForce); Assert.AreSame(slices, curve.Slices); } + + [Test] + public void Clone_Always_ReturnNewInstanceWithCopiedValues() + { + // Setup + var random = new Random(21); + MacroStabilityInwardsSlidingCircle rightCircle = MacroStabilityInwardsSlidingCircleTestFactory.Create(); + MacroStabilityInwardsSlidingCircle leftCircle = MacroStabilityInwardsSlidingCircleTestFactory.Create(); + var slices = new[] + { + MacroStabilityInwardsSliceTestFactory.CreateSlice() + }; + var original = new MacroStabilityInwardsSlidingCurve(leftCircle, rightCircle, slices, random.NextDouble(), random.NextDouble()); + + // Call + object clone = original.Clone(); + + // Assert + CoreCloneAssert.AreObjectClones(original, clone, MacroStabilityInwardsCloneAssert.AreClones); + } } } \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil/MacroStabilityInwardsCloneAssert.cs =================================================================== diff -u -r68647f42dd790c7900bdbe376e97322435b4a957 -r2dad5be3afa753e3665b8bbf03c348e3946d251f --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil/MacroStabilityInwardsCloneAssert.cs (.../MacroStabilityInwardsCloneAssert.cs) (revision 68647f42dd790c7900bdbe376e97322435b4a957) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil/MacroStabilityInwardsCloneAssert.cs (.../MacroStabilityInwardsCloneAssert.cs) (revision 2dad5be3afa753e3665b8bbf03c348e3946d251f) @@ -38,6 +38,25 @@ /// The cloned object. /// Thrown when and /// are not clones. + public static void AreClones(MacroStabilityInwardsSlidingCurve original, + MacroStabilityInwardsSlidingCurve clone) + { + CoreCloneAssert.AreObjectClones(original.LeftCircle, clone.LeftCircle, AreClones); + CoreCloneAssert.AreObjectClones(original.RightCircle, clone.RightCircle, AreClones); + CoreCloneAssert.AreEnumerationClones(original.Slices, clone.Slices, AreClones); + + Assert.AreEqual(original.NonIteratedHorizontalForce, clone.NonIteratedHorizontalForce); + Assert.AreEqual(original.IteratedHorizontalForce, clone.IteratedHorizontalForce); + } + + /// + /// Method that asserts whether and + /// are clones. + /// + /// The original object. + /// The cloned object. + /// Thrown when and + /// are not clones. public static void AreClones(MacroStabilityInwardsSlice original, MacroStabilityInwardsSlice clone) {