Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PresentationObjects/GrassCoverErosionInwardsCalculationContext.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -r747e7896bd52001b1ea006235e0797da4fee8da6 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PresentationObjects/GrassCoverErosionInwardsCalculationContext.cs (.../GrassCoverErosionInwardsCalculationContext.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PresentationObjects/GrassCoverErosionInwardsCalculationContext.cs (.../GrassCoverErosionInwardsCalculationContext.cs) (revision 747e7896bd52001b1ea006235e0797da4fee8da6) @@ -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; @@ -57,5 +58,22 @@ } public CalculationGroup Parent { get; } + + public override bool Equals(WrappedObjectContextBase other) + { + return base.Equals(other) + && other is GrassCoverErosionInwardsCalculationContext + && ReferenceEquals(Parent, ((GrassCoverErosionInwardsCalculationContext) other).Parent); + } + + public override bool Equals(object obj) + { + return Equals(obj as GrassCoverErosionInwardsCalculationContext); + } + + public override int GetHashCode() + { + return base.GetHashCode() ^ Parent.GetHashCode(); + } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PresentationObjects/GrassCoverErosionInwardsCalculationContextTest.cs =================================================================== diff -u -r66a3c8b86b4ada9239a31cfc47e6c1979c11e000 -r747e7896bd52001b1ea006235e0797da4fee8da6 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PresentationObjects/GrassCoverErosionInwardsCalculationContextTest.cs (.../GrassCoverErosionInwardsCalculationContextTest.cs) (revision 66a3c8b86b4ada9239a31cfc47e6c1979c11e000) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PresentationObjects/GrassCoverErosionInwardsCalculationContextTest.cs (.../GrassCoverErosionInwardsCalculationContextTest.cs) (revision 747e7896bd52001b1ea006235e0797da4fee8da6) @@ -55,6 +55,7 @@ Assert.AreSame(parent, context.Parent); Assert.AreSame(failureMechanism, context.FailureMechanism); Assert.AreSame(assessmentSection, context.AssessmentSection); + mocksRepository.VerifyAll(); } @@ -75,7 +76,184 @@ // Assert var exception = Assert.Throws(call); Assert.AreEqual("parent", exception.ParamName); + mockRepository.VerifyAll(); } + + [Test] + public void Equals_ToNull_ReturnFalse() + { + // Setup + var mocksRepository = new MockRepository(); + var assessmentSection = mocksRepository.Stub(); + mocksRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var parent = new CalculationGroup(); + var context = new GrassCoverErosionInwardsCalculationContext(calculation, parent, failureMechanism, assessmentSection); + + // Call + bool isEqual = context.Equals(null); + + // Assert + Assert.IsFalse(isEqual); + + mocksRepository.VerifyAll(); + } + + [Test] + public void Equals_ToItself_ReturnTrue() + { + // Setup + var mocksRepository = new MockRepository(); + var assessmentSection = mocksRepository.Stub(); + mocksRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var parent = new CalculationGroup(); + var context = new GrassCoverErosionInwardsCalculationContext(calculation, parent, failureMechanism, assessmentSection); + + // Call + bool isEqual = context.Equals(context); + + // Assert + Assert.IsTrue(isEqual); + + mocksRepository.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentType_ReturnFalse() + { + // Setup + var mocksRepository = new MockRepository(); + var assessmentSection = mocksRepository.Stub(); + mocksRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var parent = new CalculationGroup(); + var context = new GrassCoverErosionInwardsCalculationContext(calculation, parent, failureMechanism, assessmentSection); + + // Call + bool isEqual = context.Equals(new object()); + + // Assert + Assert.IsFalse(isEqual); + + mocksRepository.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentWrappedData_ReturnFalse() + { + // Setup + var mocksRepository = new MockRepository(); + var assessmentSection = mocksRepository.Stub(); + mocksRepository.ReplayAll(); + + var calculation1 = new GrassCoverErosionInwardsCalculation(); + var calculation2 = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var parent = new CalculationGroup(); + var context1 = new GrassCoverErosionInwardsCalculationContext(calculation1, parent, failureMechanism, assessmentSection); + var context2 = new GrassCoverErosionInwardsCalculationContext(calculation2, parent, failureMechanism, assessmentSection); + + // Precondition: + Assert.IsFalse(calculation1.Equals(calculation2)); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsFalse(isEqual1); + Assert.IsFalse(isEqual2); + + mocksRepository.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithDifferentParent_ReturnFalse() + { + // Setup + var mocksRepository = new MockRepository(); + var assessmentSection = mocksRepository.Stub(); + mocksRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var parent1 = new CalculationGroup(); + var parent2 = new CalculationGroup(); + var context1 = new GrassCoverErosionInwardsCalculationContext(calculation, parent1, failureMechanism, assessmentSection); + var context2 = new GrassCoverErosionInwardsCalculationContext(calculation, 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); + + mocksRepository.VerifyAll(); + } + + [Test] + public void Equals_ToOtherWithSameWrappedDataAndParent_ReturnTrue() + { + // Setup + var mocksRepository = new MockRepository(); + var assessmentSection = mocksRepository.Stub(); + mocksRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var parent = new CalculationGroup(); + var context1 = new GrassCoverErosionInwardsCalculationContext(calculation, parent, failureMechanism, assessmentSection); + var context2 = new GrassCoverErosionInwardsCalculationContext(calculation, parent, failureMechanism, assessmentSection); + + // Call + bool isEqual1 = context1.Equals(context2); + bool isEqual2 = context2.Equals(context1); + + // Assert + Assert.IsTrue(isEqual1); + Assert.IsTrue(isEqual2); + + mocksRepository.VerifyAll(); + } + + [Test] + public void GetHashCode_EqualObjects_ReturnSameHashCode() + { + // Setup + var mocksRepository = new MockRepository(); + var assessmentSection = mocksRepository.Stub(); + mocksRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var parent = new CalculationGroup(); + var context1 = new GrassCoverErosionInwardsCalculationContext(calculation, parent, failureMechanism, assessmentSection); + var context2 = new GrassCoverErosionInwardsCalculationContext(calculation, parent, failureMechanism, assessmentSection); + + // Precondition: + Assert.AreEqual(context1, context2); + + // Call + int hashCode1 = context1.GetHashCode(); + int hashCode2 = context2.GetHashCode(); + + // Assert + Assert.AreEqual(hashCode1, hashCode2); + + mocksRepository.VerifyAll(); + } } } \ No newline at end of file