Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -r0153023b4f33722b801edf55eba942048c261779 -rb390c81c577202ae453281e2c1c6f983fabab240 --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs (.../ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs) (revision 0153023b4f33722b801edf55eba942048c261779) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs (.../ClosingStructuresCalculationGroupContextTreeNodeInfoTest.cs) (revision b390c81c577202ae453281e2c1c6f983fabab240) @@ -20,23 +20,40 @@ // All rights reserved. using System.Linq; +using System.Windows.Forms; using Core.Common.Controls.TreeView; using Core.Common.Gui; using Core.Common.Gui.Commands; using Core.Common.Gui.ContextMenu; +using Core.Common.Gui.TestUtil.ContextMenu; +using Core.Common.TestUtil; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.ClosingStructures.Data; using Ringtoets.ClosingStructures.Forms.PresentationObjects; using Ringtoets.ClosingStructures.Plugin; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; +using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; namespace Ringtoets.ClosingStructures.Forms.Test.TreeNodeInfos { [TestFixture] public class ClosingStructuresCalculationGroupContextTreeNodeInfoTest { + private const int contextMenuAddCalculationGroupIndexRootGroup = 0; + private const int contextMenuAddCalculationIndexRootGroup = 1; + private const int contextMenuRemoveAllChildrenRootGroupIndex = 3; + private const int contextMenuValidateAllIndexRootGroup = 5; + private const int contextMenuCalculateAllIndexRootGroup = 6; + private const int contextMenuClearAllIndexRootGroup = 7; + + private const int contextMenuAddCalculationGroupIndexNestedGroup = 0; + private const int contextMenuAddCalculationIndexNestedGroup = 1; + private const int contextMenuValidateAllIndexNestedGroup = 3; + private const int contextMenuCalculateAllIndexNestedGroup = 4; + private const int contextMenuClearAllIndexNestedGroup = 5; + private IGui guiMock; private TreeNodeInfo info; private MockRepository mocks; @@ -63,28 +80,73 @@ } [Test] + public void Initialized_Always_ExpectedPropertiesSet() + { + // Setup + mocks.ReplayAll(); + + // Assert + Assert.AreEqual(typeof(ClosingStructuresCalculationGroupContext), info.TagType); + Assert.IsNotNull(info.Text); + Assert.IsNotNull(info.Image); + Assert.IsNotNull(info.EnsureVisibleOnCreate); + Assert.IsNotNull(info.ChildNodeObjects); + Assert.IsNotNull(info.ContextMenuStrip); + Assert.IsNotNull(info.CanRename); + Assert.IsNotNull(info.OnNodeRenamed); + Assert.IsNotNull(info.CanRemove); + Assert.IsNotNull(info.OnNodeRemoved); + Assert.IsNotNull(info.CanDrag); + Assert.IsNotNull(info.CanInsert); + Assert.IsNotNull(info.CanDrop); + Assert.IsNotNull(info.OnDrop); + Assert.IsNull(info.ForeColor); + Assert.IsNull(info.CanCheck); + Assert.IsNull(info.IsChecked); + Assert.IsNull(info.OnNodeChecked); + } + + [Test] + public void ChildNodeObjects_EmptyGroup_ReturnEmpty() + { + // Setup + var group = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var assessmentSectionMock = mocks.Stub(); + mocks.ReplayAll(); + + var groupContext = new ClosingStructuresCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + + // Call + var children = info.ChildNodeObjects(groupContext); + + // Assert + CollectionAssert.IsEmpty(children); + } + + [Test] public void ContextMenuStrip_WithoutParentNodeDefaultBehavior_CallsContextMenuBuilderMethods() { // Setup var group = new CalculationGroup(); var failureMechanism = new ClosingStructuresFailureMechanism(); - var assessmentSectionMock = mocks.StrictMock(); + var assessmentSectionMock = mocks.Stub(); var groupContext = new ClosingStructuresCalculationGroupContext(group, failureMechanism, assessmentSectionMock); - var menuBuilderMock = mocks.StrictMock(); - /* Part of WTI-550 + var menuBuilderMock = mocks.StrictMock(); menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); - menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock + menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); - **/ menuBuilderMock.Expect(mb => mb.AddExpandAllItem()).Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddCollapseAllItem()).Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); @@ -104,5 +166,165 @@ // Assert // Assert expectancies called in TearDown() } + + [Test] + public void ContextMenuStrip_WithoutParentNodeDefaultBehavior_AddCustomItems() + { + // Setup + var group = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var assessmentSectionMock = mocks.Stub(); + var groupContext = new ClosingStructuresCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(groupContext, treeViewControl)).Return(menuBuilder); + guiMock.Stub(g => g.ViewCommands).Return(mocks.Stub()); + + mocks.ReplayAll(); + + // Call + using (ContextMenuStrip menu = info.ContextMenuStrip(groupContext, null, treeViewControl)) + { + // Assert + Assert.AreEqual(10, menu.Items.Count); + + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuAddCalculationGroupIndexRootGroup, + RingtoetsCommonFormsResources.CalculationGroup_Add_CalculationGroup, + RingtoetsCommonFormsResources.CalculationGroup_Add_CalculationGroup_Tooltip, + RingtoetsCommonFormsResources.AddFolderIcon); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuAddCalculationIndexRootGroup, + RingtoetsCommonFormsResources.CalculationGroup_Add_Calculation, + RingtoetsCommonFormsResources.CalculationGroup_Add_Calculation_Tooltip, + RingtoetsCommonFormsResources.FailureMechanismIcon); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuRemoveAllChildrenRootGroupIndex, + RingtoetsCommonFormsResources.CalculationGroup_RemoveAllChildrenFromGroup_Remove_all, + RingtoetsCommonFormsResources.CalculationGroup_RemoveAllChildrenFromGroup_No_Calculation_or_Group_to_remove, + RingtoetsCommonFormsResources.RemoveAllIcon, + false); + + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuValidateAllIndexRootGroup, + RingtoetsCommonFormsResources.Validate_all, + RingtoetsCommonFormsResources.ValidateAll_No_calculations_to_validate, + RingtoetsCommonFormsResources.ValidateAllIcon, + false); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuCalculateAllIndexRootGroup, + RingtoetsCommonFormsResources.Calculate_all, + RingtoetsCommonFormsResources.CalculationGroup_CalculateAll_No_calculations_to_run, + RingtoetsCommonFormsResources.CalculateAllIcon, + false); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuClearAllIndexRootGroup, + RingtoetsCommonFormsResources.Clear_all_output, + RingtoetsCommonFormsResources.CalculationGroup_ClearOutput_No_calculation_with_output_to_clear, + RingtoetsCommonFormsResources.ClearIcon, + false); + } + } + } + + [Test] + public void ContextMenuStrip_NestedCalculationGroup_CallsContextMenuBuilderMethods() + { + // Setup + var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var assessmentSectionMock = mocks.Stub(); + var groupContext = new ClosingStructuresCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + var parentGroupContext = new ClosingStructuresCalculationGroupContext(parentGroup, + failureMechanism, + assessmentSectionMock); + var menuBuilderMock = mocks.StrictMock(); + + menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddRenameItem()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddDeleteItem()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddExpandAllItem()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddCollapseAllItem()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddPropertiesItem()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.Build()).Return(null); + + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(cmp => cmp.Get(groupContext, treeViewControl)).Return(menuBuilderMock); + + mocks.ReplayAll(); + + // Call + info.ContextMenuStrip(groupContext, parentGroupContext, treeViewControl); + } + // Assert + // Assert expectancies called in TearDown() + } + + [Test] + public void ContextMenuStrip_NestedCalculationGroup_AddCustomItems() + { + // Setup + var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var assessmentSectionMock = mocks.Stub(); + var groupContext = new ClosingStructuresCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + var parentGroupContext = new ClosingStructuresCalculationGroupContext(parentGroup, + failureMechanism, + assessmentSectionMock); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + mocks.ReplayAll(); + + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(groupContext, treeViewControl)).Return(menuBuilder); + + // Call + using (ContextMenuStrip menu = info.ContextMenuStrip(groupContext, parentGroupContext, treeViewControl)) + { + // Assert + Assert.AreEqual(9, menu.Items.Count); + + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuAddCalculationGroupIndexNestedGroup, + RingtoetsCommonFormsResources.CalculationGroup_Add_CalculationGroup, + RingtoetsCommonFormsResources.CalculationGroup_Add_CalculationGroup_Tooltip, + RingtoetsCommonFormsResources.AddFolderIcon); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuAddCalculationIndexNestedGroup, + RingtoetsCommonFormsResources.CalculationGroup_Add_Calculation, + RingtoetsCommonFormsResources.CalculationGroup_Add_Calculation_Tooltip, + RingtoetsCommonFormsResources.FailureMechanismIcon); + + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuValidateAllIndexNestedGroup, + RingtoetsCommonFormsResources.Validate_all, + RingtoetsCommonFormsResources.ValidateAll_No_calculations_to_validate, + RingtoetsCommonFormsResources.ValidateAllIcon, + false); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuCalculateAllIndexNestedGroup, + RingtoetsCommonFormsResources.Calculate_all, + RingtoetsCommonFormsResources.CalculationGroup_CalculateAll_No_calculations_to_run, + RingtoetsCommonFormsResources.CalculateAllIcon, + false); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuClearAllIndexNestedGroup, + RingtoetsCommonFormsResources.Clear_all_output, + RingtoetsCommonFormsResources.CalculationGroup_ClearOutput_No_calculation_with_output_to_clear, + RingtoetsCommonFormsResources.ClearIcon, + false); + } + } + } } } \ No newline at end of file