Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj =================================================================== diff -u -r6833a6c92024007966c7fd99a955b234653f2ef8 -rb47c41dd3741ada477388e6c8a9224ecb66291e7 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj (.../Ringtoets.Common.Forms.csproj) (revision 6833a6c92024007966c7fd99a955b234653f2ef8) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj (.../Ringtoets.Common.Forms.csproj) (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -62,6 +62,7 @@ Resources.resx + UserControl Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/CalculationTreeNodeInfoFactory.cs =================================================================== diff -u -rba310454172ed29499474b2f8b013fa0f0c523b8 -rb47c41dd3741ada477388e6c8a9224ecb66291e7 --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/CalculationTreeNodeInfoFactory.cs (.../CalculationTreeNodeInfoFactory.cs) (revision ba310454172ed29499474b2f8b013fa0f0c523b8) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/CalculationTreeNodeInfoFactory.cs (.../CalculationTreeNodeInfoFactory.cs) (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -24,10 +24,8 @@ using System.Linq; using System.Windows.Forms; using Core.Common.Controls.TreeView; -using Core.Common.Gui.ContextMenu; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; -using Ringtoets.Common.Forms.Helpers; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.Common.Forms.Properties; using RingtoetsCommonDataResources = Ringtoets.Common.Data.Properties.Resources; @@ -143,178 +141,6 @@ }; } - /// - /// This method adds a context menu item for creating new calculation groups. - /// - /// The builder to add the context menu item to. - /// The calculation group involved. - public static void AddCreateCalculationGroupItem(IContextMenuBuilder builder, CalculationGroup calculationGroup) - { - var createCalculationGroupItem = new StrictContextMenuItem( - Resources.CalculationGroup_Add_CalculationGroup, - Resources.CalculationGroup_Add_CalculationGroup_Tooltip, - Resources.AddFolderIcon, - (o, args) => - { - var calculation = new CalculationGroup - { - Name = NamingHelper.GetUniqueName(calculationGroup.Children, RingtoetsCommonDataResources.CalculationGroup_DefaultName, c => c.Name) - }; - calculationGroup.Children.Add(calculation); - calculationGroup.NotifyObservers(); - }); - - builder.AddCustomItem(createCalculationGroupItem); - } - - /// - /// This method adds a context menu item for creating new calculations. - /// - /// The builder to add the context menu item to. - /// The calculation group context involved. - /// The action for adding a calculation to the calculation group. - public static void AddCreateCalculationItem(IContextMenuBuilder builder, TCalculationGroupContext calculationGroupContext, Action addCalculation) - where TCalculationGroupContext : ICalculationContext - { - var createCalculationItem = new StrictContextMenuItem( - Resources.CalculationGroup_Add_Calculation, - Resources.CalculationGroup_Add_Calculation_Tooltip, - Resources.FailureMechanismIcon, - (o, args) => { addCalculation(calculationGroupContext); }); - - builder.AddCustomItem(createCalculationItem); - } - - /// - /// This method adds a context menu item for clearing the output of all calculations in the calculation group. - /// - /// The builder to add the context menu item to. - /// The calculation group involved. - public static void AddClearAllCalculationOutputInGroupItem(IContextMenuBuilder builder, CalculationGroup calculationGroup) - { - var clearAllItem = new StrictContextMenuItem( - Resources.Clear_all_output, - Resources.CalculationGroup_ClearOutput_ToolTip, - Resources.ClearIcon, (o, args) => - { - if (MessageBox.Show(Resources.CalculationGroup_ClearOutput_Are_you_sure_clear_all_output, BaseResources.Confirm, MessageBoxButtons.OKCancel) != DialogResult.OK) - { - return; - } - - foreach (var calc in calculationGroup.GetCalculations().Where(c => c.HasOutput)) - { - calc.ClearOutput(); - calc.NotifyObservers(); - } - }); - - if (!calculationGroup.GetCalculations().Any(c => c.HasOutput)) - { - clearAllItem.Enabled = false; - clearAllItem.ToolTipText = Resources.CalculationGroup_ClearOutput_No_calculation_with_output_to_clear; - } - - builder.AddCustomItem(clearAllItem); - } - - /// - /// This method adds a context menu item for performing all calculations in the calculation group. - /// - /// The builder to add the context menu item to. - /// The calculation group involved. - /// The calculation group context belonging to the calculation group. - /// The action that performs all calculations. - public static void AddPerformAllCalculationsInGroupItem - (IContextMenuBuilder builder, CalculationGroup calculationGroup, TCalculationGroupContext context, Action calculateAll) - where TCalculationGroupContext : ICalculationContext - { - var performAllItem = new StrictContextMenuItem( - Resources.Calculate_all, - Resources.CalculationGroup_CalculateAll_ToolTip, - Resources.CalculateAllIcon, (o, args) => { calculateAll(calculationGroup, context); }); - - if (!calculationGroup.GetCalculations().Any()) - { - performAllItem.Enabled = false; - performAllItem.ToolTipText = Resources.CalculationGroup_CalculateAll_No_calculations_to_run; - } - - builder.AddCustomItem(performAllItem); - } - - /// - /// This method adds a context menu item for performing a calculation. - /// - /// The builder to add the context menu item to. - /// The calculation involved. - /// The calculation context belonging to the calculation. - /// The action that performs the calculation. - public static void AddPerformCalculationItem( - IContextMenuBuilder builder, TCalculation calculation, TCalculationContext context, Action calculate) - where TCalculation : ICalculation where TCalculationContext : ICalculationContext - { - var calculateItem = new StrictContextMenuItem( - Resources.Calculate, - Resources.Calculate_ToolTip, - Resources.CalculateIcon, - (o, args) => { calculate(calculation, context); }); - - builder.AddCustomItem(calculateItem); - } - - /// - /// This method adds a context menu item for clearing the output of a calculation. - /// - /// The builder to add the context menu item to. - /// The calculation involved. - public static void AddClearCalculationOutputItem(IContextMenuBuilder builder, ICalculation calculation) - { - var clearOutputItem = new StrictContextMenuItem( - Resources.Clear_output, - Resources.Clear_output_ToolTip, - Resources.ClearIcon, - (o, args) => - { - if (MessageBox.Show(Resources.Calculation_ContextMenuStrip_Are_you_sure_clear_output, BaseResources.Confirm, MessageBoxButtons.OKCancel) != DialogResult.OK) - { - return; - } - - calculation.ClearOutput(); - calculation.NotifyObservers(); - }); - - if (!calculation.HasOutput) - { - clearOutputItem.Enabled = false; - clearOutputItem.ToolTipText = Resources.ClearOutput_No_output_to_clear; - } - - builder.AddCustomItem(clearOutputItem); - } - - /// - /// This method adds a context menu item for changing the relevancy state of a disabled failure mechanism. - /// - /// The builder to add the context menu item to. - /// The failure mechanism context involved. - public static void AddDisabledChangeRelevancyItem(IContextMenuBuilder builder, TFailureMechanismContext failureMechanismContext) - where TFailureMechanismContext : IFailureMechanismContext - { - var changeRelevancyItem = new StrictContextMenuItem( - Resources.FailureMechanismContextMenuStrip_Is_relevant, - Resources.FailureMechanismContextMenuStrip_Is_relevant_Tooltip, - Resources.Checkbox_empty, - (sender, args) => - { - failureMechanismContext.WrappedData.IsRelevant = true; - failureMechanismContext.WrappedData.NotifyObservers(); - }); - - builder.AddCustomItem(changeRelevancyItem); - } - # region Helper methods for CreateCalculationGroupContextTreeNodeInfo private static bool IsNestedGroup(object parentData) Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/ContextMenuItemFactory.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/ContextMenuItemFactory.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/ContextMenuItemFactory.cs (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -0,0 +1,214 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Linq; +using System.Windows.Forms; +using Core.Common.Gui.ContextMenu; +using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Forms.Helpers; +using Ringtoets.Common.Forms.PresentationObjects; +using Ringtoets.Common.Forms.Properties; +using RingtoetsCommonDataResources = Ringtoets.Common.Data.Properties.Resources; +using BaseResources = Core.Common.Base.Properties.Resources; + +namespace Ringtoets.Common.Forms.TreeNodeInfos +{ + /// + /// This class represents a factory for creating . + /// + public static class ContextMenuItemFactory + { + /// + /// This method adds a context menu item for creating new calculation groups. + /// + /// The builder to add the context menu item to. + /// The calculation group involved. + public static void AddCreateCalculationGroupItem(IContextMenuBuilder builder, CalculationGroup calculationGroup) + { + var createCalculationGroupItem = new StrictContextMenuItem( + Resources.CalculationGroup_Add_CalculationGroup, + Resources.CalculationGroup_Add_CalculationGroup_Tooltip, + Resources.AddFolderIcon, + (o, args) => + { + var calculation = new CalculationGroup + { + Name = NamingHelper.GetUniqueName(calculationGroup.Children, RingtoetsCommonDataResources.CalculationGroup_DefaultName, c => c.Name) + }; + calculationGroup.Children.Add(calculation); + calculationGroup.NotifyObservers(); + }); + + builder.AddCustomItem(createCalculationGroupItem); + } + + /// + /// This method adds a context menu item for creating new calculations. + /// + /// The builder to add the context menu item to. + /// The calculation group context involved. + /// The action for adding a calculation to the calculation group. + public static void AddCreateCalculationItem(IContextMenuBuilder builder, TCalculationGroupContext calculationGroupContext, Action addCalculation) + where TCalculationGroupContext : ICalculationContext + { + var createCalculationItem = new StrictContextMenuItem( + Resources.CalculationGroup_Add_Calculation, + Resources.CalculationGroup_Add_Calculation_Tooltip, + Resources.FailureMechanismIcon, + (o, args) => { addCalculation(calculationGroupContext); }); + + builder.AddCustomItem(createCalculationItem); + } + + /// + /// This method adds a context menu item for clearing the output of all calculations in the calculation group. + /// + /// The builder to add the context menu item to. + /// The calculation group involved. + public static void AddClearAllCalculationOutputInGroupItem(IContextMenuBuilder builder, CalculationGroup calculationGroup) + { + var clearAllItem = new StrictContextMenuItem( + Resources.Clear_all_output, + Resources.CalculationGroup_ClearOutput_ToolTip, + Resources.ClearIcon, (o, args) => + { + if (MessageBox.Show(Resources.CalculationGroup_ClearOutput_Are_you_sure_clear_all_output, BaseResources.Confirm, MessageBoxButtons.OKCancel) != DialogResult.OK) + { + return; + } + + foreach (var calc in calculationGroup.GetCalculations().Where(c => c.HasOutput)) + { + calc.ClearOutput(); + calc.NotifyObservers(); + } + }); + + if (!calculationGroup.GetCalculations().Any(c => c.HasOutput)) + { + clearAllItem.Enabled = false; + clearAllItem.ToolTipText = Resources.CalculationGroup_ClearOutput_No_calculation_with_output_to_clear; + } + + builder.AddCustomItem(clearAllItem); + } + + /// + /// This method adds a context menu item for performing all calculations in the calculation group. + /// + /// The builder to add the context menu item to. + /// The calculation group involved. + /// The calculation group context belonging to the calculation group. + /// The action that performs all calculations. + public static void AddPerformAllCalculationsInGroupItem + (IContextMenuBuilder builder, CalculationGroup calculationGroup, TCalculationGroupContext context, Action calculateAll) + where TCalculationGroupContext : ICalculationContext + { + var performAllItem = new StrictContextMenuItem( + Resources.Calculate_all, + Resources.CalculationGroup_CalculateAll_ToolTip, + Resources.CalculateAllIcon, (o, args) => { calculateAll(calculationGroup, context); }); + + if (!calculationGroup.GetCalculations().Any()) + { + performAllItem.Enabled = false; + performAllItem.ToolTipText = Resources.CalculationGroup_CalculateAll_No_calculations_to_run; + } + + builder.AddCustomItem(performAllItem); + } + + /// + /// This method adds a context menu item for performing a calculation. + /// + /// The builder to add the context menu item to. + /// The calculation involved. + /// The calculation context belonging to the calculation. + /// The action that performs the calculation. + public static void AddPerformCalculationItem( + IContextMenuBuilder builder, TCalculation calculation, TCalculationContext context, Action calculate) + where TCalculation : ICalculation + where TCalculationContext : ICalculationContext + { + var calculateItem = new StrictContextMenuItem( + Resources.Calculate, + Resources.Calculate_ToolTip, + Resources.CalculateIcon, + (o, args) => { calculate(calculation, context); }); + + builder.AddCustomItem(calculateItem); + } + + /// + /// This method adds a context menu item for clearing the output of a calculation. + /// + /// The builder to add the context menu item to. + /// The calculation involved. + public static void AddClearCalculationOutputItem(IContextMenuBuilder builder, ICalculation calculation) + { + var clearOutputItem = new StrictContextMenuItem( + Resources.Clear_output, + Resources.Clear_output_ToolTip, + Resources.ClearIcon, + (o, args) => + { + if (MessageBox.Show(Resources.Calculation_ContextMenuStrip_Are_you_sure_clear_output, BaseResources.Confirm, MessageBoxButtons.OKCancel) != DialogResult.OK) + { + return; + } + + calculation.ClearOutput(); + calculation.NotifyObservers(); + }); + + if (!calculation.HasOutput) + { + clearOutputItem.Enabled = false; + clearOutputItem.ToolTipText = Resources.ClearOutput_No_output_to_clear; + } + + builder.AddCustomItem(clearOutputItem); + } + + /// + /// This method adds a context menu item for changing the relevancy state of a disabled failure mechanism. + /// + /// The builder to add the context menu item to. + /// The failure mechanism context involved. + public static void AddDisabledChangeRelevancyItem(IContextMenuBuilder builder, TFailureMechanismContext failureMechanismContext) + where TFailureMechanismContext : IFailureMechanismContext + { + var changeRelevancyItem = new StrictContextMenuItem( + Resources.FailureMechanismContextMenuStrip_Is_relevant, + Resources.FailureMechanismContextMenuStrip_Is_relevant_Tooltip, + Resources.Checkbox_empty, + (sender, args) => + { + failureMechanismContext.WrappedData.IsRelevant = true; + failureMechanismContext.WrappedData.NotifyObservers(); + }); + + builder.AddCustomItem(changeRelevancyItem); + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj =================================================================== diff -u -r6833a6c92024007966c7fd99a955b234653f2ef8 -rb47c41dd3741ada477388e6c8a9224ecb66291e7 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj (.../Ringtoets.Common.Forms.Test.csproj) (revision 6833a6c92024007966c7fd99a955b234653f2ef8) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj (.../Ringtoets.Common.Forms.Test.csproj) (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -67,6 +67,7 @@ + Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/CalculationTreeNodeInfoFactoryTest.cs =================================================================== diff -u -rb0faaa0cb58090f64503985877b0912696c1117d -rb47c41dd3741ada477388e6c8a9224ecb66291e7 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/CalculationTreeNodeInfoFactoryTest.cs (.../CalculationTreeNodeInfoFactoryTest.cs) (revision b0faaa0cb58090f64503985877b0912696c1117d) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/CalculationTreeNodeInfoFactoryTest.cs (.../CalculationTreeNodeInfoFactoryTest.cs) (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -25,10 +25,7 @@ using System.Windows.Forms; using Core.Common.Base; using Core.Common.Controls.TreeView; -using Core.Common.Gui.Commands; -using Core.Common.Gui.ContextMenu; using Core.Common.TestUtil; -using NUnit.Extensions.Forms; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; @@ -42,587 +39,8 @@ namespace Ringtoets.Common.Forms.Test.TreeNodeInfos { [TestFixture] - public class CalculationTreeNodeInfoFactoryTest : NUnitFormTest + public class CalculationTreeNodeInfoFactoryTest { - [Test] - public void AddCreateCalculationGroupItem_Always_CreatesDecoratedCalculationGroupItem() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - - mocks.ReplayAll(); - - var calculationGroup = new CalculationGroup(); - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddCreateCalculationGroupItem(menuBuilder, calculationGroup); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, - RingtoetsFormsResources.CalculationGroup_Add_CalculationGroup, - RingtoetsFormsResources.CalculationGroup_Add_CalculationGroup_Tooltip, - RingtoetsFormsResources.AddFolderIcon); - } - - [Test] - public void AddCreateCalculationGroupItem_PerformClickOnCreatedItem_CalculationGroupAdded() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - - mocks.ReplayAll(); - - var calculationGroup = new CalculationGroup(); - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - CalculationTreeNodeInfoFactory.AddCreateCalculationGroupItem(menuBuilder, calculationGroup); - var contextMenuItem = menuBuilder.Build().Items[0]; - - // Call - contextMenuItem.PerformClick(); - - // Assert - Assert.AreEqual(1, calculationGroup.Children.Count); - Assert.IsTrue(calculationGroup.Children[0] is CalculationGroup); - } - - [Test] - public void AddCreateCalculationItem_Always_CreatesDecoratedCalculationItem() - { - // Setup - var mocks = new MockRepository(); - var failureMechanism = mocks.Stub(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - - mocks.ReplayAll(); - - var calculationGroup = new CalculationGroup(); - var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanism); - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddCreateCalculationItem(menuBuilder, calculationGroupContext, null); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, - RingtoetsFormsResources.CalculationGroup_Add_Calculation, - RingtoetsFormsResources.CalculationGroup_Add_Calculation_Tooltip, - RingtoetsFormsResources.FailureMechanismIcon); - } - - [Test] - public void AddCreateCalculationItem_PerformClickOnCreatedItem_AddCalculationMethodPerformed() - { - // Setup - var mocks = new MockRepository(); - var failureMechanism = mocks.Stub(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - - mocks.ReplayAll(); - - var counter = 0; - var calculationGroup = new CalculationGroup(); - var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanism); - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - CalculationTreeNodeInfoFactory.AddCreateCalculationItem(menuBuilder, calculationGroupContext, context => counter++); - var contextMenuItem = menuBuilder.Build().Items[0]; - - // Call - contextMenuItem.PerformClick(); - - // Assert - Assert.AreEqual(1, counter); - } - - [Test] - public void AddClearAllCalculationOutputInGroupItem_GroupWithCalculationOutput_CreatesDecoratedAndEnabledClearItem() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculationWithOutput = mocks.StrictMock(); - - calculationWithOutput.Expect(c => c.HasOutput).Return(true); - - mocks.ReplayAll(); - - var calculationGroup = new CalculationGroup - { - Children = - { - calculationWithOutput - } - }; - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddClearAllCalculationOutputInGroupItem(menuBuilder, calculationGroup); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, - RingtoetsFormsResources.Clear_all_output, - RingtoetsFormsResources.CalculationGroup_ClearOutput_ToolTip, - RingtoetsFormsResources.ClearIcon); - } - - [Test] - public void AddClearAllCalculationOutputInGroupItem_GroupWithoutCalculationOutput_CreatesDecoratedAndDisabledClearItem() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculationWithoutOutput = mocks.StrictMock(); - - calculationWithoutOutput.Expect(c => c.HasOutput).Return(false); - - mocks.ReplayAll(); - - var calculationGroup = new CalculationGroup - { - Children = - { - calculationWithoutOutput - } - }; - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddClearAllCalculationOutputInGroupItem(menuBuilder, calculationGroup); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, - RingtoetsFormsResources.Clear_all_output, - RingtoetsFormsResources.CalculationGroup_ClearOutput_No_calculation_with_output_to_clear, - RingtoetsFormsResources.ClearIcon, - false); - } - - [Test] - public void AddClearAllCalculationOutputInGroupItem_PerformClickOnCreatedItemAndConfirmChange_CalculationOutputClearedAndObserversNotified() - { - var messageBoxText = ""; - var messageBoxTitle = ""; - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculationWithOutput1 = mocks.StrictMock(); - var calculationWithOutput2 = mocks.StrictMock(); - var calculationWithoutOutput = mocks.StrictMock(); - - calculationWithOutput1.Stub(c => c.HasOutput).Return(true); - calculationWithOutput2.Stub(c => c.HasOutput).Return(true); - calculationWithoutOutput.Stub(c => c.HasOutput).Return(false); - - calculationWithOutput1.Expect(c => c.ClearOutput()); - calculationWithOutput1.Expect(c => c.NotifyObservers()); - calculationWithOutput2.Expect(c => c.ClearOutput()); - calculationWithOutput2.Expect(c => c.NotifyObservers()); - - mocks.ReplayAll(); - - DialogBoxHandler = (name, wnd) => - { - var messageBox = new MessageBoxTester(wnd); - messageBoxText = messageBox.Text; - messageBoxTitle = messageBox.Title; - - messageBox.ClickOk(); - }; - - var calculationGroup = new CalculationGroup - { - Children = - { - calculationWithOutput1, - new CalculationGroup - { - Children = - { - calculationWithOutput2, - calculationWithoutOutput - } - } - } - }; - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - CalculationTreeNodeInfoFactory.AddClearAllCalculationOutputInGroupItem(menuBuilder, calculationGroup); - var contextMenuItem = menuBuilder.Build().Items[0]; - - // Call - contextMenuItem.PerformClick(); - - // Assert - Assert.AreEqual(BaseResources.Confirm, messageBoxTitle); - Assert.AreEqual(RingtoetsFormsResources.CalculationGroup_ClearOutput_Are_you_sure_clear_all_output, messageBoxText); - - mocks.VerifyAll(); - } - - [Test] - public void AddClearAllCalculationOutputInGroupItem_PerformClickOnCreatedItemAndCancelChange_CalculationOutputNotCleared() - { - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculationWithOutput1 = mocks.StrictMock(); - var calculationWithOutput2 = mocks.StrictMock(); - var calculationWithoutOutput = mocks.StrictMock(); - - calculationWithOutput1.Stub(c => c.HasOutput).Return(true); - calculationWithOutput2.Stub(c => c.HasOutput).Return(true); - calculationWithoutOutput.Stub(c => c.HasOutput).Return(false); - - mocks.ReplayAll(); - - DialogBoxHandler = (name, wnd) => - { - var messageBox = new MessageBoxTester(wnd); - - messageBox.ClickCancel(); - }; - - var calculationGroup = new CalculationGroup - { - Children = - { - calculationWithOutput1, - new CalculationGroup - { - Children = - { - calculationWithOutput2, - calculationWithoutOutput - } - } - } - }; - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - CalculationTreeNodeInfoFactory.AddClearAllCalculationOutputInGroupItem(menuBuilder, calculationGroup); - var contextMenuItem = menuBuilder.Build().Items[0]; - - // Call - contextMenuItem.PerformClick(); - - mocks.VerifyAll(); - } - - [Test] - public void AddPerformAllCalculationsInGroupItem_GroupWithCalculations_CreatesDecoratedAndEnabledPerformItem() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculation = mocks.StrictMock(); - - mocks.ReplayAll(); - - var calculationGroup = new CalculationGroup - { - Children = - { - calculation - } - }; - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddPerformAllCalculationsInGroupItem(menuBuilder, calculationGroup, null, null); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, - RingtoetsFormsResources.Calculate_all, - RingtoetsFormsResources.CalculationGroup_CalculateAll_ToolTip, - RingtoetsFormsResources.CalculateAllIcon); - } - - [Test] - public void AddPerformAllCalculationsInGroupItem_GroupWithoutCalculations_CreatesDecoratedAndDisabledPerformItem() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - - mocks.ReplayAll(); - - var calculationGroup = new CalculationGroup(); - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddPerformAllCalculationsInGroupItem(menuBuilder, calculationGroup, null, null); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, - RingtoetsFormsResources.Calculate_all, - RingtoetsFormsResources.CalculationGroup_CalculateAll_No_calculations_to_run, - RingtoetsFormsResources.CalculateAllIcon, - false); - } - - [Test] - public void AddPerformAllCalculationsInGroupItem_PerformClickOnCreatedItem_PerformAllCalculationMethodPerformed() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculation = mocks.StrictMock(); - var failureMechanism = mocks.StrictMock(); - - mocks.ReplayAll(); - - var counter = 0; - var calculationGroup = new CalculationGroup - { - Children = - { - calculation - } - }; - - var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanism); - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); - - CalculationTreeNodeInfoFactory.AddPerformAllCalculationsInGroupItem(menuBuilder, calculationGroup, calculationGroupContext, (group, context) => counter++); - var contextMenuItem = menuBuilder.Build().Items[0]; - - // Call - contextMenuItem.PerformClick(); - - // Assert - Assert.AreEqual(1, counter); - } - - [Test] - public void AddPerformCalculationItem_Always_CreatesPerformItem() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - - mocks.ReplayAll(); - - var calculation = new TestCalculation(); - - var menubuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculation, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddPerformCalculationItem(menubuilder, calculation, null, null); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menubuilder.Build(), 0, - RingtoetsFormsResources.Calculate, - RingtoetsFormsResources.Calculate_ToolTip, - RingtoetsFormsResources.CalculateIcon); - - mocks.VerifyAll(); - } - - [Test] - public void AddPerformCalculationItem_PerformClickOnCreatedItem_PerformCalculationMethod() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var failureMechanisMock = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - - mocks.ReplayAll(); - - var calculation = new TestCalculation(); - var testCalculationContext = new TestCalculationContext(calculation, failureMechanisMock); - - var counter = 0; - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculation, treeViewControl); - CalculationTreeNodeInfoFactory.AddPerformCalculationItem(menuBuilder, calculation, testCalculationContext, (calc, context) => counter++); - var contextMenuItem = menuBuilder.Build().Items[0]; - - // Call - contextMenuItem.PerformClick(); - - // Assert - Assert.AreEqual(1, counter); - mocks.VerifyAll(); - } - - [Test] - public void AddClearCalculationOutputItem_CalculationWithOutput_CreatesDecoratedAndEnabledClearItem() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculationWithOutput = mocks.StrictMock(); - - calculationWithOutput.Expect(c => c.HasOutput).Return(true); - - mocks.ReplayAll(); - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationWithOutput, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddClearCalculationOutputItem(menuBuilder, calculationWithOutput); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, - RingtoetsFormsResources.Clear_output, - RingtoetsFormsResources.Clear_output_ToolTip, - RingtoetsFormsResources.ClearIcon); - mocks.VerifyAll(); - } - - [Test] - public void AddClearCalculationOutputItem_CalculationWithoutOutput_CreatesDecoratedAndDisabledClearItem() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculationWithOutput = mocks.StrictMock(); - - calculationWithOutput.Expect(c => c.HasOutput).Return(false); - - mocks.ReplayAll(); - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationWithOutput, treeViewControl); - - // Call - CalculationTreeNodeInfoFactory.AddClearCalculationOutputItem(menuBuilder, calculationWithOutput); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, - RingtoetsFormsResources.Clear_output, - RingtoetsFormsResources.ClearOutput_No_output_to_clear, - RingtoetsFormsResources.ClearIcon, - false); - mocks.VerifyAll(); - } - - [Test] - public void AddClearCalculationOutputItem_PerformClickOnCreatedItemAndConfirmChange_CalculationOutputClearedAndObserversNotified() - { - var messageBoxText = ""; - var messageBoxTitle = ""; - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculationWithOutput = mocks.StrictMock(); - - calculationWithOutput.Stub(c => c.HasOutput).Return(true); - - calculationWithOutput.Expect(c => c.ClearOutput()); - calculationWithOutput.Expect(c => c.NotifyObservers()); - - mocks.ReplayAll(); - - DialogBoxHandler = (name, wnd) => - { - var messageBox = new MessageBoxTester(wnd); - messageBoxText = messageBox.Text; - messageBoxTitle = messageBox.Title; - - messageBox.ClickOk(); - }; - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationWithOutput, treeViewControl); - - CalculationTreeNodeInfoFactory.AddClearCalculationOutputItem(menuBuilder, calculationWithOutput); - var contextMenuItem = menuBuilder.Build().Items[0]; - - // Call - contextMenuItem.PerformClick(); - - // Assert - Assert.AreEqual(BaseResources.Confirm, messageBoxTitle); - Assert.AreEqual(RingtoetsFormsResources.Calculation_ContextMenuStrip_Are_you_sure_clear_output, messageBoxText); - - mocks.VerifyAll(); - } - - [Test] - public void AddClearCalculationOutputItem_PerformClickOnCreatedItemAndCancelChange_CalculationOutputNotCleared() - { - var mocks = new MockRepository(); - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - var calculationWithOutput = mocks.StrictMock(); - - calculationWithOutput.Stub(c => c.HasOutput).Return(true); - - mocks.ReplayAll(); - - DialogBoxHandler = (name, wnd) => - { - var messageBox = new MessageBoxTester(wnd); - - messageBox.ClickCancel(); - }; - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationWithOutput, treeViewControl); - - CalculationTreeNodeInfoFactory.AddClearCalculationOutputItem(menuBuilder, calculationWithOutput); - var contextMenuItem = menuBuilder.Build().Items[0]; - - // Call - contextMenuItem.PerformClick(); - - mocks.VerifyAll(); - } - # region CreateCalculationGroupContextTreeNodeInfo [Test] Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/ContextMenuItemFactoryTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/ContextMenuItemFactoryTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/ContextMenuItemFactoryTest.cs (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -0,0 +1,680 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using Core.Common.Base; +using Core.Common.Controls.TreeView; +using Core.Common.Gui.Commands; +using Core.Common.Gui.ContextMenu; +using Core.Common.TestUtil; +using NUnit.Extensions.Forms; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Forms.PresentationObjects; +using Ringtoets.Common.Forms.TreeNodeInfos; +using BaseResources = Core.Common.Base.Properties.Resources; +using RingtoetsFormsResources = Ringtoets.Common.Forms.Properties.Resources; + +namespace Ringtoets.Common.Forms.Test.TreeNodeInfos +{ + [TestFixture] + public class ContextMenuItemFactoryTest : NUnitFormTest + { + [Test] + public void AddCreateCalculationGroupItem_Always_CreatesDecoratedCalculationGroupItem() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + // Call + ContextMenuItemFactory.AddCreateCalculationGroupItem(menuBuilder, calculationGroup); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, + RingtoetsFormsResources.CalculationGroup_Add_CalculationGroup, + RingtoetsFormsResources.CalculationGroup_Add_CalculationGroup_Tooltip, + RingtoetsFormsResources.AddFolderIcon); + } + + [Test] + public void AddCreateCalculationGroupItem_PerformClickOnCreatedItem_CalculationGroupAdded() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + ContextMenuItemFactory.AddCreateCalculationGroupItem(menuBuilder, calculationGroup); + var contextMenuItem = menuBuilder.Build().Items[0]; + + // Call + contextMenuItem.PerformClick(); + + // Assert + Assert.AreEqual(1, calculationGroup.Children.Count); + Assert.IsTrue(calculationGroup.Children[0] is CalculationGroup); + } + + [Test] + public void AddCreateCalculationItem_Always_CreatesDecoratedCalculationItem() + { + // Setup + var mocks = new MockRepository(); + var failureMechanism = mocks.Stub(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanism); + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + // Call + ContextMenuItemFactory.AddCreateCalculationItem(menuBuilder, calculationGroupContext, null); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, + RingtoetsFormsResources.CalculationGroup_Add_Calculation, + RingtoetsFormsResources.CalculationGroup_Add_Calculation_Tooltip, + RingtoetsFormsResources.FailureMechanismIcon); + } + + [Test] + public void AddCreateCalculationItem_PerformClickOnCreatedItem_AddCalculationMethodPerformed() + { + // Setup + var mocks = new MockRepository(); + var failureMechanism = mocks.Stub(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + mocks.ReplayAll(); + + var counter = 0; + var calculationGroup = new CalculationGroup(); + var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanism); + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + ContextMenuItemFactory.AddCreateCalculationItem(menuBuilder, calculationGroupContext, context => counter++); + var contextMenuItem = menuBuilder.Build().Items[0]; + + // Call + contextMenuItem.PerformClick(); + + // Assert + Assert.AreEqual(1, counter); + } + + [Test] + public void AddClearAllCalculationOutputInGroupItem_GroupWithCalculationOutput_CreatesDecoratedAndEnabledClearItem() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculationWithOutput = mocks.StrictMock(); + + calculationWithOutput.Expect(c => c.HasOutput).Return(true); + + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup + { + Children = + { + calculationWithOutput + } + }; + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + // Call + ContextMenuItemFactory.AddClearAllCalculationOutputInGroupItem(menuBuilder, calculationGroup); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, + RingtoetsFormsResources.Clear_all_output, + RingtoetsFormsResources.CalculationGroup_ClearOutput_ToolTip, + RingtoetsFormsResources.ClearIcon); + } + + [Test] + public void AddClearAllCalculationOutputInGroupItem_GroupWithoutCalculationOutput_CreatesDecoratedAndDisabledClearItem() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculationWithoutOutput = mocks.StrictMock(); + + calculationWithoutOutput.Expect(c => c.HasOutput).Return(false); + + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup + { + Children = + { + calculationWithoutOutput + } + }; + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + // Call + ContextMenuItemFactory.AddClearAllCalculationOutputInGroupItem(menuBuilder, calculationGroup); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, + RingtoetsFormsResources.Clear_all_output, + RingtoetsFormsResources.CalculationGroup_ClearOutput_No_calculation_with_output_to_clear, + RingtoetsFormsResources.ClearIcon, + false); + } + + [Test] + public void AddClearAllCalculationOutputInGroupItem_PerformClickOnCreatedItemAndConfirmChange_CalculationOutputClearedAndObserversNotified() + { + var messageBoxText = ""; + var messageBoxTitle = ""; + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculationWithOutput1 = mocks.StrictMock(); + var calculationWithOutput2 = mocks.StrictMock(); + var calculationWithoutOutput = mocks.StrictMock(); + + calculationWithOutput1.Stub(c => c.HasOutput).Return(true); + calculationWithOutput2.Stub(c => c.HasOutput).Return(true); + calculationWithoutOutput.Stub(c => c.HasOutput).Return(false); + + calculationWithOutput1.Expect(c => c.ClearOutput()); + calculationWithOutput1.Expect(c => c.NotifyObservers()); + calculationWithOutput2.Expect(c => c.ClearOutput()); + calculationWithOutput2.Expect(c => c.NotifyObservers()); + + mocks.ReplayAll(); + + DialogBoxHandler = (name, wnd) => + { + var messageBox = new MessageBoxTester(wnd); + messageBoxText = messageBox.Text; + messageBoxTitle = messageBox.Title; + + messageBox.ClickOk(); + }; + + var calculationGroup = new CalculationGroup + { + Children = + { + calculationWithOutput1, + new CalculationGroup + { + Children = + { + calculationWithOutput2, + calculationWithoutOutput + } + } + } + }; + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + ContextMenuItemFactory.AddClearAllCalculationOutputInGroupItem(menuBuilder, calculationGroup); + var contextMenuItem = menuBuilder.Build().Items[0]; + + // Call + contextMenuItem.PerformClick(); + + // Assert + Assert.AreEqual(BaseResources.Confirm, messageBoxTitle); + Assert.AreEqual(RingtoetsFormsResources.CalculationGroup_ClearOutput_Are_you_sure_clear_all_output, messageBoxText); + + mocks.VerifyAll(); + } + + [Test] + public void AddClearAllCalculationOutputInGroupItem_PerformClickOnCreatedItemAndCancelChange_CalculationOutputNotCleared() + { + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculationWithOutput1 = mocks.StrictMock(); + var calculationWithOutput2 = mocks.StrictMock(); + var calculationWithoutOutput = mocks.StrictMock(); + + calculationWithOutput1.Stub(c => c.HasOutput).Return(true); + calculationWithOutput2.Stub(c => c.HasOutput).Return(true); + calculationWithoutOutput.Stub(c => c.HasOutput).Return(false); + + mocks.ReplayAll(); + + DialogBoxHandler = (name, wnd) => + { + var messageBox = new MessageBoxTester(wnd); + + messageBox.ClickCancel(); + }; + + var calculationGroup = new CalculationGroup + { + Children = + { + calculationWithOutput1, + new CalculationGroup + { + Children = + { + calculationWithOutput2, + calculationWithoutOutput + } + } + } + }; + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + ContextMenuItemFactory.AddClearAllCalculationOutputInGroupItem(menuBuilder, calculationGroup); + var contextMenuItem = menuBuilder.Build().Items[0]; + + // Call + contextMenuItem.PerformClick(); + + mocks.VerifyAll(); + } + + [Test] + public void AddPerformAllCalculationsInGroupItem_GroupWithCalculations_CreatesDecoratedAndEnabledPerformItem() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculation = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup + { + Children = + { + calculation + } + }; + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + // Call + ContextMenuItemFactory.AddPerformAllCalculationsInGroupItem(menuBuilder, calculationGroup, null, null); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, + RingtoetsFormsResources.Calculate_all, + RingtoetsFormsResources.CalculationGroup_CalculateAll_ToolTip, + RingtoetsFormsResources.CalculateAllIcon); + } + + [Test] + public void AddPerformAllCalculationsInGroupItem_GroupWithoutCalculations_CreatesDecoratedAndDisabledPerformItem() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculationGroup = new CalculationGroup(); + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + // Call + ContextMenuItemFactory.AddPerformAllCalculationsInGroupItem(menuBuilder, calculationGroup, null, null); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, + RingtoetsFormsResources.Calculate_all, + RingtoetsFormsResources.CalculationGroup_CalculateAll_No_calculations_to_run, + RingtoetsFormsResources.CalculateAllIcon, + false); + } + + [Test] + public void AddPerformAllCalculationsInGroupItem_PerformClickOnCreatedItem_PerformAllCalculationMethodPerformed() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculation = mocks.StrictMock(); + var failureMechanism = mocks.StrictMock(); + + mocks.ReplayAll(); + + var counter = 0; + var calculationGroup = new CalculationGroup + { + Children = + { + calculation + } + }; + + var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanism); + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationGroup, treeViewControl); + + ContextMenuItemFactory.AddPerformAllCalculationsInGroupItem(menuBuilder, calculationGroup, calculationGroupContext, (group, context) => counter++); + var contextMenuItem = menuBuilder.Build().Items[0]; + + // Call + contextMenuItem.PerformClick(); + + // Assert + Assert.AreEqual(1, counter); + } + + [Test] + public void AddPerformCalculationItem_Always_CreatesPerformItem() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculation = new TestCalculation(); + + var menubuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculation, treeViewControl); + + // Call + ContextMenuItemFactory.AddPerformCalculationItem(menubuilder, calculation, null, null); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menubuilder.Build(), 0, + RingtoetsFormsResources.Calculate, + RingtoetsFormsResources.Calculate_ToolTip, + RingtoetsFormsResources.CalculateIcon); + + mocks.VerifyAll(); + } + + [Test] + public void AddPerformCalculationItem_PerformClickOnCreatedItem_PerformCalculationMethod() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var failureMechanisMock = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculation = new TestCalculation(); + var testCalculationContext = new TestCalculationContext(calculation, failureMechanisMock); + + var counter = 0; + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculation, treeViewControl); + ContextMenuItemFactory.AddPerformCalculationItem(menuBuilder, calculation, testCalculationContext, (calc, context) => counter++); + var contextMenuItem = menuBuilder.Build().Items[0]; + + // Call + contextMenuItem.PerformClick(); + + // Assert + Assert.AreEqual(1, counter); + mocks.VerifyAll(); + } + + [Test] + public void AddClearCalculationOutputItem_CalculationWithOutput_CreatesDecoratedAndEnabledClearItem() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculationWithOutput = mocks.StrictMock(); + + calculationWithOutput.Expect(c => c.HasOutput).Return(true); + + mocks.ReplayAll(); + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationWithOutput, treeViewControl); + + // Call + ContextMenuItemFactory.AddClearCalculationOutputItem(menuBuilder, calculationWithOutput); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, + RingtoetsFormsResources.Clear_output, + RingtoetsFormsResources.Clear_output_ToolTip, + RingtoetsFormsResources.ClearIcon); + mocks.VerifyAll(); + } + + [Test] + public void AddClearCalculationOutputItem_CalculationWithoutOutput_CreatesDecoratedAndDisabledClearItem() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculationWithOutput = mocks.StrictMock(); + + calculationWithOutput.Expect(c => c.HasOutput).Return(false); + + mocks.ReplayAll(); + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationWithOutput, treeViewControl); + + // Call + ContextMenuItemFactory.AddClearCalculationOutputItem(menuBuilder, calculationWithOutput); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menuBuilder.Build(), 0, + RingtoetsFormsResources.Clear_output, + RingtoetsFormsResources.ClearOutput_No_output_to_clear, + RingtoetsFormsResources.ClearIcon, + false); + mocks.VerifyAll(); + } + + [Test] + public void AddClearCalculationOutputItem_PerformClickOnCreatedItemAndConfirmChange_CalculationOutputClearedAndObserversNotified() + { + var messageBoxText = ""; + var messageBoxTitle = ""; + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculationWithOutput = mocks.StrictMock(); + + calculationWithOutput.Stub(c => c.HasOutput).Return(true); + + calculationWithOutput.Expect(c => c.ClearOutput()); + calculationWithOutput.Expect(c => c.NotifyObservers()); + + mocks.ReplayAll(); + + DialogBoxHandler = (name, wnd) => + { + var messageBox = new MessageBoxTester(wnd); + messageBoxText = messageBox.Text; + messageBoxTitle = messageBox.Title; + + messageBox.ClickOk(); + }; + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationWithOutput, treeViewControl); + + ContextMenuItemFactory.AddClearCalculationOutputItem(menuBuilder, calculationWithOutput); + var contextMenuItem = menuBuilder.Build().Items[0]; + + // Call + contextMenuItem.PerformClick(); + + // Assert + Assert.AreEqual(BaseResources.Confirm, messageBoxTitle); + Assert.AreEqual(RingtoetsFormsResources.Calculation_ContextMenuStrip_Are_you_sure_clear_output, messageBoxText); + + mocks.VerifyAll(); + } + + [Test] + public void AddClearCalculationOutputItem_PerformClickOnCreatedItemAndCancelChange_CalculationOutputNotCleared() + { + var mocks = new MockRepository(); + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + var calculationWithOutput = mocks.StrictMock(); + + calculationWithOutput.Stub(c => c.HasOutput).Return(true); + + mocks.ReplayAll(); + + DialogBoxHandler = (name, wnd) => + { + var messageBox = new MessageBoxTester(wnd); + + messageBox.ClickCancel(); + }; + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, calculationWithOutput, treeViewControl); + + ContextMenuItemFactory.AddClearCalculationOutputItem(menuBuilder, calculationWithOutput); + var contextMenuItem = menuBuilder.Build().Items[0]; + + // Call + contextMenuItem.PerformClick(); + + mocks.VerifyAll(); + } + + # region Nested types + + private class TestCalculationGroupContext : Observable, ICalculationContext + { + public TestCalculationGroupContext(CalculationGroup wrappedData, IFailureMechanism failureMechanism) + { + WrappedData = wrappedData; + FailureMechanism = failureMechanism; + } + + public CalculationGroup WrappedData { get; private set; } + + public IFailureMechanism FailureMechanism { get; private set; } + } + + private class TestCalculationContext : Observable, ICalculationContext + { + public TestCalculationContext(TestCalculation wrappedData, IFailureMechanism failureMechanism) + { + WrappedData = wrappedData; + FailureMechanism = failureMechanism; + } + + public TestCalculation WrappedData { get; private set; } + + public IFailureMechanism FailureMechanism { get; private set; } + } + + private class TestCalculation : Observable, ICalculation + { + public TestCalculation() + { + Name = "Nieuwe berekening"; + } + + public string Name { get; set; } + + public string Comments { get; set; } + + public bool HasOutput + { + get + { + return false; + } + } + + public void ClearOutput() { } + + public void ClearHydraulicBoundaryLocation() { } + + public ICalculationInput GetObservableInput() + { + return null; + } + } + + # endregion + } +} Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs =================================================================== diff -u -r009444e57fa99bf5e3584a5bb86b6c314d46f3ff -rb47c41dd3741ada477388e6c8a9224ecb66291e7 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 009444e57fa99bf5e3584a5bb86b6c314d46f3ff) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -240,8 +240,7 @@ Gui.ViewCommands.RemoveAllViewsForItem(grassCoverErosionInwardsFailureMechanismContext); grassCoverErosionInwardsFailureMechanismContext.WrappedData.IsRelevant = false; grassCoverErosionInwardsFailureMechanismContext.WrappedData.NotifyObservers(); - } - ); + }); return Gui.Get(grassCoverErosionInwardsFailureMechanismContext, treeViewControl) .AddOpenItem() @@ -260,7 +259,7 @@ { var builder = Gui.Get(grassCoverErosionInwardsFailureMechanismContext, treeViewControl); - CalculationTreeNodeInfoFactory.AddDisabledChangeRelevancyItem(builder, grassCoverErosionInwardsFailureMechanismContext); + ContextMenuItemFactory.AddDisabledChangeRelevancyItem(builder, grassCoverErosionInwardsFailureMechanismContext); return builder.AddSeparator() .AddExpandAllItem() @@ -320,17 +319,15 @@ if (!isNestedGroup) { - builder - .AddOpenItem() - .AddSeparator(); + builder.AddOpenItem() + .AddSeparator(); } - CalculationTreeNodeInfoFactory.AddCreateCalculationGroupItem(builder, group); - CalculationTreeNodeInfoFactory.AddCreateCalculationItem(builder, nodeData, AddCalculation); + ContextMenuItemFactory.AddCreateCalculationGroupItem(builder, group); + ContextMenuItemFactory.AddCreateCalculationItem(builder, nodeData, AddCalculation); builder.AddSeparator(); - - CalculationTreeNodeInfoFactory.AddPerformAllCalculationsInGroupItem(builder, group, nodeData, CalculateAll); - CalculationTreeNodeInfoFactory.AddClearAllCalculationOutputInGroupItem(builder, group); + ContextMenuItemFactory.AddPerformAllCalculationsInGroupItem(builder, group, nodeData, CalculateAll); + ContextMenuItemFactory.AddClearAllCalculationOutputInGroupItem(builder, group); builder.AddSeparator(); if (isNestedGroup) @@ -340,15 +337,14 @@ builder.AddSeparator(); } - return builder - .AddImportItem() - .AddExportItem() - .AddSeparator() - .AddExpandAllItem() - .AddCollapseAllItem() - .AddSeparator() - .AddPropertiesItem() - .Build(); + return builder.AddImportItem() + .AddExportItem() + .AddSeparator() + .AddExpandAllItem() + .AddCollapseAllItem() + .AddSeparator() + .AddPropertiesItem() + .Build(); } private void CalculationGroupContextOnNodeRemoved(GrassCoverErosionInwardsCalculationGroupContext nodeData, object parentNodeData) @@ -400,12 +396,12 @@ GrassCoverErosionInwardsCalculation calculation = nodeData.WrappedData; - CalculationTreeNodeInfoFactory.AddPerformCalculationItem( + ContextMenuItemFactory.AddPerformCalculationItem( builder, calculation, nodeData, PerformCalculation); - CalculationTreeNodeInfoFactory.AddClearCalculationOutputItem(builder, calculation); + ContextMenuItemFactory.AddClearCalculationOutputItem(builder, calculation); builder.AddSeparator(); return builder Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs =================================================================== diff -u -ra1fefd1d0caa3417e5d6733cf5b88c1f98a8215a -rb47c41dd3741ada477388e6c8a9224ecb66291e7 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision a1fefd1d0caa3417e5d6733cf5b88c1f98a8215a) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -561,7 +561,7 @@ { var builder = Gui.Get(nodeData, treeViewControl); - CalculationTreeNodeInfoFactory.AddDisabledChangeRelevancyItem(builder, nodeData); + ContextMenuItemFactory.AddDisabledChangeRelevancyItem(builder, nodeData); return builder.AddSeparator() .AddExpandAllItem() Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs =================================================================== diff -u -rba310454172ed29499474b2f8b013fa0f0c523b8 -rb47c41dd3741ada477388e6c8a9224ecb66291e7 --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision ba310454172ed29499474b2f8b013fa0f0c523b8) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision b47c41dd3741ada477388e6c8a9224ecb66291e7) @@ -284,8 +284,7 @@ Gui.ViewCommands.RemoveAllViewsForItem(pipingFailureMechanismContext); pipingFailureMechanismContext.WrappedData.IsRelevant = false; pipingFailureMechanismContext.WrappedData.NotifyObservers(); - } - ); + }); var validateAllItem = CreateValidateAllItem(pipingFailureMechanismContext.WrappedData); @@ -325,7 +324,7 @@ { var builder = Gui.Get(pipingFailureMechanismContext, treeViewControl); - CalculationTreeNodeInfoFactory.AddDisabledChangeRelevancyItem(builder, pipingFailureMechanismContext); + ContextMenuItemFactory.AddDisabledChangeRelevancyItem(builder, pipingFailureMechanismContext); return builder.AddSeparator() .AddExpandAllItem() @@ -454,22 +453,21 @@ (o, args) => { PipingCalculationService.Validate(calculation); }); builder.AddCustomItem(validateItem); - CalculationTreeNodeInfoFactory.AddPerformCalculationItem(builder, calculation, nodeData, PerformCalculation); - CalculationTreeNodeInfoFactory.AddClearCalculationOutputItem(builder, calculation); + ContextMenuItemFactory.AddPerformCalculationItem(builder, calculation, nodeData, PerformCalculation); + ContextMenuItemFactory.AddClearCalculationOutputItem(builder, calculation); builder.AddSeparator(); - return builder - .AddRenameItem() - .AddDeleteItem() - .AddSeparator() - .AddImportItem() - .AddExportItem() - .AddSeparator() - .AddExpandAllItem() - .AddCollapseAllItem() - .AddSeparator() - .AddPropertiesItem() - .Build(); + return builder.AddRenameItem() + .AddDeleteItem() + .AddSeparator() + .AddImportItem() + .AddExportItem() + .AddSeparator() + .AddExpandAllItem() + .AddCollapseAllItem() + .AddSeparator() + .AddPropertiesItem() + .Build(); } private static object[] PipingCalculationContextChildNodeObjects(PipingCalculationScenarioContext pipingCalculationScenarioContext) @@ -567,21 +565,18 @@ if (!isNestedGroup) { - builder - .AddOpenItem() - .AddSeparator() - .AddCustomItem(generateCalculationsItem) - .AddSeparator(); + builder.AddOpenItem() + .AddSeparator() + .AddCustomItem(generateCalculationsItem) + .AddSeparator(); } - CalculationTreeNodeInfoFactory.AddCreateCalculationGroupItem(builder, group); - CalculationTreeNodeInfoFactory.AddCreateCalculationItem(builder, nodeData, AddCalculationScenario); + ContextMenuItemFactory.AddCreateCalculationGroupItem(builder, group); + ContextMenuItemFactory.AddCreateCalculationItem(builder, nodeData, AddCalculationScenario); builder.AddSeparator(); - - builder - .AddCustomItem(validateAllItem); - CalculationTreeNodeInfoFactory.AddPerformAllCalculationsInGroupItem(builder, group, nodeData, CalculateAll); - CalculationTreeNodeInfoFactory.AddClearAllCalculationOutputInGroupItem(builder, group); + builder.AddCustomItem(validateAllItem); + ContextMenuItemFactory.AddPerformAllCalculationsInGroupItem(builder, group, nodeData, CalculateAll); + ContextMenuItemFactory.AddClearAllCalculationOutputInGroupItem(builder, group); builder.AddSeparator(); if (isNestedGroup) @@ -591,15 +586,14 @@ builder.AddSeparator(); } - return builder - .AddImportItem() - .AddExportItem() - .AddSeparator() - .AddExpandAllItem() - .AddCollapseAllItem() - .AddSeparator() - .AddPropertiesItem() - .Build(); + return builder.AddImportItem() + .AddExportItem() + .AddSeparator() + .AddExpandAllItem() + .AddCollapseAllItem() + .AddSeparator() + .AddPropertiesItem() + .Build(); } private static void AddCalculationScenario(PipingCalculationGroupContext nodeData)