Index: Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs =================================================================== diff -u -rd3f6b7f47eff687f9d0a1e00c902dcc2203dc711 -r599caecd3749ba16226a4bd9dc3586d2f75dc3b6 --- Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision d3f6b7f47eff687f9d0a1e00c902dcc2203dc711) +++ Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 599caecd3749ba16226a4bd9dc3586d2f75dc3b6) @@ -870,7 +870,7 @@ .ToArray(); ProbabilisticPipingCalculationScenario[] probabilisticCalculations = calculations.OfType() - .ToArray(); + .ToArray(); IInquiryHelper inquiryHelper = GetInquiryHelper(); IViewCommands viewCommands = Gui.ViewCommands; @@ -889,23 +889,10 @@ .AddSeparator() .AddClearAllCalculationOutputInFailureMechanismItem( () => calculations.Any(c => c.HasOutput), - new ClearPipingCalculationOutputChangeHandler( - calculations.Where(c => c.HasOutput), inquiryHelper, viewCommands, - calculation => - { - switch (calculation) - { - case SemiProbabilisticPipingCalculationScenario semiProbabilisticPipingCalculationScenario: - return semiProbabilisticPipingCalculationScenario.Output; - case ProbabilisticPipingCalculationScenario probabilisticPipingCalculationScenario: - return probabilisticPipingCalculationScenario.Output; - default: - throw new NotSupportedException(); - } - })) + CreateClearCalculationOutputChangeHandler(calculations, inquiryHelper, viewCommands)) .AddClearIllustrationPointsOfCalculationsInFailureMechanismItem( () => ProbabilisticPipingIllustrationPointsHelper.HasIllustrationPoints(probabilisticCalculations), - CreateChangeHandler(inquiryHelper, probabilisticCalculations)) + CreateIllustrationPointsChangeHandler(inquiryHelper, probabilisticCalculations)) .AddSeparator() .AddCollapseAllItem() .AddExpandAllItem() @@ -1022,6 +1009,7 @@ StrictContextMenuItem updateEntryAndExitPointsItem = CreateCalculationGroupUpdateEntryAndExitPointItem(calculations); IInquiryHelper inquiryHelper = GetInquiryHelper(); + IViewCommands viewCommands = Gui.ViewCommands; if (!isNestedGroup) { @@ -1064,10 +1052,12 @@ nodeData, CalculateAllInCalculationGroup) .AddSeparator() - .AddClearAllCalculationOutputInGroupItem(group) + .AddClearAllCalculationOutputInGroupItem( + () => calculations.Any(c => c.HasOutput), + CreateClearCalculationOutputChangeHandler(calculations, inquiryHelper, viewCommands)) .AddClearIllustrationPointsOfCalculationsInGroupItem( () => ProbabilisticPipingIllustrationPointsHelper.HasIllustrationPoints(probabilisticCalculations), - CreateChangeHandler(inquiryHelper, probabilisticCalculations)); + CreateIllustrationPointsChangeHandler(inquiryHelper, probabilisticCalculations)); if (isNestedGroup) { @@ -1459,12 +1449,31 @@ } } - private static ClearIllustrationPointsOfProbabilisticPipingCalculationCollectionChangeHandler CreateChangeHandler( + private static ClearIllustrationPointsOfProbabilisticPipingCalculationCollectionChangeHandler CreateIllustrationPointsChangeHandler( IInquiryHelper inquiryHelper, IEnumerable calculations) { return new ClearIllustrationPointsOfProbabilisticPipingCalculationCollectionChangeHandler(inquiryHelper, calculations); } + private static ClearPipingCalculationOutputChangeHandler CreateClearCalculationOutputChangeHandler( + IEnumerable> calculations, IInquiryHelper inquiryHelper, IViewCommands viewCommands) + { + return new ClearPipingCalculationOutputChangeHandler( + calculations.Where(c => c.HasOutput), inquiryHelper, viewCommands, + calculation => + { + switch (calculation) + { + case SemiProbabilisticPipingCalculationScenario semiProbabilisticPipingCalculationScenario: + return semiProbabilisticPipingCalculationScenario.Output; + case ProbabilisticPipingCalculationScenario probabilisticPipingCalculationScenario: + return probabilisticPipingCalculationScenario.Output; + default: + throw new NotSupportedException(); + } + }); + } + /// /// Validates the provided . /// Index: Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -rc6e95a768f3d8e9e8309c2b68a3d8272904e79ab -r599caecd3749ba16226a4bd9dc3586d2f75dc3b6 --- Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision c6e95a768f3d8e9e8309c2b68a3d8272904e79ab) +++ Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision 599caecd3749ba16226a4bd9dc3586d2f75dc3b6) @@ -75,7 +75,7 @@ private const int contextMenuUpdateEntryAndExitPointsAllIndexRootGroup = 11; private const int contextMenuValidateAllIndexRootGroup = 13; private const int contextMenuCalculateAllIndexRootGroup = 14; - private const int contextMenuClearOutputIndexRootGroup = 16; + private const int contextMenuClearAllOutputIndexRootGroup = 16; private const int contextMenuClearIllustrationPointsIndexRootGroup = 17; private const int contextMenuCollapseAllIndexRootGroup = 20; private const int contextMenuExpandAllIndexRootGroup = 21; @@ -91,7 +91,7 @@ private const int contextMenuUpdateEntryAndExitPointsAllIndexNestedGroup = 10; private const int contextMenuValidateAllIndexNestedGroup = 12; private const int contextMenuCalculateAllIndexNestedGroup = 13; - private const int contextMenuClearOutputIndexNestedGroup = 15; + private const int contextMenuClearAllOutputIndexNestedGroup = 15; private const int contextMenuClearIllustrationPointsIndexNestedGroup = 16; private const int contextMenuDeleteCalculationGroupIndexNestedGroup = 17; private const int contextMenuCollapseAllIndexNestedGroup = 19; @@ -256,7 +256,8 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); treeViewControl.Expect(tvc => tvc.CanRemoveNodeForData(nodeData)).Return(true); treeViewControl.Expect(tvc => tvc.CanRenameNodeForData(nodeData)).Return(true); @@ -312,7 +313,7 @@ "Alles be&rekenen", "Voer alle berekeningen binnen deze map met berekeningen uit.", RiskeerCommonFormsResources.CalculateAllIcon); - TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuClearOutputIndexNestedGroup, + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuClearAllOutputIndexNestedGroup, "&Wis alle uitvoer...", "Wis de uitvoer van alle berekeningen binnen deze map met berekeningen.", RiskeerCommonFormsResources.ClearIcon); @@ -396,8 +397,8 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); @@ -446,7 +447,7 @@ "Alles be&rekenen", "Voer alle berekeningen binnen deze map met berekeningen uit.", RiskeerCommonFormsResources.CalculateAllIcon); - TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuClearOutputIndexRootGroup, + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuClearAllOutputIndexRootGroup, "&Wis alle uitvoer...", "Wis de uitvoer van alle berekeningen binnen deze map met berekeningen.", RiskeerCommonFormsResources.ClearIcon); @@ -508,8 +509,8 @@ { var gui = mocks.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -552,8 +553,8 @@ { var gui = mocks.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -599,8 +600,8 @@ { var gui = mocks.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -643,8 +644,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -685,8 +687,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -729,8 +732,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -782,8 +786,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -835,8 +840,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -870,8 +876,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -920,8 +927,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -968,8 +976,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -1014,8 +1023,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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.Stub()); var observer = mocks.StrictMock(); observer.Expect(o => o.UpdateObserver()); @@ -1075,8 +1085,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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.Stub()); var observer = mocks.StrictMock(); observer.Expect(o => o.UpdateObserver()); @@ -1134,8 +1145,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -1189,8 +1201,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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.Stub()); var observer = mocks.StrictMock(); observer.Expect(o => o.UpdateObserver()); @@ -1249,8 +1262,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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.Stub()); var observer = mocks.StrictMock(); observer.Expect(o => o.UpdateObserver()); @@ -1340,8 +1354,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -1396,7 +1411,8 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); @@ -1473,14 +1489,14 @@ failureMechanism, assessmentSection); - var mainWindow = mocks.Stub(); var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(g => g.MainWindow).Return(mainWindow); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); var calculatorFactory = mocks.Stub(); calculatorFactory.Stub(cf => cf.CreatePipingCalculator(null)) @@ -1564,12 +1580,12 @@ failureMechanism, assessmentSection); - var mainWindow = mocks.Stub(); var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var gui = mocks.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(g => g.MainWindow).Return(mainWindow); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); @@ -1587,92 +1603,289 @@ } [Test] - [TestCase(false)] - [TestCase(true)] - public void ContextMenuStrip_ClickOnClearOutputItem_ClearOutputAllChildCalculationsAndNotifyCalculationObservers(bool confirm) + public void ContextMenuStrip_CalculationGroupWithCalculationsWithoutOutput_ContextMenuItemClearCalculationsOutputEnabled() { // Setup - var calculation1Observer = mocks.StrictMock(); - var calculation2Observer = mocks.StrictMock(); - if (confirm) + var calculationGroup = new CalculationGroup { - calculation1Observer.Expect(o => o.UpdateObserver()); - calculation2Observer.Expect(o => o.UpdateObserver()); + Children = + { + new TestPipingCalculationScenario(), + new CalculationGroup + { + Children = + { + new TestPipingCalculationScenario(true) + } + } + } + }; + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocks, "invalidFilePath"); + + var nodeData = new PipingCalculationGroupContext(calculationGroup, + null, + 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(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); + mocks.ReplayAll(); + + plugin.Gui = gui; + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Call + ToolStripItem toolStripItem = contextMenu.Items[contextMenuClearAllOutputIndexRootGroup]; + + // Assert + Assert.IsTrue(toolStripItem.Enabled); + } } + } - var pipingFailureMechanism = new PipingFailureMechanism(); - var assessmentSection = mocks.Stub(); + [Test] + public void ContextMenuStrip_CalculationGroupWithCalculationsWithoutOutput_ContextMenuItemClearCalculationsOutputDisabled() + { + // Setup + var calculationGroup = new CalculationGroup + { + Children = + { + new TestPipingCalculationScenario() + } + }; - var calculation1 = new TestPipingCalculationScenario(true); - calculation1.Attach(calculation1Observer); + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocks, "invalidFilePath"); - var calculation2 = new TestPipingCalculationScenario(true); - calculation2.Attach(calculation2Observer); + var nodeData = new PipingCalculationGroupContext(calculationGroup, + null, + Enumerable.Empty(), + Enumerable.Empty(), + new PipingFailureMechanism(), + assessmentSection); - var childGroup = new CalculationGroup(); - childGroup.Children.Add(calculation1); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); - var emptyChildGroup = new CalculationGroup(); - var group = new CalculationGroup(); - var parentGroup = new CalculationGroup(); + using (var treeViewControl = new TreeViewControl()) + { + 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.Stub()); + mocks.ReplayAll(); - group.Children.Add(childGroup); - group.Children.Add(emptyChildGroup); - group.Children.Add(calculation2); + plugin.Gui = gui; - var nodeData = new PipingCalculationGroupContext(group, - parentGroup, + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Call + ToolStripItem toolStripItem = contextMenu.Items[contextMenuClearAllOutputIndexRootGroup]; + + // Assert + Assert.IsFalse(toolStripItem.Enabled); + } + } + } + + [Test] + public void GivenCalculationsWithOutput_WhenClearAllCalculationsOutputClickedAndAborted_ThenInquiryAndCalculationsOutputNotCleared() + { + // Given + var calculationWithOutput = new TestPipingCalculationScenario(true); + + var calculationGroup = new CalculationGroup + { + Children = + { + calculationWithOutput + } + }; + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocks, "invalidFilePath"); + + var nodeData = new PipingCalculationGroupContext(calculationGroup, + null, Enumerable.Empty(), Enumerable.Empty(), - pipingFailureMechanism, + new PipingFailureMechanism(), assessmentSection); - var parentNodeData = new PipingCalculationGroupContext(parentGroup, - null, - Enumerable.Empty(), - Enumerable.Empty(), - pipingFailureMechanism, - assessmentSection); + var calculationObserver = mocks.StrictMock(); + calculationWithOutput.Attach(calculationObserver); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + var messageBoxText = ""; + DialogBoxHandler = (name, wnd) => + { + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + + helper.ClickCancel(); + }; + using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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; - string messageBoxTitle = null, messageBoxText = null; - DialogBoxHandler = (name, wnd) => + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) { - var messageBox = new MessageBoxTester(wnd); + // When + contextMenu.Items[contextMenuClearAllOutputIndexRootGroup].PerformClick(); - messageBoxText = messageBox.Text; - messageBoxTitle = messageBox.Title; + // Then + Assert.AreEqual("Weet u zeker dat u alle uitvoer wilt wissen?", messageBoxText); - if (confirm) + Assert.IsTrue(calculationWithOutput.HasOutput); + } + } + } + + [Test] + public void GivenCalculationsWithOutput_WhenClearAllCalculationsOutputClickedAndContinued_ThenInquiryAndOutputViewsClosedAndCalculationsOutputCleared() + { + // Given + var semiProbabilisticCalculationWithOutput = new SemiProbabilisticPipingCalculationScenario + { + Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput() + }; + var probabilisticCalculationWithOutput = new ProbabilisticPipingCalculationScenario + { + Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithoutIllustrationPoints() + }; + + var probabilisticCalculationWithoutOutput = new ProbabilisticPipingCalculationScenario(); + var semiProbabilisticCalculationWithoutOutput = new SemiProbabilisticPipingCalculationScenario(); + var calculationGroup = new CalculationGroup + { + Children = + { + semiProbabilisticCalculationWithOutput, + probabilisticCalculationWithOutput, + semiProbabilisticCalculationWithoutOutput, + probabilisticCalculationWithoutOutput + } + }; + + var affectedCalculationObserver = mocks.StrictMock(); + affectedCalculationObserver.Expect(o => o.UpdateObserver()).Repeat.Twice(); + semiProbabilisticCalculationWithOutput.Attach(affectedCalculationObserver); + probabilisticCalculationWithOutput.Attach(affectedCalculationObserver); + + var unaffectedCalculationObserver = mocks.StrictMock(); + semiProbabilisticCalculationWithoutOutput.Attach(unaffectedCalculationObserver); + probabilisticCalculationWithoutOutput.Attach(unaffectedCalculationObserver); + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocks, "invalidFilePath"); + + var nodeData = new PipingCalculationGroupContext(calculationGroup, + null, + Enumerable.Empty(), + Enumerable.Empty(), + new PipingFailureMechanism(), + assessmentSection); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var messageBoxText = ""; + DialogBoxHandler = (name, wnd) => + { + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + + helper.ClickOk(); + }; + + using (var treeViewControl = new TreeViewControl()) + { + var viewCommands = mocks.StrictMock(); + viewCommands.Expect(vc => vc.RemoveAllViewsForItem(semiProbabilisticCalculationWithOutput.Output)); + viewCommands.Expect(vc => vc.RemoveAllViewsForItem(probabilisticCalculationWithOutput.Output)); + + 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(viewCommands); + mocks.ReplayAll(); + + plugin.Gui = gui; + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // When + contextMenu.Items[contextMenuClearAllOutputIndexRootGroup].PerformClick(); + + // Then + Assert.AreEqual("Weet u zeker dat u alle uitvoer wilt wissen?", messageBoxText); + + Assert.IsFalse(probabilisticCalculationWithOutput.HasOutput); + } + } + } + + [Test] + public void GivenCalculationGroupWithCalculationOfUnsupportedType_WhenClearAllCalculationsOutputClickedAndContinued_ThenThrowsNotSupportedException() + { + // Given + using (var treeViewControl = new TreeViewControl()) + { + var assessmentSection = mocks.Stub(); + var failureMechanism = new PipingFailureMechanism(); + var calculationGroup = new CalculationGroup + { + Children = { - messageBox.ClickOk(); + new TestPipingCalculationScenario(true) } - else - { - messageBox.ClickCancel(); - } }; - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl)) + var nodeData = new PipingCalculationGroupContext(calculationGroup, + null, + Enumerable.Empty(), + Enumerable.Empty(), + failureMechanism, + assessmentSection); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + 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.Stub()); + + mocks.ReplayAll(); + + plugin.Gui = gui; + + DialogBoxHandler = (name, wnd) => { - // Call - contextMenu.Items[contextMenuClearOutputIndexNestedGroup].PerformClick(); + var messageBox = new MessageBoxTester(wnd); + messageBox.ClickOk(); + }; - // Assert - Assert.AreNotEqual(confirm, calculation1.HasOutput); - Assert.AreNotEqual(confirm, calculation2.HasOutput); + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // When + void Call() => contextMenu.Items[contextMenuClearAllOutputIndexRootGroup].PerformClick(); - Assert.AreEqual("Bevestigen", messageBoxTitle); - Assert.AreEqual("Weet u zeker dat u alle uitvoer wilt wissen?", messageBoxText); + // Then + Assert.Throws(Call); } } } @@ -1735,8 +1948,9 @@ using (var treeViewControl = new TreeViewControl()) { var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(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.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -1806,9 +2020,9 @@ var mainWindow = mocks.Stub(); var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mainWindow); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -1916,9 +2130,9 @@ var mainWindow = mocks.Stub(); var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mainWindow); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -2043,9 +2257,9 @@ var mainWindow = mocks.Stub(); var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mainWindow); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -2234,9 +2448,9 @@ var mainWindow = mocks.Stub(); var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mainWindow); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -2324,9 +2538,9 @@ var mainWindow = mocks.Stub(); var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mainWindow); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -2433,9 +2647,9 @@ var mainWindow = mocks.Stub(); var gui = mocks.Stub(); - gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mainWindow); - gui.Stub(cmp => cmp.ViewCommands).Return(mocks.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui;