Index: Core/Common/src/Core.Common.Gui/ContextMenu/ContextMenuBuilder.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Core/Common/src/Core.Common.Gui/ContextMenu/ContextMenuBuilder.cs (.../ContextMenuBuilder.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Core/Common/src/Core.Common.Gui/ContextMenu/ContextMenuBuilder.cs (.../ContextMenuBuilder.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -1,51 +1,112 @@
-using System.Windows.Forms;
+using System;
+using System.Windows.Forms;
using Core.Common.Controls;
+using Core.Common.Gui.Properties;
namespace Core.Common.Gui.ContextMenu
{
+ ///
+ /// This class represents a builder which can be used to create a context menu, which's items require information
+ /// on the in order to render or perform actions.
+ ///
public class ContextMenuBuilder
{
- private readonly ContextMenuItemFactory itemsFactory;
+ private readonly GuiContextMenuItemFactory guiItemsFactory;
+ private readonly TreeViewContextMenuItemFactory treeViewItemsFactory;
private readonly ContextMenuStrip contextMenu;
private readonly ITreeNode treeNode;
+ ///
+ /// Creates a new instance of , which uses the given to
+ /// create a for the given .
+ ///
+ /// The from which to obtain information to render and bind actions
+ /// to the items of the . If null, this builder will not render items which
+ /// require this type of information.
+ /// The for which to create a .
public ContextMenuBuilder(IGui gui, ITreeNode treeNode)
{
+ if (treeNode == null)
+ {
+ throw new ArgumentNullException("treeNode", Resources.ContextMenuBuilder_ContextMenuBuilder_Can_not_build_context_menu_for_empty_tree_node);
+ }
+ if (gui != null)
+ {
+ guiItemsFactory = new GuiContextMenuItemFactory(gui);
+ }
+ treeViewItemsFactory = new TreeViewContextMenuItemFactory();
contextMenu = new ContextMenuStrip();
- itemsFactory = new ContextMenuItemFactory(gui);
this.treeNode = treeNode;
}
+ ///
+ /// Adds an item to the , which expands the .
+ ///
+ /// The itself, so that operations can be easily chained.
public ContextMenuBuilder AddExpandAllItem()
{
- AddItem(itemsFactory.CreateExpandAllItem(treeNode));
+ AddItem(treeViewItemsFactory.CreateExpandAllItem(treeNode));
return this;
}
+ ///
+ /// Adds an item to the , which collapses the .
+ ///
+ /// The itself, so that operations can be easily chained.
public ContextMenuBuilder AddCollapseAllItem()
{
- AddItem(itemsFactory.CreateCollapseAllItem(treeNode));
+ AddItem(treeViewItemsFactory.CreateCollapseAllItem(treeNode));
return this;
}
+ ///
+ /// Adds an item to the , which exports the data of the .
+ ///
+ /// The itself, so that operations can be easily chained.
+ /// If the was not passed on construction, this method will not add an item.
public ContextMenuBuilder AddExportItem()
{
- AddItem(itemsFactory.CreateExportItem(treeNode));
+ if (guiItemsFactory != null)
+ {
+ AddItem(guiItemsFactory.CreateExportItem(treeNode));
+ }
return this;
}
+ ///
+ /// Adds an item to the , which imports the data of the .
+ ///
+ /// The itself, so that operations can be easily chained.
+ /// If the was not passed on construction, this method will not add an item.
public ContextMenuBuilder AddImportItem()
{
- AddItem(itemsFactory.CreateImportItem(treeNode));
+ if (guiItemsFactory != null)
+ {
+ AddItem(guiItemsFactory.CreateImportItem(treeNode));
+ }
return this;
}
+ ///
+ /// Adds an item to the , which shows properties of the data of the .
+ ///
+ /// The itself, so that operations can be easily chained.
+ /// If the was not passed on construction, this method will not add an item.
public ContextMenuBuilder AddPropertiesItem()
{
- AddItem(itemsFactory.CreatePropertiesItem(treeNode));
+ if (guiItemsFactory != null)
+ {
+ AddItem(guiItemsFactory.CreatePropertiesItem(treeNode));
+ }
return this;
}
+ ///
+ /// Adds a to the . A
+ /// is only added if the last item that was added to the exists and is not a
+ /// .
+ ///
+ /// The itself, so that operations can be easily chained.
public ContextMenuBuilder AddSeparator()
{
if (MayAddSeparator())
@@ -55,26 +116,36 @@
return this;
}
- private bool MayAddSeparator()
- {
- if (contextMenu.Items.Count == 0)
- {
- return false;
- }
- return !(contextMenu.Items[contextMenu.Items.Count - 1] is ToolStripSeparator);
- }
-
+ ///
+ /// Adds a custom item to the .
+ ///
+ /// The custom to add to the .
+ /// The itself, so that operations can be easily chained.
public ContextMenuBuilder AddCustomItem(ToolStripMenuItem item)
{
AddItem(item);
return this;
}
+ ///
+ /// Obtain the , which has been constructed by using the other methods of
+ /// .
+ ///
+ /// The constructed .
public ContextMenuStrip Build()
{
return contextMenu;
}
+ private bool MayAddSeparator()
+ {
+ if (contextMenu.Items.Count == 0)
+ {
+ return false;
+ }
+ return !(contextMenu.Items[contextMenu.Items.Count - 1] is ToolStripSeparator);
+ }
+
private void AddItem(ToolStripItem item)
{
if (item != null)
Fisheye: Tag a80efa8773c3efec54ba44940945b03bc3f3ff7e refers to a dead (removed) revision in file `Core/Common/src/Core.Common.Gui/ContextMenu/ContextMenuItemFactory.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Core/Common/src/Core.Common.Gui/ContextMenu/GuiContextMenuItemFactory.cs
===================================================================
diff -u
--- Core/Common/src/Core.Common.Gui/ContextMenu/GuiContextMenuItemFactory.cs (revision 0)
+++ Core/Common/src/Core.Common.Gui/ContextMenu/GuiContextMenuItemFactory.cs (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -0,0 +1,105 @@
+using System;
+using System.Linq;
+using System.Windows.Forms;
+using Core.Common.Controls;
+using Core.Common.Gui.Properties;
+
+namespace Core.Common.Gui.ContextMenu
+{
+ ///
+ /// This class represents a factory for creating . The
+ /// items the factory creates are dependent on a set for this
+ /// factory.
+ ///
+ internal class GuiContextMenuItemFactory
+ {
+ private readonly IGui gui;
+
+ ///
+ /// Creates a new instance of , which uses the to create
+ /// .
+ ///
+ /// The which contains information for creating the .
+ /// Thrown when is null.
+ public GuiContextMenuItemFactory(IGui gui)
+ {
+ if (gui == null)
+ {
+ throw new ArgumentNullException("gui", Resources.GuiContextMenuItemFactory_GuiContextMenuItemFactory_Can_not_create_gui_context_menu_items_without_gui);
+ }
+ this.gui = gui;
+ }
+
+ ///
+ /// Creates a which is bound to the action of exporting
+ /// the data of the given .
+ ///
+ /// The for which to create the
+ /// and for which to export its data if clicked.
+ ///
+ /// The created .
+ public ToolStripItem CreateExportItem(ITreeNode treeNode)
+ {
+ var data = treeNode.Tag;
+ var exporters = gui.ApplicationCore.GetSupportedFileExporters(data);
+ var newItem = new ToolStripMenuItem(Resources.Export)
+ {
+ ToolTipText = Resources.Export_ToolTip,
+ Image = Resources.ExportIcon,
+ Enabled = exporters.Any()
+ };
+
+ return newItem;
+ }
+
+ ///
+ /// Creates a which is bound to the action of importing
+ /// the data of the given .
+ ///
+ /// The for which to create the
+ /// and for which to import its data if clicked.
+ ///
+ /// The created .
+ public ToolStripItem CreateImportItem(ITreeNode treeNode)
+ {
+ var data = treeNode.Tag;
+ var importers = gui.ApplicationCore.GetSupportedFileImporters(data);
+ var newItem = new ToolStripMenuItem(Resources.Import)
+ {
+ ToolTipText = Resources.Import_ToolTip,
+ Image = Resources.ImportIcon,
+ Enabled = importers.Any()
+ };
+
+ return newItem;
+ }
+
+ ///
+ /// Creates a which is bound to the action of showing
+ /// the properties of the data of the given .
+ ///
+ /// The for which to create the
+ /// and for which to show the properties of its data if clicked.
+ ///
+ /// The created .
+ public ToolStripItem CreatePropertiesItem(ITreeNode treeNode)
+ {
+ var data = treeNode.Tag;
+ var propertyInfos = gui.Plugins.SelectMany(p => p.GetPropertyInfos()).Where(pi => pi.ObjectType == data.GetType());
+ var newItem = new ToolStripMenuItem(Resources.Properties)
+ {
+ ToolTipText = Resources.Properties_ToolTip,
+ Image = Resources.PropertiesIcon,
+ Enabled = propertyInfos.Any()
+ };
+
+ var guiCommandHandler = gui.CommandHandler;
+ if (guiCommandHandler != null)
+ {
+ newItem.Click += (s, e) => guiCommandHandler.ShowProperties();
+ }
+
+ return newItem;
+ }
+ }
+}
\ No newline at end of file
Index: Core/Common/src/Core.Common.Gui/ContextMenu/TreeViewContextMenuItemFactory.cs
===================================================================
diff -u
--- Core/Common/src/Core.Common.Gui/ContextMenu/TreeViewContextMenuItemFactory.cs (revision 0)
+++ Core/Common/src/Core.Common.Gui/ContextMenu/TreeViewContextMenuItemFactory.cs (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -0,0 +1,50 @@
+using System.Windows.Forms;
+using Core.Common.Controls;
+using Core.Common.Gui.Properties;
+
+namespace Core.Common.Gui.ContextMenu
+{
+ ///
+ /// This class represents a factory for creating . The
+ /// items the factory creates are dependent on a set for
+ /// the .
+ ///
+ internal class TreeViewContextMenuItemFactory
+ {
+ ///
+ /// Creates a which is bound to the action of expanding
+ /// the .
+ ///
+ /// The for which to create the
+ /// and which to expand if clicked.
+ /// The created .
+ public ToolStripItem CreateExpandAllItem(ITreeNode treeNode)
+ {
+ var toolStripMenuItem = new ToolStripMenuItem(Resources.Expand_all)
+ {
+ ToolTipText = Resources.Expand_all_ToolTip,
+ Image = Resources.ExpandAllIcon
+ };
+ toolStripMenuItem.Click += (s, e) => treeNode.TreeView.ExpandAll(treeNode);
+ return toolStripMenuItem;
+ }
+
+ ///
+ /// Creates a which is bound to the action of collapsing
+ /// the .
+ ///
+ /// The for which to create the
+ /// and which to collapse if clicked.
+ /// The created .
+ public ToolStripItem CreateCollapseAllItem(ITreeNode treeNode)
+ {
+ var toolStripMenuItem = new ToolStripMenuItem(Resources.Collapse_all)
+ {
+ ToolTipText = Resources.Collapse_all_ToolTip,
+ Image = Resources.CollapseAllIcon
+ };
+ toolStripMenuItem.Click += (s, e) => treeNode.TreeView.CollapseAll(treeNode);
+ return toolStripMenuItem;
+ }
+ }
+}
\ No newline at end of file
Index: Core/Common/src/Core.Common.Gui/Core.Common.Gui.csproj
===================================================================
diff -u -r2afad189e942019ef3da47d72e134f3a4c6c7884 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Core/Common/src/Core.Common.Gui/Core.Common.Gui.csproj (.../Core.Common.Gui.csproj) (revision 2afad189e942019ef3da47d72e134f3a4c6c7884)
+++ Core/Common/src/Core.Common.Gui/Core.Common.Gui.csproj (.../Core.Common.Gui.csproj) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -131,11 +131,12 @@
+
-
-
+
+
Index: Core/Common/src/Core.Common.Gui/IContextMenuBuilderProvider.cs
===================================================================
diff -u
--- Core/Common/src/Core.Common.Gui/IContextMenuBuilderProvider.cs (revision 0)
+++ Core/Common/src/Core.Common.Gui/IContextMenuBuilderProvider.cs (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -0,0 +1,22 @@
+using System.Windows.Forms;
+using Core.Common.Controls;
+using Core.Common.Gui.ContextMenu;
+
+namespace Core.Common.Gui
+{
+ ///
+ /// Interface which describes classes that are able to provide a .
+ ///
+ public interface IContextMenuBuilderProvider
+ {
+ ///
+ /// Returns a new for creating a
+ /// for the given .
+ ///
+ /// The to have the
+ /// create a for.
+ /// The which can be used to create a
+ /// for .
+ ContextMenuBuilder Get(ITreeNode treeNode);
+ }
+}
\ No newline at end of file
Fisheye: Tag a80efa8773c3efec54ba44940945b03bc3f3ff7e refers to a dead (removed) revision in file `Core/Common/src/Core.Common.Gui/IContextMenuProvider.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Core/Common/src/Core.Common.Gui/Properties/Resources.Designer.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Core/Common/src/Core.Common.Gui/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Core/Common/src/Core.Common.Gui/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -530,6 +530,16 @@
}
///
+ /// Looks up a localized string similar to Kan geen contextmenu opbouwen voor een lege knoop..
+ ///
+ public static string ContextMenuBuilder_ContextMenuBuilder_Can_not_build_context_menu_for_empty_tree_node {
+ get {
+ return ResourceManager.GetString("ContextMenuBuilder_ContextMenuBuilder_Can_not_build_context_menu_for_empty_tree_n" +
+ "ode", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
public static System.Drawing.Bitmap control_play {
@@ -1113,6 +1123,16 @@
}
///
+ /// Looks up a localized string similar to Kan geen GUI-afhankelijk element in het contextmenu creëren zonder een GUI..
+ ///
+ public static string GuiContextMenuItemFactory_GuiContextMenuItemFactory_Can_not_create_gui_context_menu_items_without_gui {
+ get {
+ return ResourceManager.GetString("GuiContextMenuItemFactory_GuiContextMenuItemFactory_Can_not_create_gui_context_me" +
+ "nu_items_without_gui", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to Exporteren mislukt..
///
public static string GuiExportHandler_ExporterItemUsingFileOpenDialog_Export_failed {
Index: Core/Common/src/Core.Common.Gui/Properties/Resources.resx
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Core/Common/src/Core.Common.Gui/Properties/Resources.resx (.../Resources.resx) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Core/Common/src/Core.Common.Gui/Properties/Resources.resx (.../Resources.resx) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -860,4 +860,10 @@
Klap deze knoop en al zijn kinderen uit.
+
+ Kan geen contextmenu opbouwen voor een lege knoop.
+
+
+ Kan geen GUI-afhankelijk element in het contextmenu creëren zonder een GUI.
+
\ No newline at end of file
Index: Core/Common/src/Core.Common.Gui/RingtoetsGui.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Core/Common/src/Core.Common.Gui/RingtoetsGui.cs (.../RingtoetsGui.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Core/Common/src/Core.Common.Gui/RingtoetsGui.cs (.../RingtoetsGui.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -33,7 +33,7 @@
///
/// Gui class provides graphical user functionality for a given IApplication.
///
- public class RingtoetsGui : IGui, IContextMenuProvider, IDisposable
+ public class RingtoetsGui : IGui, IContextMenuBuilderProvider, IDisposable
{
public event EventHandler SelectionChanged; // TODO: make it weak
@@ -1072,9 +1072,9 @@
Dispose(false);
}
- public ContextMenuBuilder Get(ITreeNode obj)
+ public ContextMenuBuilder Get(ITreeNode treeNode)
{
- return new ContextMenuBuilder(this, obj);
+ return new ContextMenuBuilder(this, treeNode);
}
}
}
\ No newline at end of file
Index: Core/Common/test/Core.Common.Gui.Test/ContextMenu/ContextMenuBuilderTest.cs
===================================================================
diff -u
--- Core/Common/test/Core.Common.Gui.Test/ContextMenu/ContextMenuBuilderTest.cs (revision 0)
+++ Core/Common/test/Core.Common.Gui.Test/ContextMenu/ContextMenuBuilderTest.cs (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -0,0 +1,219 @@
+using System;
+using System.Windows.Forms;
+using Core.Common.Base;
+using Core.Common.Controls;
+using Core.Common.Gui.ContextMenu;
+using Core.Common.Gui.Properties;
+using Core.Common.TestUtils;
+using NUnit.Framework;
+using Rhino.Mocks;
+
+namespace Core.Common.Gui.Tests.ContextMenu
+{
+ [TestFixture]
+ public class ContextMenuBuilderTest
+ {
+ private MockRepository mocks;
+
+ [SetUp]
+ public void SetUp()
+ {
+ mocks = new MockRepository();
+ }
+
+ [Test]
+ public void Constructor_NoTreeNode_ThrowsArgumentNullException()
+ {
+ // Call
+ TestDelegate test = () => new ContextMenuBuilder(null, null);
+
+ // Assert
+ Assert.Throws(test);
+
+ }
+
+ [Test]
+ public void Constructor_NoGui_NewInstance()
+ {
+ // Call
+ var builder = new ContextMenuBuilder(null, MockRepository.GenerateMock());
+
+ // Assert
+ Assert.IsInstanceOf(builder);
+ }
+
+ [Test]
+ public void Constructor_Gui_NewInstance()
+ {
+ // Call
+ var builder = new ContextMenuBuilder(MockRepository.GenerateMock(), MockRepository.GenerateMock());
+
+ // Assert
+ Assert.IsInstanceOf(builder);
+ }
+
+ [Test]
+ public void Build_NothingAdded_EmptyContextMenu()
+ {
+ // Setup
+ var builder = new ContextMenuBuilder(null, MockRepository.GenerateMock());
+
+ // Call
+ var result = builder.Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ CollectionAssert.IsEmpty(result.Items);
+ }
+
+ [Test]
+ public void AddExpandAllItem_WhenBuild_ItemAddedToContextMenu()
+ {
+ // Setup
+ var builder = new ContextMenuBuilder(null, MockRepository.GenerateMock());
+
+ // Call
+ var result = builder.AddExpandAllItem().Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ Assert.AreEqual(1, result.Items.Count);
+
+ var expandAllItem = result.Items[0];
+ Assert.AreEqual(Resources.Expand_all, expandAllItem.Text);
+ Assert.AreEqual(Resources.Expand_all_ToolTip, expandAllItem.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Resources.ExpandAllIcon, expandAllItem.Image);
+ }
+
+ [Test]
+ public void AddCollapseAllItem_WhenBuild_ItemAddedToContextMenu()
+ {
+ // Setup
+ var builder = new ContextMenuBuilder(null, MockRepository.GenerateMock());
+
+ // Call
+ var result = builder.AddCollapseAllItem().Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ Assert.AreEqual(1, result.Items.Count);
+
+ var collapseAll = result.Items[0];
+ Assert.AreEqual(Resources.Collapse_all, collapseAll.Text);
+ Assert.AreEqual(Resources.Collapse_all_ToolTip, collapseAll.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Resources.CollapseAllIcon, collapseAll.Image);
+ }
+
+ [Test]
+ public void AddExportItem_WithoutGuiWhenBuild_ContextMenuEmpty()
+ {
+ // Setup
+ var builder = new ContextMenuBuilder(null, MockRepository.GenerateMock());
+
+ // Call
+ var result = builder.AddExportItem().Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ Assert.IsEmpty(result.Items);
+ }
+
+ [Test]
+ public void AddExportItem_WithGuiWhenBuild_ItemAddedToContextMenu()
+ {
+ // Setup
+ var guiStub = mocks.StrictMock();
+ guiStub.Expect(g => g.ApplicationCore).Return(new ApplicationCore());
+ guiStub.Expect(g => g.Plugins).Return(new GuiPlugin[0]);
+ var builder = new ContextMenuBuilder(guiStub, MockRepository.GenerateMock());
+
+ // Call
+ var result = builder.AddExportItem().Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ Assert.AreEqual(1, result.Items.Count);
+
+ var export = result.Items[0];
+ Assert.AreEqual(Resources.Export, export.Text);
+ Assert.AreEqual(Resources.Export_ToolTip, export.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Resources.ExportIcon, export.Image);
+ }
+
+ [Test]
+ public void AddImportItem_WithoutGuiWhenBuild_ContextMenuEmpty()
+ {
+ // Setup
+ var builder = new ContextMenuBuilder(null, MockRepository.GenerateMock());
+
+ // Call
+ var result = builder.AddImportItem().Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ Assert.IsEmpty(result.Items);
+ }
+
+ [Test]
+ public void AddImportItem_WithGuiWhenBuild_ItemAddedToContextMenu()
+ {
+ // Setup
+ var guiStub = mocks.StrictMock();
+ guiStub.Expect(g => g.ApplicationCore).Return(new ApplicationCore());
+ guiStub.Expect(g => g.Plugins).Return(new GuiPlugin[0]);
+ var builder = new ContextMenuBuilder(guiStub, MockRepository.GenerateMock());
+
+ // Call
+ var result = builder.AddImportItem().Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ Assert.AreEqual(1, result.Items.Count);
+
+ var import = result.Items[0];
+ Assert.AreEqual(Resources.Import, import.Text);
+ Assert.AreEqual(Resources.Import_ToolTip, import.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Resources.ImportIcon, import.Image);
+ }
+
+ [Test]
+ public void AddPropertiesItem_WithoutGuiWhenBuild_ContextMenuEmpty()
+ {
+ // Setup
+ var builder = new ContextMenuBuilder(null, MockRepository.GenerateMock());
+
+ // Call
+ var result = builder.AddPropertiesItem().Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ Assert.IsEmpty(result.Items);
+ }
+
+ [Test]
+ public void AddPropertiesItem_WithGuiWhenBuild_ItemAddedToContextMenu()
+ {
+ // Setup
+ var guiStub = mocks.StrictMock();
+ guiStub.Expect(g => g.Plugins).Return(new GuiPlugin[0]);
+ guiStub.Expect(g => g.CommandHandler).Return(null);
+ var builder = new ContextMenuBuilder(guiStub, MockRepository.GenerateMock());
+
+ mocks.ReplayAll();
+
+ // Call
+ var result = builder.AddPropertiesItem().Build();
+
+ // Assert
+ Assert.IsInstanceOf(result);
+ Assert.AreEqual(1, result.Items.Count);
+
+ var properties = result.Items[0];
+ Assert.AreEqual(Resources.Properties, properties.Text);
+ Assert.AreEqual(Resources.Properties_ToolTip, properties.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Resources.PropertiesIcon, properties.Image);
+
+ mocks.VerifyAll();
+ }
+ }
+}
\ No newline at end of file
Index: Core/Common/test/Core.Common.Gui.Test/ContextMenu/GuiContextMenuItemFactoryTest.cs
===================================================================
diff -u
--- Core/Common/test/Core.Common.Gui.Test/ContextMenu/GuiContextMenuItemFactoryTest.cs (revision 0)
+++ Core/Common/test/Core.Common.Gui.Test/ContextMenu/GuiContextMenuItemFactoryTest.cs (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -0,0 +1,260 @@
+using System.Collections.Generic;
+using Core.Common.Base;
+using Core.Common.Controls;
+using Core.Common.Gui.ContextMenu;
+using Core.Common.TestUtils;
+using NUnit.Framework;
+using Rhino.Mocks;
+
+namespace Core.Common.Gui.Tests.ContextMenu
+{
+ [TestFixture]
+ public class ContextMenuItemFactoryTest
+ {
+ private MockRepository mocks;
+ private readonly IList pluginList = new GuiPlugin[]
+ {
+ new TestGuiPlugin()
+ };
+
+ [SetUp]
+ public void SetUp()
+ {
+ mocks = new MockRepository();
+ }
+
+ [Test]
+ public void CreateExportItem_NoImportersForType_Disabled()
+ {
+ // Setup
+ var guiMock = mocks.StrictMock();
+ var treeNodeMock = mocks.Stub();
+ treeNodeMock.Tag = "";
+ var applicationCore = new ApplicationCore();
+ applicationCore.AddPlugin(new TestApplicationPlugin(mocks));
+ guiMock.Expect(g => g.ApplicationCore).Return(applicationCore);
+ var contextMenuFactory = new GuiContextMenuItemFactory(guiMock);
+
+ mocks.ReplayAll();
+
+ // Call
+ var item = contextMenuFactory.CreateExportItem(treeNodeMock);
+
+ // Assert
+ Assert.AreEqual(Properties.Resources.Export, item.Text);
+ Assert.AreEqual(Properties.Resources.Export_ToolTip, item.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Properties.Resources.ExportIcon, item.Image);
+ Assert.IsFalse(item.Enabled);
+ }
+
+ [Test]
+ public void CreateExportItem_ImportersForType_Enabled()
+ {
+ // Setup
+ var guiMock = mocks.StrictMock();
+ var treeNodeMock = mocks.Stub();
+ treeNodeMock.Tag = 0;
+ var applicationCore = new ApplicationCore();
+ applicationCore.AddPlugin(new TestApplicationPlugin(mocks));
+ guiMock.Expect(g => g.ApplicationCore).Return(applicationCore);
+ var contextMenuFactory = new GuiContextMenuItemFactory(guiMock);
+
+ mocks.ReplayAll();
+
+ // Call
+ var item = contextMenuFactory.CreateExportItem(treeNodeMock);
+
+ // Assert
+ Assert.AreEqual(Properties.Resources.Export, item.Text);
+ Assert.AreEqual(Properties.Resources.Export_ToolTip, item.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Properties.Resources.ExportIcon, item.Image);
+ Assert.IsTrue(item.Enabled);
+ }
+
+ [Test]
+ public void CreateImportItem_NoImportersForType_Disabled()
+ {
+ // Setup
+ var guiMock = mocks.StrictMock();
+ var treeNodeMock = mocks.Stub();
+ treeNodeMock.Tag = "";
+ var applicationCore = new ApplicationCore();
+ applicationCore.AddPlugin(new TestApplicationPlugin(mocks));
+ guiMock.Expect(g => g.ApplicationCore).Return(applicationCore);
+ var contextMenuFactory = new GuiContextMenuItemFactory(guiMock);
+
+ mocks.ReplayAll();
+
+ // Call
+ var item = contextMenuFactory.CreateImportItem(treeNodeMock);
+
+ // Assert
+ Assert.AreEqual(Properties.Resources.Import, item.Text);
+ Assert.AreEqual(Properties.Resources.Import_ToolTip, item.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Properties.Resources.ImportIcon, item.Image);
+ Assert.IsFalse(item.Enabled);
+ }
+
+ [Test]
+ public void CreateImportItem_ImportersForType_Enabled()
+ {
+ // Setup
+ var guiMock = mocks.StrictMock();
+ var treeNodeMock = mocks.Stub();
+ treeNodeMock.Tag = 0;
+ var applicationCore = new ApplicationCore();
+ applicationCore.AddPlugin(new TestApplicationPlugin(mocks));
+ guiMock.Expect(g => g.ApplicationCore).Return(applicationCore);
+ var contextMenuFactory = new GuiContextMenuItemFactory(guiMock);
+
+ mocks.ReplayAll();
+
+ // Call
+ var item = contextMenuFactory.CreateImportItem(treeNodeMock);
+
+ // Assert
+ Assert.AreEqual(Properties.Resources.Import, item.Text);
+ Assert.AreEqual(Properties.Resources.Import_ToolTip, item.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Properties.Resources.ImportIcon, item.Image);
+ Assert.IsTrue(item.Enabled);
+ }
+
+ [Test]
+ public void CreatePropertiesItem_PropertieInfoForType_Enabled()
+ {
+ // Setup
+ var guiMock = mocks.StrictMock();
+ var treeNodeMock = mocks.Stub();
+ treeNodeMock.Tag = 0;
+ guiMock.Expect(g => g.Plugins).Return(pluginList);
+ guiMock.Expect(g => g.CommandHandler).Return(null);
+ var contextMenuFactory = new GuiContextMenuItemFactory(guiMock);
+
+ mocks.ReplayAll();
+
+ // Call
+ var item = contextMenuFactory.CreatePropertiesItem(treeNodeMock);
+
+ // Assert
+ Assert.AreEqual(Properties.Resources.Properties, item.Text);
+ Assert.AreEqual(Properties.Resources.Properties_ToolTip, item.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Properties.Resources.PropertiesIcon, item.Image);
+ Assert.IsTrue(item.Enabled);
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void CreatePropertiesItem_NoPropertieInfoForType_Disabled()
+ {
+ // Setup
+ var guiMock = mocks.StrictMock();
+ var treeNodeMock = mocks.Stub();
+ treeNodeMock.Tag = "";
+ guiMock.Expect(g => g.Plugins).Return(pluginList);
+ guiMock.Expect(g => g.CommandHandler).Return(null);
+ var contextMenuFactory = new GuiContextMenuItemFactory(guiMock);
+
+ mocks.ReplayAll();
+
+ // Call
+ var item = contextMenuFactory.CreatePropertiesItem(treeNodeMock);
+
+ // Assert
+ Assert.AreEqual(Properties.Resources.Properties, item.Text);
+ Assert.AreEqual(Properties.Resources.Properties_ToolTip, item.ToolTipText);
+ TestHelper.AssertImagesAreEqual(Properties.Resources.PropertiesIcon, item.Image);
+ Assert.IsFalse(item.Enabled);
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void CreatePropertiesItem_ClickWithoutHandler_NoExceptions()
+ {
+ // Setup
+ var guiMock = mocks.StrictMock();
+ var treeNodeMock = mocks.Stub();
+ treeNodeMock.Tag = 0;
+ guiMock.Expect(g => g.Plugins).Return(pluginList);
+ guiMock.Expect(g => g.CommandHandler).Return(null);
+ var contextMenuFactory = new GuiContextMenuItemFactory(guiMock);
+
+ mocks.ReplayAll();
+
+ var item = contextMenuFactory.CreatePropertiesItem(treeNodeMock);
+
+ // Call & Assert
+ item.PerformClick();
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void CreatePropertiesItem_ClickWithHandler_NoExceptions()
+ {
+ // Setup
+ var guiMock = mocks.StrictMock();
+ var treeNodeMock = mocks.Stub();
+ treeNodeMock.Tag = 0;
+ var commandHandlerMock = mocks.StrictMock();
+ guiMock.Expect(g => g.Plugins).Return(pluginList);
+ guiMock.Expect(g => g.CommandHandler).Return(commandHandlerMock);
+ commandHandlerMock.Expect(ch => ch.ShowProperties());
+ var contextMenuFactory = new GuiContextMenuItemFactory(guiMock);
+
+ mocks.ReplayAll();
+
+ var item = contextMenuFactory.CreatePropertiesItem(treeNodeMock);
+
+ // Call & Assert
+ item.PerformClick();
+
+ mocks.VerifyAll();
+ }
+ }
+
+ public class TestApplicationPlugin : ApplicationPlugin
+ {
+ private readonly IFileExporter exporterMock;
+ private readonly IFileImporter importerMock;
+
+ public TestApplicationPlugin(MockRepository mocks)
+ {
+ var typeList = new[]
+ {
+ 0.GetType(),
+ "".GetType()
+ };
+ exporterMock = mocks.DynamicMock();
+ exporterMock.Expect(e => e.CanExportFor(0)).Return(true);
+ exporterMock.Expect(e => e.CanExportFor("")).Return(false);
+ exporterMock.Expect(e => e.SourceTypes()).Return(typeList);
+ importerMock = mocks.DynamicMock();
+ importerMock.Expect(e => e.CanImportOn(0)).Return(true);
+ importerMock.Expect(e => e.CanImportOn("")).Return(false);
+ importerMock.Expect(e => e.SupportedItemTypes).Return(typeList);
+ }
+
+ public override IEnumerable GetFileExporters()
+ {
+ yield return exporterMock;
+ }
+
+ public override IEnumerable GetFileImporters()
+ {
+ yield return importerMock;
+ }
+ }
+
+ public class TestGuiPlugin : GuiPlugin
+ {
+ public override IEnumerable GetPropertyInfos()
+ {
+ yield return new PropertyInfo
+ {
+ ObjectType = typeof(int)
+ };
+ }
+ }
+}
\ No newline at end of file
Index: Core/Common/test/Core.Common.Gui.Test/ContextMenu/TreeViewContextMenuItemFactoryTest.cs
===================================================================
diff -u
--- Core/Common/test/Core.Common.Gui.Test/ContextMenu/TreeViewContextMenuItemFactoryTest.cs (revision 0)
+++ Core/Common/test/Core.Common.Gui.Test/ContextMenu/TreeViewContextMenuItemFactoryTest.cs (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -0,0 +1,71 @@
+using Core.Common.Controls;
+using Core.Common.Gui.ContextMenu;
+using Core.Common.Gui.Properties;
+using Core.Common.TestUtils;
+using NUnit.Framework;
+using Rhino.Mocks;
+
+namespace Core.Common.Gui.Tests.ContextMenu
+{
+ [TestFixture]
+ public class TreeViewContextMenuItemFactoryTest
+ {
+ private MockRepository mocks;
+
+ [SetUp]
+ public void SetUp()
+ {
+ mocks = new MockRepository();
+ }
+
+ [Test]
+ public void CreateExpandAllItem_Always_ItemWithExpandFunction()
+ {
+ // Setup
+ var treeNodeMock = mocks.StrictMock();
+ var treeViewMock = mocks.StrictMock();
+ treeNodeMock.Expect(tn => tn.TreeView).Return(treeViewMock);
+ treeViewMock.Expect(tv => tv.ExpandAll(treeNodeMock));
+
+ mocks.ReplayAll();
+
+ var factory = new TreeViewContextMenuItemFactory();
+
+ // Call
+ var item = factory.CreateExpandAllItem(treeNodeMock);
+ item.PerformClick();
+
+ // Assert
+ Assert.AreEqual(item.Text, Resources.Expand_all);
+ Assert.AreEqual(item.ToolTipText, Resources.Expand_all_ToolTip);
+ TestHelper.AssertImagesAreEqual(item.Image, Resources.ExpandAllIcon);
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void CreateCollapseAllItem_Always_ItemWithCollapseFunction()
+ {
+ // Setup
+ var treeNodeMock = mocks.StrictMock();
+ var treeViewMock = mocks.StrictMock();
+ treeNodeMock.Expect(tn => tn.TreeView).Return(treeViewMock);
+ treeViewMock.Expect(tv => tv.CollapseAll(treeNodeMock));
+
+ mocks.ReplayAll();
+
+ var factory = new TreeViewContextMenuItemFactory();
+
+ // Call
+ var item = factory.CreateCollapseAllItem(treeNodeMock);
+ item.PerformClick();
+
+ // Assert
+ Assert.AreEqual(item.Text, Resources.Collapse_all);
+ Assert.AreEqual(item.ToolTipText, Resources.Collapse_all_ToolTip);
+ TestHelper.AssertImagesAreEqual(item.Image, Resources.CollapseAllIcon);
+
+ mocks.VerifyAll();
+ }
+ }
+}
\ No newline at end of file
Fisheye: Tag a80efa8773c3efec54ba44940945b03bc3f3ff7e refers to a dead (removed) revision in file `Core/Common/test/Core.Common.Gui.Test/ContextMenuItemFactoryTest.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Core/Common/test/Core.Common.Gui.Test/Core.Common.Gui.Tests.csproj
===================================================================
diff -u -r2f3973a8a6122be9d4c0a0db7a27dc3ca68580e3 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Core/Common/test/Core.Common.Gui.Test/Core.Common.Gui.Tests.csproj (.../Core.Common.Gui.Tests.csproj) (revision 2f3973a8a6122be9d4c0a0db7a27dc3ca68580e3)
+++ Core/Common/test/Core.Common.Gui.Test/Core.Common.Gui.Tests.csproj (.../Core.Common.Gui.Tests.csproj) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -54,7 +54,9 @@
-
+
+
+
Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/NodePresenters/FailureMechanismNodePresenter.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Ringtoets/Integration/src/Ringtoets.Integration.Forms/NodePresenters/FailureMechanismNodePresenter.cs (.../FailureMechanismNodePresenter.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/NodePresenters/FailureMechanismNodePresenter.cs (.../FailureMechanismNodePresenter.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -15,11 +15,11 @@
{
public class FailureMechanismNodePresenter : RingtoetsNodePresenterBase
{
- private readonly IContextMenuProvider contextMenuProvider;
+ private readonly IContextMenuBuilderProvider contextMenuBuilderProvider;
- public FailureMechanismNodePresenter(IContextMenuProvider contextMenuProvider)
+ public FailureMechanismNodePresenter(IContextMenuBuilderProvider contextMenuBuilderProvider)
{
- this.contextMenuProvider = contextMenuProvider;
+ this.contextMenuBuilderProvider = contextMenuBuilderProvider;
}
protected override void UpdateNode(ITreeNode parentNode, ITreeNode node, FailureMechanismPlaceholder nodeData)
@@ -37,7 +37,7 @@
protected override ContextMenuStrip GetContextMenu(ITreeNode sender, FailureMechanismPlaceholder nodeData)
{
- ContextMenuBuilder menuBuilder = contextMenuProvider.Get(sender);
+ ContextMenuBuilder menuBuilder = contextMenuBuilderProvider.Get(sender);
var calculateItem = new ToolStripMenuItem
{
Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/NodePresenters/PlaceholderWithReadonlyNameNodePresenter.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Ringtoets/Integration/src/Ringtoets.Integration.Forms/NodePresenters/PlaceholderWithReadonlyNameNodePresenter.cs (.../PlaceholderWithReadonlyNameNodePresenter.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/NodePresenters/PlaceholderWithReadonlyNameNodePresenter.cs (.../PlaceholderWithReadonlyNameNodePresenter.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -17,12 +17,12 @@
public class PlaceholderWithReadonlyNameNodePresenter : RingtoetsNodePresenterBase
{
private IGuiCommandHandler guiHandler;
- private IContextMenuProvider contextMenuProvider;
+ private IContextMenuBuilderProvider contextMenuBuilderProvider;
- public PlaceholderWithReadonlyNameNodePresenter(IContextMenuProvider contextMenuProvider, IGuiCommandHandler guiHandler = null)
+ public PlaceholderWithReadonlyNameNodePresenter(IContextMenuBuilderProvider contextMenuBuilderProvider, IGuiCommandHandler guiHandler = null)
{
this.guiHandler = guiHandler;
- this.contextMenuProvider = contextMenuProvider;
+ this.contextMenuBuilderProvider = contextMenuBuilderProvider;
}
protected override void UpdateNode(ITreeNode parentNode, ITreeNode node, PlaceholderWithReadonlyName nodeData)
@@ -43,7 +43,7 @@
protected override ContextMenuStrip GetContextMenu(ITreeNode sender, PlaceholderWithReadonlyName nodeData)
{
- ContextMenuBuilder menuBuilder = contextMenuProvider.Get(sender);
+ ContextMenuBuilder menuBuilder = contextMenuBuilderProvider.Get(sender);
if (nodeData is InputPlaceholder || nodeData is OutputPlaceholder)
{
Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -32,8 +32,8 @@
public override IEnumerable GetProjectTreeViewNodePresenters()
{
yield return new AssessmentSectionBaseNodePresenter();
- yield return new FailureMechanismNodePresenter((IContextMenuProvider)Gui);
- yield return new PlaceholderWithReadonlyNameNodePresenter((IContextMenuProvider)Gui, Gui.CommandHandler);
+ yield return new FailureMechanismNodePresenter((IContextMenuBuilderProvider)Gui);
+ yield return new PlaceholderWithReadonlyNameNodePresenter((IContextMenuBuilderProvider)Gui, Gui.CommandHandler);
yield return new CategoryTreeFolderNodePresenter();
}
}
Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/NodePresenters/FailureMechanismNodePresenterTest.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/NodePresenters/FailureMechanismNodePresenterTest.cs (.../FailureMechanismNodePresenterTest.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/NodePresenters/FailureMechanismNodePresenterTest.cs (.../FailureMechanismNodePresenterTest.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -1,6 +1,7 @@
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
+using Core.Common.Base;
using Core.Common.Controls;
using Core.Common.Gui;
using Core.Common.Gui.ContextMenu;
@@ -36,7 +37,7 @@
public void DefaultConstructor_ExpectedValues()
{
// Call
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new FailureMechanismNodePresenter(contextMenuProvider);
// Assert
@@ -47,7 +48,7 @@
public void UpdateNode_ValidOutputPlaceholderData_UpdateTreeNode()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var parentNode = mocks.StrictMock();
var nodeToUpdate = mocks.Stub();
mocks.ReplayAll();
@@ -70,7 +71,7 @@
public void CanRenameNode_Always_ReturnFalse()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new FailureMechanismNodePresenter(contextMenuProvider);
// Call
@@ -84,7 +85,7 @@
public void CanRenameTo_Always_ReturnFalse()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new FailureMechanismNodePresenter(contextMenuProvider);
// Call
@@ -98,7 +99,7 @@
public void CanRemove_Always_ReturnFalse()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new FailureMechanismNodePresenter(contextMenuProvider);
// Call
@@ -112,7 +113,7 @@
public void GetChildNodeObjects_Always_ReturnInputAndOutput()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new FailureMechanismNodePresenter(contextMenuProvider);
var failureMechanism = new FailureMechanismPlaceholder("test");
@@ -142,7 +143,7 @@
{
// Setup
var nodeMock = mocks.StrictMock();
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
contextMenuProvider.Expect(cmp => cmp.Get(null)).IgnoreArguments().Return(new ContextMenuBuilder(null, nodeMock));
var nodePresenter = new FailureMechanismNodePresenter(contextMenuProvider);
@@ -154,11 +155,52 @@
var menu = nodePresenter.GetContextMenu(nodeMock, failureMechanism);
// Assert
- Assert.AreEqual(3, menu.Items.Count);
+ Assert.AreEqual(6, menu.Items.Count);
TestHelper.AssertContextMenuStripContainsItem(menu, 0, RingtoetsCommonFormsResources.Calculate_all, RingtoetsCommonFormsResources.Calculate_all_ToolTip, RingtoetsCommonFormsResources.CalculateAllIcon, false);
TestHelper.AssertContextMenuStripContainsItem(menu, 1, RingtoetsCommonFormsResources.Clear_all_output, RingtoetsCommonFormsResources.Clear_all_output_ToolTip, RingtoetsCommonFormsResources.ClearIcon, false);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 3, CommonResources.Expand_all, CommonResources.Expand_all_ToolTip, CommonResources.ExpandAllIcon);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 4, CommonResources.Collapse_all, CommonResources.Collapse_all_ToolTip, CommonResources.CollapseAllIcon);
+ CollectionAssert.AllItemsAreInstancesOfType(new []{menu.Items[2], menu.Items[5]}, typeof(ToolStripSeparator));
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void GetContextMenu_WithGui_ReturnsContextMenuWithCommonItems()
+ {
+ // Setup
+ var nodeMock = mocks.Stub();
+ var guiMock = mocks.DynamicMock();
+ var guiHandlerMock = mocks.DynamicMock();
+ guiMock.Expect(g => g.ApplicationCore).Return(new ApplicationCore());
+ guiMock.Expect(g => g.CommandHandler).Return(guiHandlerMock);
+ guiMock.Expect(g => g.Plugins).Return(new GuiPlugin[0]);
+
+ var contextMenuProvider = mocks.StrictMock();
+ contextMenuProvider.Expect(cmp => cmp.Get(null)).IgnoreArguments().Return(new ContextMenuBuilder(guiMock, nodeMock));
+
+ var nodePresenter = new FailureMechanismNodePresenter(contextMenuProvider);
+ var failureMechanism = new FailureMechanismPlaceholder("test");
+ nodeMock.Tag = failureMechanism;
+
+ mocks.ReplayAll();
+
+ // Call
+ var menu = nodePresenter.GetContextMenu(nodeMock, failureMechanism);
+
+ // Assert
+ Assert.AreEqual(10, menu.Items.Count);
+
+ TestHelper.AssertContextMenuStripContainsItem(menu, 0, RingtoetsCommonFormsResources.Calculate_all, RingtoetsCommonFormsResources.Calculate_all_ToolTip, RingtoetsCommonFormsResources.CalculateAllIcon, false);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 1, RingtoetsCommonFormsResources.Clear_all_output, RingtoetsCommonFormsResources.Clear_all_output_ToolTip, RingtoetsCommonFormsResources.ClearIcon, false);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 3, CommonResources.Expand_all, CommonResources.Expand_all_ToolTip, CommonResources.ExpandAllIcon);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 4, CommonResources.Collapse_all, CommonResources.Collapse_all_ToolTip, CommonResources.CollapseAllIcon);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 6, CommonResources.Import, CommonResources.Import_ToolTip, CommonResources.ImportIcon, false);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 7, CommonResources.Export, CommonResources.Export_ToolTip, CommonResources.ExportIcon, false);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 9, CommonResources.Properties, CommonResources.Properties_ToolTip, CommonResources.PropertiesIcon, false);
+
CollectionAssert.AllItemsAreInstancesOfType(new []{menu.Items[2]}, typeof(ToolStripSeparator));
mocks.VerifyAll();
Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/NodePresenters/PlaceholderWithReadonlyNameNodePresenterTest.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/NodePresenters/PlaceholderWithReadonlyNameNodePresenterTest.cs (.../PlaceholderWithReadonlyNameNodePresenterTest.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/NodePresenters/PlaceholderWithReadonlyNameNodePresenterTest.cs (.../PlaceholderWithReadonlyNameNodePresenterTest.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -17,6 +17,7 @@
using RingtoetsFormsResources = Ringtoets.Integration.Forms.Properties.Resources;
using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources;
+using CommonResources = Core.Common.Gui.Properties.Resources;
namespace Ringtoets.Integration.Forms.Test.NodePresenters
{
@@ -35,7 +36,7 @@
public void DefaultConstructor_ExpectedValues()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
// Call
var nodePresenter = new PlaceholderWithReadonlyNameNodePresenter(contextMenuProvider);
@@ -48,7 +49,7 @@
public void UpdateNode_ValidNodeData_UpdateTreeNode()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var parentNode = mocks.StrictMock();
var nodeToUpdate = mocks.Stub();
mocks.ReplayAll();
@@ -71,7 +72,7 @@
public void UpdateNode_ValidInputPlaceholderData_UpdateTreeNode()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var parentNode = mocks.StrictMock();
var nodeToUpdate = mocks.Stub();
mocks.ReplayAll();
@@ -94,7 +95,7 @@
public void UpdateNode_ValidOutputPlaceholderData_UpdateTreeNode()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var parentNode = mocks.StrictMock();
var nodeToUpdate = mocks.Stub();
mocks.ReplayAll();
@@ -117,7 +118,7 @@
public void CanRenameNode_Always_ReturnFalse()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new PlaceholderWithReadonlyNameNodePresenter(contextMenuProvider);
// Call
@@ -131,7 +132,7 @@
public void CanRenamceTo_Always_ReturnFalse()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new PlaceholderWithReadonlyNameNodePresenter(contextMenuProvider);
// Call
@@ -145,7 +146,7 @@
public void CanRemove_Always_ReturnFalse()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new PlaceholderWithReadonlyNameNodePresenter(contextMenuProvider);
// Call
@@ -159,7 +160,7 @@
public void GetChildNodeObjects_Always_ReturnEmptyEnumerable()
{
// Setup
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
var nodePresenter = new PlaceholderWithReadonlyNameNodePresenter(contextMenuProvider);
// Call
@@ -174,7 +175,7 @@
{
// Setup
var nodeMock = mocks.StrictMock();
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
contextMenuProvider.Expect(cmp => cmp.Get(null)).IgnoreArguments().Return(new ContextMenuBuilder(null, nodeMock)); ;
var nodePresenter = new PlaceholderWithReadonlyNameNodePresenter(contextMenuProvider);
@@ -196,7 +197,7 @@
{
// Setup
var nodeMock = mocks.StrictMock();
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
contextMenuProvider.Expect(cmp => cmp.Get(null)).IgnoreArguments().Return(new ContextMenuBuilder(null, nodeMock)); ;
@@ -224,7 +225,7 @@
{
// Setup
var nodeMock = mocks.StrictMock();
- var contextMenuProvider = mocks.StrictMock();
+ var contextMenuProvider = mocks.StrictMock();
contextMenuProvider.Expect(cmp => cmp.Get(null)).IgnoreArguments().Return(new ContextMenuBuilder(null, nodeMock));
@@ -246,5 +247,39 @@
mocks.VerifyAll();
}
+
+ [Test]
+ public void GetContextMenu_PlaceholderWithReadonlyNameWithGui_ReturnsContextMenuWithItems()
+ {
+ // Setup
+ var nodeMock = mocks.Stub();
+ var guiMock = mocks.DynamicMock();
+ var guiHandlerMock = mocks.DynamicMock();
+ guiMock.Expect(g => g.ApplicationCore).Return(new ApplicationCore());
+ guiMock.Expect(g => g.CommandHandler).Return(guiHandlerMock);
+ guiMock.Expect(g => g.Plugins).Return(new GuiPlugin[0]);
+
+ var contextMenuProvider = mocks.StrictMock();
+ contextMenuProvider.Expect(cmp => cmp.Get(null)).IgnoreArguments().Return(new ContextMenuBuilder(guiMock, nodeMock));
+
+ var nodePresenter = new PlaceholderWithReadonlyNameNodePresenter(contextMenuProvider);
+ var placeholderData = new PlaceholderWithReadonlyName("test");
+
+ mocks.ReplayAll();
+
+ // Call
+ var menu = nodePresenter.GetContextMenu(nodeMock, placeholderData);
+
+ // Assert
+ Assert.AreEqual(4, menu.Items.Count);
+
+ TestHelper.AssertContextMenuStripContainsItem(menu, 0, CommonResources.Import, CommonResources.Import_ToolTip, CommonResources.ImportIcon, false);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 1, CommonResources.Export, CommonResources.Export_ToolTip, CommonResources.ExportIcon, false);
+ TestHelper.AssertContextMenuStripContainsItem(menu, 3, CommonResources.Properties, CommonResources.Properties_ToolTip, CommonResources.PropertiesIcon, false);
+
+ CollectionAssert.AllItemsAreInstancesOfType(new[] { menu.Items[2] }, typeof(ToolStripSeparator));
+
+ mocks.VerifyAll();
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsGuiPluginTest.cs
===================================================================
diff -u -re388ea76d1d044298cc89156c8744fbea1bcb736 -ra80efa8773c3efec54ba44940945b03bc3f3ff7e
--- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsGuiPluginTest.cs (.../RingtoetsGuiPluginTest.cs) (revision e388ea76d1d044298cc89156c8744fbea1bcb736)
+++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsGuiPluginTest.cs (.../RingtoetsGuiPluginTest.cs) (revision a80efa8773c3efec54ba44940945b03bc3f3ff7e)
@@ -55,7 +55,7 @@
var mocks = new MockRepository();
var applicationCore = new ApplicationCore();
- var guiStub = mocks.DynamicMultiMock(typeof(IGui), typeof(IContextMenuProvider));
+ var guiStub = mocks.DynamicMultiMock(typeof(IGui), typeof(IContextMenuBuilderProvider));
Expect.Call(guiStub.ApplicationCore).Return(applicationCore).Repeat.Any();