Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs =================================================================== diff -u -r0a1752d24408af81508bc81d154293be23c9c4ea -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs (.../RingtoetsContextMenuBuilder.cs) (revision 0a1752d24408af81508bc81d154293be23c9c4ea) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs (.../RingtoetsContextMenuBuilder.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -111,15 +111,17 @@ /// The calculation to perform. /// The calculation context belonging to the calculation. /// The action that performs the calculation. + /// The func that checks if the item is enabled. /// The itself. public RingtoetsContextMenuBuilder AddPerformCalculationItem( TCalculation calculation, TCalculationContext calculationContext, - Action calculateAction) + Action calculateAction, + Func isEnabledFunc) where TCalculationContext : ICalculationContext where TCalculation : ICalculation { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreatePerformCalculationItem(calculation, calculationContext, calculateAction)); + contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreatePerformCalculationItem(calculation, calculationContext, calculateAction, isEnabledFunc)); return this; } Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs =================================================================== diff -u -r0a1752d24408af81508bc81d154293be23c9c4ea -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs (.../RingtoetsContextMenuItemFactory.cs) (revision 0a1752d24408af81508bc81d154293be23c9c4ea) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs (.../RingtoetsContextMenuItemFactory.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -130,19 +130,24 @@ /// The calculation to perform. /// The calculation context belonging to the calculation. /// The action that performs the calculation. + /// The func that checks if the item is enabled. /// The created . public StrictContextMenuItem CreatePerformCalculationItem( TCalculation calculation, TCalculationContext calculationContext, - Action calculateAction) + Action calculateAction, + Func isEnabledFunc) where TCalculationContext : ICalculationContext where TCalculation : ICalculation { return new StrictContextMenuItem( Resources.Calculate, Resources.Calculate_ToolTip, Resources.CalculateIcon, - (o, args) => calculateAction(calculation, calculationContext)); + (o, args) => calculateAction(calculation, calculationContext)) + { + Enabled = isEnabledFunc(calculationContext) + }; } /// Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs =================================================================== diff -u -rec8ec68f9a97921ccca392be5c29eff514266cfa -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs (.../RingtoetsContextMenuBuilderTest.cs) (revision ec8ec68f9a97921ccca392be5c29eff514266cfa) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs (.../RingtoetsContextMenuBuilderTest.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -268,7 +268,7 @@ var ringtoetsContextMenuBuilder = new RingtoetsContextMenuBuilder(contextMenuBuilder); // Call - var result = ringtoetsContextMenuBuilder.AddPerformCalculationItem(calculation, calculationContext, null).Build(); + var result = ringtoetsContextMenuBuilder.AddPerformCalculationItem(calculation, calculationContext, null, context => true).Build(); // Assert Assert.IsInstanceOf(result); Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs =================================================================== diff -u -rec8ec68f9a97921ccca392be5c29eff514266cfa -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs (.../RingtoetsContextMenuItemFactoryTest.cs) (revision ec8ec68f9a97921ccca392be5c29eff514266cfa) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs (.../RingtoetsContextMenuItemFactoryTest.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -390,7 +390,7 @@ } [Test] - public void CreatePerformCalculationItem_Always_CreatesDecoratedItem() + public void CreatePerformCalculationItem_IsEnabledFuncTrue_CreatesDecoratedAndEnabledItem() { // Setup var mocks = new MockRepository(); @@ -402,7 +402,7 @@ var calculationContext = new TestCalculationContext(calculation, failureMechanismMock); // Call - var toolStripItem = factory.CreatePerformCalculationItem(calculation, calculationContext, null); + var toolStripItem = factory.CreatePerformCalculationItem(calculation, calculationContext, null, context => true); // Assert Assert.AreEqual(RingtoetsFormsResources.Calculate, toolStripItem.Text); @@ -414,6 +414,30 @@ } [Test] + public void CreatePerformCalculationItem_IsEnabledFuncFalse_CreatesDecoratedAndDisabledItem() + { + // Setup + var mocks = new MockRepository(); + var failureMechanisMock = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculation = new TestCalculation(); + var calculationContext = new TestCalculationContext(calculation, failureMechanisMock); + + // Call + var toolStripItem = factory.CreatePerformCalculationItem(calculation, calculationContext, null, context => false); + + // Assert + Assert.AreEqual(RingtoetsFormsResources.Calculate, toolStripItem.Text); + Assert.AreEqual(RingtoetsFormsResources.Calculate_ToolTip, toolStripItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.CalculateIcon, toolStripItem.Image); + Assert.IsFalse(toolStripItem.Enabled); + + mocks.VerifyAll(); + } + + [Test] public void CreatePerformCalculationItem_PerformClickOnCreatedItem_PerformCalculationMethod() { // Setup @@ -426,7 +450,7 @@ var calculationContext = new TestCalculationContext(calculation, failureMechanismMock); var counter = 0; - var toolStripItem = factory.CreatePerformCalculationItem(calculation, calculationContext, (calc, context) => counter++); + var toolStripItem = factory.CreatePerformCalculationItem(calculation, calculationContext, (calc, context) => counter++, context => true); // Call toolStripItem.PerformClick(); Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs =================================================================== diff -u -r0a1752d24408af81508bc81d154293be23c9c4ea -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 0a1752d24408af81508bc81d154293be23c9c4ea) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -412,7 +412,7 @@ GrassCoverErosionInwardsCalculation calculation = nodeData.WrappedData; - return builder.AddPerformCalculationItem(calculation, nodeData, PerformCalculation) + return builder.AddPerformCalculationItem(calculation, nodeData, PerformCalculation, EnablePerformCalculation) .AddClearCalculationOutputItem(calculation) .AddSeparator() .AddRenameItem() @@ -428,6 +428,11 @@ .Build(); } + private bool EnablePerformCalculation(GrassCoverErosionInwardsCalculationContext context) + { + return context.AssessmentSection.HydraulicBoundaryDatabase != null && context.FailureMechanism.Sections.Any(); + } + private void PerformCalculation(GrassCoverErosionInwardsCalculation calculation, GrassCoverErosionInwardsCalculationContext context) { var activity = CreateHydraRingTargetProbabilityCalculationActivity( Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs =================================================================== diff -u -r266b001fc7fcb405383d2411a970efa735e3c66d -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs) (revision 266b001fc7fcb405383d2411a970efa735e3c66d) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -139,6 +139,7 @@ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(null); var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput()); var nodeData = new GrassCoverErosionInwardsCalculationContext(calculation, failureMechanism, assessmentSectionMock); @@ -157,14 +158,16 @@ } [Test] - public void ContextMenuStrip_CalculationWithoutOutput_ContextMenuItemClearOutputDisabled() + public void ContextMenuStrip_NoHydraulicDatabaseAndFailureMechanismSections_ContextMenuItemPerformCalculationDisabled() { // Setup var gui = mocks.StrictMock(); var treeViewControlMock = mocks.StrictMock(); var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(null); + var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput()); var nodeData = new GrassCoverErosionInwardsCalculationContext(calculation, failureMechanism, assessmentSectionMock); @@ -181,7 +184,68 @@ // Assert mocks.VerifyAll(); // Expect no calls on arguments + TestHelper.AssertContextMenuStripContainsItem(contextMenu, 0, RingtoetsCommonFormsResources.Calculate, RingtoetsCommonFormsResources.Calculate_ToolTip, RingtoetsCommonFormsResources.CalculateIcon, false); + } + + [Test] + public void ContextMenuStrip_HydraulicDatabaseAndFailureMechanismSectionsSet_ContextMenuItemPerformCalculationEnabled() + { + // Setup + var gui = mocks.StrictMock(); + var treeViewControlMock = mocks.StrictMock(); + + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] { new Point2D(0, 0) })); + + var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(new HydraulicBoundaryDatabase()); + + var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput()); + + var nodeData = new GrassCoverErosionInwardsCalculationContext(calculation, failureMechanism, assessmentSectionMock); + + gui.Expect(cmp => cmp.Get(nodeData, treeViewControlMock)).Return(new CustomItemsOnlyContextMenuBuilder()); + + mocks.ReplayAll(); + + plugin.Gui = gui; + + // Call + var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControlMock); + + // Assert + mocks.VerifyAll(); // Expect no calls on arguments + TestHelper.AssertContextMenuStripContainsItem(contextMenu, 0, RingtoetsCommonFormsResources.Calculate, RingtoetsCommonFormsResources.Calculate_ToolTip, RingtoetsCommonFormsResources.CalculateIcon); + } + + [Test] + public void ContextMenuStrip_CalculationWithoutOutput_ContextMenuItemClearOutputDisabled() + { + // Setup + var gui = mocks.StrictMock(); + var treeViewControlMock = mocks.StrictMock(); + + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(new HydraulicBoundaryDatabase()); + + var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput()); + + var nodeData = new GrassCoverErosionInwardsCalculationContext(calculation, failureMechanism, assessmentSectionMock); + + gui.Expect(cmp => cmp.Get(nodeData, treeViewControlMock)).Return(new CustomItemsOnlyContextMenuBuilder()); + + mocks.ReplayAll(); + + plugin.Gui = gui; + + // Call + var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControlMock); + + // Assert + mocks.VerifyAll(); // Expect no calls on arguments + TestHelper.AssertContextMenuStripContainsItem(contextMenu, 1, RingtoetsCommonFormsResources.Clear_output, RingtoetsCommonFormsResources.ClearOutput_No_output_to_clear, RingtoetsCommonFormsResources.ClearIcon, false); } @@ -193,6 +257,7 @@ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(null); var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput()) { Output = new GrassCoverErosionInwardsOutput(0, 0, 0, 0, 0) @@ -212,7 +277,6 @@ // Assert mocks.VerifyAll(); // Expect no calls on arguments - TestHelper.AssertContextMenuStripContainsItem(contextMenu, 0, RingtoetsCommonFormsResources.Calculate, RingtoetsCommonFormsResources.Calculate_ToolTip, RingtoetsCommonFormsResources.CalculateIcon); TestHelper.AssertContextMenuStripContainsItem(contextMenu, 1, RingtoetsCommonFormsResources.Clear_output, RingtoetsCommonFormsResources.Clear_output_ToolTip, RingtoetsCommonFormsResources.ClearIcon); } @@ -228,6 +292,7 @@ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(null); var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput()); var calculationContext = new GrassCoverErosionInwardsCalculationContext(calculation, failureMechanism, assessmentSectionMock); @@ -311,7 +376,7 @@ }; var assessmentSectionMock = mocks.StrictMock(); - assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(hydraulicBoundaryDatabase); + assessmentSectionMock.Stub(asm => asm.HydraulicBoundaryDatabase).Return(hydraulicBoundaryDatabase); var calculationOutput = new GrassCoverErosionInwardsOutput(double.NaN, double.NaN, double.NaN, double.NaN, double.NaN); var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput()) { Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/HydraRingActivityFactory.cs =================================================================== diff -u -rdec46d5efaad5332ffb2a96e67ec11209ddc5515 -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/HydraRingActivityFactory.cs (.../HydraRingActivityFactory.cs) (revision dec46d5efaad5332ffb2a96e67ec11209ddc5515) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/HydraRingActivityFactory.cs (.../HydraRingActivityFactory.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -89,11 +89,6 @@ HydraRingUncertaintiesType uncertaintiesType, HydraRingCalculationInput hydraRingCalculationInput, object action) { - if (string.IsNullOrEmpty(name)) - { - throw new ArgumentException(@"Name should be set.", "name"); - } - if (string.IsNullOrEmpty(hlcdDirectory)) { throw new ArgumentException(@"HLCD directory should be set.", "hlcdDirectory"); Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/HydraRingActivityFactoryTest.cs =================================================================== diff -u -rdec46d5efaad5332ffb2a96e67ec11209ddc5515 -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/HydraRingActivityFactoryTest.cs (.../HydraRingActivityFactoryTest.cs) (revision dec46d5efaad5332ffb2a96e67ec11209ddc5515) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/HydraRingActivityFactoryTest.cs (.../HydraRingActivityFactoryTest.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -35,23 +35,6 @@ #region ExceedanceProbabilityCalculationInput [Test] - public void CreateExceedanceProbabilityCalculationInput_InputEmptyName_ThrowsArgumentException() - { - // Setup - var mocks = new MockRepository(); - var exceedanceProbabilityCalculationInput = mocks.StrictMock(1); - - mocks.ReplayAll(); - - // Call - TestDelegate test = () => HydraRingActivityFactory.Create("", "hlcdDirectory", "ringId", HydraRingTimeIntegrationSchemeType.FBC, HydraRingUncertaintiesType.All, exceedanceProbabilityCalculationInput, output => { }); - - // Assert - var exception = Assert.Throws(test, "Name should be set."); - Assert.AreEqual("name", exception.ParamName); - } - - [Test] public void CreateExceedanceProbabilityCalculationInput_InputEmptyHlcdDirectory_ThrowsArgumentException() { // Setup @@ -140,23 +123,6 @@ #region TargetProbabilityCalculationInput [Test] - public void CreateTargetProbabilityCalculationInput_InputEmptyName_ThrowsArgumentException() - { - // Setup - var mocks = new MockRepository(); - var targetProbabilityCalculationInput = mocks.StrictMock(1, 2.2); - - mocks.ReplayAll(); - - // Call - TestDelegate test = () => HydraRingActivityFactory.Create("", "hlcdDirectory", "ringId", HydraRingTimeIntegrationSchemeType.FBC, HydraRingUncertaintiesType.All, targetProbabilityCalculationInput, output => { }); - - // Assert - var exception = Assert.Throws(test, "Name should be set."); - Assert.AreEqual("name", exception.ParamName); - } - - [Test] public void CreateTargetProbabilityCalculationInput_InputEmptyHlcdDirectory_ThrowsArgumentException() { // Setup Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs =================================================================== diff -u -r0a1752d24408af81508bc81d154293be23c9c4ea -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 0a1752d24408af81508bc81d154293be23c9c4ea) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -409,7 +409,7 @@ (o, args) => { PipingCalculationService.Validate(calculation); }); return builder.AddCustomItem(validateItem) - .AddPerformCalculationItem(calculation, nodeData, PerformCalculation) + .AddPerformCalculationItem(calculation, nodeData, PerformCalculation, context => true) .AddClearCalculationOutputItem(calculation) .AddSeparator() .AddRenameItem() Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationScenarioContextTreeNodeInfoTest.cs =================================================================== diff -u -r9643d7e5bbb27a7782b5d939b029a70a1c023138 -r578037b5080f7a4820286ea02c6b4c322a8b1b09 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationScenarioContextTreeNodeInfoTest.cs (.../PipingCalculationScenarioContextTreeNodeInfoTest.cs) (revision 9643d7e5bbb27a7782b5d939b029a70a1c023138) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationScenarioContextTreeNodeInfoTest.cs (.../PipingCalculationScenarioContextTreeNodeInfoTest.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) @@ -179,6 +179,7 @@ [Test] public void ContextMenuStrip_PipingCalculationWithOutput_ContextMenuItemClearOutputEnabled() { + // Setup var gui = mocks.StrictMock(); var treeViewControlMock = mocks.StrictMock(); var calculation = new PipingCalculationScenario(new GeneralPipingInput(), new NormProbabilityPipingInput()) @@ -211,6 +212,36 @@ } [Test] + public void ContextMenuStrip_Always_ContextMenuItemPerformCalculationEnabled() + { + // Setup + var gui = mocks.StrictMock(); + var treeViewControlMock = mocks.StrictMock(); + var calculation = new PipingCalculationScenario(new GeneralPipingInput(), new NormProbabilityPipingInput()); + var pipingFailureMechanismMock = mocks.StrictMock(); + var assessmentSectionMock = mocks.StrictMock(); + var nodeData = new PipingCalculationScenarioContext(calculation, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanismMock, + assessmentSectionMock); + + gui.Expect(cmp => cmp.Get(nodeData, treeViewControlMock)).Return(new CustomItemsOnlyContextMenuBuilder()); + + mocks.ReplayAll(); + + plugin.Gui = gui; + + // Call + var contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControlMock); + + // Assert + mocks.VerifyAll(); // Expect no calls on arguments + + TestHelper.AssertContextMenuStripContainsItem(contextMenu, 1, RingtoetsCommonFormsResources.Calculate, RingtoetsCommonFormsResources.Calculate_ToolTip, RingtoetsCommonFormsResources.CalculateIcon); + } + + [Test] public void ContextMenuStrip_Always_CallsContextMenuBuilderMethods() { // Setup