Index: Core/Common/src/Core.Common.Gui/Commands/ApplicationFeatureCommandHandler.cs =================================================================== diff -u -ref1c61d94f2aec3b4ff32fcf03253d7ad386c8e5 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/src/Core.Common.Gui/Commands/ApplicationFeatureCommandHandler.cs (.../ApplicationFeatureCommandHandler.cs) (revision ef1c61d94f2aec3b4ff32fcf03253d7ad386c8e5) +++ Core/Common/src/Core.Common.Gui/Commands/ApplicationFeatureCommandHandler.cs (.../ApplicationFeatureCommandHandler.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -29,7 +29,6 @@ using Core.Common.Gui.Forms.MainWindow; using Core.Common.Gui.Forms.PropertyGridView; using Core.Common.Gui.Properties; -using Core.Common.Gui.Selection; using Core.Common.Gui.Settings; using log4net; @@ -44,26 +43,22 @@ { private readonly IPropertyResolver propertyResolver; private readonly IMainWindow mainWindow; - private readonly IApplicationSelection applicationSelection; /// /// Initializes a new instance of the class. /// /// The object responsible for finding the object properties /// for a given data object. /// The main user interface of the application. - /// The application's selection mechanism. - public ApplicationFeatureCommandHandler(IPropertyResolver propertyResolver, IMainWindow mainWindow, IApplicationSelection applicationSelection) + public ApplicationFeatureCommandHandler(IPropertyResolver propertyResolver, IMainWindow mainWindow) { this.propertyResolver = propertyResolver; this.mainWindow = mainWindow; - this.applicationSelection = applicationSelection; } public void ShowPropertiesFor(object obj) { mainWindow.InitPropertiesWindowAndActivate(); - applicationSelection.Selection = obj; } public bool CanShowPropertiesFor(object obj) Index: Core/Common/src/Core.Common.Gui/Commands/IStorageCommands.cs =================================================================== diff -u -r58846a8af268aab642a28805373d6fb234341f70 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/src/Core.Common.Gui/Commands/IStorageCommands.cs (.../IStorageCommands.cs) (revision 58846a8af268aab642a28805373d6fb234341f70) +++ Core/Common/src/Core.Common.Gui/Commands/IStorageCommands.cs (.../IStorageCommands.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -28,7 +28,7 @@ /// /// Interface for exposing commands/methods related to saving/loading a . /// - public interface IStorageCommands : IDisposable + public interface IStorageCommands { /// /// Closes the current project and creates a new one. Index: Core/Common/src/Core.Common.Gui/Commands/ProjectCommandHandler.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/src/Core.Common.Gui/Commands/ProjectCommandHandler.cs (.../ProjectCommandHandler.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Common/src/Core.Common.Gui/Commands/ProjectCommandHandler.cs (.../ProjectCommandHandler.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -78,8 +78,6 @@ if (newItem != null) { AddItemToProject(newItem); - - applicationSelection.Selection = newItem; viewController.DocumentViewController.OpenViewForData(applicationSelection.Selection); } } Index: Core/Common/src/Core.Common.Gui/Commands/StorageCommandHandler.cs =================================================================== diff -u -r7a542dea56b0bcfbbd4dd6f2c6abcafcfaa5f753 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/src/Core.Common.Gui/Commands/StorageCommandHandler.cs (.../StorageCommandHandler.cs) (revision 7a542dea56b0bcfbbd4dd6f2c6abcafcfaa5f753) +++ Core/Common/src/Core.Common.Gui/Commands/StorageCommandHandler.cs (.../StorageCommandHandler.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -20,51 +20,37 @@ // All rights reserved. using System; -using System.Collections.Specialized; using System.IO; using System.Windows.Forms; -using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Base.Storage; using Core.Common.Gui.Properties; -using Core.Common.Gui.Selection; using log4net; namespace Core.Common.Gui.Commands { /// /// Class responsible for persistency of . /// - public class StorageCommandHandler : IStorageCommands, IObserver + public class StorageCommandHandler : IStorageCommands { private static readonly ILog log = LogManager.GetLogger(typeof(StorageCommandHandler)); - private readonly IViewCommands viewCommands; - private readonly IMainWindowController mainWindowController; + private readonly IWin32Window dialogParent; private readonly IProjectOwner projectOwner; private readonly IStoreProject projectPersistor; - private readonly IApplicationSelection applicationSelection; /// /// Initializes a new instance of the class. /// /// Class responsible to storing and loading the application project. /// The class owning the application project. - /// Class managing the application selection. - /// Controller for UI. - /// The view command handler. - public StorageCommandHandler(IStoreProject projectStorage, IProjectOwner projectOwner, - IApplicationSelection applicationSelection, IMainWindowController mainWindowController, - IViewCommands viewCommands) + /// Controller for UI. + public StorageCommandHandler(IStoreProject projectStorage, IProjectOwner projectOwner, IWin32Window dialogParent) { - this.viewCommands = viewCommands; - this.mainWindowController = mainWindowController; + this.dialogParent = dialogParent; this.projectOwner = projectOwner; projectPersistor = projectStorage; - this.applicationSelection = applicationSelection; - - this.projectOwner.ProjectOpened += ApplicationProjectOpened; - this.projectOwner.ProjectClosing += ApplicationProjectClosing; } /// @@ -81,11 +67,6 @@ return OpenSaveOrDiscardProjectDialog(); } - public void UpdateObserver() - { - mainWindowController.RefreshGui(); - } - public void CreateNewProject() { if (!ContinueIfHasChanges()) @@ -99,8 +80,6 @@ projectOwner.Project = new Project(); projectOwner.ProjectFilePath = ""; log.Info(Resources.StorageCommandHandler_NewProject_Created_new_project_succesful); - - mainWindowController.RefreshGui(); } public bool OpenExistingProject() @@ -112,7 +91,7 @@ RestoreDirectory = true }) { - if (openFileDialog.ShowDialog(mainWindowController.MainWindow) != DialogResult.Cancel && ContinueIfHasChanges()) + if (openFileDialog.ShowDialog(dialogParent) != DialogResult.Cancel && ContinueIfHasChanges()) { return OpenExistingProject(openFileDialog.FileName); } @@ -143,8 +122,6 @@ } projectOwner.Project = newProject; - projectOwner.Project.NotifyObservers(); - mainWindowController.RefreshGui(); return isOpenProjectSuccessful; } @@ -154,14 +131,9 @@ { return; } - - viewCommands.RemoveAllViewsForItem(projectOwner.Project); - projectOwner.Project = null; projectOwner.ProjectFilePath = ""; projectPersistor.CloseProject(); - - mainWindowController.RefreshGui(); } public bool SaveProjectAs() @@ -187,7 +159,6 @@ projectOwner.ProjectFilePath = filePath; project.Name = Path.GetFileNameWithoutExtension(filePath); project.NotifyObservers(); - mainWindowController.RefreshGui(); log.Info(String.Format(Resources.StorageCommandHandler_SaveProject_Succesfully_saved_project_0_, project.Name)); return true; } @@ -218,8 +189,6 @@ public void Dispose() { - projectOwner.ProjectOpened -= ApplicationProjectOpened; - projectOwner.ProjectClosing -= ApplicationProjectClosing; } private bool OpenSaveOrDiscardProjectDialog() @@ -318,30 +287,5 @@ return false; } } - - private void ApplicationProjectClosing(Project project) - { - viewCommands.RemoveAllViewsForItem(project); - - project.Detach(this); - } - - private void ApplicationProjectOpened(Project project) - { - applicationSelection.Selection = project; - - project.Attach(this); - } - - private void AddProjectToMruList() - { - var mruList = (StringCollection) Properties.Settings.Default["mruList"]; - if (mruList.Contains(projectOwner.ProjectFilePath)) - { - mruList.Remove(projectOwner.ProjectFilePath); - } - - mruList.Insert(0, projectOwner.ProjectFilePath); - } } } \ No newline at end of file Index: Core/Common/src/Core.Common.Gui/GuiCore.cs =================================================================== diff -u -r3fdd2bee85bdf8b556c52d6706ed887c2b70bed4 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/src/Core.Common.Gui/GuiCore.cs (.../GuiCore.cs) (revision 3fdd2bee85bdf8b556c52d6706ed887c2b70bed4) +++ Core/Common/src/Core.Common.Gui/GuiCore.cs (.../GuiCore.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -29,6 +29,7 @@ using System.Linq; using System.Reflection; using System.Windows; +using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Base.Storage; using Core.Common.Controls.TreeView; @@ -99,7 +100,6 @@ throw new ArgumentNullException("fixedSettings"); } MainWindow = mainWindow; - Storage = projectStore; FixedSettings = fixedSettings; isAlreadyRunningInstanceOfIGui = true; @@ -110,7 +110,7 @@ UserSettings = Properties.Settings.Default; viewCommandHandler = new ViewCommandHandler(this, this, this); - storageCommandHandler = new StorageCommandHandler(projectStore, this, this, this, viewCommandHandler); + storageCommandHandler = new StorageCommandHandler(projectStore, this, MainWindow); exportImportCommandHandler = new ExportImportCommandHandler(MainWindow, Plugins.SelectMany(p => p.GetFileImporters()), Plugins.SelectMany(p => p.GetFileExporters())); @@ -120,12 +120,11 @@ ViewPropertyEditor.ViewCommands = ViewCommands; ProjectOpened += ApplicationProjectOpened; + projectObserver = new Observer(UpdateTitle); } public IPropertyResolver PropertyResolver { get; private set; } - public IStoreProject Storage { get; private set; } - public void Dispose() { Dispose(true); @@ -204,7 +203,7 @@ #endregion - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { if (disposing) { @@ -224,7 +223,6 @@ } Selection = null; - Project = null; if (ViewHost != null) @@ -500,7 +498,7 @@ DocumentViewController = new DocumentViewController(ViewHost, Plugins.SelectMany(p => p.GetViewInfos()), mainWindow); PropertyResolver = new PropertyResolver(Plugins.SelectMany(p => p.GetPropertyInfos())); - applicationFeatureCommands = new ApplicationFeatureCommandHandler(PropertyResolver, mainWindow, this); + applicationFeatureCommands = new ApplicationFeatureCommandHandler(PropertyResolver, mainWindow); mainWindow.InitializeToolWindows(); @@ -595,9 +593,9 @@ #region Implementation: IProjectOwner private Project project; + private readonly Observer projectObserver; public event Action ProjectOpened; - public event Action ProjectClosing; public string ProjectFilePath { get; set; } @@ -611,13 +609,12 @@ { if (project != null) { - if (ProjectClosing != null) - { - ProjectClosing(project); - } + ViewCommands.RemoveAllViewsForItem(project); } project = value; + projectObserver.Observable = project; + UpdateTitle(); if (project != null) { @@ -811,15 +808,6 @@ } } - public void RefreshGui() - { - // Set the gui selection to the current project - Selection = Project; - - // Update the window title - UpdateTitle(); - } - private void UpdateTitle() { if (mainWindow != null) Index: Core/Common/src/Core.Common.Gui/IGui.cs =================================================================== diff -u -rce792554075b8bfb2723bbdab4b3bdcb6cc58d6f -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/src/Core.Common.Gui/IGui.cs (.../IGui.cs) (revision ce792554075b8bfb2723bbdab4b3bdcb6cc58d6f) +++ Core/Common/src/Core.Common.Gui/IGui.cs (.../IGui.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -20,7 +20,6 @@ // All rights reserved. using System; -using Core.Common.Base.Storage; using Core.Common.Gui.Commands; using Core.Common.Gui.ContextMenu; using Core.Common.Gui.Forms.PropertyGridView; @@ -44,11 +43,6 @@ IPropertyResolver PropertyResolver { get; } /// - /// Gets the current project storage. - /// - IStoreProject Storage { get; } - - /// /// Runs the user interface, causing all user interface components to initialize, /// loading plugins and displaying the main window. /// Index: Core/Common/src/Core.Common.Gui/IMainWindowController.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/src/Core.Common.Gui/IMainWindowController.cs (.../IMainWindowController.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Common/src/Core.Common.Gui/IMainWindowController.cs (.../IMainWindowController.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -33,10 +33,5 @@ /// Gets main window of the graphical user interface. /// IMainWindow MainWindow { get; } - - /// - /// Fully refreshes the user interface. - /// - void RefreshGui(); } } \ No newline at end of file Index: Core/Common/src/Core.Common.Gui/IProjectOwner.cs =================================================================== diff -u -r0ae715fe2b16306e4147fed9749bae67ce186168 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/src/Core.Common.Gui/IProjectOwner.cs (.../IProjectOwner.cs) (revision 0ae715fe2b16306e4147fed9749bae67ce186168) +++ Core/Common/src/Core.Common.Gui/IProjectOwner.cs (.../IProjectOwner.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -36,11 +36,6 @@ event Action ProjectOpened; /// - /// Occurs when the instance available at is removed. - /// - event Action ProjectClosing; - - /// /// Gets or sets the project of the application. /// Project Project { get; set; } Index: Core/Common/test/Core.Common.Gui.Test/Commands/ApplicationFeatureCommandHandlerTest.cs =================================================================== diff -u -r151bab16a7ebc1bffc0621ab56c6dc219db1e90f -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/test/Core.Common.Gui.Test/Commands/ApplicationFeatureCommandHandlerTest.cs (.../ApplicationFeatureCommandHandlerTest.cs) (revision 151bab16a7ebc1bffc0621ab56c6dc219db1e90f) +++ Core/Common/test/Core.Common.Gui.Test/Commands/ApplicationFeatureCommandHandlerTest.cs (.../ApplicationFeatureCommandHandlerTest.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -35,7 +35,7 @@ public class ApplicationFeatureCommandHandlerTest { [Test] - public void ShowPropertiesFor_InitializeAndShowPropertyGridAndUpdateSelection() + public void ShowPropertiesFor_InitializeAndShowPropertyGrid() { // Setup var target = new object(); @@ -47,13 +47,12 @@ var applicationSelection = mocks.Stub(); mocks.ReplayAll(); - var commandHandler = new ApplicationFeatureCommandHandler(propertyResolver, mainWindow, applicationSelection); + var commandHandler = new ApplicationFeatureCommandHandler(propertyResolver, mainWindow); // Call commandHandler.ShowPropertiesFor(target); // Assert - Assert.AreSame(target, applicationSelection.Selection); mocks.VerifyAll(); } @@ -71,7 +70,7 @@ var applicationSelection = mocks.Stub(); mocks.ReplayAll(); - var commandHandler = new ApplicationFeatureCommandHandler(propertyResolver, mainWindow, applicationSelection); + var commandHandler = new ApplicationFeatureCommandHandler(propertyResolver, mainWindow); // Call var result = commandHandler.CanShowPropertiesFor(target); @@ -95,7 +94,7 @@ var applicationSelection = mocks.Stub(); mocks.ReplayAll(); - var commandHandler = new ApplicationFeatureCommandHandler(propertyResolver, mainWindow, applicationSelection); + var commandHandler = new ApplicationFeatureCommandHandler(propertyResolver, mainWindow); // Call var result = commandHandler.CanShowPropertiesFor(target); Index: Core/Common/test/Core.Common.Gui.Test/Commands/StorageCommandHandlerTest.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/test/Core.Common.Gui.Test/Commands/StorageCommandHandlerTest.cs (.../StorageCommandHandlerTest.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Common/test/Core.Common.Gui.Test/Commands/StorageCommandHandlerTest.cs (.../StorageCommandHandlerTest.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -20,7 +20,7 @@ // All rights reserved. using System; -using Core.Common.Base; +using System.Windows.Forms; using Core.Common.Base.Data; using Core.Common.Base.Storage; using Core.Common.Gui.Commands; @@ -48,40 +48,32 @@ public void CreateNewProject_NoProjectSet_NewProjectIsSet() { // Setup - var 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(); - projectOwner.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); - projectOwner.Stub(g => g.ProjectClosing -= null).IgnoreArguments(); - var applicationSelection = mocks.Stub(); + var mainWindowController = mocks.Stub(); - var mainWindowController = mocks.Stub(); - mainWindowController.Expect(c => c.RefreshGui()); - mocks.ReplayAll(); - using (var storageCommandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) - { - // Call - Action call = () => storageCommandHandler.CreateNewProject(); + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); - // Assert - var expectedMessages = new[] - { - "Openen van nieuw Ringtoetsproject.", - "Nieuw Ringtoetsproject succesvol geopend." - }; - TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); + // Call + Action call = () => storageCommandHandler.CreateNewProject(); - Assert.IsInstanceOf(projectOwner.Project); - Assert.AreEqual("", projectOwner.ProjectFilePath); - } + // Assert + var expectedMessages = new[] + { + "Openen van nieuw Ringtoetsproject.", + "Nieuw Ringtoetsproject succesvol geopend." + }; + TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); + + Assert.IsInstanceOf(projectOwner.Project); + Assert.AreEqual("", projectOwner.ProjectFilePath); mocks.VerifyAll(); } @@ -95,46 +87,38 @@ projectMock.Name = "test"; projectMock.StorageId = 1234L; - var viewCommands = mocks.StrictMock(); - viewCommands.Expect(g => g.RemoveAllViewsForItem(projectMock)).IgnoreArguments(); - 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(); - projectOwner.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); - projectOwner.Stub(g => g.ProjectClosing -= null).IgnoreArguments(); - var applicationSelection = mocks.Stub(); + var mainWindowController = mocks.Stub(); - var mainWindowController = mocks.Stub(); - mainWindowController.Expect(c => c.RefreshGui()).Repeat.AtLeastOnce(); - mocks.ReplayAll(); - using (var storageCommandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); + + // Call + Action call = () => storageCommandHandler.CreateNewProject(); + + // Assert + var expectedMessages = new[] { - // Call - Action call = () => storageCommandHandler.CreateNewProject(); + "Openen van nieuw Ringtoetsproject.", + "Nieuw Ringtoetsproject succesvol geopend." + }; + TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); - // Assert - var expectedMessages = new[] - { - "Openen van nieuw Ringtoetsproject.", - "Nieuw Ringtoetsproject succesvol geopend." - }; - TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); + 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); - 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(); } @@ -143,26 +127,22 @@ { // Setup var projectStorage = mocks.StrictMock(); - var applicationSelection = mocks.StrictMock(); - var mainWindowController = mocks.StrictMock(); - var viewCommands = mocks.StrictMock(); + var mainWindowController = mocks.StrictMock(); var projectOwner = mocks.StrictMock(); projectOwner.Expect(po => po.Project).Return(null); - projectOwner.Stub(po => po.ProjectOpened += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectOpened -= null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing -= null).IgnoreArguments(); mocks.ReplayAll(); - using (var commandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) - { - // Call - var result = commandHandler.SaveProject(); + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); - // Assert - Assert.IsFalse(result); - } + // Call + var result = storageCommandHandler.SaveProject(); + + // Assert + Assert.IsFalse(result); + mocks.VerifyAll(); } @@ -178,34 +158,30 @@ var projectStorage = mocks.StrictMock(); projectStorage.Expect(ps => ps.SaveProject(someValidFilePath, project)). Throw(new StorageException(exceptionMessage, new Exception("l33t h4xor!"))); - var applicationSelection = mocks.StrictMock(); - var mainWindowController = mocks.StrictMock(); - var viewCommands = mocks.StrictMock(); + var mainWindowController = mocks.StrictMock(); var projectOwner = mocks.Stub(); projectOwner.Project = project; projectOwner.ProjectFilePath = someValidFilePath; - projectOwner.Stub(po => po.ProjectOpened += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectOpened -= null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing -= null).IgnoreArguments(); mocks.ReplayAll(); - using (var commandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); + + // Call + bool result = true; + Action call = () => result = storageCommandHandler.SaveProject(); + + // Assert + var expectedMessages = new[] { - // Call - bool result = true; - Action call = () => result = commandHandler.SaveProject(); + exceptionMessage, + "Het is niet gelukt om het Ringtoetsproject op te slaan." + }; + TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); + Assert.IsFalse(result); - // Assert - var expectedMessages = new[] - { - exceptionMessage, - "Het is niet gelukt om het Ringtoetsproject op te slaan." - }; - TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); - Assert.IsFalse(result); - } mocks.VerifyAll(); } @@ -219,31 +195,27 @@ var projectStorage = mocks.Stub(); projectStorage.Expect(ps => ps.SaveProject(someValidFilePath, project)) .Return(42); - var applicationSelection = mocks.StrictMock(); - var mainWindowController = mocks.StrictMock(); - var viewCommands = mocks.StrictMock(); + var mainWindowController = mocks.StrictMock(); var projectOwner = mocks.Stub(); projectOwner.Project = project; projectOwner.ProjectFilePath = someValidFilePath; - projectOwner.Stub(po => po.ProjectOpened += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectOpened -= null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing -= null).IgnoreArguments(); mocks.ReplayAll(); - using (var commandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) - { - // Call - bool result = false; - Action call = () => result = commandHandler.SaveProject(); + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); - // Assert - var expectedMessage = string.Format("Het Ringtoetsproject '{0}' is succesvol opgeslagen.", - project.Name); - TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); - Assert.IsTrue(result); - } + // Call + bool result = false; + Action call = () => result = storageCommandHandler.SaveProject(); + + // Assert + var expectedMessage = string.Format("Het Ringtoetsproject '{0}' is succesvol opgeslagen.", + project.Name); + TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); + Assert.IsTrue(result); + mocks.VerifyAll(); } @@ -257,29 +229,29 @@ var projectStorage = mocks.Stub(); projectStorage.Stub(ps => ps.LoadProject(pathToSomeInvalidFile)) .Throw(new StorageException(goodErrorMessageText, new Exception("H@X!"))); - var applicationSelection = mocks.Stub(); - var mainWindowController = mocks.Stub(); - var viewCommands = mocks.Stub(); + var mainWindowController = mocks.Stub(); var projectOwner = mocks.Stub(); mocks.ReplayAll(); - using (var commandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); + + // Call + bool result = true; + Action call = () => result = storageCommandHandler.OpenExistingProject(pathToSomeInvalidFile); + + // Assert + var expectedMessages = new[] { - // Call - bool result = true; - Action call = () => result = commandHandler.OpenExistingProject(pathToSomeInvalidFile); + "Openen van bestaand Ringtoetsproject.", + goodErrorMessageText, + "Het is niet gelukt om het Ringtoetsproject te laden." + }; + TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 3); + Assert.IsFalse(result); - // Assert - var expectedMessages = new[] - { - "Openen van bestaand Ringtoetsproject.", - goodErrorMessageText, - "Het is niet gelukt om het Ringtoetsproject te laden." - }; - TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 3); - Assert.IsFalse(result); - } mocks.VerifyAll(); } @@ -292,28 +264,28 @@ var projectStorage = mocks.Stub(); projectStorage.Stub(ps => ps.LoadProject(pathToSomeInvalidFile)) .Return(null); - var applicationSelection = mocks.Stub(); - var mainWindowController = mocks.Stub(); - var viewCommands = mocks.Stub(); + var mainWindowController = mocks.Stub(); var projectOwner = mocks.Stub(); mocks.ReplayAll(); - using (var commandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); + + // Call + bool result = true; + Action call = () => result = storageCommandHandler.OpenExistingProject(pathToSomeInvalidFile); + + // Assert + var expectedMessages = new[] { - // Call - bool result = true; - Action call = () => result = commandHandler.OpenExistingProject(pathToSomeInvalidFile); + "Openen van bestaand Ringtoetsproject.", + "Het is niet gelukt om het Ringtoetsproject te laden." + }; + TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); + Assert.IsFalse(result); - // Assert - var expectedMessages = new[] - { - "Openen van bestaand Ringtoetsproject.", - "Het is niet gelukt om het Ringtoetsproject te laden." - }; - TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); - Assert.IsFalse(result); - } mocks.VerifyAll(); } @@ -326,43 +298,33 @@ fileName); var loadedProject = new Project(); - var observer = mocks.Stub(); - observer.Expect(o => o.UpdateObserver()); - var projectStorage = mocks.Stub(); projectStorage.Stub(ps => ps.LoadProject(pathToSomeInvalidFile)) .Return(loadedProject); - var applicationSelection = mocks.StrictMock(); - var mainWindowController = mocks.Stub(); - mainWindowController.Expect(c => c.RefreshGui()); + var mainWindowController = mocks.Stub(); - var viewCommands = mocks.StrictMock(); var projectOwner = mocks.Stub(); - projectOwner.Stub(po => po.ProjectOpened += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectOpened -= null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing -= null).IgnoreArguments(); mocks.ReplayAll(); - loadedProject.Attach(observer); + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); - using (var commandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) + // Call + bool result = false; + Action call = () => result = storageCommandHandler.OpenExistingProject(pathToSomeInvalidFile); + + // Assert + var expectedMessages = new[] { - // Call - bool result = false; - Action call = () => result = commandHandler.OpenExistingProject(pathToSomeInvalidFile); + "Openen van bestaand Ringtoetsproject.", + "Bestaand Ringtoetsproject succesvol geopend." + }; + TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); + Assert.IsTrue(result); - // Assert - var expectedMessages = new[] - { - "Openen van bestaand Ringtoetsproject.", - "Bestaand Ringtoetsproject succesvol geopend." - }; - TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); - Assert.IsTrue(result); - } Assert.IsInstanceOf(projectOwner.Project); Assert.AreEqual(pathToSomeInvalidFile, projectOwner.ProjectFilePath); Assert.AreEqual(fileName, projectOwner.Project.Name); @@ -375,53 +337,42 @@ // Setup const string fileName = "newProject"; string pathToSomeValidFile = string.Format("C://folder/directory/{0}.rtd", - fileName); + fileName); var loadedProject = new Project(); var originalProject = new Project("Original"); - var observer = mocks.Stub(); - observer.Expect(o => o.UpdateObserver()); - var projectStorage = mocks.Stub(); projectStorage.Stub(ps => ps.LoadProject(pathToSomeValidFile)) .Return(loadedProject); projectStorage.Stub(ps => ps.CloseProject()); var applicationSelection = mocks.Stub(); applicationSelection.Selection = originalProject; - var mainWindowController = mocks.Stub(); - mainWindowController.Expect(c => c.RefreshGui()).Repeat.Twice(); + var mainWindowController = mocks.Stub(); - var viewCommands = mocks.StrictMock(); - viewCommands.Expect(vc => vc.RemoveAllViewsForItem(originalProject)); - var projectOwner = mocks.Stub(); projectOwner.Project = originalProject; projectOwner.ProjectFilePath = ""; - projectOwner.Stub(po => po.ProjectOpened += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing += null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectOpened -= null).IgnoreArguments(); - projectOwner.Stub(po => po.ProjectClosing -= null).IgnoreArguments(); mocks.ReplayAll(); - loadedProject.Attach(observer); + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); - using (var commandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) + // Call + bool result = false; + Action call = () => result = storageCommandHandler.OpenExistingProject(pathToSomeValidFile); + + // Assert + var expectedMessages = new[] { - // Call - bool result = false; - Action call = () => result = commandHandler.OpenExistingProject(pathToSomeValidFile); + "Openen van bestaand Ringtoetsproject.", + "Bestaand Ringtoetsproject succesvol geopend." + }; + TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); + Assert.IsTrue(result); - // Assert - var expectedMessages = new[] - { - "Openen van bestaand Ringtoetsproject.", - "Bestaand Ringtoetsproject succesvol geopend." - }; - TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2); - Assert.IsTrue(result); - } Assert.IsInstanceOf(projectOwner.Project); Assert.AreEqual(pathToSomeValidFile, projectOwner.ProjectFilePath); Assert.AreEqual(fileName, projectOwner.Project.Name); @@ -433,46 +384,46 @@ { // Setup var projectStorage = mocks.Stub(); - var applicationSelection = mocks.Stub(); - var mainWindowController = mocks.Stub(); - var viewCommands = mocks.StrictMock(); + var mainWindowController = mocks.Stub(); var projectOwner = mocks.Stub(); mocks.ReplayAll(); - using (var commandHandler = new StorageCommandHandler(projectStorage, projectOwner, applicationSelection, - mainWindowController, viewCommands)) - { - // Call - bool result = commandHandler.ContinueIfHasChanges(); + var storageCommandHandler = new StorageCommandHandler( + projectStorage, + projectOwner, + mainWindowController); - // Assert - Assert.IsTrue(result); - } + // Call + bool result = storageCommandHandler.ContinueIfHasChanges(); + + // Assert + Assert.IsTrue(result); + mocks.VerifyAll(); } [Test] public void ContinueIfHasChanges_ProjectSetNoChange_ReturnsTrue() { // Setup - var viewCommandsMock = mocks.StrictMock(); - var applicationSelection = mocks.Stub(); - var mainWindowController = mocks.Stub(); + var mainWindowController = mocks.Stub(); var projectMock = mocks.StrictMock(); var projectStorageMock = mocks.Stub(); var projectOwnerMock = mocks.Stub(); projectOwnerMock.Project = projectMock; mocks.ReplayAll(); - using (var storageCommandHandler = new StorageCommandHandler(projectStorageMock, projectOwnerMock, applicationSelection, - mainWindowController, viewCommandsMock)) - { - // Call - bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges(); + var storageCommandHandler = new StorageCommandHandler( + projectStorageMock, + projectOwnerMock, + mainWindowController); - // Assert - Assert.IsTrue(actionMaycontinue); - } + // Call + bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges(); + + // Assert + Assert.IsTrue(actionMaycontinue); + mocks.VerifyAll(); } @@ -481,9 +432,7 @@ public void ContinueIfHasChanges_ProjectSetWithChangeCancelPressed_ReturnsFalse() { // Setup - var viewCommandsMock = mocks.StrictMock(); - var applicationSelection = mocks.Stub(); - var mainWindowController = mocks.Stub(); + var mainWindowController = mocks.Stub(); var projectMock = mocks.StrictMock(); projectMock.StorageId = 1234L; var projectStorageMock = mocks.Stub(); @@ -496,22 +445,24 @@ string messageBoxText = null; string expectedMessage = "Sla wijzigingen in het project op: Project?"; - using (var storageCommandHandler = new StorageCommandHandler(projectStorageMock, projectOwnerMock, applicationSelection, - mainWindowController, viewCommandsMock)) + var storageCommandHandler = new StorageCommandHandler( + projectStorageMock, + projectOwnerMock, + mainWindowController); + + DialogBoxHandler = (name, wnd) => { - DialogBoxHandler = (name, wnd) => - { - var helper = new MessageBoxTester(wnd); - messageBoxText = helper.Text; - helper.ClickCancel(); - }; + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + helper.ClickCancel(); + }; - // Call - bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges(); + // Call + bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges(); - // Assert - Assert.IsFalse(actionMaycontinue); - } + // Assert + Assert.IsFalse(actionMaycontinue); + mocks.VerifyAll(); Assert.AreEqual(expectedMessage, messageBoxText); } @@ -521,9 +472,7 @@ public void ContinueIfHasChanges_ProjectSetWithChangeNoPressed_ReturnsTrue() { // Setup - var viewCommandsMock = mocks.StrictMock(); - var applicationSelection = mocks.Stub(); - var mainWindowController = mocks.Stub(); + var mainWindowController = mocks.Stub(); var projectMock = mocks.StrictMock(); projectMock.StorageId = 1234L; var projectStorageMock = mocks.Stub(); @@ -536,22 +485,24 @@ string messageBoxText = null; string expectedMessage = "Sla wijzigingen in het project op: Project?"; - using (var storageCommandHandler = new StorageCommandHandler(projectStorageMock, projectOwnerMock, applicationSelection, - mainWindowController, viewCommandsMock)) + var storageCommandHandler = new StorageCommandHandler( + projectStorageMock, + projectOwnerMock, + mainWindowController); + + DialogBoxHandler = (name, wnd) => { - DialogBoxHandler = (name, wnd) => - { - var helper = new MessageBoxTester(wnd); - messageBoxText = helper.Text; - helper.SendCommand(MessageBoxTester.Command.No); - }; + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + helper.SendCommand(MessageBoxTester.Command.No); + }; - // Call - bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges(); + // Call + bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges(); - // Assert - Assert.IsTrue(actionMaycontinue); - } + // Assert + Assert.IsTrue(actionMaycontinue); + mocks.VerifyAll(); Assert.AreEqual(expectedMessage, messageBoxText); } @@ -561,9 +512,7 @@ public void ContinueIfHasChanges_ProjectSetWithChangeYesPressed_ReturnsTrue() { // Setup - var viewCommandsMock = mocks.StrictMock(); - var applicationSelection = mocks.Stub(); - var mainWindowController = mocks.Stub(); + var mainWindowController = mocks.Stub(); var projectMock = mocks.StrictMock(); projectMock.StorageId = 1234L; var projectFilePath = "some path"; @@ -581,22 +530,24 @@ string messageBoxText = null; string expectedMessage = "Sla wijzigingen in het project op: Project?"; - using (var storageCommandHandler = new StorageCommandHandler(projectStorageMock, projectOwnerMock, applicationSelection, - mainWindowController, viewCommandsMock)) + var storageCommandHandler = new StorageCommandHandler( + projectStorageMock, + projectOwnerMock, + mainWindowController); + + DialogBoxHandler = (name, wnd) => { - DialogBoxHandler = (name, wnd) => - { - var helper = new MessageBoxTester(wnd); - messageBoxText = helper.Text; - helper.SendCommand(MessageBoxTester.Command.Yes); - }; + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + helper.SendCommand(MessageBoxTester.Command.Yes); + }; - // Call - bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges(); + // Call + bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges(); - // Assert - Assert.IsTrue(actionMaycontinue); - } + // Assert + Assert.IsTrue(actionMaycontinue); + mocks.VerifyAll(); Assert.AreEqual(expectedMessage, messageBoxText); } @@ -606,9 +557,7 @@ public void CreateNewProject_ProjectSetWithChangeCancelPressed_CancelAndLog() { // Setup - var viewCommandsMock = mocks.StrictMock(); - var applicationSelection = mocks.Stub(); - var mainWindowController = mocks.Stub(); + var mainWindowController = mocks.Stub(); var projectMock = mocks.StrictMock(); projectMock.StorageId = 1234L; var projectStorageMock = mocks.Stub(); @@ -621,22 +570,24 @@ string messageBoxText = null; string expectedMessage = "Sla wijzigingen in het project op: Project?"; - using (var storageCommandHandler = new StorageCommandHandler(projectStorageMock, projectOwnerMock, applicationSelection, - mainWindowController, viewCommandsMock)) + var storageCommandHandler = new StorageCommandHandler( + projectStorageMock, + projectOwnerMock, + mainWindowController); + + DialogBoxHandler = (name, wnd) => { - DialogBoxHandler = (name, wnd) => - { - var helper = new MessageBoxTester(wnd); - messageBoxText = helper.Text; - helper.SendCommand(MessageBoxTester.Command.Cancel); - }; + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + helper.SendCommand(MessageBoxTester.Command.Cancel); + }; - // Call - Action call = () => storageCommandHandler.CreateNewProject(); + // Call + Action call = () => storageCommandHandler.CreateNewProject(); - // Assert - TestHelper.AssertLogMessageIsGenerated(call, Resources.StorageCommandHandler_NewProject_Creating_new_project_cancelled, 1); - } + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.StorageCommandHandler_NewProject_Creating_new_project_cancelled, 1); + mocks.VerifyAll(); Assert.AreEqual(expectedMessage, messageBoxText); } Index: Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs =================================================================== diff -u -ra1ec5faebf7ccf8e67fa34a2b73cd1063ab48840 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs (.../GuiCoreTest.cs) (revision a1ec5faebf7ccf8e67fa34a2b73cd1063ab48840) +++ Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs (.../GuiCoreTest.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -88,7 +88,6 @@ { // Assert Assert.AreEqual(null, gui.PropertyResolver); - Assert.AreSame(projectStore, gui.Storage); Assert.AreEqual(null, gui.ProjectFilePath); Assert.AreEqual(null, gui.Project); @@ -521,7 +520,6 @@ Assert.AreEqual(fileName, gui.Project.Name, "Project name should be updated to the name of the file."); - Assert.AreSame(gui.Selection, gui.Project); var expectedTitle = string.Format("{0} - {1} {2}", fileName, fixedSettings.MainWindowTitle, SettingsHelper.ApplicationVersion); Assert.AreEqual(expectedTitle, mainWindow.Title); @@ -574,7 +572,6 @@ CollectionAssert.IsEmpty(gui.Project.Items); Assert.AreEqual(0, gui.Project.StorageId); - Assert.AreSame(gui.Selection, gui.Project); var expectedTitle = string.Format("{0} - {1} {2}", expectedProjectName, fixedSettings.MainWindowTitle, SettingsHelper.ApplicationVersion); Assert.AreEqual(expectedTitle, mainWindow.Title); @@ -617,7 +614,6 @@ CollectionAssert.IsEmpty(gui.Project.Items); Assert.AreEqual(0, gui.Project.StorageId); - Assert.AreSame(gui.Selection, gui.Project); var expectedTitle = string.Format("{0} - {1} {2}", expectedProjectName, fixedSettings.MainWindowTitle, SettingsHelper.ApplicationVersion); Assert.AreEqual(expectedTitle, mainWindow.Title); @@ -993,7 +989,7 @@ [Test] [STAThread] - public void Project_SetNewValue_FireProjectClosingAndOpenedEvents() + public void Project_SetNewValue_FireProjectOpenedEvents() { // Setup var mocks = new MockRepository(); @@ -1007,20 +1003,6 @@ gui.Project = oldProject; - int closingCallCount = 0; - gui.ProjectClosing += project => - { - if (closingCallCount == 0) - { - Assert.AreSame(oldProject, project); - } - else - { - // Dispose causes this one: - Assert.AreSame(newProject, project); - } - closingCallCount++; - }; int openedCallCount = 0; gui.ProjectOpened += project => { @@ -1032,7 +1014,6 @@ gui.Project = newProject; // Assert - Assert.AreEqual(1, closingCallCount); Assert.AreEqual(1, openedCallCount); } mocks.VerifyAll(); Index: Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/GuiCoreIntegrationTest.cs =================================================================== diff -u -ra1ec5faebf7ccf8e67fa34a2b73cd1063ab48840 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/GuiCoreIntegrationTest.cs (.../GuiCoreIntegrationTest.cs) (revision a1ec5faebf7ccf8e67fa34a2b73cd1063ab48840) +++ Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/GuiCoreIntegrationTest.cs (.../GuiCoreIntegrationTest.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -73,25 +73,6 @@ [Test] [RequiresSTA] - public void Run_GuiWithProjectExplorerPlugin_SelectionIsSetToProjectExplorer() - { - // initialize - var mocks = new MockRepository(); - var projectStore = mocks.Stub(); - mocks.ReplayAll(); - - using (var gui = new GuiCore(new MainWindow(), projectStore, new GuiCoreSettings())) - { - gui.Plugins.Add(new ProjectExplorerPlugin()); - gui.Run(); - - Assert.AreEqual(gui.Project, gui.Selection); - } - mocks.VerifyAll(); - } - - [Test] - [RequiresSTA] public void FormActionIsRunForMainWindow() { //testing testhelper + visible changed event of mainwindow. Index: Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorer.Designer.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorer.Designer.cs (.../ProjectExplorer.Designer.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorer.Designer.cs (.../ProjectExplorer.Designer.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -7,19 +7,6 @@ /// private System.ComponentModel.IContainer components = null; - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - #region Component Designer generated code /// Index: Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorer.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorer.cs (.../ProjectExplorer.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorer.cs (.../ProjectExplorer.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -128,5 +128,20 @@ { viewCommands.RemoveAllViewsForItem(e.Value); } + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + applicationSelection.Selection = null; + } + + base.Dispose(disposing); + } } } \ No newline at end of file Index: Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerPlugin.cs =================================================================== diff -u -ra1ec5faebf7ccf8e67fa34a2b73cd1063ab48840 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerPlugin.cs (.../ProjectExplorerPlugin.cs) (revision a1ec5faebf7ccf8e67fa34a2b73cd1063ab48840) +++ Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerPlugin.cs (.../ProjectExplorerPlugin.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -170,10 +170,12 @@ public override void Deactivate() { + base.Deactivate(); + if (active) { - base.Deactivate(); projectOwner.ProjectOpened -= ApplicationProjectOpened; + projectExplorerViewController.Dispose(); active = false; } } Index: Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerViewController.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerViewController.cs (.../ProjectExplorerViewController.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerViewController.cs (.../ProjectExplorerViewController.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -35,7 +35,7 @@ /// /// This class is responsible for showing and hiding a . /// - public class ProjectExplorerViewController + public class ProjectExplorerViewController : IDisposable { private readonly IViewController viewController; private readonly IEnumerable treeNodeInfos; @@ -97,7 +97,7 @@ { get { - return projectExplorer != null && viewController.ViewHost.ToolViews.Contains(projectExplorer); + return viewController.ViewHost.ToolViews.Contains(projectExplorer); } } @@ -144,7 +144,14 @@ private void CloseProjectExplorer() { viewController.ViewHost.Remove(projectExplorer); - projectExplorer = null; } + + public void Dispose() + { + if (projectExplorer != null) + { + projectExplorer.Dispose(); + } + } } } \ No newline at end of file Index: Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/Commands/ToggleProjectExplorerCommandTest.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/Commands/ToggleProjectExplorerCommandTest.cs (.../ToggleProjectExplorerCommandTest.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/Commands/ToggleProjectExplorerCommandTest.cs (.../ToggleProjectExplorerCommandTest.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -58,18 +58,24 @@ var applicationSelection = mocks.StrictMock(); var viewController = mocks.StrictMock(); + var viewHost = mocks.StrictMock(); + + viewController.Stub(tvc => tvc.ViewHost).Return(viewHost); + viewHost.Stub(vm => vm.ToolViews).Return(new List()); + mocks.ReplayAll(); var treeNodeInfos = Enumerable.Empty(); - var explorerViewController = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos); + using (var explorerViewController = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos)) + { + // Call + var command = new ToggleProjectExplorerCommand(explorerViewController); - // Call - var command = new ToggleProjectExplorerCommand(explorerViewController); - - // Assert - Assert.IsInstanceOf(command); - Assert.IsTrue(command.Enabled); + // Assert + Assert.IsInstanceOf(command); + Assert.IsTrue(command.Enabled); + } mocks.VerifyAll(); } @@ -82,16 +88,16 @@ var mocks = new MockRepository(); var viewCommands = mocks.StrictMock(); - var applicationSelection = mocks.StrictMock(); + var applicationSelection = mocks.Stub(); var viewController = mocks.StrictMock(); var viewHost = mocks.StrictMock(); + var toolViewList = new List(); + viewController.Stub(tvc => tvc.ViewHost).Return(viewHost); + viewHost.Stub(vm => vm.ToolViews).Return(toolViewList); + if (isViewOpen) { - var toolViewList = new List(); - - viewController.Stub(tvc => tvc.ViewHost).Return(viewHost); - viewHost.Stub(vm => vm.ToolViews).Return(toolViewList); viewHost.Expect(vm => vm.AddToolView(Arg.Matches(c => true), Arg.Matches(vl => vl == ToolViewLocation.Left))).WhenCalled(invocation => { toolViewList.Add(invocation.Arguments[0] as ProjectExplorer); @@ -103,20 +109,21 @@ var treeNodeInfos = Enumerable.Empty(); - var explorerViewController = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos); - - var command = new ToggleProjectExplorerCommand(explorerViewController); - - if (isViewOpen) + using (var explorerViewController = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos)) { - explorerViewController.ToggleView(); - } + var command = new ToggleProjectExplorerCommand(explorerViewController); - // Call - var result = command.Checked; + if (isViewOpen) + { + explorerViewController.ToggleView(); + } - // Assert - Assert.AreEqual(isViewOpen, result); + // Call + var result = command.Checked; + + // Assert + Assert.AreEqual(isViewOpen, result); + } mocks.VerifyAll(); } @@ -128,7 +135,7 @@ // Setup var mocks = new MockRepository(); var viewCommands = mocks.StrictMock(); - var applicationSelection = mocks.StrictMock(); + var applicationSelection = mocks.Stub(); var viewHost = mocks.StrictMock(); var viewController = mocks.StrictMock(); @@ -152,17 +159,18 @@ var treeNodeInfos = Enumerable.Empty(); - var explorerViewController = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos); - if (isViewOpen) + using (var explorerViewController = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos)) { - explorerViewController.ToggleView(); - } + if (isViewOpen) + { + explorerViewController.ToggleView(); + } - var command = new ToggleProjectExplorerCommand(explorerViewController); + var command = new ToggleProjectExplorerCommand(explorerViewController); - // Call - command.Execute(); - + // Call + command.Execute(); + } // Assert mocks.VerifyAll(); } Index: Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerTest.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerTest.cs (.../ProjectExplorerTest.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerTest.cs (.../ProjectExplorerTest.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -66,7 +66,7 @@ { // Setup var mocks = new MockRepository(); - IApplicationSelection applicationSelection = mocks.StrictMock(); + IApplicationSelection applicationSelection = mocks.Stub(); IViewCommands viewCommands = mocks.StrictMock(); IEnumerable treeNodeInfos = Enumerable.Empty(); @@ -85,12 +85,33 @@ } [Test] - public void Data_Always_SetTreeViewControlData() + public void Dispose_Always_SetsApplicationSelectionToNull() { // Setup var mocks = new MockRepository(); IApplicationSelection applicationSelection = mocks.StrictMock(); + applicationSelection.Expect(aps => aps.Selection = null); + IViewCommands viewCommands = mocks.StrictMock(); + IEnumerable treeNodeInfos = Enumerable.Empty(); + + mocks.ReplayAll(); + var explorer = new ProjectExplorer(applicationSelection, viewCommands, treeNodeInfos); + + // Call + explorer.Dispose(); + + // Assert + mocks.VerifyAll(); + } + + [Test] + public void Data_Always_SetTreeViewControlData() + { + // Setup + var mocks = new MockRepository(); + IApplicationSelection applicationSelection = mocks.Stub(); + IViewCommands viewCommands = mocks.StrictMock(); IEnumerable treeNodeInfos = new[] { new TreeNodeInfo @@ -119,7 +140,7 @@ { // Setup var mocks = new MockRepository(); - IApplicationSelection applicationSelection = mocks.StrictMock(); + IApplicationSelection applicationSelection = mocks.Stub(); IViewCommands viewCommands = mocks.StrictMock(); IEnumerable treeNodeInfos = new[] { @@ -180,14 +201,15 @@ }, new TreeNodeInfo { - TagType = typeof(String) + TagType = typeof(string) } }; using (mocks.Ordered()) { applicationSelection.Expect(a => a.Selection = project); applicationSelection.Expect(a => a.Selection = stringA); + applicationSelection.Expect(a => a.Selection = null); } mocks.ReplayAll(); @@ -220,7 +242,7 @@ var treeIdentifier = "SomeName"; var formIdentifier = "SomeForm"; var mocks = new MockRepository(); - IApplicationSelection applicationSelection = mocks.StrictMock(); + IApplicationSelection applicationSelection = mocks.Stub(); IViewCommands viewCommands = mocks.StrictMock(); var project = new Project(); @@ -235,7 +257,6 @@ using (mocks.Ordered()) { - applicationSelection.Expect(a => a.Selection = project); viewCommands.Expect(a => a.OpenViewForSelection()); } Index: Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerViewControllerTest.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -rb78b6d08e4be8dfe938718d5e65085aa8bd72dcc --- Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerViewControllerTest.cs (.../ProjectExplorerViewControllerTest.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerViewControllerTest.cs (.../ProjectExplorerViewControllerTest.cs) (revision b78b6d08e4be8dfe938718d5e65085aa8bd72dcc) @@ -86,13 +86,12 @@ IEnumerable treeNodeInfos = Enumerable.Empty(); - var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos); - - controller.ToggleView(); - - // Call - controller.ToggleView(); - + using (var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos)) + { + controller.ToggleView(); + // Call + controller.ToggleView(); + } // Assert mocks.VerifyAll(); } @@ -108,40 +107,42 @@ IViewHost viewHost = mocks.Stub(); viewController.Stub(tvc => tvc.ViewHost).Return(viewHost); + viewHost.Stub(vm => vm.ToolViews).Return(new List()); viewHost.Stub(vm => vm.AddToolView(Arg.Is.TypeOf, Arg.Matches(vl => vl == ToolViewLocation.Left))); viewHost.Expect(vm => vm.SetImage(null, null)).IgnoreArguments(); mocks.ReplayAll(); IEnumerable treeNodeInfos = Enumerable.Empty(); - var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos); - - // Call - controller.ToggleView(); - + using (var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos)) + { + // Call + controller.ToggleView(); + } // Assert mocks.VerifyAll(); } [Test] [TestCase(true)] [TestCase(false)] - public void IsViewActive_Always_CallsIsToolWindowOpenWithProjectExplorer(bool isOpen) + public void IsProjectExplorerOpen_Always_CallsIsToolWindowOpenWithProjectExplorer(bool isOpen) { // Setup var mocks = new MockRepository(); IViewCommands viewCommands = mocks.StrictMock(); - IApplicationSelection applicationSelection = mocks.StrictMock(); + IApplicationSelection applicationSelection = mocks.Stub(); IViewController viewController = mocks.StrictMock(); + var toolViewList = new List(); + var viewHost = mocks.StrictMock(); + + viewController.Stub(tvc => tvc.ViewHost).Return(viewHost); + viewHost.Stub(vm => vm.ToolViews).Return(toolViewList); + if (isOpen) { - var toolViewList = new List(); - var viewHost = mocks.StrictMock(); - - viewController.Stub(tvc => tvc.ViewHost).Return(viewHost); - viewHost.Stub(vm => vm.ToolViews).Return(toolViewList); viewHost.Expect(vm => vm.AddToolView(Arg.Matches(c => true), Arg.Matches(vl => vl == ToolViewLocation.Left))).WhenCalled(invocation => { toolViewList.Add(invocation.Arguments[0] as ProjectExplorer); @@ -153,18 +154,18 @@ IEnumerable treeNodeInfos = Enumerable.Empty(); - var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos); - - if (isOpen) + using (var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos)) { - controller.ToggleView(); - } + if (isOpen) + { + controller.ToggleView(); + } - // Call - var result = controller.IsProjectExplorerOpen; - - // Assert - Assert.AreEqual(isOpen, result); + // Call + var result = controller.IsProjectExplorerOpen; + // Assert + Assert.AreEqual(isOpen, result); + } mocks.VerifyAll(); } @@ -201,15 +202,17 @@ var project = new Project(); - var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos); - controller.ToggleView(); + using (var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos)) + { + controller.ToggleView(); - // Call - controller.Update(project); + // Call + controller.Update(project); - // Assert - Assert.AreEqual(1, toolViewList.Count); - Assert.AreSame(project, toolViewList[0].Data); + // Assert + Assert.AreEqual(1, toolViewList.Count); + Assert.AreSame(project, toolViewList[0].Data); + } mocks.VerifyAll(); } @@ -221,17 +224,23 @@ IViewCommands viewCommands = mocks.StrictMock(); IApplicationSelection applicationSelection = mocks.StrictMock(); IViewController viewController = mocks.Stub(); + + var viewHost = mocks.StrictMock(); + + viewController.Stub(tvc => tvc.ViewHost).Return(viewHost); + viewHost.Stub(vm => vm.ToolViews).Return(new List()); + mocks.ReplayAll(); IEnumerable treeNodeInfos = Enumerable.Empty(); var project = new Project(); - var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos); - - // Call - controller.Update(project); - + using (var controller = new ProjectExplorerViewController(viewCommands, applicationSelection, viewController, treeNodeInfos)) + { + // Call + controller.Update(project); + } // Assert mocks.VerifyAll(); }