Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PresentationObjects/ClosingStructuresCalculationGroupContext.cs =================================================================== diff -u -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PresentationObjects/ClosingStructuresCalculationGroupContext.cs (.../ClosingStructuresCalculationGroupContext.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PresentationObjects/ClosingStructuresCalculationGroupContext.cs (.../ClosingStructuresCalculationGroupContext.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -82,7 +82,7 @@ { return base.Equals(other) && other is ClosingStructuresCalculationGroupContext - && ReferenceEquals(Parent, ((ClosingStructuresCalculationGroupContext)other).Parent); + && ReferenceEquals(Parent, ((ClosingStructuresCalculationGroupContext) other).Parent); } public override bool Equals(object obj) Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PresentationObjects/GrassCoverErosionInwardsCalculationGroupContext.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PresentationObjects/GrassCoverErosionInwardsCalculationGroupContext.cs (.../GrassCoverErosionInwardsCalculationGroupContext.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PresentationObjects/GrassCoverErosionInwardsCalculationGroupContext.cs (.../GrassCoverErosionInwardsCalculationGroupContext.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using Core.Common.Controls.PresentationObjects; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Forms.PresentationObjects; @@ -52,5 +53,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is GrassCoverErosionInwardsCalculationGroupContext + && ReferenceEquals(Parent, ((GrassCoverErosionInwardsCalculationGroupContext) other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as GrassCoverErosionInwardsCalculationGroupContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PresentationObjects/GrassCoverErosionInwardsCalculationGroupContextTest.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PresentationObjects/GrassCoverErosionInwardsCalculationGroupContextTest.cs (.../GrassCoverErosionInwardsCalculationGroupContextTest.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PresentationObjects/GrassCoverErosionInwardsCalculationGroupContextTest.cs (.../GrassCoverErosionInwardsCalculationGroupContextTest.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -60,5 +60,213 @@ Assert.AreSame(failureMechanism.DikeProfiles, groupContext.AvailableDikeProfiles); 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 GrassCoverErosionInwardsFailureMechanism(); + var context = new GrassCoverErosionInwardsCalculationGroupContext(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 GrassCoverErosionInwardsFailureMechanism(); + var context = new GrassCoverErosionInwardsCalculationGroupContext(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 GrassCoverErosionInwardsFailureMechanism(); + var context = new GrassCoverErosionInwardsCalculationGroupContext(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 GrassCoverErosionInwardsFailureMechanism(); + var context1 = new GrassCoverErosionInwardsCalculationGroupContext(calculationGroup1, + parent, + failureMechanism, + assessmentSection); + var context2 = new GrassCoverErosionInwardsCalculationGroupContext(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 GrassCoverErosionInwardsFailureMechanism(); + var context1 = new GrassCoverErosionInwardsCalculationGroupContext(calculationGroup, + parent1, + failureMechanism, + assessmentSection); + var context2 = new GrassCoverErosionInwardsCalculationGroupContext(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 GrassCoverErosionInwardsFailureMechanism(); + var context1 = new GrassCoverErosionInwardsCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new GrassCoverErosionInwardsCalculationGroupContext(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 GrassCoverErosionInwardsFailureMechanism(); + var context1 = new GrassCoverErosionInwardsCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new GrassCoverErosionInwardsCalculationGroupContext(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/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/PresentationObjects/GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/PresentationObjects/GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/PresentationObjects/GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using Core.Common.Controls.PresentationObjects; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Forms.PresentationObjects; @@ -51,5 +52,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext + && ReferenceEquals(Parent, ((GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext) other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/PresentationObjects/GrassCoverErosionOutwardsWaveConditionsCalculationGroupContextTest.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/PresentationObjects/GrassCoverErosionOutwardsWaveConditionsCalculationGroupContextTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationGroupContextTest.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/PresentationObjects/GrassCoverErosionOutwardsWaveConditionsCalculationGroupContextTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationGroupContextTest.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -59,5 +59,213 @@ Assert.AreSame(assessmentSection, context.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 GrassCoverErosionOutwardsFailureMechanism(); + var context = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(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 GrassCoverErosionOutwardsFailureMechanism(); + var context = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(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 GrassCoverErosionOutwardsFailureMechanism(); + var context = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(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 GrassCoverErosionOutwardsFailureMechanism(); + var context1 = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(calculationGroup1, + parent, + failureMechanism, + assessmentSection); + var context2 = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(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 GrassCoverErosionOutwardsFailureMechanism(); + var context1 = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(calculationGroup, + parent1, + failureMechanism, + assessmentSection); + var context2 = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(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 GrassCoverErosionOutwardsFailureMechanism(); + var context1 = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(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 GrassCoverErosionOutwardsFailureMechanism(); + var context1 = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new GrassCoverErosionOutwardsWaveConditionsCalculationGroupContext(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 -r3ddd2dfb07fb310dd90d5aac12e213d188c87a9a -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Forms/PresentationObjects/HeightStructuresCalculationGroupContext.cs (.../HeightStructuresCalculationGroupContext.cs) (revision 3ddd2dfb07fb310dd90d5aac12e213d188c87a9a) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Forms/PresentationObjects/HeightStructuresCalculationGroupContext.cs (.../HeightStructuresCalculationGroupContext.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -82,7 +82,7 @@ { return base.Equals(other) && other is HeightStructuresCalculationGroupContext - && ReferenceEquals(Parent, ((HeightStructuresCalculationGroupContext)other).Parent); + && ReferenceEquals(Parent, ((HeightStructuresCalculationGroupContext) other).Parent); } public override bool Equals(object obj) Index: Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PresentationObjects/StabilityStoneCoverWaveConditionsCalculationGroupContext.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PresentationObjects/StabilityStoneCoverWaveConditionsCalculationGroupContext.cs (.../StabilityStoneCoverWaveConditionsCalculationGroupContext.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PresentationObjects/StabilityStoneCoverWaveConditionsCalculationGroupContext.cs (.../StabilityStoneCoverWaveConditionsCalculationGroupContext.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using Core.Common.Controls.PresentationObjects; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Forms.PresentationObjects; @@ -51,5 +52,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is StabilityStoneCoverWaveConditionsCalculationGroupContext + && ReferenceEquals(Parent, ((StabilityStoneCoverWaveConditionsCalculationGroupContext) other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as StabilityStoneCoverWaveConditionsCalculationGroupContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PresentationObjects/StabilityStoneCoverWaveConditionsCalculationGroupContextTest.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PresentationObjects/StabilityStoneCoverWaveConditionsCalculationGroupContextTest.cs (.../StabilityStoneCoverWaveConditionsCalculationGroupContextTest.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PresentationObjects/StabilityStoneCoverWaveConditionsCalculationGroupContextTest.cs (.../StabilityStoneCoverWaveConditionsCalculationGroupContextTest.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -59,5 +59,213 @@ Assert.AreSame(assessmentSection, context.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 StabilityStoneCoverFailureMechanism(); + var context = new StabilityStoneCoverWaveConditionsCalculationGroupContext(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 StabilityStoneCoverFailureMechanism(); + var context = new StabilityStoneCoverWaveConditionsCalculationGroupContext(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 StabilityStoneCoverFailureMechanism(); + var context = new StabilityStoneCoverWaveConditionsCalculationGroupContext(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 StabilityStoneCoverFailureMechanism(); + var context1 = new StabilityStoneCoverWaveConditionsCalculationGroupContext(calculationGroup1, + parent, + failureMechanism, + assessmentSection); + var context2 = new StabilityStoneCoverWaveConditionsCalculationGroupContext(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 StabilityStoneCoverFailureMechanism(); + var context1 = new StabilityStoneCoverWaveConditionsCalculationGroupContext(calculationGroup, + parent1, + failureMechanism, + assessmentSection); + var context2 = new StabilityStoneCoverWaveConditionsCalculationGroupContext(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 StabilityStoneCoverFailureMechanism(); + var context1 = new StabilityStoneCoverWaveConditionsCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new StabilityStoneCoverWaveConditionsCalculationGroupContext(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 StabilityStoneCoverFailureMechanism(); + var context1 = new StabilityStoneCoverWaveConditionsCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new StabilityStoneCoverWaveConditionsCalculationGroupContext(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/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Forms/PresentationObjects/WaveImpactAsphaltCoverCalculationGroupContext.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Forms/PresentationObjects/WaveImpactAsphaltCoverCalculationGroupContext.cs (.../WaveImpactAsphaltCoverCalculationGroupContext.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Forms/PresentationObjects/WaveImpactAsphaltCoverCalculationGroupContext.cs (.../WaveImpactAsphaltCoverCalculationGroupContext.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using Core.Common.Controls.PresentationObjects; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Forms.PresentationObjects; @@ -52,5 +53,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext + && ReferenceEquals(Parent, ((WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext) other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Forms.Test/PresentationObjects/WaveImpactAsphaltCoverCalculationGroupContextTest.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -rf0792e734ef5296f2ffaae2ad36619a05d5bd9e3 --- Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Forms.Test/PresentationObjects/WaveImpactAsphaltCoverCalculationGroupContextTest.cs (.../WaveImpactAsphaltCoverCalculationGroupContextTest.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Forms.Test/PresentationObjects/WaveImpactAsphaltCoverCalculationGroupContextTest.cs (.../WaveImpactAsphaltCoverCalculationGroupContextTest.cs) (revision f0792e734ef5296f2ffaae2ad36619a05d5bd9e3) @@ -60,5 +60,213 @@ Assert.AreSame(failureMechanism.ForeshoreProfiles, groupContext.ForeshoreProfiles); 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 WaveImpactAsphaltCoverFailureMechanism(); + var context = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(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 WaveImpactAsphaltCoverFailureMechanism(); + var context = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(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 WaveImpactAsphaltCoverFailureMechanism(); + var context = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(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 WaveImpactAsphaltCoverFailureMechanism(); + var context1 = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(calculationGroup1, + parent, + failureMechanism, + assessmentSection); + var context2 = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(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 WaveImpactAsphaltCoverFailureMechanism(); + var context1 = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(calculationGroup, + parent1, + failureMechanism, + assessmentSection); + var context2 = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(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 WaveImpactAsphaltCoverFailureMechanism(); + var context1 = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(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 WaveImpactAsphaltCoverFailureMechanism(); + var context1 = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(calculationGroup, + parent, + failureMechanism, + assessmentSection); + var context2 = new WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext(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