Index: Core/Gui/src/Core.Gui/Forms/Backstage/InfoViewModel.cs
===================================================================
diff -u -r05b63bf3a91f31ec8bc2125730554f19eeca73d1 -r9a5cee082a60641cdc3661d5aabf2bb04f8bc445
--- Core/Gui/src/Core.Gui/Forms/Backstage/InfoViewModel.cs (.../InfoViewModel.cs) (revision 05b63bf3a91f31ec8bc2125730554f19eeca73d1)
+++ Core/Gui/src/Core.Gui/Forms/Backstage/InfoViewModel.cs (.../InfoViewModel.cs) (revision 9a5cee082a60641cdc3661d5aabf2bb04f8bc445)
@@ -61,11 +61,6 @@
/// is null.
public void SetProject(IProject projectToSet)
{
- if (projectToSet == null)
- {
- throw new ArgumentNullException(nameof(projectToSet));
- }
-
project = projectToSet;
OnPropertyChanged(nameof(ProjectName));
OnPropertyChanged(nameof(ProjectDescription));
Index: Core/Gui/src/Core.Gui/Forms/Main/MainWindow.xaml
===================================================================
diff -u -r5fad04eb4f743ebc8b04307b6c7c04b2d9fbbf36 -r9a5cee082a60641cdc3661d5aabf2bb04f8bc445
--- Core/Gui/src/Core.Gui/Forms/Main/MainWindow.xaml (.../MainWindow.xaml) (revision 5fad04eb4f743ebc8b04307b6c7c04b2d9fbbf36)
+++ Core/Gui/src/Core.Gui/Forms/Main/MainWindow.xaml (.../MainWindow.xaml) (revision 9a5cee082a60641cdc3661d5aabf2bb04f8bc445)
@@ -31,7 +31,6 @@
xmlns:backstage="clr-namespace:Core.Gui.Forms.Backstage"
xmlns:commands="clr-namespace:Core.Gui.Commands"
mc:Ignorable="d"
- Title="MainWindow"
Width="1366"
Height="768"
x:Name="Window"
Index: Core/Gui/src/Core.Gui/GuiCore.cs
===================================================================
diff -u -r62e55324ba5c5cda247f17fe63dc999202ee5b58 -r9a5cee082a60641cdc3661d5aabf2bb04f8bc445
--- Core/Gui/src/Core.Gui/GuiCore.cs (.../GuiCore.cs) (revision 62e55324ba5c5cda247f17fe63dc999202ee5b58)
+++ Core/Gui/src/Core.Gui/GuiCore.cs (.../GuiCore.cs) (revision 9a5cee082a60641cdc3661d5aabf2bb04f8bc445)
@@ -64,6 +64,7 @@
private static bool isAlreadyRunningInstanceOfIGui;
private static string instanceCreationStackTrace;
+ private readonly string applicationTitle;
private readonly Observer projectObserver;
private ISelectionProvider currentSelectionProvider;
@@ -143,6 +144,12 @@
ProjectOpened += ApplicationProjectOpened;
BeforeProjectOpened += ApplicationBeforeProjectOpened;
projectObserver = new Observer(UpdateProjectData);
+
+ applicationTitle = string.Format(CultureInfo.CurrentCulture, "{0} {1}",
+ FixedSettings.ApplicationName,
+ SettingsHelper.Instance.ApplicationVersion);
+
+ SetTitle();
}
public IPropertyResolver PropertyResolver { get; private set; }
@@ -534,6 +541,14 @@
}
}
+ private void SetTitle()
+ {
+ mainWindow.Title = Project != null
+ ? string.Format(CultureInfo.CurrentCulture,
+ "{0} - {1}", Project.Name, applicationTitle)
+ : applicationTitle;
+ }
+
~GuiCore()
{
Dispose(false);
@@ -549,17 +564,9 @@
public IProject Project
{
- get
- {
- return project;
- }
+ get => project;
private set
{
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value), @"There should always be a project.");
- }
-
if (!ReferenceEquals(project, value))
{
OnBeforeProjectOpened();
@@ -684,12 +691,7 @@
private void UpdateProjectData()
{
- mainWindow.Title = string.Format(CultureInfo.CurrentCulture,
- "{0} - {1} {2}",
- Project.Name,
- FixedSettings.ApplicationName,
- SettingsHelper.Instance.ApplicationVersion);
-
+ SetTitle();
mainWindow.BackstageViewModel.InfoViewModel.SetProject(project);
}
Index: Core/Gui/test/Core.Gui.Test/Forms/Backstage/InfoViewModelTest.cs
===================================================================
diff -u -r51a9721e725b26c1cd23d0cd54dc384aa8bbb927 -r9a5cee082a60641cdc3661d5aabf2bb04f8bc445
--- Core/Gui/test/Core.Gui.Test/Forms/Backstage/InfoViewModelTest.cs (.../InfoViewModelTest.cs) (revision 51a9721e725b26c1cd23d0cd54dc384aa8bbb927)
+++ Core/Gui/test/Core.Gui.Test/Forms/Backstage/InfoViewModelTest.cs (.../InfoViewModelTest.cs) (revision 9a5cee082a60641cdc3661d5aabf2bb04f8bc445)
@@ -19,7 +19,6 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
-using System;
using System.Collections.Generic;
using System.ComponentModel;
using Core.Common.Base.Data;
@@ -50,11 +49,11 @@
{
// Given
const string description = "new description";
-
+
var mocks = new MockRepository();
var project = mocks.Stub();
mocks.ReplayAll();
-
+
var viewModel = new InfoViewModel();
viewModel.SetProject(project);
@@ -74,17 +73,25 @@
}
[Test]
- public void SetProject_ProjectNull_ThrowsArgumentNullException()
+ public void SetProject_ProjectNull_ExpectedValuesAndPropertyChangedEventsFired()
{
// Setup
var viewModel = new InfoViewModel();
+ var propertyNames = new List();
+ viewModel.PropertyChanged += (sender, args) => { propertyNames.Add(args.PropertyName); };
+
// Call
- void Call() => viewModel.SetProject(null);
+ viewModel.SetProject(null);
// Assert
- var exception = Assert.Throws(Call);
- Assert.AreEqual("projectToSet", exception.ParamName);
+ Assert.IsNull(viewModel.ProjectName);
+ Assert.IsNull(viewModel.ProjectDescription);
+ CollectionAssert.AreEqual(new[]
+ {
+ nameof(viewModel.ProjectName),
+ nameof(viewModel.ProjectDescription)
+ }, propertyNames);
}
[Test]
Index: Core/Gui/test/Core.Gui.Test/Forms/Main/MainWindowTest.cs
===================================================================
diff -u -re3002162ba9aa7f50147c45c18ca1c34a49a7ff9 -r9a5cee082a60641cdc3661d5aabf2bb04f8bc445
--- Core/Gui/test/Core.Gui.Test/Forms/Main/MainWindowTest.cs (.../MainWindowTest.cs) (revision e3002162ba9aa7f50147c45c18ca1c34a49a7ff9)
+++ Core/Gui/test/Core.Gui.Test/Forms/Main/MainWindowTest.cs (.../MainWindowTest.cs) (revision 9a5cee082a60641cdc3661d5aabf2bb04f8bc445)
@@ -101,7 +101,7 @@
Assert.IsFalse(mainWindow.InvokeRequired,
"'mainWindow' instance on same thread as test, therefore invocation not required.");
- Assert.AreEqual("MainWindow", mainWindow.Title);
+ Assert.IsEmpty(mainWindow.Title);
Assert.AreEqual(WindowState.Maximized, mainWindow.WindowState);
Assert.AreEqual(ResizeMode.CanResizeWithGrip, mainWindow.ResizeMode);
Assert.AreEqual(FlowDirection.LeftToRight, mainWindow.FlowDirection);
Index: Core/Gui/test/Core.Gui.Test/GuiCoreTest.cs
===================================================================
diff -u -ra79026549254c82cf85550eb8fea2b7229bf9b1b -r9a5cee082a60641cdc3661d5aabf2bb04f8bc445
--- Core/Gui/test/Core.Gui.Test/GuiCoreTest.cs (.../GuiCoreTest.cs) (revision a79026549254c82cf85550eb8fea2b7229bf9b1b)
+++ Core/Gui/test/Core.Gui.Test/GuiCoreTest.cs (.../GuiCoreTest.cs) (revision 9a5cee082a60641cdc3661d5aabf2bb04f8bc445)
@@ -114,6 +114,8 @@
CollectionAssert.IsEmpty(gui.Plugins);
Assert.AreEqual(mainWindow, gui.MainWindow);
+ var expectedTitle = $"{guiCoreSettings.ApplicationName} {SettingsHelper.Instance.ApplicationVersion}";
+ Assert.AreEqual(expectedTitle, mainWindow.Title);
Assert.AreSame(ViewPropertyEditor.ViewCommands, gui.ViewCommands);
@@ -268,32 +270,6 @@
}
[Test]
- public void SetProject_SetNull_ThrowsArgumentNullException()
- {
- var mocks = new MockRepository();
- var projectStore = mocks.Stub();
- var projectMigrator = mocks.Stub();
- var plugin = mocks.Stub();
- plugin.Expect(p => p.Deactivate());
- plugin.Expect(p => p.Dispose());
- IProjectFactory projectFactory = CreateProjectFactory(mocks);
- mocks.ReplayAll();
-
- using (var gui = new GuiCore(new MainWindow(), projectStore, projectMigrator, projectFactory, new GuiCoreSettings()))
- {
- gui.Plugins.Add(plugin);
-
- // Call
- void Call() => gui.SetProject(null, null);
-
- // Assert
- Assert.Throws(Call);
- }
-
- mocks.VerifyAll();
- }
-
- [Test]
public void Dispose_WithPlugin_PluginRemoved()
{
// Setup
@@ -1210,9 +1186,9 @@
}
[Test]
- public void SetProject_SetNewValue_FiresProjectOpenedEvents()
+ public void GivenGuiWithoutSetProject_WhenSettingNewProject_ThenProjectOpenedEventsFired()
{
- // Setup
+ // Given
var mocks = new MockRepository();
var storeProject = mocks.Stub();
var projectMigrator = mocks.Stub();
@@ -1235,10 +1211,10 @@
openedCallCount++;
};
- // Call
+ // When
gui.SetProject(newProject, null);
- // Assert
+ // Then
Assert.AreEqual(1, openedCallCount);
Assert.AreEqual(1, beforeOpenCallCount);
}
@@ -1247,6 +1223,81 @@
}
[Test]
+ public void GivenGuiWithoutSetProject_WhenSettingNewProjectToNull_ThenNothingHappens()
+ {
+ // Given
+ var mocks = new MockRepository();
+ var storeProject = mocks.Stub();
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ mocks.ReplayAll();
+
+ using (var gui = new GuiCore(new MainWindow(), storeProject, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ var openedCallCount = 0;
+ var beforeOpenCallCount = 0;
+ gui.BeforeProjectOpened += project =>
+ {
+ Assert.IsNull(project);
+ beforeOpenCallCount++;
+ };
+ gui.ProjectOpened += project =>
+ {
+ Assert.IsNull(project);
+ openedCallCount++;
+ };
+
+ // When
+ gui.SetProject(null, null);
+
+ // Then
+ Assert.AreEqual(0, openedCallCount);
+ Assert.AreEqual(0, beforeOpenCallCount);
+ }
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void GivenGuiWithSetProject_WhenSettingNewProjectToNull_ThenProjectOpenedEventsFired()
+ {
+ // Given
+ var mocks = new MockRepository();
+ var storeProject = mocks.Stub();
+ var projectMigrator = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ var originalProject = mocks.Stub();
+ mocks.ReplayAll();
+
+ using (var gui = new GuiCore(new MainWindow(), storeProject, projectMigrator, projectFactory, new GuiCoreSettings()))
+ {
+ gui.SetProject(originalProject, null);
+
+ var openedCallCount = 0;
+ var beforeOpenCallCount = 0;
+ gui.BeforeProjectOpened += project =>
+ {
+ Assert.AreSame(originalProject, project);
+ beforeOpenCallCount++;
+ };
+ gui.ProjectOpened += project =>
+ {
+ Assert.IsNull(project);
+ openedCallCount++;
+ };
+
+ // When
+ gui.SetProject(null, null);
+
+ // Then
+ Assert.AreEqual(1, openedCallCount);
+ Assert.AreEqual(1, beforeOpenCallCount);
+ }
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
public void GivenGuiWithoutSelection_WhenSelectionProviderSetAsActiveView_ThenSelectionSynced()
{
// Given