Index: Core/Common/test/Core.Common.TestUtil/TestDataPath.cs
===================================================================
diff -u -r3d088548dfdebfd5c3adbbd67075b42e134f5c03 -rc5a240be9791693799cd7916cb3f2fc6ad0ad65c
--- Core/Common/test/Core.Common.TestUtil/TestDataPath.cs (.../TestDataPath.cs) (revision 3d088548dfdebfd5c3adbbd67075b42e134f5c03)
+++ Core/Common/test/Core.Common.TestUtil/TestDataPath.cs (.../TestDataPath.cs) (revision c5a240be9791693799cd7916cb3f2fc6ad0ad65c)
@@ -51,6 +51,8 @@
public static readonly TestDataPath IO = "Core.Components.Gis.IO.Test";
}
}
+
+ public static readonly TestDataPath Gui = "Core.Gui.Test";
}
public static class Riskeer
Index: Core/Gui/src/Core.Gui/Forms/MainWindow/MainWindow.xaml
===================================================================
diff -u -r577bf2384ad70fef1d46fe46c399fee1a3401718 -rc5a240be9791693799cd7916cb3f2fc6ad0ad65c
--- Core/Gui/src/Core.Gui/Forms/MainWindow/MainWindow.xaml (.../MainWindow.xaml) (revision 577bf2384ad70fef1d46fe46c399fee1a3401718)
+++ Core/Gui/src/Core.Gui/Forms/MainWindow/MainWindow.xaml (.../MainWindow.xaml) (revision c5a240be9791693799cd7916cb3f2fc6ad0ad65c)
@@ -50,7 +50,7 @@
+ Command="{Binding Path=ToggleBackstageCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=metro:MetroWindow}}" />
Index: Core/Gui/src/Core.Gui/Forms/MainWindow/MainWindow.xaml.cs
===================================================================
diff -u -rb441bd9ffa8a255a522abceffd49201e96808502 -rc5a240be9791693799cd7916cb3f2fc6ad0ad65c
--- Core/Gui/src/Core.Gui/Forms/MainWindow/MainWindow.xaml.cs (.../MainWindow.xaml.cs) (revision b441bd9ffa8a255a522abceffd49201e96808502)
+++ Core/Gui/src/Core.Gui/Forms/MainWindow/MainWindow.xaml.cs (.../MainWindow.xaml.cs) (revision c5a240be9791693799cd7916cb3f2fc6ad0ad65c)
@@ -87,7 +87,7 @@
CloseApplicationCommand = new RelayCommand(OnCloseApplication);
CloseViewTabCommand = new RelayCommand(OnCloseViewTab, CanCloseViewTab);
- ToggleBackStageCommand = new RelayCommand(OnToggleBackstage);
+ ToggleBackstageCommand = new RelayCommand(OnToggleBackstage);
}
///
@@ -357,7 +357,7 @@
///
/// Gets the command to toggle the backstage.
///
- public ICommand ToggleBackStageCommand { get; }
+ public ICommand ToggleBackstageCommand { get; }
private void OnNewProject(object obj)
{
Index: Core/Gui/test/Core.Gui.Test/Forms/MainWindow/MainWindowTest.cs
===================================================================
diff -u -r6be31462252a65cf54edd67c4005f66c944260fe -rc5a240be9791693799cd7916cb3f2fc6ad0ad65c
--- Core/Gui/test/Core.Gui.Test/Forms/MainWindow/MainWindowTest.cs (.../MainWindowTest.cs) (revision 6be31462252a65cf54edd67c4005f66c944260fe)
+++ Core/Gui/test/Core.Gui.Test/Forms/MainWindow/MainWindowTest.cs (.../MainWindowTest.cs) (revision c5a240be9791693799cd7916cb3f2fc6ad0ad65c)
@@ -21,13 +21,15 @@
using System;
using System.ComponentModel;
+using System.IO;
using System.Linq;
using System.Threading;
using System.Windows;
using Core.Common.Base.Data;
using Core.Common.Base.Storage;
using Core.Common.Controls.TreeView;
using Core.Common.Controls.Views;
+using Core.Common.TestUtil;
using Core.Common.Util.Reflection;
using Core.Components.Chart.Forms;
using Core.Components.DotSpatial.Forms;
@@ -42,17 +44,19 @@
using Core.Gui.Plugin;
using Core.Gui.PropertyBag;
using Core.Gui.Settings;
+using Core.Gui.Test.Forms.ViewHost;
using Core.Gui.TestUtil;
using Core.Gui.TestUtil.Map;
using DotSpatial.Data;
+using NUnit.Extensions.Forms;
using NUnit.Framework;
using Rhino.Mocks;
namespace Core.Gui.Test.Forms.MainWindow
{
[TestFixture]
[Apartment(ApartmentState.STA)]
- public class MainWindowTest
+ public class MainWindowTest : NUnitFormTest
{
private MessageWindowLogAppender originalValue;
@@ -64,9 +68,10 @@
}
[TearDown]
- public void TearDown()
+ public override void TearDown()
{
MessageWindowLogAppender.Instance = originalValue;
+ base.TearDown();
}
[Test]
@@ -95,6 +100,13 @@
Assert.AreEqual(ResizeMode.CanResizeWithGrip, mainWindow.ResizeMode);
Assert.AreEqual(FlowDirection.LeftToRight, mainWindow.FlowDirection);
Assert.AreEqual("RiskeerMainWindow", mainWindow.Name);
+
+ Assert.IsNotNull(mainWindow.NewProjectCommand);
+ Assert.IsNotNull(mainWindow.SaveProjectCommand);
+ Assert.IsNotNull(mainWindow.SaveProjectAsCommand);
+ Assert.IsNotNull(mainWindow.OpenProjectCommand);
+ Assert.IsNotNull(mainWindow.CloseApplicationCommand);
+ Assert.IsNotNull(mainWindow.ToggleBackstageCommand);
}
}
@@ -994,6 +1006,305 @@
mocks.VerifyAll();
}
+ [Test]
+ public void GivenMainWindow_WhenNewProjectIsCalled_ThenCreateNewProject()
+ {
+ // Given
+ var mocks = new MockRepository();
+ var projectStore = mocks.Stub();
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.StrictMock();
+ projectFactory.Expect(pf => pf.CreateNewProject())
+ .Return(mocks.Stub())
+ .Repeat.Times(3);
+ mocks.ReplayAll();
+
+ using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
+ using (var gui = new GuiCore(mainWindow, projectStore, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ gui.Plugins.Add(new TestPlugin());
+ gui.Run();
+
+ mainWindow.SetGui(gui);
+
+ // When
+ mainWindow.NewProjectCommand.Execute(null);
+ }
+
+ // Then
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void GivenMainWindow_WhenSaveProjectIsCalled_ThenProjectSaved()
+ {
+ // Given
+ string directoryPath = TestHelper.GetScratchPadPath(nameof(MainWindowTest));
+ string someValidFilePath = Path.Combine(directoryPath, nameof(GivenMainWindow_WhenSaveProjectIsCalled_ThenProjectSaved));
+
+ using (new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), directoryPath))
+ {
+ var mocks = new MockRepository();
+ var project = mocks.Stub();
+
+ var projectStore = mocks.StrictMock();
+ projectStore.Expect(ps => ps.SaveProjectAs(someValidFilePath));
+ projectStore.Expect(ps => ps.SaveProjectFileFilter).Return(string.Empty);
+ projectStore.Expect(ps => ps.HasStagedProject).Return(false);
+ projectStore.Expect(ps => ps.StageProject(project));
+
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject())
+ .Return(project);
+ mocks.ReplayAll();
+
+ DialogBoxHandler = (s, hWnd) =>
+ {
+ var saveFileDialogTester = new SaveFileDialogTester(hWnd);
+ saveFileDialogTester.SaveFile(someValidFilePath);
+
+ DialogBoxHandler = (name, wnd) =>
+ {
+ // Expect progress dialog, which will close automatically.
+ };
+ };
+
+ using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
+ using (var gui = new GuiCore(mainWindow, projectStore, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ gui.Plugins.Add(new TestPlugin());
+ gui.Run();
+
+ mainWindow.SetGui(gui);
+
+ // When
+ mainWindow.SaveProjectCommand.Execute(null);
+ }
+
+ // Then
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ public void GivenMainWindow_WhenSaveProjectAsIsCalled_ThenProjectSaved()
+ {
+ // Given
+ string directoryPath = TestHelper.GetScratchPadPath(nameof(MainWindowTest));
+ string someValidFilePath = Path.Combine(directoryPath, nameof(GivenMainWindow_WhenSaveProjectAsIsCalled_ThenProjectSaved));
+
+ using (new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), directoryPath))
+ {
+ var mocks = new MockRepository();
+ var project = mocks.Stub();
+
+ var projectStore = mocks.StrictMock();
+ projectStore.Expect(ps => ps.SaveProjectAs(someValidFilePath));
+ projectStore.Expect(ps => ps.SaveProjectFileFilter).Return(string.Empty);
+ projectStore.Expect(ps => ps.HasStagedProject).Return(false);
+ projectStore.Expect(ps => ps.StageProject(project));
+
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject())
+ .Return(project);
+ mocks.ReplayAll();
+
+ DialogBoxHandler = (s, hWnd) =>
+ {
+ var saveFileDialogTester = new SaveFileDialogTester(hWnd);
+ saveFileDialogTester.SaveFile(someValidFilePath);
+
+ DialogBoxHandler = (name, wnd) =>
+ {
+ // Expect progress dialog, which will close automatically.
+ };
+ };
+
+ using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
+ using (var gui = new GuiCore(mainWindow, projectStore, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ gui.Plugins.Add(new TestPlugin());
+ gui.Run();
+
+ mainWindow.SetGui(gui);
+
+ // When
+ mainWindow.SaveProjectAsCommand.Execute(null);
+ }
+
+ // Then
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ public void GivenMainWindow_WhenOpenProjectIsCalled_ThenProjectOpened()
+ {
+ // Given
+ string directoryPath = TestHelper.GetTestDataPath(TestDataPath.Core.Gui);
+ string filePath = Path.Combine(directoryPath, nameof(MainWindowTest), "Project.risk");
+
+ var mocks = new MockRepository();
+ var project = mocks.Stub();
+
+ var projectStore = mocks.StrictMock();
+ projectStore.Expect(ps => ps.LoadProject(filePath));
+ projectStore.Expect(ps => ps.OpenProjectFileFilter).Return(string.Empty);
+
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject())
+ .Return(project);
+ mocks.ReplayAll();
+
+ DialogBoxHandler = (s, hWnd) =>
+ {
+ var openFileDialogTester = new OpenFileDialogTester(hWnd);
+ openFileDialogTester.OpenFile(filePath);
+
+ DialogBoxHandler = (name, wnd) =>
+ {
+ // Expect progress dialog, which will close automatically.
+ };
+ };
+
+ using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
+ using (var gui = new GuiCore(mainWindow, projectStore, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ gui.Plugins.Add(new TestPlugin());
+ gui.Run();
+
+ mainWindow.SetGui(gui);
+
+ // When
+ mainWindow.OpenProjectCommand.Execute(null);
+ }
+
+ // Then
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void GivenMainWindowWithoutViewTabOpen_WhenCanExecuteCloseViewTabCommand_ThenFalse()
+ {
+ // Given
+ var mocks = new MockRepository();
+ var project = mocks.Stub();
+ var projectStore = mocks.Stub();
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject())
+ .Return(project);
+ mocks.ReplayAll();
+
+ using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
+ using (var gui = new GuiCore(mainWindow, projectStore, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ gui.Plugins.Add(new TestPlugin());
+ gui.Run();
+
+ mainWindow.SetGui(gui);
+
+ // When
+ bool canExecute = mainWindow.CloseViewTabCommand.CanExecute(null);
+
+ // Then
+ Assert.IsFalse(canExecute);
+ }
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void GivenMainWindowWithViewTabOpen_WhenCanExecuteCloseViewTabCommand_ThenTrue()
+ {
+ // Given
+ var mocks = new MockRepository();
+ var project = mocks.Stub();
+ var projectStore = mocks.Stub();
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject())
+ .Return(project);
+ mocks.ReplayAll();
+
+ using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
+ using (var gui = new GuiCore(mainWindow, projectStore, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ gui.Plugins.Add(new TestPlugin());
+ gui.Run();
+
+ mainWindow.SetGui(gui);
+
+ gui.ViewHost.AddDocumentView(new TestView());
+
+ // When
+ bool canExecute = mainWindow.CloseViewTabCommand.CanExecute(null);
+
+ // Then
+ Assert.IsTrue(canExecute);
+ }
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(true)]
+ [TestCase(false)]
+ public void GivenMainWindow_WhenExecuteToggleBackstageCommand_ThenBackstageToggled(bool backstageVisible)
+ {
+ // Given
+ var mocks = new MockRepository();
+ var project = mocks.Stub();
+ var projectStore = mocks.Stub();
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject())
+ .Return(project);
+ mocks.ReplayAll();
+
+ using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
+ using (var gui = new GuiCore(mainWindow, projectStore, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ gui.Plugins.Add(new TestPlugin());
+ gui.Run();
+
+ mainWindow.SetGui(gui);
+
+ if (backstageVisible)
+ {
+ mainWindow.ToggleBackstageCommand.Execute(null);
+ }
+
+ // Precondition
+ AssertVisibility(mainWindow, backstageVisible);
+
+ // When
+ mainWindow.ToggleBackstageCommand.Execute(null);
+
+ // Then
+ AssertVisibility(mainWindow, !backstageVisible);
+ }
+
+ mocks.VerifyAll();
+ }
+
+ private static void AssertVisibility(Gui.Forms.MainWindow.MainWindow mainWindow, bool backStageVisible)
+ {
+ if (backStageVisible)
+ {
+ Assert.AreEqual(Visibility.Collapsed, mainWindow.MainDockPanel.Visibility);
+ Assert.AreEqual(Visibility.Visible, mainWindow.BackstageDockPanel.Visibility);
+ }
+ else
+ {
+ Assert.AreEqual(Visibility.Visible, mainWindow.MainDockPanel.Visibility);
+ Assert.AreEqual(Visibility.Collapsed, mainWindow.BackstageDockPanel.Visibility);
+ }
+ }
+
private static IMapControl GetMapControl(MapLegendView mapLegendView)
{
return TypeUtils.GetProperty(mapLegendView, "MapControl");
Index: Core/Gui/test/Core.Gui.Test/test-data/MainWindowTest/Project.risk
===================================================================
diff -u
Binary files differ