Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PresentationObjects/ClosingStructuresCalculationGroupContext.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PresentationObjects/ClosingStructuresCalculationGroupContext.cs (.../ClosingStructuresCalculationGroupContext.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PresentationObjects/ClosingStructuresCalculationGroupContext.cs (.../ClosingStructuresCalculationGroupContext.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using Core.Common.Controls.PresentationObjects; using Ringtoets.ClosingStructures.Data; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; @@ -76,5 +77,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is ClosingStructuresCalculationGroupContext + && ReferenceEquals(Parent, ((ClosingStructuresCalculationGroupContext)other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as ClosingStructuresCalculationGroupContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/PresentationObjects/ClosingStructuresCalculationGroupContextTest.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/PresentationObjects/ClosingStructuresCalculationGroupContextTest.cs (.../ClosingStructuresCalculationGroupContextTest.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/PresentationObjects/ClosingStructuresCalculationGroupContextTest.cs (.../ClosingStructuresCalculationGroupContextTest.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) @@ -61,5 +61,213 @@ Assert.AreSame(failureMechanism.ClosingStructures, groupContext.AvailableStructures); mockRepository.VerifyAll(); } + + [Test] + public void Equals_ToNull_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var context = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(null); + + // Assert + Assert.IsFalse(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToItself_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var context = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(context); + + // Assert + Assert.IsTrue(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentType_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var context = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(new object()); + + // Assert + Assert.IsFalse(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentWrappedData_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup1 = new CalculationGroup(); + var calculationGroup2 = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var context1 = new ClosingStructuresCalculationGroupContext(calculationGroup1, + parent, + failureMechanism, + assessmentSection); + var context2 = new ClosingStructuresCalculationGroupContext(calculationGroup2, + parent, + failureMechanism, + assessmentSection); + + // Precondition + Assert.IsFalse(calculationGroup1.Equals(calculationGroup2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentParent_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent1 = new CalculationGroup(); + var parent2 = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var context1 = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent1, + failureMechanism, + assessmentSection); + var context2 = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent2, + failureMechanism, + assessmentSection); + + // Precondition + Assert.IsFalse(parent1.Equals(parent2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithSameWrappedDataAndParent_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var context1 = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsTrue(isEqual1); + Assert.IsTrue(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void GetHashCode_EqualObjects_ReturnSameHashCode() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var context1 = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new ClosingStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + // Precondition + Assert.AreEqual(context1, context2); + + // Call + int hashCode1 = context1.GetHashCode(); + int hashCode2 = context2.GetHashCode(); + + // Assert + Assert.AreEqual(hashCode1, hashCode2); + + mocks.VerifyAll(); + } } } \ No newline at end of file Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Forms/PresentationObjects/HeightStructuresCalculationGroupContext.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Forms/PresentationObjects/HeightStructuresCalculationGroupContext.cs (.../HeightStructuresCalculationGroupContext.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Forms/PresentationObjects/HeightStructuresCalculationGroupContext.cs (.../HeightStructuresCalculationGroupContext.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using Core.Common.Controls.PresentationObjects; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; @@ -76,5 +77,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is HeightStructuresCalculationGroupContext + && ReferenceEquals(Parent, ((HeightStructuresCalculationGroupContext)other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as HeightStructuresCalculationGroupContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/PresentationObjects/HeightStructuresCalculationGroupContextTest.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/PresentationObjects/HeightStructuresCalculationGroupContextTest.cs (.../HeightStructuresCalculationGroupContextTest.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/PresentationObjects/HeightStructuresCalculationGroupContextTest.cs (.../HeightStructuresCalculationGroupContextTest.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) @@ -61,5 +61,213 @@ Assert.AreSame(failureMechanism.HeightStructures, groupContext.AvailableStructures); mockRepository.VerifyAll(); } + + [Test] + public void Equals_ToNull_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var context = new HeightStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(null); + + // Assert + Assert.IsFalse(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToItself_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var context = new HeightStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(context); + + // Assert + Assert.IsTrue(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentType_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var context = new HeightStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(new object()); + + // Assert + Assert.IsFalse(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentWrappedData_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup1 = new CalculationGroup(); + var calculationGroup2 = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var context1 = new HeightStructuresCalculationGroupContext(calculationGroup1, + parent, + failureMechanism, + assessmentSection); + var context2 = new HeightStructuresCalculationGroupContext(calculationGroup2, + parent, + failureMechanism, + assessmentSection); + + // Precondition + Assert.IsFalse(calculationGroup1.Equals(calculationGroup2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentParent_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent1 = new CalculationGroup(); + var parent2 = new CalculationGroup(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var context1 = new HeightStructuresCalculationGroupContext(calculationGroup, + parent1, + failureMechanism, + assessmentSection); + var context2 = new HeightStructuresCalculationGroupContext(calculationGroup, + parent2, + failureMechanism, + assessmentSection); + + // Precondition + Assert.IsFalse(parent1.Equals(parent2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithSameWrappedDataAndParent_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var context1 = new HeightStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new HeightStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsTrue(isEqual1); + Assert.IsTrue(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void GetHashCode_EqualObjects_ReturnSameHashCode() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var context1 = new HeightStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new HeightStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + // Precondition + Assert.AreEqual(context1, context2); + + // Call + int hashCode1 = context1.GetHashCode(); + int hashCode2 = context2.GetHashCode(); + + // Assert + Assert.AreEqual(hashCode1, hashCode2); + + mocks.VerifyAll(); + } } } \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs =================================================================== diff -u -r26f527fb809a2325c8f883ece9da01a8f8040eb3 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs (.../PipingCalculationGroupContext.cs) (revision 26f527fb809a2325c8f883ece9da01a8f8040eb3) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationGroupContext.cs (.../PipingCalculationGroupContext.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using Core.Common.Controls.PresentationObjects; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Forms.PresentationObjects; @@ -59,5 +60,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is PipingCalculationGroupContext + && ReferenceEquals(Parent, ((PipingCalculationGroupContext) other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as PipingCalculationGroupContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationGroupContextTest.cs =================================================================== diff -u -r99f686f22091051a65ff1ee20abd68ffad713647 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationGroupContextTest.cs (.../PipingCalculationGroupContextTest.cs) (revision 99f686f22091051a65ff1ee20abd68ffad713647) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationGroupContextTest.cs (.../PipingCalculationGroupContextTest.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) @@ -25,6 +25,7 @@ using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.Piping.Data; +using Ringtoets.Piping.Data.SoilProfile; using Ringtoets.Piping.Data.TestUtil; using Ringtoets.Piping.Forms.PresentationObjects; using Ringtoets.Piping.Primitives; @@ -72,5 +73,235 @@ Assert.AreSame(assessmentSection, groupContext.AssessmentSection); mocks.VerifyAll(); } + + [Test] + public void Equals_ToNull_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new PipingFailureMechanism(); + var context = new PipingCalculationGroupContext(calculationGroup, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(null); + + // Assert + Assert.IsFalse(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToItself_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new PipingFailureMechanism(); + var context = new PipingCalculationGroupContext(calculationGroup, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(context); + + // Assert + Assert.IsTrue(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentType_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new PipingFailureMechanism(); + var context = new PipingCalculationGroupContext(calculationGroup, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(new object()); + + // Assert + Assert.IsFalse(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentWrappedData_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup1 = new CalculationGroup(); + var calculationGroup2 = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new PipingFailureMechanism(); + var context1 = new PipingCalculationGroupContext(calculationGroup1, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + var context2 = new PipingCalculationGroupContext(calculationGroup2, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + + // Precondition + Assert.IsFalse(calculationGroup1.Equals(calculationGroup2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentParent_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent1 = new CalculationGroup(); + var parent2 = new CalculationGroup(); + var failureMechanism = new PipingFailureMechanism(); + var context1 = new PipingCalculationGroupContext(calculationGroup, + parent1, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + var context2 = new PipingCalculationGroupContext(calculationGroup, + parent2, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + + // Precondition + Assert.IsFalse(parent1.Equals(parent2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithSameWrappedDataAndParent_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new PipingFailureMechanism(); + var context1 = new PipingCalculationGroupContext(calculationGroup, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + var context2 = new PipingCalculationGroupContext(calculationGroup, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsTrue(isEqual1); + Assert.IsTrue(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void GetHashCode_EqualObjects_ReturnSameHashCode() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new PipingFailureMechanism(); + var context1 = new PipingCalculationGroupContext(calculationGroup, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + var context2 = new PipingCalculationGroupContext(calculationGroup, + parent, + new PipingSurfaceLine[0], + new PipingStochasticSoilModel[0], + failureMechanism, + assessmentSection); + // Precondition + Assert.AreEqual(context1, context2); + + // Call + int hashCode1 = context1.GetHashCode(); + int hashCode2 = context2.GetHashCode(); + + // Assert + Assert.AreEqual(hashCode1, hashCode2); + + mocks.VerifyAll(); + } } } \ No newline at end of file Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/PresentationObjects/StabilityPointStructuresCalculationGroupContext.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/PresentationObjects/StabilityPointStructuresCalculationGroupContext.cs (.../StabilityPointStructuresCalculationGroupContext.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/PresentationObjects/StabilityPointStructuresCalculationGroupContext.cs (.../StabilityPointStructuresCalculationGroupContext.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using Core.Common.Controls.PresentationObjects; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; @@ -76,5 +77,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is StabilityPointStructuresCalculationGroupContext + && ReferenceEquals(Parent, ((StabilityPointStructuresCalculationGroupContext) other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as StabilityPointStructuresCalculationGroupContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/PresentationObjects/StabilityPointStructuresCalculationGroupContextTest.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/PresentationObjects/StabilityPointStructuresCalculationGroupContextTest.cs (.../StabilityPointStructuresCalculationGroupContextTest.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/PresentationObjects/StabilityPointStructuresCalculationGroupContextTest.cs (.../StabilityPointStructuresCalculationGroupContextTest.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) @@ -61,5 +61,213 @@ Assert.AreSame(failureMechanism.StabilityPointStructures, groupContext.AvailableStructures); mockRepository.VerifyAll(); } + + [Test] + public void Equals_ToNull_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(null); + + // Assert + Assert.IsFalse(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToItself_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(context); + + // Assert + Assert.IsTrue(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentType_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual = context.Equals(new object()); + + // Assert + Assert.IsFalse(isEqual); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentWrappedData_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup1 = new CalculationGroup(); + var calculationGroup2 = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context1 = new StabilityPointStructuresCalculationGroupContext(calculationGroup1, + parent, + failureMechanism, + assessmentSection); + var context2 = new StabilityPointStructuresCalculationGroupContext(calculationGroup2, + parent, + failureMechanism, + assessmentSection); + + // Precondition + Assert.IsFalse(calculationGroup1.Equals(calculationGroup2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentParent_ReturnFalse() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent1 = new CalculationGroup(); + var parent2 = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context1 = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent1, + failureMechanism, + assessmentSection); + var context2 = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent2, + failureMechanism, + assessmentSection); + + // Precondition + Assert.IsFalse(parent1.Equals(parent2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithSameWrappedDataAndParent_ReturnTrue() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context1 = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsTrue(isEqual1); + Assert.IsTrue(isEqual2); + + mocks.VerifyAll(); + } + + [Test] + public void GetHashCode_EqualObjects_ReturnSameHashCode() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var parent = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context1 = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new StabilityPointStructuresCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + // Precondition + Assert.AreEqual(context1, context2); + + // Call + int hashCode1 = context1.GetHashCode(); + int hashCode2 = context2.GetHashCode(); + + // Assert + Assert.AreEqual(hashCode1, hashCode2); + + mocks.VerifyAll(); + } } } \ No newline at end of file