Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Data/MacroStabilityInwardsOutput.cs =================================================================== diff -u -rdecccf5efb0ae872940d8d51b6de9978d13ecb37 -rd44a51e1d18e1e0c4c8e322174687304fd15e8fb --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Data/MacroStabilityInwardsOutput.cs (.../MacroStabilityInwardsOutput.cs) (revision decccf5efb0ae872940d8d51b6de9978d13ecb37) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Data/MacroStabilityInwardsOutput.cs (.../MacroStabilityInwardsOutput.cs) (revision d44a51e1d18e1e0c4c8e322174687304fd15e8fb) @@ -28,7 +28,7 @@ /// /// Simple class containing the results of a macro stability inwards calculation. /// - public class MacroStabilityInwardsOutput : Observable, ICalculationOutput + public class MacroStabilityInwardsOutput : CloneableObservable, ICalculationOutput { /// /// Creates a new instance of . @@ -65,9 +65,12 @@ ForbiddenZonesXEntryMax = properties.ForbiddenZonesXEntryMax; } - public object Clone() + public override object Clone() { - throw new NotImplementedException(); + var clone = (MacroStabilityInwardsOutput) base.Clone(); + clone.SlidingCurve = (MacroStabilityInwardsSlidingCurve) SlidingCurve.Clone(); + clone.SlipPlane = (MacroStabilityInwardsSlipPlaneUpliftVan) SlipPlane.Clone(); + return clone; } /// @@ -112,12 +115,12 @@ /// /// Gets the sliding curve. /// - public MacroStabilityInwardsSlidingCurve SlidingCurve { get; } + public MacroStabilityInwardsSlidingCurve SlidingCurve { get; private set; } /// /// Gets the slip plane. /// - public MacroStabilityInwardsSlipPlaneUpliftVan SlipPlane { get; } + public MacroStabilityInwardsSlipPlaneUpliftVan SlipPlane { get; private set; } /// /// Gets the factor of stability of the Uplift Van calculation. Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.Test/MacroStabilityInwardsOutputTest.cs =================================================================== diff -u -r0f736d81afe800a482dff027fe93128a5e967114 -rd44a51e1d18e1e0c4c8e322174687304fd15e8fb --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.Test/MacroStabilityInwardsOutputTest.cs (.../MacroStabilityInwardsOutputTest.cs) (revision 0f736d81afe800a482dff027fe93128a5e967114) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.Test/MacroStabilityInwardsOutputTest.cs (.../MacroStabilityInwardsOutputTest.cs) (revision d44a51e1d18e1e0c4c8e322174687304fd15e8fb) @@ -21,6 +21,7 @@ using System; using Core.Common.Base; +using Core.Common.Data.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.MacroStabilityInwards.Data.TestUtil; @@ -134,7 +135,7 @@ var output = new MacroStabilityInwardsOutput(slidingCurve, slipPlane, properties); // Assert - Assert.IsInstanceOf(output); + Assert.IsInstanceOf(output); Assert.IsInstanceOf(output); Assert.AreSame(slidingCurve, output.SlidingCurve); @@ -145,5 +146,35 @@ Assert.AreEqual(xEntryMin, output.ForbiddenZonesXEntryMin); Assert.AreEqual(xEntryMax, output.ForbiddenZonesXEntryMax); } + + [Test] + public void Clone_Always_ReturnNewInstanceWithCopiedValues() + { + // Setup + var slidingCurve = new MacroStabilityInwardsSlidingCurve(MacroStabilityInwardsSlidingCircleTestFactory.Create(), + MacroStabilityInwardsSlidingCircleTestFactory.Create(), + new MacroStabilityInwardsSlice[0], 0, 0); + + var slipPlane = new MacroStabilityInwardsSlipPlaneUpliftVan(MacroStabilityInwardsGridTestFactory.Create(), + MacroStabilityInwardsGridTestFactory.Create(), + new double[0]); + + var random = new Random(21); + var properties = new MacroStabilityInwardsOutput.ConstructionProperties + { + FactorOfStability = random.NextDouble(), + ZValue = random.NextDouble(), + ForbiddenZonesXEntryMin = random.NextDouble(), + ForbiddenZonesXEntryMax = random.NextDouble() + }; + + var original = new MacroStabilityInwardsOutput(slidingCurve, slipPlane, properties); + + // 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 -r4cbf31a1ae47d22c811e4a8d8f8e6d0f89ddc202 -rd44a51e1d18e1e0c4c8e322174687304fd15e8fb --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil/MacroStabilityInwardsCloneAssert.cs (.../MacroStabilityInwardsCloneAssert.cs) (revision 4cbf31a1ae47d22c811e4a8d8f8e6d0f89ddc202) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil/MacroStabilityInwardsCloneAssert.cs (.../MacroStabilityInwardsCloneAssert.cs) (revision d44a51e1d18e1e0c4c8e322174687304fd15e8fb) @@ -57,13 +57,34 @@ /// The cloned object. /// Thrown when and /// are not clones. + public static void AreClones(MacroStabilityInwardsOutput original, + MacroStabilityInwardsOutput clone) + { + CoreCloneAssert.AreObjectClones(original.SlidingCurve, clone.SlidingCurve, AreClones); + CoreCloneAssert.AreObjectClones(original.SlipPlane, clone.SlipPlane, AreClones); + + Assert.AreEqual(original.FactorOfStability, clone.FactorOfStability); + Assert.AreEqual(original.ZValue, clone.ZValue); + Assert.AreEqual(original.ForbiddenZonesXEntryMin, clone.ForbiddenZonesXEntryMin); + Assert.AreEqual(original.ForbiddenZonesXEntryMax, clone.ForbiddenZonesXEntryMax); + } + + /// + /// Method that asserts whether and + /// are clones. + /// + /// The original object. + /// The cloned object. + /// Thrown when and + /// are not clones. public static void AreClones(MacroStabilityInwardsSlipPlaneUpliftVan original, MacroStabilityInwardsSlipPlaneUpliftVan clone) { CoreCloneAssert.AreObjectClones(original.LeftGrid, clone.LeftGrid, AreClones); CoreCloneAssert.AreObjectClones(original.RightGrid, clone.RightGrid, AreClones); CoreCloneAssert.AreEnumerationClones(original.TangentLines, clone.TangentLines, - (originalTangentLine, clonedTangentLine) => Assert.AreEqual(originalTangentLine, clonedTangentLine)); + (originalTangentLine, clonedTangentLine) => + Assert.AreEqual(originalTangentLine, clonedTangentLine)); } ///