Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -r6821ff075261a98f42221ccc796d007ca11a93fe -r3ff488a27f75d080db7cf4e13f508ba5555516df --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision 6821ff075261a98f42221ccc796d007ca11a93fe) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision 3ff488a27f75d080db7cf4e13f508ba5555516df) @@ -327,11 +327,12 @@ } [Test] - public void ContextMenuStrip_NotValidDataWithCalculationOutput_ReturnContextWithItems() + public void ContextMenuStrip_NestedCalculationGroupWithCalculationOutput_ReturnContextWithItems() { // Setup var gui = mocks.StrictMock(); var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); group.Children.Add(new PipingCalculationScenario(new GeneralPipingInput(), new NormProbabilityPipingInput()) { @@ -341,12 +342,16 @@ var pipingFailureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); - var parentData = new object(); var nodeData = new PipingCalculationGroupContext(group, Enumerable.Empty(), Enumerable.Empty(), pipingFailureMechanismMock, assessmentSectionMock); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanismMock, + assessmentSectionMock); var applicationFeatureCommandHandler = mocks.Stub(); var exportImportHandler = mocks.Stub(); @@ -356,6 +361,7 @@ var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, nodeData, treeViewControl); gui.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + treeViewControl.Expect(tvc => tvc.CanRemoveNodeForData(nodeData)).Return(true); treeViewControl.Expect(tvc => tvc.CanRenameNodeForData(nodeData)).Return(true); treeViewControl.Expect(tvc => tvc.CanExpandOrCollapseForData(nodeData)).Repeat.Twice().Return(false); @@ -364,10 +370,10 @@ plugin.Gui = gui; // Call - ContextMenuStrip menu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + ContextMenuStrip menu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); // Assert - Assert.AreEqual(16, menu.Items.Count); + Assert.AreEqual(17, menu.Items.Count); TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuAddCalculationGroupIndex, RingtoetsFormsResources.CalculationGroup_Add_CalculationGroup, "Voeg een nieuwe berekeningsmap toe aan deze berekeningsmap.", @@ -394,47 +400,53 @@ CoreCommonGuiResources.Rename, CoreCommonGuiResources.Rename_ToolTip, CoreCommonGuiResources.RenameIcon); - TestHelper.AssertContextMenuStripContainsItem(menu, 9, + TestHelper.AssertContextMenuStripContainsItem(menu, 8, + CoreCommonGuiResources.Delete, + CoreCommonGuiResources.Delete_ToolTip, + CoreCommonGuiResources.DeleteIcon); + + TestHelper.AssertContextMenuStripContainsItem(menu, 10, CoreCommonGuiResources.Import, CoreCommonGuiResources.Import_ToolTip, CoreCommonGuiResources.ImportIcon, false); - TestHelper.AssertContextMenuStripContainsItem(menu, 10, + TestHelper.AssertContextMenuStripContainsItem(menu, 11, CoreCommonGuiResources.Export, CoreCommonGuiResources.Export_ToolTip, CoreCommonGuiResources.ExportIcon, false); - TestHelper.AssertContextMenuStripContainsItem(menu, 12, + TestHelper.AssertContextMenuStripContainsItem(menu, 13, CoreCommonGuiResources.Expand_all, CoreCommonGuiResources.Expand_all_ToolTip, CoreCommonGuiResources.ExpandAllIcon, false); - TestHelper.AssertContextMenuStripContainsItem(menu, 13, + TestHelper.AssertContextMenuStripContainsItem(menu, 14, CoreCommonGuiResources.Collapse_all, CoreCommonGuiResources.Collapse_all_ToolTip, CoreCommonGuiResources.CollapseAllIcon, false); - TestHelper.AssertContextMenuStripContainsItem(menu, 15, + TestHelper.AssertContextMenuStripContainsItem(menu, 16, CoreCommonGuiResources.Properties, CoreCommonGuiResources.Properties_ToolTip, CoreCommonGuiResources.PropertiesHS, false); + CollectionAssert.AllItemsAreInstancesOfType(new[] { menu.Items[2], menu.Items[6], - menu.Items[8], - menu.Items[11], - menu.Items[14] + menu.Items[9], + menu.Items[12], + menu.Items[15] }, typeof(ToolStripSeparator)); mocks.VerifyAll(); } [Test] - public void ContextMenuStrip_WithFailureMechanismContextParent_ReturnContextMenuWithoutRenameRemove() + public void ContextMenuStrip_NoParent_ReturnContextMenuWithoutRenameRemove() { // Setup var gui = mocks.StrictMock(); @@ -448,7 +460,6 @@ var pipingFailureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); - var parentData = new PipingFailureMechanismContext(pipingFailureMechanismMock, assessmentSectionMock); var nodeData = new PipingCalculationGroupContext(group, Enumerable.Empty(), Enumerable.Empty(), @@ -470,7 +481,7 @@ plugin.Gui = gui; // Call - ContextMenuStrip menu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl); // Assert var mainCalculationGroupContextMenuItemOffset = 4; @@ -538,7 +549,7 @@ } [Test] - public void ContextMenuStrip_FailureMechanismAsParentWithoutAvailableSurfaceLines_GenerateCalculationsDisabled() + public void ContextMenuStrip_NoParentAndWithoutAvailableSurfaceLines_GenerateCalculationsDisabled() { // Setup var gui = mocks.StrictMock(); @@ -548,7 +559,6 @@ var pipingFailureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); - var parentData = new PipingFailureMechanismContext(pipingFailureMechanismMock, assessmentSectionMock); var nodeData = new PipingCalculationGroupContext(group, Enumerable.Empty(), new[] @@ -566,7 +576,7 @@ plugin.Gui = gui; // Call - ContextMenuStrip menu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl); // Assert TestHelper.AssertContextMenuStripContainsItem(menu, 1, @@ -577,7 +587,7 @@ } [Test] - public void ContextMenuStrip_FailureMechanismAsParentWithoutAvailableSoilModels_GenerateCalculationsDisabled() + public void ContextMenuStrip_NoParentAndWithoutAvailableSoilModels_GenerateCalculationsDisabled() { // Setup var gui = mocks.StrictMock(); @@ -587,7 +597,6 @@ var pipingFailureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); - var parentData = new PipingFailureMechanismContext(pipingFailureMechanismMock, assessmentSectionMock); var nodeData = new PipingCalculationGroupContext(group, new[] { @@ -605,7 +614,7 @@ plugin.Gui = gui; // Call - ContextMenuStrip menu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl); // Assert TestHelper.AssertContextMenuStripContainsItem(menu, 1, @@ -616,7 +625,7 @@ } [Test] - public void ContextMenuStrip_FailureMechanismAsParentWithAvailableSurfaceLinesAndSoilModels_GenerateCalculationsEnabled() + public void ContextMenuStrip_NoParentAndWithAvailableSurfaceLinesAndSoilModels_GenerateCalculationsEnabled() { // Setup var gui = mocks.StrictMock(); @@ -626,7 +635,6 @@ var pipingFailureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); - var parentData = new PipingFailureMechanismContext(pipingFailureMechanismMock, assessmentSectionMock); var nodeData = new PipingCalculationGroupContext(group, new[] { @@ -647,7 +655,7 @@ plugin.Gui = gui; // Call - ContextMenuStrip menu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl); // Assert TestHelper.AssertContextMenuStripContainsItem(menu, 1, @@ -657,14 +665,15 @@ } [Test] - public void ContextMenuStrip_GroupWithNoCalculations_ValidateAndCalculateAllDisabled() + public void ContextMenuStrip_NestedCalculationGroupWithNoCalculations_ValidateAndCalculateAllDisabled() { // Setup var gui = mocks.StrictMock(); var treeViewControl = mocks.StrictMock(); var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); var parentData = new PipingFailureMechanism(); var pipingFailureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); @@ -673,6 +682,11 @@ Enumerable.Empty(), pipingFailureMechanismMock, assessmentSectionMock); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanismMock, + assessmentSectionMock); gui.Expect(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); @@ -681,7 +695,7 @@ plugin.Gui = gui; // Call - ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); // Assert ToolStripItem validateItem = contextMenu.Items[contextMenuValidateAllIndex]; @@ -701,13 +715,19 @@ var gui = mocks.StrictMock(); var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); var pipingFailureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); var nodeData = new PipingCalculationGroupContext(group, Enumerable.Empty(), Enumerable.Empty(), pipingFailureMechanismMock, assessmentSectionMock); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanismMock, + assessmentSectionMock); var calculationItem = mocks.Stub(); calculationItem.Stub(ci => ci.Name).Return("Nieuwe map"); @@ -727,7 +747,7 @@ nodeData.Attach(observer); - ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl); + ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); // Precondition Assert.AreEqual(1, group.Children.Count); @@ -752,13 +772,19 @@ var gui = mocks.StrictMock(); var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); var pipingFailureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); var nodeData = new PipingCalculationGroupContext(group, Enumerable.Empty(), Enumerable.Empty(), pipingFailureMechanismMock, assessmentSectionMock); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanismMock, + assessmentSectionMock); var calculationItem = mocks.Stub(); calculationItem.Stub(ci => ci.Name).Return("Nieuwe berekening"); @@ -778,7 +804,7 @@ nodeData.Attach(observer); - var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl); + var contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); // Precondition Assert.AreEqual(1, group.Children.Count); @@ -813,8 +839,9 @@ childGroup.Children.Add(validCalculation); var emptyChildGroup = new CalculationGroup(); - var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + group.Children.Add(childGroup); group.Children.Add(emptyChildGroup); group.Children.Add(invalidCalculation); @@ -827,14 +854,19 @@ Enumerable.Empty(), pipingFailureMechanismMock, assessmentSectionMock); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanismMock, + assessmentSectionMock); gui.Expect(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); mocks.ReplayAll(); plugin.Gui = gui; - var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl); + var contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); // Call Action call = () => contextMenu.Items[contextMenuValidateAllIndex].PerformClick(); @@ -874,6 +906,8 @@ var emptyChildGroup = new CalculationGroup(); var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + group.Children.Add(childGroup); group.Children.Add(emptyChildGroup); group.Children.Add(invalidCalculation); @@ -886,6 +920,11 @@ Enumerable.Empty(), pipingFailureMechanismMock, assessmentSectionMock); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanismMock, + assessmentSectionMock); gui.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Expect(g => g.MainWindow).Return(mainWindow); @@ -894,7 +933,7 @@ plugin.Gui = gui; - var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl); + var contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); DialogBoxHandler = (name, wnd) => { @@ -940,8 +979,9 @@ childGroup.Children.Add(calculation1); var emptyChildGroup = new CalculationGroup(); - var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + group.Children.Add(childGroup); group.Children.Add(emptyChildGroup); group.Children.Add(calculation2); @@ -954,6 +994,11 @@ Enumerable.Empty(), pipingFailureMechanismMock, assessmentSectionMock); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanismMock, + assessmentSectionMock); gui.Expect(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); @@ -978,7 +1023,7 @@ messageBox.ClickCancel(); } }; - var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl); + var contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); // Call contextMenu.Items[contextMenuClearOutputIndex].PerformClick(); @@ -1007,7 +1052,6 @@ var mainWindow = mocks.Stub(); - var parentData = new PipingFailureMechanismContext(pipingFailureMechanismMock, assessmentSectionMock); var surfaceLines = new[] { new RingtoetsPipingSurfaceLine @@ -1045,7 +1089,7 @@ new ButtonTester("CustomCancelButton", selectionDialog).Click(); }; - var contextMenu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl); // Call contextMenu.Items[contextMenuAddGenerateCalculationsIndex].PerformClick(); @@ -1072,7 +1116,6 @@ var assessmentSectionMock = mocks.StrictMock(); var mainWindow = mocks.Stub(); - var parentData = new PipingFailureMechanismContext(pipingFailureMechanism, assessmentSectionMock); var surfaceLine1 = new RingtoetsPipingSurfaceLine { @@ -1155,7 +1198,7 @@ new ButtonTester("OkButton", selectionDialog).Click(); }; - var contextMenu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl); // When contextMenu.Items[contextMenuAddGenerateCalculationsIndex].PerformClick(); @@ -1190,7 +1233,6 @@ var assessmentSectionMock = mocks.StrictMock(); var mainWindow = mocks.Stub(); - var parentData = new PipingFailureMechanismContext(pipingFailureMechanism, assessmentSectionMock); var surfaceLine1 = new RingtoetsPipingSurfaceLine { @@ -1273,7 +1315,7 @@ new ButtonTester("CustomCancelButton", selectionDialog).Click(); }; - var contextMenu = info.ContextMenuStrip(nodeData, parentData, treeViewControl); + var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl); // When contextMenu.Items[contextMenuAddGenerateCalculationsIndex].PerformClick();