Index: Riskeer/Piping/src/Riskeer.Piping.Forms/ChangeHandlers/ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler.cs =================================================================== diff -u -rddad7117cf82255493a1a9f80b2c6562dc88bfd2 -r341b3fcea09847a41958d38a2e3fe333b642433e --- Riskeer/Piping/src/Riskeer.Piping.Forms/ChangeHandlers/ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler.cs (.../ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler.cs) (revision ddad7117cf82255493a1a9f80b2c6562dc88bfd2) +++ Riskeer/Piping/src/Riskeer.Piping.Forms/ChangeHandlers/ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler.cs (.../ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler.cs) (revision 341b3fcea09847a41958d38a2e3fe333b642433e) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using Core.Common.Gui.Commands; using Core.Common.Gui.Helpers; using Riskeer.Common.Forms.ChangeHandlers; using Riskeer.Piping.Data.Probabilistic; @@ -38,20 +39,45 @@ /// /// The calculation to clear the illustration points for. /// Object responsible for inquiring confirmation. + /// The view commands used to close views for the illustration points. /// Thrown when any argument is null. public ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler( - ProbabilisticPipingCalculationScenario calculation, IInquiryHelper inquiryHelper) - : base(calculation, inquiryHelper) {} + ProbabilisticPipingCalculationScenario calculation, IInquiryHelper inquiryHelper, IViewCommands viewCommands) + : base(calculation, inquiryHelper, viewCommands) {} public override bool ClearIllustrationPoints() { if (ProbabilisticPipingIllustrationPointsHelper.HasIllustrationPoints(Calculation)) { + if (Calculation.Output.SectionSpecificOutput.HasGeneralResult) + { + CloseView(Calculation.Output.SectionSpecificOutput); + } + if (Calculation.Output.ProfileSpecificOutput.HasGeneralResult) + { + CloseView(Calculation.Output.ProfileSpecificOutput); + } + Calculation.ClearIllustrationPoints(); return true; } return false; } + + private void CloseView(IPartialProbabilisticPipingOutput partialOutput) + { + switch (partialOutput) + { + case PartialProbabilisticFaultTreePipingOutput faultTreeOutput: + ViewCommands.RemoveAllViewsForItem(faultTreeOutput.GeneralResult); + break; + case PartialProbabilisticSubMechanismPipingOutput subMechanismOutput: + ViewCommands.RemoveAllViewsForItem(subMechanismOutput.GeneralResult); + break; + default: + throw new NotSupportedException(); + } + } } } \ No newline at end of file Index: Riskeer/Piping/test/Riskeer.Piping.Forms.Test/ChangeHandlers/ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandlerTest.cs =================================================================== diff -u -rddad7117cf82255493a1a9f80b2c6562dc88bfd2 -r341b3fcea09847a41958d38a2e3fe333b642433e --- Riskeer/Piping/test/Riskeer.Piping.Forms.Test/ChangeHandlers/ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandlerTest.cs (.../ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandlerTest.cs) (revision ddad7117cf82255493a1a9f80b2c6562dc88bfd2) +++ Riskeer/Piping/test/Riskeer.Piping.Forms.Test/ChangeHandlers/ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandlerTest.cs (.../ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandlerTest.cs) (revision 341b3fcea09847a41958d38a2e3fe333b642433e) @@ -19,6 +19,9 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; +using System.Collections.Generic; +using Core.Common.Gui.Commands; using Core.Common.Gui.Helpers; using NUnit.Framework; using Rhino.Mocks; @@ -33,90 +36,171 @@ public class ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandlerTest { [Test] - public void Constructor_WithArguments_ExpectedValues() + public void Constructor_ExpectedValues() { // Setup var mocks = new MockRepository(); var inquiryHelper = mocks.Stub(); + var viewCommands = mocks.Stub(); mocks.ReplayAll(); var calculation = new ProbabilisticPipingCalculationScenario(); // Call - var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper); + var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper, viewCommands); // Assert Assert.IsInstanceOf>(handler); mocks.VerifyAll(); } [Test] - public void ClearIllustrationPoints_CalculationWithoutOutput_ReturnsFalse() + public void GivenCalculationWithoutOutput_WhenClearIllustrationPoints_ThenNothingHappensAndReturnFalse() { - // Setup + // Given var mocks = new MockRepository(); - var inquiryHelper = mocks.StrictMock(); + var inquiryHelper = mocks.Stub(); + var viewCommands = mocks.StrictMock(); mocks.ReplayAll(); var calculation = new ProbabilisticPipingCalculationScenario(); - var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper); + var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler( + calculation, inquiryHelper, viewCommands); - // Call - bool result = handler.ClearIllustrationPoints(); + // When + bool isCalculationAffected = handler.ClearIllustrationPoints(); - // Assert - Assert.IsFalse(result); + // Then + Assert.IsFalse(isCalculationAffected); + Assert.IsFalse(calculation.HasOutput); mocks.VerifyAll(); } [Test] - public void ClearIllustrationPoints_CalculationWithOutputWithoutIllustrationPoints_ReturnsFalse() + public void ClearIllustrationPoints_SectionSpecificWithIllustrationAndUnsupportedPartialOutput_ThrowsNotSupportedException() { - // Setup + // Given + var sectionSpecificOutput = new TestPartialProbabilisticPipingOutput(0, new TestGeneralResultTopLevelIllustrationPoint()); + var profileSpecificOutput = new TestPartialProbabilisticPipingOutput(0, null); + var calculation = new ProbabilisticPipingCalculationScenario + { + Output = new ProbabilisticPipingOutput(sectionSpecificOutput, profileSpecificOutput) + }; + var mocks = new MockRepository(); - var inquiryHelper = mocks.StrictMock(); + var inquiryHelper = mocks.Stub(); + var viewCommands = mocks.StrictMock(); mocks.ReplayAll(); + var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper, viewCommands); + + // When + void Call() => handler.ClearIllustrationPoints(); + + // Then + Assert.Throws(Call); + mocks.VerifyAll(); + } + + [Test] + public void ClearIllustrationPoints_ProfileSpecificWithIllustrationAndUnsupportedPartialOutput_ThrowsNotSupportedException() + { + // Given + var sectionSpecificOutput = new TestPartialProbabilisticPipingOutput(0, null); + var profileSpecificOutput = new TestPartialProbabilisticPipingOutput(0, new TestGeneralResultTopLevelIllustrationPoint()); var calculation = new ProbabilisticPipingCalculationScenario { - Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithoutIllustrationPoints() + Output = new ProbabilisticPipingOutput(sectionSpecificOutput, profileSpecificOutput) }; - var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper); + var mocks = new MockRepository(); + var inquiryHelper = mocks.Stub(); + var viewCommands = mocks.StrictMock(); + mocks.ReplayAll(); - // Call - bool result = handler.ClearIllustrationPoints(); + var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper, viewCommands); - // Assert - Assert.IsFalse(result); + // When + void Call() => handler.ClearIllustrationPoints(); + + // Then + Assert.Throws(Call); mocks.VerifyAll(); } [Test] - public void ClearIllustrationPoints_CalculationWithOutputWithIllustrationPoints_ClearsIllustrationPointsAndReturnsTrue() + [TestCaseSource(nameof(GetPartialOutputs))] + public void GivenCalculationWithOutputWithVariousIllustrationPointsConfigurations_WhenClearIllustrationPoints_ThenViewClosedAndIllustrationPointsClearedAndReturnTrue( + IPartialProbabilisticPipingOutput sectionSpecificOutput, + IPartialProbabilisticPipingOutput profileSpecificOutput) { // Setup - var mocks = new MockRepository(); - var inquiryHelper = mocks.StrictMock(); - mocks.ReplayAll(); - var calculation = new ProbabilisticPipingCalculationScenario { - Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints() + Output = new ProbabilisticPipingOutput(sectionSpecificOutput, profileSpecificOutput) }; + + bool hasSectionSpecificIllustrationPoints = sectionSpecificOutput.HasGeneralResult; + bool hasProfileSpecificIllustrationPoints = profileSpecificOutput.HasGeneralResult; - var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper); + var mocks = new MockRepository(); + var inquiryHelper = mocks.Stub(); + var viewCommands = mocks.StrictMock(); + if (hasSectionSpecificIllustrationPoints) + { + SetViewCommandsExpectancies(sectionSpecificOutput, viewCommands); + } + + if (hasProfileSpecificIllustrationPoints) + { + SetViewCommandsExpectancies(profileSpecificOutput, viewCommands); + } + mocks.ReplayAll(); + + var handler = new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper, viewCommands); + // Call - bool result = handler.ClearIllustrationPoints(); + bool isCalculationAffected = handler.ClearIllustrationPoints(); // Assert - Assert.IsTrue(result); - - Assert.IsNull(((PartialProbabilisticPipingOutput) calculation.Output.ProfileSpecificOutput).GeneralResult); - Assert.IsNull(((PartialProbabilisticPipingOutput) calculation.Output.SectionSpecificOutput).GeneralResult); + bool expectedResult = hasSectionSpecificIllustrationPoints || hasProfileSpecificIllustrationPoints; + Assert.AreEqual(expectedResult, isCalculationAffected); + Assert.IsTrue(calculation.HasOutput); + Assert.IsFalse(calculation.Output.SectionSpecificOutput.HasGeneralResult); + Assert.IsFalse(calculation.Output.ProfileSpecificOutput.HasGeneralResult); mocks.VerifyAll(); } + + private static void SetViewCommandsExpectancies(IPartialProbabilisticPipingOutput sectionSpecificOutput, IViewCommands viewCommands) + { + if (sectionSpecificOutput is PartialProbabilisticFaultTreePipingOutput faultTreeOutput) + { + viewCommands.Expect(vc => vc.RemoveAllViewsForItem(faultTreeOutput.GeneralResult)); + } + else if (sectionSpecificOutput is PartialProbabilisticSubMechanismPipingOutput subMechanismOutput) + { + viewCommands.Expect(vc => vc.RemoveAllViewsForItem(subMechanismOutput.GeneralResult)); + } + } + + private static IEnumerable GetPartialOutputs() + { + PartialProbabilisticFaultTreePipingOutput faultTreeOutputWithIllustrationPoints = PipingTestDataGenerator.GetRandomPartialProbabilisticFaultTreePipingOutput(); + PartialProbabilisticFaultTreePipingOutput faultTreeOutputWithoutIllustrationPoints = PipingTestDataGenerator.GetRandomPartialProbabilisticFaultTreePipingOutput(null); + PartialProbabilisticSubMechanismPipingOutput subMechanismOutputWithIllustrationPoints = PipingTestDataGenerator.GetRandomPartialProbabilisticSubMechanismPipingOutput(); + PartialProbabilisticSubMechanismPipingOutput subMechanismOutputWithoutIllustrationPoints = PipingTestDataGenerator.GetRandomPartialProbabilisticSubMechanismPipingOutput(null); + + yield return new TestCaseData(faultTreeOutputWithIllustrationPoints, faultTreeOutputWithIllustrationPoints); + yield return new TestCaseData(faultTreeOutputWithIllustrationPoints, faultTreeOutputWithoutIllustrationPoints); + yield return new TestCaseData(faultTreeOutputWithoutIllustrationPoints, faultTreeOutputWithIllustrationPoints); + yield return new TestCaseData(faultTreeOutputWithoutIllustrationPoints, faultTreeOutputWithoutIllustrationPoints); + + yield return new TestCaseData(subMechanismOutputWithIllustrationPoints, subMechanismOutputWithIllustrationPoints); + yield return new TestCaseData(subMechanismOutputWithIllustrationPoints, subMechanismOutputWithoutIllustrationPoints); + yield return new TestCaseData(subMechanismOutputWithoutIllustrationPoints, subMechanismOutputWithIllustrationPoints); + yield return new TestCaseData(subMechanismOutputWithoutIllustrationPoints, subMechanismOutputWithoutIllustrationPoints); + } } } \ No newline at end of file