diff options
Diffstat (limited to 'src/Notepad/Presentation/Views/Menu/Mappers')
5 files changed, 183 insertions, 0 deletions
diff --git a/src/Notepad/Presentation/Views/Menu/Mappers/IMenuItemToToolStripMenuItemMapper.cs b/src/Notepad/Presentation/Views/Menu/Mappers/IMenuItemToToolStripMenuItemMapper.cs new file mode 100644 index 0000000..a8214a8 --- /dev/null +++ b/src/Notepad/Presentation/Views/Menu/Mappers/IMenuItemToToolStripMenuItemMapper.cs @@ -0,0 +1,15 @@ +using System.Windows.Forms;
+using Notepad.Infrastructure.Core;
+using Notepad.Presentation.Model.Menu;
+
+namespace Notepad.Presentation.Views.Menu.Mappers {
+ public interface IMenuItemToToolStripMenuItemMapper : IMapper<IMenuItem, ToolStripMenuItem> {}
+
+ public class MenuItemToToolStripMenuItemMapper : IMenuItemToToolStripMenuItemMapper {
+ public ToolStripMenuItem MapFrom(IMenuItem item) {
+ var toolStripMenuItem = new ToolStripMenuItem(item.Name());
+ toolStripMenuItem.Click += delegate { item.Click(); };
+ return toolStripMenuItem;
+ }
+ }
+}
\ No newline at end of file diff --git a/src/Notepad/Presentation/Views/Menu/Mappers/ISubMenuToToolStripMenuItemMapper.cs b/src/Notepad/Presentation/Views/Menu/Mappers/ISubMenuToToolStripMenuItemMapper.cs new file mode 100644 index 0000000..8c00cee --- /dev/null +++ b/src/Notepad/Presentation/Views/Menu/Mappers/ISubMenuToToolStripMenuItemMapper.cs @@ -0,0 +1,10 @@ +using System.Windows.Forms;
+using Notepad.Infrastructure.Core;
+using Notepad.Presentation.Model.Menu;
+
+namespace Notepad.Presentation.Views.Menu.Mappers {
+ public interface ISubMenuToToolStripMenuItemMapper : IMapper<ISubMenu, ToolStripMenuItem>
+ {
+
+ }
+}
\ No newline at end of file diff --git a/src/Notepad/Presentation/Views/Menu/Mappers/MenuItemToToolStripMenuItemMapperSpecs.cs b/src/Notepad/Presentation/Views/Menu/Mappers/MenuItemToToolStripMenuItemMapperSpecs.cs new file mode 100644 index 0000000..8d8b29c --- /dev/null +++ b/src/Notepad/Presentation/Views/Menu/Mappers/MenuItemToToolStripMenuItemMapperSpecs.cs @@ -0,0 +1,47 @@ +using MbUnit.Framework;
+using Notepad.Presentation.Model.Menu;
+using Notepad.Presentation.Views.Menu.Mappers;
+using Notepad.Test.Extensions;
+using Rhino.Mocks;
+
+namespace Notepad.Presentation.Views.Menu.Mappers {
+ public class MenuItemToToolStripMenuItemMapperSpecs {}
+
+ [TestFixture]
+ public class when_mapping_a_menu_item_to_a_tool_strip_menu_item_ {
+ private MockRepository mockery;
+ private IMenuItem menuItem;
+
+ [SetUp]
+ public void SetUp() {
+ mockery = new MockRepository();
+ menuItem = mockery.DynamicMock<IMenuItem>();
+
+ SetupResult.For(menuItem.Name()).Return("&Save");
+ }
+
+ [Test]
+ public void should_return_a_tool_strip_menu_item_with_the_menu_items_name_applied_as_its_text() {
+ using (mockery.Record()) {}
+
+ using (mockery.Playback()) {
+ CreateSUT().MapFrom(menuItem).Text.ShouldBeEqualTo("&Save");
+ }
+ }
+
+ [Test]
+ public void should_invoke_the_menu_items_click_method_when_the_tool_strip_menu_item_is_clicked() {
+ using (mockery.Record()) {
+ menuItem.Click();
+ }
+
+ using (mockery.Playback()) {
+ CreateSUT().MapFrom(menuItem).PerformClick();
+ }
+ }
+
+ private IMenuItemToToolStripMenuItemMapper CreateSUT() {
+ return new MenuItemToToolStripMenuItemMapper();
+ }
+ }
+}
\ No newline at end of file diff --git a/src/Notepad/Presentation/Views/Menu/Mappers/SubMenuToToolStripMenuItemMapper.cs b/src/Notepad/Presentation/Views/Menu/Mappers/SubMenuToToolStripMenuItemMapper.cs new file mode 100644 index 0000000..74efbbd --- /dev/null +++ b/src/Notepad/Presentation/Views/Menu/Mappers/SubMenuToToolStripMenuItemMapper.cs @@ -0,0 +1,21 @@ +using System.Windows.Forms;
+using Notepad.Presentation.Model.Menu;
+using Notepad.Presentation.Views.Menu.Mappers;
+
+namespace Notepad.Presentation.Views.Menu.Mappers {
+ public class SubMenuToToolStripMenuItemMapper : ISubMenuToToolStripMenuItemMapper {
+ private readonly IMenuItemToToolStripMenuItemMapper mapper;
+
+ public SubMenuToToolStripMenuItemMapper(IMenuItemToToolStripMenuItemMapper mapper) {
+ this.mapper = mapper;
+ }
+
+ public ToolStripMenuItem MapFrom(ISubMenu item) {
+ var toolStripMenuItem = new ToolStripMenuItem(item.Name());
+ foreach (var menuItem in item.AllMenuItems()) {
+ toolStripMenuItem.DropDownItems.Add(mapper.MapFrom(menuItem));
+ }
+ return toolStripMenuItem;
+ }
+ }
+}
\ No newline at end of file diff --git a/src/Notepad/Presentation/Views/Menu/Mappers/SubMenuToToolStripMenuItemMapperSpecs.cs b/src/Notepad/Presentation/Views/Menu/Mappers/SubMenuToToolStripMenuItemMapperSpecs.cs new file mode 100644 index 0000000..d26391c --- /dev/null +++ b/src/Notepad/Presentation/Views/Menu/Mappers/SubMenuToToolStripMenuItemMapperSpecs.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic;
+using System.Windows.Forms;
+using MbUnit.Framework;
+using Notepad.Infrastructure.Core;
+using Notepad.Presentation.Model.Menu;
+using Notepad.Test.Extensions;
+using Rhino.Mocks;
+
+namespace Notepad.Presentation.Views.Menu.Mappers {
+ public class SubMenuToToolStripMenuItemMapperSpecs {}
+
+ [TestFixture]
+ public class when_mapping_a_sub_menu_to_a_tool_strip_menu_item_ {
+ private MockRepository mockery;
+ private ISubMenu subMenu;
+ private IList<IMenuItem> menuItems;
+ private IMenuItemToToolStripMenuItemMapper mapper;
+
+ [SetUp]
+ public void SetUp() {
+ mockery = new MockRepository();
+ subMenu = mockery.DynamicMock<ISubMenu>();
+ mapper = mockery.DynamicMock<IMenuItemToToolStripMenuItemMapper>();
+ menuItems = new List<IMenuItem>();
+
+ SetupResult.For(subMenu.Name()).Return("&File");
+ SetupResult.For(subMenu.AllMenuItems()).Return(menuItems);
+ }
+
+ [Test]
+ public void should_return_a_non_null_value() {
+ using (mockery.Record()) {}
+
+ using (mockery.Playback()) {
+ CreateSUT().MapFrom(subMenu).ShouldNotBeNull();
+ }
+ }
+
+ [Test]
+ public void should_return_a_menu_item_with_the_sub_menus_name_applied_as_its_text() {
+ using (mockery.Record()) {}
+
+ using (mockery.Playback()) {
+ CreateSUT().MapFrom(subMenu).Text.ShouldBeEqualTo("&File");
+ }
+ }
+
+ [Test]
+ public void should_map_each_of_the_sub_menus_menu_items_to_tool_strip_menu_items() {
+ var firstMenuItem = mockery.DynamicMock<IMenuItem>();
+
+ menuItems.Add(firstMenuItem);
+ using (mockery.Record()) {
+ Expect
+ .Call(mapper.MapFrom(firstMenuItem))
+ .Return(new ToolStripMenuItem())
+ .Repeat
+ .AtLeastOnce();
+ }
+
+ using (mockery.Playback()) {
+ CreateSUT().MapFrom(subMenu);
+ }
+ }
+
+ [Test]
+ public void should_add_all_the_mapped_menu_items_to_the_menu_item_representing_the_sub_menu() {
+ var firstMenuItem = mockery.DynamicMock<IMenuItem>();
+ var mappedMenuItem = new ToolStripMenuItem();
+
+ menuItems.Add(firstMenuItem);
+ using (mockery.Record()) {
+ SetupResult
+ .For(mapper.MapFrom(firstMenuItem))
+ .Return(mappedMenuItem)
+ .Repeat
+ .AtLeastOnce();
+ }
+
+ using (mockery.Playback()) {
+ CreateSUT().MapFrom(subMenu).DropDownItems.Contains(mappedMenuItem)
+ .ShouldBeEqualTo(true);
+ }
+ }
+
+ private IMapper<ISubMenu, ToolStripMenuItem> CreateSUT() {
+ return new SubMenuToToolStripMenuItemMapper(mapper);
+ }
+ }
+}
\ No newline at end of file |
