using Core.Common.Base.Data; using Core.Common.Base.Storage; using NUnit.Framework; using Rhino.Mocks; namespace Core.Common.Gui.Test { [TestFixture] public class StorageCommandHandlerTest { private MockRepository mocks; [SetUp] public void SetUp() { mocks = new MockRepository(); } [Test] public void CreateNewProject_NoProjectSet_NewProjectIsSet() { // SetUp IViewCommands viewCommands = mocks.StrictMock(); var projectStorage = mocks.Stub(); var projectOwner = mocks.Stub(); projectOwner.Stub(g => g.ProjectOpened += null).IgnoreArguments(); projectOwner.Stub(g => g.ProjectClosing += null).IgnoreArguments(); var applicationSelection = mocks.Stub(); var mainWindowController = mocks.Stub(); var toolViewController = mocks.Stub(); mocks.ReplayAll(); var storageCommandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, mainWindowController, toolViewController, viewCommands); // Call storageCommandHandler.CreateNewProject(); // Assert Assert.IsInstanceOf(projectOwner.Project); Assert.AreEqual("", projectOwner.ProjectFilePath); mocks.VerifyAll(); } [Test] public void CreateNewProject_SavedProjectThenNewProject_NewProjectAndPathAreSet() { // SetUp const string savedProjectPath = @"C:\savedProject.rtd"; IViewCommands viewCommands = mocks.StrictMock(); viewCommands.Expect(g => g.RemoveAllViewsForItem(null)).IgnoreArguments(); Project projectMock = mocks.StrictMock(); projectMock.Name = "test"; projectMock.StorageId = 1234L; var projectStorage = mocks.Stub(); var projectOwner = mocks.Stub(); projectOwner.Project = projectMock; projectOwner.ProjectFilePath = savedProjectPath; projectOwner.Stub(g => g.ProjectOpened += null).IgnoreArguments(); projectOwner.Stub(g => g.ProjectClosing += null).IgnoreArguments(); var applicationSelection = mocks.Stub(); var mainWindowController = mocks.Stub(); var toolViewController = mocks.Stub(); mocks.ReplayAll(); var storageCommandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, mainWindowController, toolViewController, viewCommands); // Call storageCommandHandler.CreateNewProject(); // Assert Assert.IsInstanceOf(projectOwner.Project); Assert.AreNotEqual(projectMock, projectOwner.Project); Assert.AreNotEqual(projectMock.StorageId, projectOwner.Project.StorageId); Assert.AreNotEqual(savedProjectPath, projectOwner.ProjectFilePath); Assert.AreEqual("", projectOwner.ProjectFilePath); mocks.VerifyAll(); } [Test] public void CloseProject_ProjectSet_NullsProjectSelectionAndPath() { // SetUp const string savedProjectPath = @"C:\savedProject.rtd"; IViewCommands viewCommands = mocks.StrictMock(); viewCommands.Expect(g => g.RemoveAllViewsForItem(null)).IgnoreArguments(); Project projectMock = mocks.StrictMock(); var projectStorage = mocks.Stub(); var projectOwner = mocks.Stub(); projectOwner.Project = projectMock; projectOwner.ProjectFilePath = savedProjectPath; projectOwner.Stub(g => g.ProjectOpened += null).IgnoreArguments(); projectOwner.Stub(g => g.ProjectClosing += null).IgnoreArguments(); var applicationSelection = mocks.Stub(); applicationSelection.Selection = projectMock; var mainWindowController = mocks.Stub(); var toolViewController = mocks.Stub(); mocks.ReplayAll(); var storageCommandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, mainWindowController, toolViewController, viewCommands); // Call storageCommandHandler.CloseProject(); // Assert Assert.IsNull(projectOwner.Project); Assert.IsNull(applicationSelection.Selection); Assert.AreEqual("", projectOwner.ProjectFilePath); mocks.VerifyAll(); } [Test] public void CloseProject_EmptyProject_DoesNotThrowException() { IViewCommands viewCommands = mocks.StrictMock(); viewCommands.Expect(g => g.RemoveAllViewsForItem(null)).IgnoreArguments(); Project projectMock = mocks.StrictMock(); var projectStorage = mocks.Stub(); var projectOwner = mocks.Stub(); projectOwner.Project = projectMock; projectOwner.Stub(g => g.ProjectOpened += null).IgnoreArguments(); projectOwner.Stub(g => g.ProjectClosing += null).IgnoreArguments(); var applicationSelection = mocks.Stub(); applicationSelection.Selection = projectMock; var mainWindowController = mocks.Stub(); var toolViewController = mocks.Stub(); mocks.ReplayAll(); var storageCommandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, mainWindowController, toolViewController, viewCommands); TestDelegate closeProject = () => storageCommandHandler.CloseProject(); Assert.DoesNotThrow(closeProject); } } }