Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs =================================================================== diff -u -ra65bc56647a666fad39e7fe48fbce3a5c040dfee -r11ba203152ddf37106da76d9a38d4ffd771026dd --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs (.../StorageSqLiteIntegrationTest.cs) (revision a65bc56647a666fad39e7fe48fbce3a5c040dfee) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs (.../StorageSqLiteIntegrationTest.cs) (revision 11ba203152ddf37106da76d9a38d4ffd771026dd) @@ -2,8 +2,10 @@ using System.IO; using System.Linq; using Core.Common.Base.Data; +using Core.Common.Base.Plugin; using Core.Common.Gui; using Core.Common.Gui.Forms.MainWindow; +using Core.Common.Gui.Settings; using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Integration.Data; @@ -108,7 +110,7 @@ var testFile = Path.Combine(testDataPath, "ValidRingtoetsDatabase.rtd"); var projectStore = new StorageSqLite(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { // Call Action action = () => gui.Run(testFile); @@ -136,7 +138,7 @@ var testFile = "SomeFile"; var projectStore = new StorageSqLite(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { // Call Action action = () => gui.Run(testFile); @@ -168,7 +170,7 @@ // Setup var projectStore = new StorageSqLite(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { // Call Action action = () => gui.Run(testFile); Index: Core/Common/src/Core.Common.Gui/RingtoetsGui.cs =================================================================== diff -u -r8facffc48a20cd49759e32aea1ecc100047c68a2 -r11ba203152ddf37106da76d9a38d4ffd771026dd --- Core/Common/src/Core.Common.Gui/RingtoetsGui.cs (.../RingtoetsGui.cs) (revision 8facffc48a20cd49759e32aea1ecc100047c68a2) +++ Core/Common/src/Core.Common.Gui/RingtoetsGui.cs (.../RingtoetsGui.cs) (revision 11ba203152ddf37106da76d9a38d4ffd771026dd) @@ -57,7 +57,7 @@ namespace Core.Common.Gui { /// - /// Gui class provides graphical user functionality for a given IApplication. + /// Gui class provides graphical user functionality for the application. /// public class RingtoetsGui : IGui { @@ -73,19 +73,45 @@ private bool runFinished; private bool isExiting; - public RingtoetsGui(IMainWindow mainWindow, IStoreProject projectStore, ApplicationCore applicationCore = null, GuiCoreSettings fixedSettings = null) + /// + /// Initializes a new instance of the class. + /// + /// The main window. + /// The project store. + /// The application core. + /// The fixed settings. + /// When another + /// instance is running. + /// When any parameter is null. + public RingtoetsGui(IMainWindow mainWindow, IStoreProject projectStore, ApplicationCore applicationCore, GuiCoreSettings fixedSettings) { // error detection code, make sure we use only a single instance of RingtoetsGui at a time if (isAlreadyRunningInstanceOfIGui) { - isAlreadyRunningInstanceOfIGui = false; // reset to that the consequent creations won't fail. + isAlreadyRunningInstanceOfIGui = false; // reset to that the consecutive creations won't fail. throw new InvalidOperationException(Resources.RingtoetsGui_Only_a_single_instance_of_Ringtoets_is_allowed_at_the_same_time_per_process_Make_sure_that_the_previous_instance_was_disposed_correctly_stack_trace + instanceCreationStackTrace); } + if (mainWindow == null) + { + throw new ArgumentNullException("mainWindow"); + } + if (projectStore == null) + { + throw new ArgumentNullException("projectStore"); + } + if (applicationCore == null) + { + throw new ArgumentNullException("applicationCore"); + } + if (fixedSettings == null) + { + throw new ArgumentNullException("fixedSettings"); + } MainWindow = mainWindow; Storage = projectStore; - ApplicationCore = applicationCore ?? new ApplicationCore(); - FixedSettings = fixedSettings ?? new GuiCoreSettings(); + ApplicationCore = applicationCore; + FixedSettings = fixedSettings; isAlreadyRunningInstanceOfIGui = true; instanceCreationStackTrace = new StackTrace().ToString(); @@ -894,13 +920,13 @@ public event EventHandler ActiveViewChanged; - public bool IsViewRemoveOnItemDeleteSuspended { get; set; } - public IView ActiveView { get { - return DocumentViews.ActiveView; + return documentViews != null ? + DocumentViews.ActiveView : + null; } } Index: Core/Common/test/Core.Common.Gui.Test/RingtoetsGuiTests.cs =================================================================== diff -u -re4ee8a21ab07f3446dc417e50574b6bc6106f460 -r11ba203152ddf37106da76d9a38d4ffd771026dd --- Core/Common/test/Core.Common.Gui.Test/RingtoetsGuiTests.cs (.../RingtoetsGuiTests.cs) (revision e4ee8a21ab07f3446dc417e50574b6bc6106f460) +++ Core/Common/test/Core.Common.Gui.Test/RingtoetsGuiTests.cs (.../RingtoetsGuiTests.cs) (revision 11ba203152ddf37106da76d9a38d4ffd771026dd) @@ -1,13 +1,20 @@ using System; +using System.Collections.Specialized; +using System.Configuration; using System.Linq; +using System.Windows.Forms; using Core.Common.Base.Plugin; using Core.Common.Base.Storage; using Core.Common.Controls.TreeView; +using Core.Common.Gui.Commands; using Core.Common.Gui.Forms.MainWindow; using Core.Common.Gui.Forms.MessageWindow; using Core.Common.Gui.Plugin; +using Core.Common.Gui.Settings; using Core.Common.Gui.Test.Forms.ViewManager; +using Core.Common.Gui.Theme; +using Core.Common.TestUtil; using NUnit.Framework; @@ -19,22 +26,167 @@ public class RingtoetsGuiTests { private MessageWindowLogAppender originalAppender; + private IViewCommands originalViewPropertyEditor; [SetUp] public void SetUp() { originalAppender = MessageWindowLogAppender.Instance; MessageWindowLogAppender.Instance = new MessageWindowLogAppender(); + + originalViewPropertyEditor = ViewPropertyEditor.ViewCommands; } [TearDown] public void TearDown() { MessageWindowLogAppender.Instance = originalAppender; + ViewPropertyEditor.ViewCommands = originalViewPropertyEditor; } [Test] [STAThread] + public void ParameteredConstructor_ValidArguments_ExpectedValues() + { + // Setup + var mocks = new MockRepository(); + var projectStore = mocks.Stub(); + mocks.ReplayAll(); + + var applicationCore = new ApplicationCore(); + var guiCoreSettings = new GuiCoreSettings(); + + // Call + using (var mainWindow = new MainWindow()) + using (var gui = new RingtoetsGui(mainWindow, projectStore, applicationCore, guiCoreSettings)) + { + // Assert + Assert.AreSame(applicationCore, gui.ApplicationCore); + Assert.AreEqual(null, gui.PropertyResolver); + Assert.AreSame(projectStore, gui.Storage); + + Assert.AreEqual(null, gui.ProjectFilePath); + Assert.AreEqual(null, gui.Project); + + Assert.AreEqual(null, gui.Selection); + + Assert.IsInstanceOf(gui.ProjectCommands); + Assert.IsInstanceOf(gui.StorageCommands); + Assert.IsInstanceOf(gui.ViewCommands); + Assert.AreEqual(null, gui.ApplicationCommands); + + Assert.AreEqual(null, gui.ActiveView); + Assert.AreEqual(null, gui.DocumentViews); + Assert.AreEqual(null, gui.DocumentViewsResolver); + + AssertDefaultUserSettings(gui.UserSettings); + Assert.AreSame(guiCoreSettings, gui.FixedSettings); + + CollectionAssert.IsEmpty(gui.Plugins); + + Assert.AreEqual(mainWindow, gui.MainWindow); + + Assert.AreEqual(null, gui.ToolWindowViews); + + Assert.AreSame(ViewPropertyEditor.ViewCommands, gui.ViewCommands); + + Assert.IsTrue(Application.RenderWithVisualStyles); + } + mocks.VerifyAll(); + } + + private static void AssertDefaultUserSettings(SettingsBase settings) + { + Assert.IsNotNull(settings); + Assert.AreEqual(15, settings.Properties.Count); + var mruList = (StringCollection)settings["mruList"]; + CollectionAssert.IsEmpty(mruList); + var defaultViewDataTypes = (StringCollection)settings["defaultViewDataTypes"]; + CollectionAssert.IsEmpty(defaultViewDataTypes); + var defaultViews = (StringCollection)settings["defaultViews"]; + CollectionAssert.IsEmpty(defaultViews); + var lastVisitedPath = (string)settings["lastVisitedPath"]; + Assert.AreEqual(string.Empty, lastVisitedPath); + var isMainWindowFullScreen = (bool)settings["MainWindow_FullScreen"]; + Assert.IsFalse(isMainWindowFullScreen); + var x = (int)settings["MainWindow_X"]; + Assert.AreEqual(50, x); + var y = (int)settings["MainWindow_Y"]; + Assert.AreEqual(50, y); + var width = (int)settings["MainWindow_Width"]; + Assert.AreEqual(1024, width); + var height = (int)settings["MainWindow_Height"]; + Assert.AreEqual(768, height); + var startPageName = (string)settings["startPageName"]; + Assert.AreEqual("Startpagina", startPageName); + var showStartPage = (bool)settings["showStartPage"]; + Assert.IsTrue(showStartPage); + var showSplashScreen = (bool)settings["showSplashScreen"]; + Assert.IsTrue(showSplashScreen); + var showHiddenDataItems = (bool)settings["showHiddenDataItems"]; + Assert.IsFalse(showHiddenDataItems); + var colorTheme = (ColorTheme)settings["colorTheme"]; + Assert.AreEqual(ColorTheme.Generic, colorTheme); + } + + [Test] + [STAThread] + [TestCase(0)] + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void ParameteredConstructor_SomeArgumentIsNull_ThrowArgumentNullException(int nullArgumentIndex) + { + // Setup + var mocks = new MockRepository(); + IStoreProject projectStore = nullArgumentIndex == 1 ? null : mocks.Stub(); + mocks.ReplayAll(); + + ApplicationCore applicationCore = nullArgumentIndex == 2 ? null : new ApplicationCore(); + GuiCoreSettings guiCoreSettings = nullArgumentIndex == 3 ? null : new GuiCoreSettings(); + + // Call + using (var mainWindow = new MainWindow()) + + { + // Call + TestDelegate call = () => new RingtoetsGui(nullArgumentIndex == 0 ? null : mainWindow, projectStore, applicationCore, guiCoreSettings); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "Value cannot be null."); + } + mocks.VerifyAll(); + } + + [Test] + [STAThread] + [ExpectedException(typeof(InvalidOperationException))] + public void Constructor_ConstuctedAfterAnotherInstanceHasBeenCreated_ThrowInvalidOperationException() + { + // Setup + var mocks = new MockRepository(); + var projectStore = mocks.Stub(); + mocks.ReplayAll(); + + var applicationCore = new ApplicationCore(); + var guiCoreSettings = new GuiCoreSettings(); + + // Call + using (var mainWindow = new MainWindow()) + using (var gui = new RingtoetsGui(mainWindow, projectStore, applicationCore, guiCoreSettings)) + { + // Call + using (var gui2 = new RingtoetsGui(mainWindow, projectStore, applicationCore, guiCoreSettings)) + { + // Assert + Assert.Fail("Expected an InvalidOperationException to be thrown."); + } + } + mocks.VerifyAll(); + } + + [Test] + [STAThread] public void DisposingGuiDisposesApplication() { // Setup @@ -44,7 +196,7 @@ applicationCore.Expect(ac => ac.Dispose()); mocks.ReplayAll(); - var gui = new RingtoetsGui(new MainWindow(), projectStore, applicationCore); + var gui = new RingtoetsGui(new MainWindow(), projectStore, applicationCore, new GuiCoreSettings()); // Call gui.Dispose(); @@ -65,7 +217,7 @@ projectStore.Expect(ps => ps.LoadProject(testFile)); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { // Call gui.Run(testFile); @@ -84,7 +236,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (new RingtoetsGui(new MainWindow(), projectStore)) + using (new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { Assert.NotNull(ViewPropertyEditor.ViewCommands); } @@ -100,7 +252,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var ringtoetsGui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var ringtoetsGui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { var rootData = new object(); @@ -139,7 +291,7 @@ plugin2.Stub(p => p.Deactivate()); mocks.ReplayAll(); - using (var ringtoetsGui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var ringtoetsGui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { ringtoetsGui.Plugins.Add(plugin1); ringtoetsGui.Plugins.Add(plugin2); @@ -191,7 +343,7 @@ plugin2.Stub(p => p.Deactivate()); mocks.ReplayAll(); - using (var ringtoetsGui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var ringtoetsGui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { ringtoetsGui.Plugins.Add(plugin1); ringtoetsGui.Plugins.Add(plugin2); @@ -218,7 +370,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { gui.Run(); @@ -251,7 +403,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { // Call var result = gui.GetTreeNodeInfos(); @@ -299,7 +451,7 @@ pluginC.Stub(p => p.Deactivate()); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { gui.Plugins.Add(pluginA); gui.Plugins.Add(pluginB); Index: Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs =================================================================== diff -u -rd52ae535aea52b4e43aa6837305502e6cd911a92 -r11ba203152ddf37106da76d9a38d4ffd771026dd --- Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs (.../RingtoetsGuiIntegrationTest.cs) (revision d52ae535aea52b4e43aa6837305502e6cd911a92) +++ Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs (.../RingtoetsGuiIntegrationTest.cs) (revision 11ba203152ddf37106da76d9a38d4ffd771026dd) @@ -1,8 +1,10 @@ using System.Windows.Controls; +using Core.Common.Base.Plugin; using Core.Common.Base.Storage; using Core.Common.Gui; using Core.Common.Gui.Forms.MainWindow; +using Core.Common.Gui.Settings; using Core.Common.TestUtil; using Core.Plugins.ProjectExplorer; using NUnit.Framework; @@ -30,7 +32,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { var applicationCore = gui.ApplicationCore; @@ -57,7 +59,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { gui.Plugins.Add(new ProjectExplorerGuiPlugin()); gui.Run(); @@ -77,7 +79,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { gui.Run(); int callCount = 0; @@ -93,7 +95,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { var applicationCore = gui.ApplicationCore; Index: Core/Plugins/test/Core.Plugins.DotSpatial.Test/DotSpatialGuiPluginTest.cs =================================================================== diff -u -rd212065881d696420fd33c789c917501e09c7fc0 -r11ba203152ddf37106da76d9a38d4ffd771026dd --- Core/Plugins/test/Core.Plugins.DotSpatial.Test/DotSpatialGuiPluginTest.cs (.../DotSpatialGuiPluginTest.cs) (revision d212065881d696420fd33c789c917501e09c7fc0) +++ Core/Plugins/test/Core.Plugins.DotSpatial.Test/DotSpatialGuiPluginTest.cs (.../DotSpatialGuiPluginTest.cs) (revision 11ba203152ddf37106da76d9a38d4ffd771026dd) @@ -1,11 +1,14 @@ using System; using System.Linq; using System.Windows; + +using Core.Common.Base.Plugin; using Core.Common.Base.Storage; using Core.Common.Controls.Views; using Core.Common.Gui; using Core.Common.Gui.Forms.MainWindow; using Core.Common.Gui.Plugin; +using Core.Common.Gui.Settings; using Core.Common.Test.TestObjects; using Core.Components.DotSpatial; using Core.Components.DotSpatial.Data; @@ -127,7 +130,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { var plugin = new DotSpatialGuiPlugin(); var testMapView = new TestMapView(); Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/OxyPlotGuiPluginTest.cs =================================================================== diff -u -r67980a5c3c5cb71c185278e849b123e7f92990eb -r11ba203152ddf37106da76d9a38d4ffd771026dd --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/OxyPlotGuiPluginTest.cs (.../OxyPlotGuiPluginTest.cs) (revision 67980a5c3c5cb71c185278e849b123e7f92990eb) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/OxyPlotGuiPluginTest.cs (.../OxyPlotGuiPluginTest.cs) (revision 11ba203152ddf37106da76d9a38d4ffd771026dd) @@ -2,12 +2,14 @@ using System.Linq; using System.Windows; +using Core.Common.Base.Plugin; using Core.Common.Base.Storage; using Core.Common.Controls.Views; using Core.Common.Gui; using Core.Common.Gui.Forms.MainWindow; using Core.Common.Gui.Forms.ViewManager; using Core.Common.Gui.Plugin; +using Core.Common.Gui.Settings; using Core.Components.Charting; using Core.Components.Charting.Data; using Core.Components.Charting.TestUtil; @@ -127,7 +129,7 @@ var projectStore = mocks.Stub(); mocks.ReplayAll(); - using (var gui = new RingtoetsGui(new MainWindow(), projectStore)) + using (var gui = new RingtoetsGui(new MainWindow(), projectStore, new ApplicationCore(), new GuiCoreSettings())) { var plugin = new OxyPlotGuiPlugin(); var testChartView = new TestChartView();