master
1using System.Collections.Generic;
2using MbUnit.Framework;
3using Notepad.Domain.Repositories;
4using Notepad.Infrastructure.Extensions;
5using Notepad.Test.Extensions;
6using Rhino.Mocks;
7
8namespace Notepad.Presentation.Model.Menu.File {
9 public class FileMenuSpecs {}
10
11 [TestFixture]
12 public class when_asking_the_file_menu_for_its_name_ {
13 [Test]
14 public void should_return_the_correct_name() {
15 CreateSUT().Name().ShouldBeEqualTo(MenuNames.File);
16 }
17
18 private ISubMenu CreateSUT() {
19 return new FileMenu(null, null);
20 }
21 }
22
23 [TestFixture]
24 public class when_asking_the_file_menu_for_its_menu_items_ {
25 private MockRepository mockery;
26 private IRepository<IMenuItem> repository;
27 private ISubMenu sut;
28 private IMenuItemComparer menuItemComparer;
29
30 [SetUp]
31 public void SetUp() {
32 mockery = new MockRepository();
33 repository = mockery.DynamicMock<IRepository<IMenuItem>>();
34 menuItemComparer = mockery.DynamicMock<IMenuItemComparer>();
35
36 sut = CreateSUT();
37 }
38
39 [Test]
40 public void should_ask_the_repository_for_all_the_menu_items() {
41 using (mockery.Record()) {
42 Expect
43 .Call(repository.All())
44 .Return(new List<IMenuItem>())
45 .Repeat
46 .AtLeastOnce();
47 }
48
49 using (mockery.Playback()) {
50 sut.AllMenuItems().Walk();
51 }
52 }
53
54 [Test]
55 public void should_return_the_menu_items_that_belong_to_the_file_menu() {
56 var saveMenuItem = mockery.DynamicMock<IMenuItem>();
57 var helpMenuItem = mockery.DynamicMock<IMenuItem>();
58
59 var allMenuItems = new List<IMenuItem> {saveMenuItem, helpMenuItem};
60
61 using (mockery.Record()) {
62 SetupResult.For(repository.All()).Return(allMenuItems);
63 SetupResult.For(saveMenuItem.BelongsTo(sut)).Return(true);
64 SetupResult.For(helpMenuItem.BelongsTo(sut)).Return(false);
65 }
66
67 using (mockery.Playback()) {
68 var returnedItems = sut.AllMenuItems();
69 returnedItems.ShouldContain(saveMenuItem);
70 returnedItems.ShouldNotContain(helpMenuItem);
71 }
72 }
73
74 [Test]
75 public void should_sort_the_items_in_the_file_menu() {
76 var firstItem = mockery.DynamicMock<IMenuItem>();
77 var secondItem = mockery.DynamicMock<IMenuItem>();
78
79 var allMenuItems = new List<IMenuItem> {firstItem, secondItem};
80
81 using (mockery.Record()) {
82 SetupResult.For(repository.All()).Return(allMenuItems);
83 SetupResult.For(firstItem.BelongsTo(null))
84 .IgnoreArguments()
85 .Return(true);
86 SetupResult.For(secondItem.BelongsTo(null))
87 .IgnoreArguments()
88 .Return(true);
89 Expect
90 .Call(menuItemComparer.Compare(firstItem, secondItem))
91 .Return(1)
92 .Repeat
93 .AtLeastOnce();
94 }
95
96 using (mockery.Playback()) {
97 sut.AllMenuItems().Walk();
98 }
99 }
100
101 private ISubMenu CreateSUT() {
102 return new FileMenu(repository, menuItemComparer);
103 }
104 }
105}