Index: Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs =================================================================== diff -u -rddad7117cf82255493a1a9f80b2c6562dc88bfd2 -r2849eb49b3a91e71c9a1461c7b56b73e620ac2c2 --- Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision ddad7117cf82255493a1a9f80b2c6562dc88bfd2) +++ Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 2849eb49b3a91e71c9a1461c7b56b73e620ac2c2) @@ -1336,8 +1336,8 @@ return childNodes.ToArray(); } - private ContextMenuStrip ProbabilisticPipingCalculationScenarioContextContextMenuStrip(ProbabilisticPipingCalculationScenarioContext nodeData, - object parentData, TreeViewControl treeViewControl) + private ContextMenuStrip ProbabilisticPipingCalculationScenarioContextContextMenuStrip( + ProbabilisticPipingCalculationScenarioContext nodeData, object parentData, TreeViewControl treeViewControl) { ProbabilisticPipingCalculationScenario calculation = nodeData.WrappedData; var builder = new RiskeerContextMenuBuilder(Gui.Get(nodeData, treeViewControl)); @@ -1369,7 +1369,8 @@ }, inquiryHelper, viewCommands)) .AddClearIllustrationPointsOfCalculationItem( () => ProbabilisticPipingIllustrationPointsHelper.HasIllustrationPoints(calculation), - new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler(calculation, inquiryHelper)) + new ClearIllustrationPointsOfProbabilisticPipingCalculationChangeHandler( + calculation, inquiryHelper, viewCommands)) .AddDeleteItem() .AddSeparator() .AddCollapseAllItem() Index: Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/Probabilistic/ProbabilisticPipingCalculationScenarioContextTreeNodeInfoTest.cs =================================================================== diff -u -r4231613a2fe8a95de3ad758ba284a8f9a3d5f55f -r2849eb49b3a91e71c9a1461c7b56b73e620ac2c2 --- Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/Probabilistic/ProbabilisticPipingCalculationScenarioContextTreeNodeInfoTest.cs (.../ProbabilisticPipingCalculationScenarioContextTreeNodeInfoTest.cs) (revision 4231613a2fe8a95de3ad758ba284a8f9a3d5f55f) +++ Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/Probabilistic/ProbabilisticPipingCalculationScenarioContextTreeNodeInfoTest.cs (.../ProbabilisticPipingCalculationScenarioContextTreeNodeInfoTest.cs) (revision 2849eb49b3a91e71c9a1461c7b56b73e620ac2c2) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; @@ -695,117 +696,188 @@ } [Test] - public void ContextMenuStrip_CalculationWithOutputAndWithoutIllustrationPoints_ContextMenuItemClearIllustrationPointsDisabledAndToolTipSet() + public void ContextMenuStrip_CalculationWithIllustrationPoints_ContextMenuItemClearIllustrationPointsEnabled() { // Setup - using (var treeViewControl = new TreeViewControl()) + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocks); + + var calculation = new ProbabilisticPipingCalculationScenario { - var calculation = new ProbabilisticPipingCalculationScenario - { - Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithoutIllustrationPoints() - }; - var pipingFailureMechanism = new PipingFailureMechanism(); - var assessmentSection = mocks.Stub(); - var nodeData = new ProbabilisticPipingCalculationScenarioContext(calculation, - new CalculationGroup(), - Enumerable.Empty(), - Enumerable.Empty(), - pipingFailureMechanism, - assessmentSection); + Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints() + }; + var nodeData = new ProbabilisticPipingCalculationScenarioContext( + calculation, new CalculationGroup(), Enumerable.Empty(), + Enumerable.Empty(), + new PipingFailureMechanism(), assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { var gui = mocks.Stub(); - gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocks.Stub()); gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; - // Call - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, assessmentSection, treeViewControl)) { + // Call + ToolStripItem contextMenuItem = menu.Items[contextMenuClearIllustrationPointsIndex]; + // Assert - TestHelper.AssertContextMenuStripContainsItem(contextMenu, contextMenuClearIllustrationPointsIndex, - "Wis illustratiepunten...", - "Deze berekening heeft geen illustratiepunten om te wissen.", - RiskeerCommonFormsResources.ClearIllustrationPointsIcon, - false); + Assert.IsTrue(contextMenuItem.Enabled); } } } [Test] - public void ContextMenuStrip_CalculationWithoutOutput_ContextMenuItemClearIllustrationPointsDisabledAndToolTipSet() + public void ContextMenuStrip_CalculationWithOutputWithoutIllustrationPoints_ContextMenuItemClearIllustrationPointsDisabled() { // Setup - using (var treeViewControl = new TreeViewControl()) + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocks); + + var calculation = new ProbabilisticPipingCalculationScenario { - var calculation = new ProbabilisticPipingCalculationScenario(); - var pipingFailureMechanism = new PipingFailureMechanism(); - var assessmentSection = mocks.Stub(); - var nodeData = new ProbabilisticPipingCalculationScenarioContext(calculation, - new CalculationGroup(), - Enumerable.Empty(), - Enumerable.Empty(), - pipingFailureMechanism, - assessmentSection); + Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithoutIllustrationPoints() + }; + var nodeData = new ProbabilisticPipingCalculationScenarioContext( + calculation, new CalculationGroup(), Enumerable.Empty(), + Enumerable.Empty(), + new PipingFailureMechanism(), assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { var gui = mocks.Stub(); - gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocks.Stub()); gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; - // Call - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, assessmentSection, treeViewControl)) { + // Call + ToolStripItem contextMenuItem = menu.Items[contextMenuClearIllustrationPointsIndex]; + // Assert - TestHelper.AssertContextMenuStripContainsItem(contextMenu, contextMenuClearIllustrationPointsIndex, - "Wis illustratiepunten...", - "Deze berekening heeft geen illustratiepunten om te wissen.", - RiskeerCommonFormsResources.ClearIllustrationPointsIcon, - false); + Assert.IsFalse(contextMenuItem.Enabled); } } } [Test] - public void ContextMenuStrip_CalculationWithOutputAndIllustrationPoints_ContextMenuItemClearIllustrationPointsEnabledAndToolTipSet() + public void GivenCalculationWithIllustrationPoints_WhenClearIllustrationPointsClickedAndAborted_ThenInquiryAndIllustrationPointsNotCleared() { - // Setup + // Given + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocks); + + var calculation = new ProbabilisticPipingCalculationScenario + { + Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints() + }; + var nodeData = new ProbabilisticPipingCalculationScenarioContext( + calculation, new CalculationGroup(), Enumerable.Empty(), + Enumerable.Empty(), + new PipingFailureMechanism(), assessmentSection); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var calculationObserver = mocks.StrictMock(); + calculation.Attach(calculationObserver); + + var messageBoxText = ""; + DialogBoxHandler = (name, wnd) => + { + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + + helper.ClickCancel(); + }; + using (var treeViewControl = new TreeViewControl()) { - var calculation = new ProbabilisticPipingCalculationScenario + var gui = mocks.Stub(); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.StrictMock()); + mocks.ReplayAll(); + + plugin.Gui = gui; + + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, assessmentSection, treeViewControl)) { - Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints() - }; - var pipingFailureMechanism = new PipingFailureMechanism(); - var assessmentSection = mocks.Stub(); - var nodeData = new ProbabilisticPipingCalculationScenarioContext(calculation, - new CalculationGroup(), - Enumerable.Empty(), - Enumerable.Empty(), - pipingFailureMechanism, - assessmentSection); + // When + menu.Items[contextMenuClearIllustrationPointsIndex].PerformClick(); + // Then + Assert.AreEqual("Weet u zeker dat u de illustratiepunten van deze berekening wilt wissen?", messageBoxText); + Assert.IsTrue(calculation.Output.ProfileSpecificOutput.HasGeneralResult); + Assert.IsTrue(calculation.Output.SectionSpecificOutput.HasGeneralResult); + } + } + } + + [Test] + [TestCaseSource(nameof(GetCalculationOutputs))] + public void GivenCalculationWithIllustrationPoints_WhenClearIllustrationPointsClickedAndContinued_ThenInquiryAndOutputViewClosedAndIllustrationPointsCleared( + IPartialProbabilisticPipingOutput partialOutput) + { + // Given + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocks); + + var calculation = new ProbabilisticPipingCalculationScenario + { + Output = new ProbabilisticPipingOutput(partialOutput, partialOutput) + }; + var nodeData = new ProbabilisticPipingCalculationScenarioContext( + calculation, new CalculationGroup(), Enumerable.Empty(), + Enumerable.Empty(), + new PipingFailureMechanism(), assessmentSection); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var calculationObserver = mocks.StrictMock(); + calculationObserver.Expect(o => o.UpdateObserver()); + calculation.Attach(calculationObserver); + + var messageBoxText = ""; + DialogBoxHandler = (name, wnd) => + { + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + + helper.ClickOk(); + }; + + using (var treeViewControl = new TreeViewControl()) + { + var viewCommands = mocks.StrictMock(); + SetViewCommandsExpectancies(calculation.Output.ProfileSpecificOutput, viewCommands); + SetViewCommandsExpectancies(calculation.Output.SectionSpecificOutput, viewCommands); + var gui = mocks.Stub(); - gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocks.Stub()); - gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(viewCommands); mocks.ReplayAll(); plugin.Gui = gui; - // Call - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, assessmentSection, treeViewControl)) { - // Assert - TestHelper.AssertContextMenuStripContainsItem(contextMenu, contextMenuClearIllustrationPointsIndex, - "Wis illustratiepunten...", - "Wis de berekende illustratiepunten van deze berekening.", - RiskeerCommonFormsResources.ClearIllustrationPointsIcon); + // When + menu.Items[contextMenuClearIllustrationPointsIndex].PerformClick(); + + // Then + Assert.AreEqual("Weet u zeker dat u de illustratiepunten van deze berekening wilt wissen?", messageBoxText); + Assert.IsFalse(calculation.Output.ProfileSpecificOutput.HasGeneralResult); + Assert.IsFalse(calculation.Output.SectionSpecificOutput.HasGeneralResult); } } } @@ -1205,72 +1277,6 @@ } } - [Test] - [TestCase(true)] - [TestCase(false)] - public void GivenCalculationWithOutput_WhenClearingOutputFromContextMenu_ThenCalculationOutputClearedAndNotified(bool confirm) - { - // Given - using (var treeViewControl = new TreeViewControl()) - { - var calculation = new ProbabilisticPipingCalculationScenario(); - var pipingFailureMechanism = new PipingFailureMechanism(); - var assessmentSection = mocks.Stub(); - - var pipingCalculationScenarioContext = new ProbabilisticPipingCalculationScenarioContext(calculation, - new CalculationGroup(), - Enumerable.Empty(), - Enumerable.Empty(), - pipingFailureMechanism, - assessmentSection); - - var gui = mocks.Stub(); - gui.Stub(g => g.Get(pipingCalculationScenarioContext, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - gui.Stub(g => g.MainWindow).Return(mocks.Stub()); - gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); - - var observer = mocks.StrictMock(); - if (confirm) - { - observer.Expect(o => o.UpdateObserver()); - } - - mocks.ReplayAll(); - - plugin.Gui = gui; - - calculation.Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints(); - calculation.Attach(observer); - - string messageBoxText = null, messageBoxTitle = null; - DialogBoxHandler = (name, wnd) => - { - var messageBox = new MessageBoxTester(wnd); - messageBoxText = messageBox.Text; - messageBoxTitle = messageBox.Title; - if (confirm) - { - messageBox.ClickOk(); - } - else - { - messageBox.ClickCancel(); - } - }; - - using (ContextMenuStrip contextMenuStrip = info.ContextMenuStrip(pipingCalculationScenarioContext, null, treeViewControl)) - { - // When - contextMenuStrip.Items[contextMenuClearIndex].PerformClick(); - - // Then - Assert.AreNotEqual(confirm, calculation.HasOutput); - Assert.AreEqual("Bevestigen", messageBoxTitle); - Assert.AreEqual("Weet u zeker dat u de uitvoer van deze berekening wilt wissen?", messageBoxText); - } - } - } - public override void Setup() { mocks = new MockRepository(); @@ -1319,5 +1325,23 @@ } }; } + + 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 GetCalculationOutputs() + { + yield return new TestCaseData(PipingTestDataGenerator.GetRandomPartialProbabilisticFaultTreePipingOutput()); + yield return new TestCaseData(PipingTestDataGenerator.GetRandomPartialProbabilisticSubMechanismPipingOutput()); + } } } \ No newline at end of file