Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/CommentTest.cs =================================================================== diff -u -rfd7cb4da4164284049a3627b1d85f92e722d1814 -r8c23c131105beeb56f21f29c57a5e344b1795655 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/CommentTest.cs (.../CommentTest.cs) (revision fd7cb4da4164284049a3627b1d85f92e722d1814) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/CommentTest.cs (.../CommentTest.cs) (revision 8c23c131105beeb56f21f29c57a5e344b1795655) @@ -42,10 +42,9 @@ public void Clone_Always_ReturnNewInstanceWithCopiedValues() { // Setup - const string body = "Random body"; var comment = new Comment { - Body = body + Body = "Random body" }; // Call @@ -56,7 +55,7 @@ Assert.IsInstanceOf(clone); var clonedComment = (Comment) clone; - Assert.AreEqual(body, clonedComment.Body); + Assert.AreEqual(comment.Body, clonedComment.Body); } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsInput.cs =================================================================== diff -u -r75c87ba087fcb4bf89090d844455b215b25b4a75 -r8c23c131105beeb56f21f29c57a5e344b1795655 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsInput.cs (.../GrassCoverErosionInwardsInput.cs) (revision 75c87ba087fcb4bf89090d844455b215b25b4a75) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsInput.cs (.../GrassCoverErosionInwardsInput.cs) (revision 8c23c131105beeb56f21f29c57a5e344b1795655) @@ -36,14 +36,14 @@ /// Class that holds all grass cover erosion inwards calculation specific input parameters. /// public class GrassCoverErosionInwardsInput : Observable, ICalculationInput, IUseBreakWater, - IUseForeshore + IUseForeshore, ICloneable { private const int orientationNumberOfDecimals = 2; private static readonly Range orientationValidityRange = new Range(new RoundedDouble(orientationNumberOfDecimals), new RoundedDouble(orientationNumberOfDecimals, 360)); - private readonly LogNormalDistribution criticalFlowRate; + private LogNormalDistribution criticalFlowRate; private RoundedDouble orientation; private RoundedDouble dikeHeight; private DikeProfile dikeProfile; @@ -250,6 +250,16 @@ } } + public object Clone() + { + var clone = (GrassCoverErosionInwardsInput) MemberwiseClone(); + + clone.criticalFlowRate = (LogNormalDistribution) CriticalFlowRate.Clone(); + clone.BreakWater = (BreakWater) BreakWater.Clone(); + + return clone; + } + private void SetDefaultDikeProfileProperties() { Orientation = RoundedDouble.NaN; Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsInputTest.cs =================================================================== diff -u -re60dadeb730f975383e6c9febd0fd10f89ca1961 -r8c23c131105beeb56f21f29c57a5e344b1795655 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsInputTest.cs (.../GrassCoverErosionInwardsInputTest.cs) (revision e60dadeb730f975383e6c9febd0fd10f89ca1961) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsInputTest.cs (.../GrassCoverErosionInwardsInputTest.cs) (revision 8c23c131105beeb56f21f29c57a5e344b1795655) @@ -144,6 +144,7 @@ Assert.IsInstanceOf(input); Assert.IsInstanceOf(input); Assert.IsInstanceOf(input); + Assert.IsInstanceOf(input); Assert.AreEqual(2, input.Orientation.NumberOfDecimalPlaces); Assert.AreEqual(2, input.DikeHeight.NumberOfDecimalPlaces); @@ -360,6 +361,61 @@ AssertDikeProfileInput(newDikeProfile, input); } + [Test] + public void Clone_Always_ReturnNewInstanceWithCopiedValues() + { + // Setup + var random = new Random(21); + var grassCoverErosionInwardsInput = new GrassCoverErosionInwardsInput + { + DikeProfile = new TestDikeProfile(), + Orientation = random.NextRoundedDouble(), + DikeHeight = random.NextRoundedDouble(), + CriticalFlowRate = new LogNormalDistribution + { + Mean = random.NextRoundedDouble(), + StandardDeviation = random.NextRoundedDouble() + }, + HydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(), + DikeHeightCalculationType = random.NextEnumValue(), + OvertoppingRateCalculationType = random.NextEnumValue(), + ShouldDikeHeightIllustrationPointsBeCalculated = random.NextBoolean(), + ShouldOvertoppingRateIllustrationPointsBeCalculated = random.NextBoolean(), + ShouldOvertoppingOutputIllustrationPointsBeCalculated = random.NextBoolean(), + UseBreakWater = random.NextBoolean(), + BreakWater = + { + Type = random.NextEnumValue(), + Height = random.NextRoundedDouble() + }, + UseForeshore = random.NextBoolean() + }; + + // Call + object clone = grassCoverErosionInwardsInput.Clone(); + + // Assert + Assert.AreNotSame(grassCoverErosionInwardsInput, clone); + Assert.IsInstanceOf(clone); + + var clonedGrassCoverErosionInwardsInput = (GrassCoverErosionInwardsInput) clone; + Assert.AreSame(grassCoverErosionInwardsInput.DikeProfile, clonedGrassCoverErosionInwardsInput.DikeProfile); + Assert.AreEqual(grassCoverErosionInwardsInput.Orientation, clonedGrassCoverErosionInwardsInput.Orientation); + Assert.AreEqual(grassCoverErosionInwardsInput.DikeHeight, clonedGrassCoverErosionInwardsInput.DikeHeight); + Assert.AreNotSame(grassCoverErosionInwardsInput.CriticalFlowRate, clonedGrassCoverErosionInwardsInput.CriticalFlowRate); + Assert.AreEqual(grassCoverErosionInwardsInput.CriticalFlowRate, clonedGrassCoverErosionInwardsInput.CriticalFlowRate); + Assert.AreSame(grassCoverErosionInwardsInput.HydraulicBoundaryLocation, clonedGrassCoverErosionInwardsInput.HydraulicBoundaryLocation); + Assert.AreEqual(grassCoverErosionInwardsInput.DikeHeightCalculationType, clonedGrassCoverErosionInwardsInput.DikeHeightCalculationType); + Assert.AreEqual(grassCoverErosionInwardsInput.OvertoppingRateCalculationType, clonedGrassCoverErosionInwardsInput.OvertoppingRateCalculationType); + Assert.AreEqual(grassCoverErosionInwardsInput.ShouldDikeHeightIllustrationPointsBeCalculated, clonedGrassCoverErosionInwardsInput.ShouldDikeHeightIllustrationPointsBeCalculated); + Assert.AreEqual(grassCoverErosionInwardsInput.ShouldOvertoppingRateIllustrationPointsBeCalculated, clonedGrassCoverErosionInwardsInput.ShouldOvertoppingRateIllustrationPointsBeCalculated); + Assert.AreEqual(grassCoverErosionInwardsInput.ShouldOvertoppingOutputIllustrationPointsBeCalculated, clonedGrassCoverErosionInwardsInput.ShouldOvertoppingOutputIllustrationPointsBeCalculated); + Assert.AreEqual(grassCoverErosionInwardsInput.UseBreakWater, clonedGrassCoverErosionInwardsInput.UseBreakWater); + Assert.AreNotSame(grassCoverErosionInwardsInput.BreakWater, clonedGrassCoverErosionInwardsInput.BreakWater); + Assert.AreEqual(grassCoverErosionInwardsInput.BreakWater, clonedGrassCoverErosionInwardsInput.BreakWater); + Assert.AreEqual(grassCoverErosionInwardsInput.UseForeshore, clonedGrassCoverErosionInwardsInput.UseForeshore); + } + private static void AssertDikeProfileInput(DikeProfile expectedDikeProfile, GrassCoverErosionInwardsInput input) { var defaultInput = new GrassCoverErosionInwardsInput();