Index: Application/Ringtoets/src/Application.Ringtoets.Storage/StorageSqLite.cs
===================================================================
diff -u -r469d272ed231584a9b8312c6eaa26c274215e7d4 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Application/Ringtoets/src/Application.Ringtoets.Storage/StorageSqLite.cs (.../StorageSqLite.cs) (revision 469d272ed231584a9b8312c6eaa26c274215e7d4)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/StorageSqLite.cs (.../StorageSqLite.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -48,9 +48,7 @@
private const int currentDatabaseVersion = 4;
private static readonly ILog log = LogManager.GetLogger(typeof(StorageSqLite));
- private string connectionString;
- private RingtoetsProject stagedProject;
- private ProjectEntity stagedProjectEntity;
+ private StagedProject stagedProject;
public string FileFilter
{
@@ -64,7 +62,7 @@
{
get
{
- return stagedProjectEntity != null;
+ return stagedProject != null;
}
}
@@ -75,16 +73,14 @@
{
throw new ArgumentNullException("project");
}
- stagedProject = ringtoetsProject;
-
var registry = new PersistenceRegistry();
- stagedProjectEntity = ringtoetsProject.Create(registry);
+
+ stagedProject = new StagedProject(ringtoetsProject, ringtoetsProject.Create(registry));
}
public void UnstageProject()
{
stagedProject = null;
- stagedProjectEntity = null;
}
public void SaveProjectAs(string databaseFilePath)
@@ -97,11 +93,7 @@
try
{
BackedUpFileWriter writer = new BackedUpFileWriter(databaseFilePath);
- writer.Perform(() =>
- {
- SetConnectionToNewFile(databaseFilePath);
- SaveProjectInDatabase(databaseFilePath);
- });
+ writer.Perform(() => { SaveProjectInDatabase(databaseFilePath); });
}
catch (IOException e)
{
@@ -119,7 +111,7 @@
public IProject LoadProject(string databaseFilePath)
{
- SetConnectionToExistingFile(databaseFilePath);
+ var connectionString = GetConnectionToExistingFile(databaseFilePath);
try
{
RingtoetsProject project;
@@ -154,23 +146,18 @@
}
}
- public void CloseProject()
+ public bool HasStagedProjectChanges(string filePath)
{
- connectionString = null;
- }
-
- public bool HasStagedProjectChanges()
- {
if (!HasStagedProject)
{
throw new InvalidOperationException("Call 'StageProject(IProject)' first before calling this method.");
}
-
- if (string.IsNullOrWhiteSpace(connectionString))
+ if (string.IsNullOrWhiteSpace(filePath))
{
return true;
}
+ var connectionString = GetConnectionToExistingFile(filePath);
try
{
byte[] originalHash;
@@ -179,7 +166,7 @@
originalHash = dbContext.VersionEntities.Select(v => v.FingerPrint).First();
}
- byte[] hash = FingerprintHelper.Get(stagedProjectEntity);
+ byte[] hash = FingerprintHelper.Get(stagedProject.Entity);
return !FingerprintHelper.AreEqual(originalHash, hash);
}
catch (QuotaExceededException e)
@@ -188,36 +175,9 @@
}
}
- private void ValidateDatabaseVersion(RingtoetsEntities ringtoetsEntities, string databaseFilePath)
- {
- try
- {
- long databaseVersion = ringtoetsEntities.VersionEntities.Select(v => v.Version).Single();
- if (databaseVersion <= 0)
- {
- string m = string.Format(Resources.StorageSqLite_ValidateDatabaseVersion_DatabaseVersion_0_is_invalid,
- databaseVersion);
- var message = new FileReaderErrorMessageBuilder(databaseFilePath).Build(m);
- throw new StorageValidationException(message);
- }
-
- if (databaseVersion > currentDatabaseVersion)
- {
- string m = string.Format(Resources.StorageSqLite_ValidateDatabaseVersion_DatabaseVersion_0_higher_then_current_DatabaseVersion_1_,
- databaseVersion, currentDatabaseVersion);
- var message = new FileReaderErrorMessageBuilder(databaseFilePath).Build(m);
- throw new StorageValidationException(message);
- }
- }
- catch (InvalidOperationException e)
- {
- var message = new FileReaderErrorMessageBuilder(databaseFilePath).Build(Resources.StorageSqLite_ValidateDatabaseVersion_Database_must_have_one_VersionEntity_row);
- throw new StorageValidationException(message, e);
- }
- }
-
private void SaveProjectInDatabase(string databaseFilePath)
{
+ var connectionString = GetConnectionToNewFile(databaseFilePath);
using (var dbContext = new RingtoetsEntities(connectionString))
{
try
@@ -226,9 +186,9 @@
{
Version = currentDatabaseVersion,
Timestamp = DateTime.Now,
- FingerPrint = FingerprintHelper.Get(stagedProjectEntity)
+ FingerPrint = FingerprintHelper.Get(stagedProject.Entity)
});
- dbContext.ProjectEntities.Add(stagedProjectEntity);
+ dbContext.ProjectEntities.Add(stagedProject.Entity);
dbContext.SaveChanges();
}
catch (DataException exception)
@@ -247,10 +207,38 @@
}
throw;
}
- stagedProject.Name = Path.GetFileNameWithoutExtension(databaseFilePath);
+ stagedProject.Model.Name = Path.GetFileNameWithoutExtension(databaseFilePath);
}
}
+ private static void ValidateDatabaseVersion(RingtoetsEntities ringtoetsEntities, string databaseFilePath)
+ {
+ try
+ {
+ long databaseVersion = ringtoetsEntities.VersionEntities.Select(v => v.Version).Single();
+ if (databaseVersion <= 0)
+ {
+ string m = string.Format(Resources.StorageSqLite_ValidateDatabaseVersion_DatabaseVersion_0_is_invalid,
+ databaseVersion);
+ var message = new FileReaderErrorMessageBuilder(databaseFilePath).Build(m);
+ throw new StorageValidationException(message);
+ }
+
+ if (databaseVersion > currentDatabaseVersion)
+ {
+ string m = string.Format(Resources.StorageSqLite_ValidateDatabaseVersion_DatabaseVersion_0_higher_then_current_DatabaseVersion_1_,
+ databaseVersion, currentDatabaseVersion);
+ var message = new FileReaderErrorMessageBuilder(databaseFilePath).Build(m);
+ throw new StorageValidationException(message);
+ }
+ }
+ catch (InvalidOperationException e)
+ {
+ var message = new FileReaderErrorMessageBuilder(databaseFilePath).Build(Resources.StorageSqLite_ValidateDatabaseVersion_Database_must_have_one_VersionEntity_row);
+ throw new StorageValidationException(message, e);
+ }
+ }
+
///
/// Attempts to set the connection to an existing storage file .
///
@@ -261,10 +249,10 @@
/// - the database has an invalid schema.
///
///
- private void SetConnectionToExistingFile(string databaseFilePath)
+ private static string GetConnectionToExistingFile(string databaseFilePath)
{
FileUtils.ValidateFilePath(databaseFilePath);
- SetConnectionToFile(databaseFilePath);
+ return GetConnectionToFile(databaseFilePath);
}
///
@@ -280,37 +268,37 @@
/// - executing DatabaseStructure script failed
///
///
- private void SetConnectionToNewFile(string databaseFilePath)
+ private static string GetConnectionToNewFile(string databaseFilePath)
{
FileUtils.ValidateFilePath(databaseFilePath);
StorageSqliteCreator.CreateDatabaseStructure(databaseFilePath);
- SetConnectionToFile(databaseFilePath);
+ return GetConnectionToFile(databaseFilePath);
}
///
/// Establishes a connection to an existing .
///
/// The path of the database file to connect to.
/// No file exists at .
- private void SetConnectionToFile(string databaseFilePath)
+ private static string GetConnectionToFile(string databaseFilePath)
{
if (!File.Exists(databaseFilePath))
{
var message = new FileReaderErrorMessageBuilder(databaseFilePath).Build(UtilsResources.Error_File_does_not_exist);
throw new CouldNotConnectException(message);
}
- SetConnectionToStorage(databaseFilePath);
+ return GetConnectionToStorage(databaseFilePath);
}
///
/// Sets the connection to the Ringtoets database.
///
/// The path of the file, which is used for creating exceptions.
/// Thrown when the database does not contain the table version.
- private void SetConnectionToStorage(string databaseFilePath)
+ private static string GetConnectionToStorage(string databaseFilePath)
{
- connectionString = SqLiteConnectionStringBuilder.BuildSqLiteEntityConnectionString(databaseFilePath);
+ var connectionString = SqLiteConnectionStringBuilder.BuildSqLiteEntityConnectionString(databaseFilePath);
using (var dbContext = new RingtoetsEntities(connectionString))
{
@@ -325,6 +313,7 @@
throw new StorageValidationException(message, exception);
}
}
+ return connectionString;
}
///
@@ -334,7 +323,7 @@
/// The critical error message.
/// Exception that caused this exception to be thrown.
/// Returns a new .
- private StorageException CreateStorageWriterException(string databaseFilePath, string errorMessage, Exception innerException)
+ private static StorageException CreateStorageWriterException(string databaseFilePath, string errorMessage, Exception innerException)
{
var message = new FileWriterErrorMessageBuilder(databaseFilePath).Build(errorMessage);
return new StorageException(message, innerException);
@@ -347,10 +336,22 @@
/// The critical error message.
/// Exception that caused this exception to be thrown.
/// Returns a new .
- private StorageException CreateStorageReaderException(string databaseFilePath, string errorMessage, Exception innerException = null)
+ private static StorageException CreateStorageReaderException(string databaseFilePath, string errorMessage, Exception innerException = null)
{
var message = new FileReaderErrorMessageBuilder(databaseFilePath).Build(errorMessage);
return new StorageException(message, innerException);
}
+
+ private class StagedProject
+ {
+ public StagedProject(RingtoetsProject projectModel, ProjectEntity projectEntity)
+ {
+ Model = projectModel;
+ Entity = projectEntity;
+ }
+
+ public RingtoetsProject Model { get; private set; }
+ public ProjectEntity Entity { get; private set; }
+ }
}
}
\ No newline at end of file
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs
===================================================================
diff -u -r2aa9661130f20e88c41dac921ffb780573dcf799 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs (.../StorageSqLiteIntegrationTest.cs) (revision 2aa9661130f20e88c41dac921ffb780573dcf799)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs (.../StorageSqLiteIntegrationTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -161,97 +161,61 @@
[Test]
[STAThread]
- public void GivenRingtoetsGuiWithStorageSql_WhenRunWithValidFile_ProjectSet()
+ [TestCase(null)]
+ [TestCase("")]
+ [TestCase(" ")]
+ public void GivenRingtoetsGuiWithStorageSql_WhenRunWithEmptyFile_DefaultProjectStillSet(string testFile)
{
// Given
var projectStore = new StorageSqLite();
- RingtoetsProject fullProject = RingtoetsProjectTestHelper.GetFullTestProject();
- var expectedProjectName = Path.GetFileNameWithoutExtension(tempRingtoetsFile);
- var expectedProjectDescription = fullProject.Description;
- // Precondition
- SqLiteDatabaseHelper.CreateValidRingtoetsDatabase(tempRingtoetsFile, fullProject);
-
using (var gui = new GuiCore(new MainWindow(), projectStore, new RingtoetsProjectFactory(), new GuiCoreSettings()))
{
// When
- Action action = () => gui.Run(tempRingtoetsFile);
+ gui.Run(testFile);
// Then
- var expectedMessages = new[]
- {
- "Openen van bestaand Ringtoetsproject.",
- "Bestaand Ringtoetsproject succesvol geopend."
- };
- TestHelper.AssertLogMessagesAreGenerated(action, expectedMessages, 3);
- Assert.AreEqual(tempRingtoetsFile, gui.ProjectFilePath);
- Assert.NotNull(gui.Project);
- Assert.AreEqual(expectedProjectName, gui.Project.Name);
- Assert.AreEqual(expectedProjectDescription, gui.Project.Description);
-
- Assert.IsInstanceOf(gui.Project);
- AssertProjectsAreEqual((RingtoetsProject) gui.Project, fullProject);
- }
- }
-
- [Test]
- [STAThread]
- public void GivenRingtoetsGuiWithStorageSql_WhenRunWithInvalidFile_EmptyProjectSet()
- {
- // Given
- var testFile = "SomeFile";
- var projectStore = new StorageSqLite();
-
- using (var gui = new GuiCore(new MainWindow(), projectStore, new RingtoetsProjectFactory(), new GuiCoreSettings()))
- {
- // When
- Action action = () => gui.Run(testFile);
-
- // Then
- var expectedMessages = new[]
- {
- "Openen van bestaand Ringtoetsproject.",
- string.Format("Fout bij het lezen van bestand '{0}': het bestand bestaat niet.", testFile),
- "Het is niet gelukt om het Ringtoetsproject te laden.",
- "Nieuw project aanmaken..."
- };
- TestHelper.AssertLogMessagesAreGenerated(action, expectedMessages, 5);
Assert.AreEqual(null, gui.ProjectFilePath);
Assert.NotNull(gui.Project);
Assert.AreEqual("Project", gui.Project.Name);
Assert.IsEmpty(gui.Project.Description);
Assert.IsInstanceOf(gui.Project);
- CollectionAssert.IsEmpty(((RingtoetsProject) gui.Project).AssessmentSections);
+ CollectionAssert.IsEmpty(((RingtoetsProject)gui.Project).AssessmentSections);
}
}
[Test]
[STAThread]
- [TestCase(null)]
- [TestCase("")]
- [TestCase(" ")]
- public void GivenRingtoetsGuiWithStorageSql_WhenRunWithEmptyFile_EmptyProjectSet(string testFile)
+ public void GivenRingtoetsGuiWithStorageSql_WhenRunWithValidFile_ProjectSet()
{
// Given
var projectStore = new StorageSqLite();
+ RingtoetsProject fullProject = RingtoetsProjectTestHelper.GetFullTestProject();
+ var expectedProjectName = Path.GetFileNameWithoutExtension(tempRingtoetsFile);
+ var expectedProjectDescription = fullProject.Description;
+ // Precondition
+ SqLiteDatabaseHelper.CreateValidRingtoetsDatabase(tempRingtoetsFile, fullProject);
+
using (var gui = new GuiCore(new MainWindow(), projectStore, new RingtoetsProjectFactory(), new GuiCoreSettings()))
{
// When
- Action action = () => gui.Run(testFile);
+ Action action = () => gui.Run(tempRingtoetsFile);
// Then
var expectedMessages = new[]
{
- "Nieuw project aanmaken..."
+ "Openen van bestaand Ringtoetsproject...",
+ "Bestaand Ringtoetsproject succesvol geopend."
};
- TestHelper.AssertLogMessagesAreGenerated(action, expectedMessages, 2);
- Assert.AreEqual(null, gui.ProjectFilePath);
+ TestHelper.AssertLogMessagesAreGenerated(action, expectedMessages, 3);
+ Assert.AreEqual(tempRingtoetsFile, gui.ProjectFilePath);
Assert.NotNull(gui.Project);
- Assert.AreEqual("Project", gui.Project.Name);
- Assert.IsEmpty(gui.Project.Description);
+ Assert.AreEqual(expectedProjectName, gui.Project.Name);
+ Assert.AreEqual(expectedProjectDescription, gui.Project.Description);
+
Assert.IsInstanceOf(gui.Project);
- CollectionAssert.IsEmpty(((RingtoetsProject) gui.Project).AssessmentSections);
+ AssertProjectsAreEqual((RingtoetsProject) gui.Project, fullProject);
}
}
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/StorageSqLiteTest.cs
===================================================================
diff -u -r2aa9661130f20e88c41dac921ffb780573dcf799 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/StorageSqLiteTest.cs (.../StorageSqLiteTest.cs) (revision 2aa9661130f20e88c41dac921ffb780573dcf799)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/StorageSqLiteTest.cs (.../StorageSqLiteTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -489,22 +489,22 @@
Assert.IsFalse(storage.HasStagedProject);
// Call
- TestDelegate call = () => storage.HasStagedProjectChanges();
+ TestDelegate call = () => storage.HasStagedProjectChanges(null);
// Assert
string message = Assert.Throws(call).Message;
Assert.AreEqual("Call 'StageProject(IProject)' first before calling this method.", message);
}
[Test]
- public void HasStagedProjectChanges_NoConnectionSet_ReturnsTrue()
+ public void HasStagedProjectChanges_NoPathGiven_ReturnsTrue()
{
// Setup
StorageSqLite storageSqLite = new StorageSqLite();
storageSqLite.StageProject(new RingtoetsProject());
// Call
- bool hasChanges = storageSqLite.HasStagedProjectChanges();
+ bool hasChanges = storageSqLite.HasStagedProjectChanges(null);
// Assert
Assert.IsTrue(hasChanges);
@@ -525,7 +525,7 @@
storageSqLite.StageProject(loadedProject);
// Call
- bool hasChanges = storageSqLite.HasStagedProjectChanges();
+ bool hasChanges = storageSqLite.HasStagedProjectChanges(tempRingtoetsFile);
// Assert
Assert.IsFalse(hasChanges);
@@ -538,35 +538,6 @@
}
[Test]
- public void HasStagedProjectChanges_ValidProjectLoadedAndThenClosed_ReturnsTrue()
- {
- // Setup
- StorageSqLite storageSqLite = new StorageSqLite();
- RingtoetsProject storedProject = new RingtoetsProject();
-
- FileDisposeHelper fileDisposeHelper = new FileDisposeHelper(tempRingtoetsFile);
- try
- {
- SqLiteDatabaseHelper.CreateValidRingtoetsDatabase(tempRingtoetsFile, storedProject);
- IProject loadedProject = storageSqLite.LoadProject(tempRingtoetsFile);
- storageSqLite.CloseProject();
-
- storageSqLite.StageProject(loadedProject);
-
- // Call
- bool hasChanges = storageSqLite.HasStagedProjectChanges();
-
- // Assert
- Assert.IsTrue(hasChanges);
- }
- finally
- {
- CallGarbageCollector();
- fileDisposeHelper.Dispose();
- }
- }
-
- [Test]
public void HasStagedProjectChanges_ValidProjectLoadedWithUnaffectedChange_ReturnsFalse()
{
// Setup
@@ -583,7 +554,7 @@
// Call
loadedProject.Name = changedName;
- bool hasChanges = storageSqLite.HasStagedProjectChanges();
+ bool hasChanges = storageSqLite.HasStagedProjectChanges(tempRingtoetsFile);
// Assert
Assert.IsFalse(hasChanges);
@@ -613,7 +584,7 @@
storageSqLite.StageProject(loadedProject);
// Call
- bool hasChanges = storageSqLite.HasStagedProjectChanges();
+ bool hasChanges = storageSqLite.HasStagedProjectChanges(tempRingtoetsFile);
// Assert
Assert.IsTrue(hasChanges);
@@ -645,7 +616,7 @@
storage.StageProject(projectMock);
// Call
- var hasChanges = storage.HasStagedProjectChanges();
+ var hasChanges = storage.HasStagedProjectChanges(tempRingtoetsFile);
// Assert
Assert.IsFalse(hasChanges);
Index: Core/Common/src/Core.Common.Base/Storage/IStoreProject.cs
===================================================================
diff -u -r19aad937d34ae8aa2309b5b8aba14c31b1887d26 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/src/Core.Common.Base/Storage/IStoreProject.cs (.../IStoreProject.cs) (revision 19aad937d34ae8aa2309b5b8aba14c31b1887d26)
+++ Core/Common/src/Core.Common.Base/Storage/IStoreProject.cs (.../IStoreProject.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -41,7 +41,8 @@
bool HasStagedProject { get; }
///
- /// Converts the staged project to a new storage entry.
+ /// Converts the staged project to a new storage entry. Upon return, the staged project is released and
+ /// will be false.
///
/// Arguments required to connect to the storage.
/// Thrown when no project has been staged
@@ -76,11 +77,6 @@
IProject LoadProject(string connectionArguments);
///
- /// Removes the connection to a database that has been made previously.
- ///
- void CloseProject();
-
- ///
/// Stages the project (does some prep-work and validity checking) to be saved.
///
/// The project to be prepared to be saved.
@@ -93,13 +89,16 @@
void UnstageProject();
///
- /// Checks if the staged project differs from the last saved or loaded , if any.
+ /// Checks if the staged project differs from the which can be found at
+ /// , if any.
///
- /// true if last was set and is different
- /// from the staged project, false otherwise.
+ /// The currently set path to the loaded project.
+ /// true if can be loaded from
+ /// and is different from the staged project, false otherwise.
+ /// Thrown when is invalid.
/// Thrown when no project has been staged.
/// Thrown when the staged project contains
/// more than unique object instances.
- bool HasStagedProjectChanges();
+ bool HasStagedProjectChanges(string filePath);
}
}
\ No newline at end of file
Index: Core/Common/src/Core.Common.Gui/Commands/IStorageCommands.cs
===================================================================
diff -u -r1eed3e3f652618c52a462edc502cfd4250772314 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/src/Core.Common.Gui/Commands/IStorageCommands.cs (.../IStorageCommands.cs) (revision 1eed3e3f652618c52a462edc502cfd4250772314)
+++ Core/Common/src/Core.Common.Gui/Commands/IStorageCommands.cs (.../IStorageCommands.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -33,6 +33,8 @@
///
void CreateNewProject();
+ bool AskConfirmationUnsavedChanges();
+
///
/// Asks the user for a file-location to save the current project, then proceeds
/// to persist the data to that location.
Index: Core/Common/src/Core.Common.Gui/Commands/StorageCommandHandler.cs
===================================================================
diff -u -r0df7cded06f5afbac08b97e025242ba55c90ec57 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/src/Core.Common.Gui/Commands/StorageCommandHandler.cs (.../StorageCommandHandler.cs) (revision 0df7cded06f5afbac08b97e025242ba55c90ec57)
+++ Core/Common/src/Core.Common.Gui/Commands/StorageCommandHandler.cs (.../StorageCommandHandler.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -40,35 +40,38 @@
private readonly IWin32Window dialogParent;
private readonly IProjectOwner projectOwner;
private readonly IStoreProject projectPersistor;
+ private readonly IProjectFactory projectFactory;
///
/// Initializes a new instance of the class.
///
/// Class responsible to storing and loading the application project.
+ ///
/// The class owning the application project.
/// Controller for UI.
- public StorageCommandHandler(IStoreProject projectStorage, IProjectOwner projectOwner, IWin32Window dialogParent)
+ public StorageCommandHandler(IStoreProject projectStorage, IProjectFactory projectFactory, IProjectOwner projectOwner, IWin32Window dialogParent)
{
this.dialogParent = dialogParent;
this.projectOwner = projectOwner;
projectPersistor = projectStorage;
+ this.projectFactory = projectFactory;
}
///
/// Checks if an action may continue when changes are detected.
///
/// True if the action should continue, false otherwise.
- public bool ContinueIfHasChanges()
+ public bool AskConfirmationUnsavedChanges()
{
- var project = projectOwner.Project;
- if (project == null || projectOwner.IsCurrentNew())
+ if (IsCurrentNew())
{
return true;
}
+ var project = projectOwner.Project;
projectPersistor.StageProject(project);
try
{
- if (!projectPersistor.HasStagedProjectChanges())
+ if (!projectPersistor.HasStagedProjectChanges(projectOwner.ProjectFilePath))
{
projectPersistor.UnstageProject();
return true;
@@ -86,22 +89,29 @@
{
projectPersistor.UnstageProject();
}
+ if (!openSaveOrDiscardProjectDialog)
+ {
+ log.Info(Resources.StorageCommandHandler_NewProject_Creating_new_project_cancelled);
+ }
+
return openSaveOrDiscardProjectDialog;
}
+ private bool IsCurrentNew()
+ {
+ return projectOwner.Project.Equals(projectFactory.CreateNewProject());
+ }
+
public void CreateNewProject()
{
- if (!ContinueIfHasChanges())
+ if (!AskConfirmationUnsavedChanges())
{
log.Info(Resources.StorageCommandHandler_NewProject_Creating_new_project_cancelled);
return;
}
- CloseProject();
-
- log.Info(Resources.StorageCommandHandler_NewProject_Creating_new_project);
- projectOwner.CreateNewProject();
- projectOwner.ProjectFilePath = "";
- log.Info(Resources.StorageCommandHandler_NewProject_Created_new_project_succesful);
+ log.Info(Resources.Creating_new_project);
+ projectOwner.SetProject(projectFactory.CreateNewProject(), null);
+ log.Info(Resources.Created_new_project_succesful);
}
public bool OpenExistingProject()
@@ -112,7 +122,7 @@
Title = Resources.OpenFileDialog_Title
})
{
- if (openFileDialog.ShowDialog(dialogParent) != DialogResult.Cancel && ContinueIfHasChanges())
+ if (openFileDialog.ShowDialog(dialogParent) != DialogResult.Cancel && AskConfirmationUnsavedChanges())
{
return OpenExistingProject(openFileDialog.FileName);
}
@@ -126,20 +136,19 @@
{
log.Info(Resources.StorageCommandHandler_OpenExistingProject_Opening_existing_project);
- CloseProject();
-
var newProject = LoadProjectFromStorage(filePath);
var isOpenProjectSuccessful = newProject != null;
- if (!isOpenProjectSuccessful)
+
+ if (isOpenProjectSuccessful)
{
- log.Error(Resources.StorageCommandHandler_OpeningExistingProject_Opening_existing_project_failed);
+ log.Info(Resources.StorageCommandHandler_OpeningExistingProject_Opening_existing_project_successful);
+ newProject.Name = Path.GetFileNameWithoutExtension(filePath);
+ projectOwner.SetProject(newProject, filePath);
}
else
{
- log.Info(Resources.StorageCommandHandler_OpeningExistingProject_Opening_existing_project_successful);
- newProject.Name = Path.GetFileNameWithoutExtension(filePath);
- projectOwner.ProjectFilePath = filePath;
- projectOwner.Project = newProject;
+ log.Error(Resources.StorageCommandHandler_OpeningExistingProject_Opening_existing_project_failed);
+ projectOwner.SetProject(projectFactory.CreateNewProject(), null);
}
return isOpenProjectSuccessful;
@@ -165,9 +174,9 @@
}
// Save was successful, store location
- projectOwner.ProjectFilePath = filePath;
project.Name = Path.GetFileNameWithoutExtension(filePath);
- project.NotifyObservers();
+ projectOwner.SetProject(project, filePath);
+
log.Info(string.Format(CultureInfo.CurrentCulture,
Resources.StorageCommandHandler_SaveProject_Successfully_saved_project_0_,
project.Name));
@@ -200,17 +209,6 @@
return true;
}
- private void CloseProject()
- {
- if (projectOwner.Project == null)
- {
- return;
- }
- projectOwner.CloseProject();
- projectOwner.ProjectFilePath = "";
- projectPersistor.CloseProject();
- }
-
private bool OpenSaveOrDiscardProjectDialog()
{
var confirmation = MessageBox.Show(
Index: Core/Common/src/Core.Common.Gui/Forms/MainWindow/MainWindow.xaml.cs
===================================================================
diff -u -r00f45b1bba92f5171087885039c8b8261860a1ba -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/src/Core.Common.Gui/Forms/MainWindow/MainWindow.xaml.cs (.../MainWindow.xaml.cs) (revision 00f45b1bba92f5171087885039c8b8261860a1ba)
+++ Core/Common/src/Core.Common.Gui/Forms/MainWindow/MainWindow.xaml.cs (.../MainWindow.xaml.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -431,7 +431,6 @@
private void OnFileNewClicked(object sender, RoutedEventArgs e)
{
- // Original code:
commands.StorageCommands.CreateNewProject();
ValidateItems();
}
Index: Core/Common/src/Core.Common.Gui/GuiCore.cs
===================================================================
diff -u -r00f45b1bba92f5171087885039c8b8261860a1ba -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/src/Core.Common.Gui/GuiCore.cs (.../GuiCore.cs) (revision 00f45b1bba92f5171087885039c8b8261860a1ba)
+++ Core/Common/src/Core.Common.Gui/GuiCore.cs (.../GuiCore.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -62,8 +62,6 @@
private static bool isAlreadyRunningInstanceOfIGui;
private static string instanceCreationStackTrace;
- private readonly IProjectFactory projectFactory;
-
private bool isExiting;
private bool runFinished;
private SplashScreen splashScreen;
@@ -107,7 +105,6 @@
{
throw new ArgumentNullException("fixedSettings");
}
- this.projectFactory = projectFactory;
MainWindow = mainWindow;
FixedSettings = fixedSettings;
@@ -118,7 +115,7 @@
Plugins = new List();
viewCommandHandler = new ViewCommandHandler(this, this, this);
- storageCommandHandler = new StorageCommandHandler(projectStore, this, MainWindow);
+ storageCommandHandler = new StorageCommandHandler(projectStore, projectFactory, this, MainWindow);
importCommandHandler = new GuiImportHandler(MainWindow, Plugins.SelectMany(p => p.GetImportInfos()));
exportCommandHandler = new GuiExportHandler(MainWindow, Plugins.SelectMany(p => p.GetExportInfos()));
@@ -127,6 +124,8 @@
ProjectOpened += ApplicationProjectOpened;
projectObserver = new Observer(UpdateTitle);
+
+ Project = projectFactory.CreateNewProject();
}
public IPropertyResolver PropertyResolver { get; private set; }
@@ -176,7 +175,7 @@
}
// Store project?
- if (!storageCommandHandler.ContinueIfHasChanges())
+ if (!storageCommandHandler.AskConfirmationUnsavedChanges())
{
// User pressed cancel
return;
@@ -239,7 +238,6 @@
}
Selection = null;
- Project = null;
if (ViewHost != null)
{
@@ -348,16 +346,11 @@
private void InitializeProjectFromPath(string projectPath)
{
- var setDefaultProject = string.IsNullOrWhiteSpace(projectPath);
- if (!setDefaultProject)
+ var isPathGiven = !string.IsNullOrWhiteSpace(projectPath);
+ if (isPathGiven)
{
- setDefaultProject = !storageCommandHandler.OpenExistingProject(projectPath);
+ storageCommandHandler.OpenExistingProject(projectPath);
}
- if (setDefaultProject)
- {
- log.Info(Resources.GuiCore_Run_Creating_new_project);
- CreateNewProject();
- }
}
private void DeactivatePlugin(PluginBase plugin)
@@ -598,42 +591,34 @@
{
return project;
}
- set
+ private set
{
- if (project != null)
+ if (value == null)
{
- ViewCommands.RemoveAllViewsForItem(project);
+ throw new ArgumentNullException("value", @"There should always be a project.");
}
-
- project = value;
- projectObserver.Observable = project;
- UpdateTitle();
-
- if (project != null)
+ if (!ReferenceEquals(project, value))
{
+ ViewCommands.RemoveAllViewsForItem(project);
+ project = value;
+ projectObserver.Observable = project;
+
if (ProjectOpened != null)
{
ProjectOpened(project);
}
}
+
+ UpdateTitle();
}
}
- public bool IsCurrentNew()
+ public void SetProject(IProject newProject, string projectPath)
{
- return Project != null && Project.Equals(projectFactory.CreateNewProject());
+ Project = newProject;
+ ProjectFilePath = projectPath;
}
- public void CreateNewProject()
- {
- Project = projectFactory.CreateNewProject();
- }
-
- public void CloseProject()
- {
- Project = null;
- }
-
#endregion
#region Implementation: IApplicationSelection
Index: Core/Common/src/Core.Common.Gui/IProjectOwner.cs
===================================================================
diff -u -rbe66e1bec38a780abb27fedea8632acf4d24a173 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/src/Core.Common.Gui/IProjectOwner.cs (.../IProjectOwner.cs) (revision be66e1bec38a780abb27fedea8632acf4d24a173)
+++ Core/Common/src/Core.Common.Gui/IProjectOwner.cs (.../IProjectOwner.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -37,27 +37,23 @@
///
/// Gets or sets the project of the application.
///
- IProject Project { get; set; }
+ /// Thrown when a null project is
+ /// assigned.
+ /// null is not a valid return value.
+ IProject Project { get; }
///
/// Gets or sets the project path of the application.
///
- string ProjectFilePath { get; set; }
+ string ProjectFilePath { get; }
///
- /// Indicates whether the current is a new project.
+ /// Sets the project and the path of the project that was used for obtaining it.
///
- /// true if is equal to a new project, false otherwise.
- bool IsCurrentNew();
-
- ///
- /// Creates a new .
- ///
- void CreateNewProject();
-
- ///
- /// Closes the current .
- ///
- void CloseProject();
+ /// The project that is used in the application.
+ /// The file location where the was
+ /// loaded from, or null if it was not loaded from a file source.
+ /// Thrown when is null.
+ void SetProject(IProject project, string projectPath);
}
}
\ No newline at end of file
Index: Core/Common/src/Core.Common.Gui/Properties/Resources.Designer.cs
===================================================================
diff -u -r45607cccad23ec38561120539e1109e69a9e82cb -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/src/Core.Common.Gui/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 45607cccad23ec38561120539e1109e69a9e82cb)
+++ Core/Common/src/Core.Common.Gui/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -302,6 +302,24 @@
}
///
+ /// Looks up a localized string similar to Nieuw Ringtoetsproject succesvol aangemaakt..
+ ///
+ public static string Created_new_project_succesful {
+ get {
+ return ResourceManager.GetString("Created_new_project_succesful", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Nieuw Ringtoetsproject aanmaken....
+ ///
+ public static string Creating_new_project {
+ get {
+ return ResourceManager.GetString("Creating_new_project", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to Verwij&deren....
///
public static string Delete {
@@ -731,15 +749,6 @@
}
///
- /// Looks up a localized string similar to Nieuw project aanmaken....
- ///
- public static string GuiCore_Run_Creating_new_project {
- get {
- return ResourceManager.GetString("GuiCore_Run_Creating_new_project", resourceCulture);
- }
- }
-
- ///
/// Looks up a localized string similar to Gestart in {0:f2} seconden..
///
public static string GuiCore_Run_Started_in_0_f2_sec {
@@ -1400,24 +1409,6 @@
}
///
- /// Looks up a localized string similar to Nieuw Ringtoetsproject succesvol geopend..
- ///
- public static string StorageCommandHandler_NewProject_Created_new_project_succesful {
- get {
- return ResourceManager.GetString("StorageCommandHandler_NewProject_Created_new_project_succesful", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Openen van nieuw Ringtoetsproject..
- ///
- public static string StorageCommandHandler_NewProject_Creating_new_project {
- get {
- return ResourceManager.GetString("StorageCommandHandler_NewProject_Creating_new_project", resourceCulture);
- }
- }
-
- ///
/// Looks up a localized string similar to Openen van een nieuw Ringtoetsproject geannuleerd..
///
public static string StorageCommandHandler_NewProject_Creating_new_project_cancelled {
@@ -1427,7 +1418,7 @@
}
///
- /// Looks up a localized string similar to Openen van bestaand Ringtoetsproject..
+ /// Looks up a localized string similar to Openen van bestaand Ringtoetsproject....
///
public static string StorageCommandHandler_OpenExistingProject_Opening_existing_project {
get {
Index: Core/Common/src/Core.Common.Gui/Properties/Resources.resx
===================================================================
diff -u -r45607cccad23ec38561120539e1109e69a9e82cb -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/src/Core.Common.Gui/Properties/Resources.resx (.../Resources.resx) (revision 45607cccad23ec38561120539e1109e69a9e82cb)
+++ Core/Common/src/Core.Common.Gui/Properties/Resources.resx (.../Resources.resx) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -154,8 +154,8 @@
Kritieke fout opgetreden tijdens deactivering van de grafische interface plugin.
-
- Nieuw project aanmaken...
+
+ Nieuw Ringtoetsproject aanmaken...
Berichten
@@ -208,8 +208,8 @@
Berichten
-
- Nieuw Ringtoetsproject succesvol geopend.
+
+ Nieuw Ringtoetsproject succesvol aangemaakt.
Beeld
@@ -253,9 +253,6 @@
Openen
-
- Openen van nieuw Ringtoetsproject.
-
Logbestand kan niet worden geopend.
@@ -269,7 +266,7 @@
Eigenschappen
- Openen van bestaand Ringtoetsproject.
+ Openen van bestaand Ringtoetsproject...
../Resources/brick.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Index: Core/Common/test/Core.Common.Gui.Test/Commands/StorageCommandHandlerTest.cs
===================================================================
diff -u -r11f0867b39150ae5fac83dc178a89fee46d27611 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/test/Core.Common.Gui.Test/Commands/StorageCommandHandlerTest.cs (.../StorageCommandHandlerTest.cs) (revision 11f0867b39150ae5fac83dc178a89fee46d27611)
+++ Core/Common/test/Core.Common.Gui.Test/Commands/StorageCommandHandlerTest.cs (.../StorageCommandHandlerTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -24,7 +24,6 @@
using Core.Common.Base.Data;
using Core.Common.Base.Storage;
using Core.Common.Gui.Commands;
-using Core.Common.Gui.Properties;
using Core.Common.Gui.Selection;
using Core.Common.TestUtil;
using NUnit.Extensions.Forms;
@@ -45,56 +44,28 @@
}
[Test]
- public void CreateNewProject_NoProjectSet_NewProjectIsSet()
- {
- // Setup
- var projectStorage = mocks.Stub();
- var projectOwner = mocks.Stub();
- projectOwner.Expect(po => po.CreateNewProject());
- var mainWindowController = mocks.Stub();
-
- mocks.ReplayAll();
-
- var storageCommandHandler = new StorageCommandHandler(
- projectStorage,
- projectOwner,
- mainWindowController);
-
- // Call
- Action call = () => storageCommandHandler.CreateNewProject();
-
- // Assert
- var expectedMessages = new[]
- {
- "Openen van nieuw Ringtoetsproject.",
- "Nieuw Ringtoetsproject succesvol geopend."
- };
- TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2);
- Assert.AreEqual("", projectOwner.ProjectFilePath);
- mocks.VerifyAll();
- }
-
- [Test]
public void CreateNewProject_SavedProjectThenNewProject_NewProjectAndPathAreSet()
{
// Setup
const string savedProjectPath = @"C:\savedProject.rtd";
- var projectMock = mocks.StrictMock();
+ var project = mocks.Stub();
+ var projectStub = mocks.StrictMock();
var projectStorage = mocks.Stub();
var projectOwner = mocks.Stub();
- projectOwner.Project = projectMock;
- projectOwner.ProjectFilePath = savedProjectPath;
- projectOwner.Expect(po => po.CreateNewProject());
- projectOwner.Expect(po => po.IsCurrentNew()).Return(true);
- projectOwner.Expect(po => po.CloseProject());
+ projectOwner.Stub(po => po.Project).Return(projectStub);
+ projectOwner.Stub(po => po.ProjectFilePath).Return(savedProjectPath);
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(project);
+ projectOwner.Expect(po => po.SetProject(project, null));
var mainWindowController = mocks.Stub();
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorage,
+ projectFactory,
projectOwner,
mainWindowController);
@@ -104,14 +75,11 @@
// Assert
var expectedMessages = new[]
{
- "Openen van nieuw Ringtoetsproject.",
- "Nieuw Ringtoetsproject succesvol geopend."
+ "Nieuw Ringtoetsproject aanmaken...",
+ "Nieuw Ringtoetsproject succesvol aangemaakt."
};
TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2);
- Assert.IsInstanceOf(projectOwner.Project);
- Assert.AreEqual("", projectOwner.ProjectFilePath);
-
mocks.VerifyAll();
}
@@ -122,11 +90,13 @@
var projectStorage = mocks.StrictMock();
var mainWindowController = mocks.StrictMock();
var projectOwner = mocks.StrictMock();
+ var projectFactory = mocks.Stub();
projectOwner.Expect(po => po.Project).Return(null);
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorage,
+ projectFactory,
projectOwner,
mainWindowController);
@@ -144,24 +114,26 @@
{
// Setup
const string someValidFilePath = "";
- var projectMock = mocks.Stub();
+ var projectStub = mocks.Stub();
+ var projectFactory = mocks.Stub();
const string exceptionMessage = "";
var projectStorage = mocks.StrictMock();
projectStorage.Expect(ps => ps.HasStagedProject).Return(false);
- projectStorage.Expect(ps => ps.StageProject(projectMock));
+ projectStorage.Expect(ps => ps.StageProject(projectStub));
projectStorage.Expect(ps => ps.SaveProjectAs(someValidFilePath)).
Throw(new StorageException(exceptionMessage, new Exception("l33t h4xor!")));
var mainWindowController = mocks.StrictMock();
var projectOwner = mocks.Stub();
- projectOwner.Project = projectMock;
- projectOwner.ProjectFilePath = someValidFilePath;
+ projectOwner.Stub(po => po.Project).Return(projectStub);
+ projectOwner.Stub(po => po.ProjectFilePath).Return(someValidFilePath);
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorage,
+ projectFactory,
projectOwner,
mainWindowController);
@@ -185,22 +157,24 @@
public void SaveProject_SavingProjectIsSuccessful_LogSuccessAndReturnTrue()
{
// Setup
- var projectMock = mocks.Stub();
+ var projectStub = mocks.Stub();
+ var projectFactory = mocks.Stub();
const string someValidFilePath = "";
var projectStorage = mocks.Stub();
- projectStorage.Expect(ps => ps.StageProject(projectMock));
+ projectStorage.Expect(ps => ps.StageProject(projectStub));
projectStorage.Expect(ps => ps.HasStagedProject).Return(false);
projectStorage.Expect(ps => ps.SaveProjectAs(someValidFilePath));
var mainWindowController = mocks.StrictMock();
var projectOwner = mocks.Stub();
- projectOwner.Project = projectMock;
- projectOwner.ProjectFilePath = someValidFilePath;
+ projectOwner.Stub(po => po.Project).Return(projectStub);
+ projectOwner.Stub(po => po.ProjectFilePath).Return(someValidFilePath);
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorage,
+ projectFactory,
projectOwner,
mainWindowController);
@@ -210,29 +184,35 @@
// Assert
var expectedMessage = string.Format("Het Ringtoetsproject '{0}' is succesvol opgeslagen.",
- projectMock.Name);
+ projectStub.Name);
TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1);
Assert.IsTrue(result);
mocks.VerifyAll();
}
[Test]
- public void OpenExistingProject_LoadingProjectThrowsStorageException_LogFailureAndReturnFalse()
+ public void OpenExistingProject_LoadingProjectThrowsStorageException_LogFailureCreateNewProjectAndReturnFalse()
{
// Setup
const string pathToSomeInvalidFile = "";
const string goodErrorMessageText = "";
+ var project = mocks.Stub();
var projectStorage = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(project);
projectStorage.Stub(ps => ps.LoadProject(pathToSomeInvalidFile))
.Throw(new StorageException(goodErrorMessageText, new Exception("H@X!")));
var mainWindowController = mocks.Stub();
var projectOwner = mocks.Stub();
+ projectOwner.Stub(po => po.Project).Return(project);
+ projectOwner.Stub(po => po.SetProject(project, null));
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorage,
+ projectFactory,
projectOwner,
mainWindowController);
@@ -243,7 +223,7 @@
// Assert
var expectedMessages = new[]
{
- "Openen van bestaand Ringtoetsproject.",
+ "Openen van bestaand Ringtoetsproject...",
goodErrorMessageText,
"Het is niet gelukt om het Ringtoetsproject te laden."
};
@@ -254,20 +234,26 @@
}
[Test]
- public void OpenExistingProject_LoadingNull_LogFailureAndReturnFalse()
+ public void OpenExistingProject_LoadingNull_LogFailureCreateNewProjectAndReturnFalse()
{
// Setup
const string pathToSomeInvalidFile = "";
+ IProject project = mocks.Stub();
var projectStorage = mocks.Stub();
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(project);
projectStorage.Stub(ps => ps.LoadProject(pathToSomeInvalidFile))
.Return(null);
var mainWindowController = mocks.Stub();
var projectOwner = mocks.Stub();
+ projectOwner.Stub(po => po.Project).Return(project);
+ projectOwner.Stub(po => po.SetProject(project, null));
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorage,
+ projectFactory,
projectOwner,
mainWindowController);
@@ -278,7 +264,7 @@
// Assert
var expectedMessages = new[]
{
- "Openen van bestaand Ringtoetsproject.",
+ "Openen van bestaand Ringtoetsproject...",
"Het is niet gelukt om het Ringtoetsproject te laden."
};
TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages, 2);
@@ -292,40 +278,40 @@
{
// Setup
const string fileName = "newProject";
- string pathToSomeInvalidFile = string.Format("C://folder/directory/{0}.rtd",
+ string pathToSomeValidFile = string.Format("C://folder/directory/{0}.rtd",
fileName);
var loadedProject = mocks.Stub();
+ var projectFactory = mocks.Stub();
var projectStorage = mocks.Stub();
- projectStorage.Stub(ps => ps.LoadProject(pathToSomeInvalidFile))
+ projectStorage.Stub(ps => ps.LoadProject(pathToSomeValidFile))
.Return(loadedProject);
var mainWindowController = mocks.Stub();
var projectOwner = mocks.Stub();
+ projectOwner.Stub(po => po.SetProject(loadedProject, pathToSomeValidFile));
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorage,
+ projectFactory,
projectOwner,
mainWindowController);
// Call
bool result = false;
- Action call = () => result = storageCommandHandler.OpenExistingProject(pathToSomeInvalidFile);
+ Action call = () => result = storageCommandHandler.OpenExistingProject(pathToSomeValidFile);
// Assert
var expectedMessages = new[]
{
- "Openen van bestaand Ringtoetsproject.",
+ "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);
mocks.VerifyAll();
}
@@ -338,23 +324,26 @@
fileName);
var loadedProject = mocks.Stub();
var originalProject = mocks.Stub();
+ var projectFactory = mocks.Stub();
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();
var projectOwner = mocks.Stub();
- projectOwner.Project = originalProject;
- projectOwner.ProjectFilePath = "";
+ projectOwner.Stub(po => po.Project).Return(originalProject);
+ projectOwner.Stub(po => po.ProjectFilePath).Return("");
+ projectOwner.Stub(po => po.SetProject(loadedProject, pathToSomeValidFile));
+
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorage,
+ projectFactory,
projectOwner,
mainWindowController);
@@ -365,59 +354,36 @@
// Assert
var expectedMessages = new[]
{
- "Openen van bestaand Ringtoetsproject.",
+ "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);
mocks.VerifyAll();
}
[Test]
- public void ContinueIfHasChanges_NoProjectSet_ReturnsTrue()
+ public void AskConfirmationUnsavedChanges_ProjectSetNoChange_ReturnsTrue()
{
// Setup
- var projectStorage = mocks.Stub();
var mainWindowController = mocks.Stub();
- var projectOwner = mocks.Stub();
- mocks.ReplayAll();
-
- var storageCommandHandler = new StorageCommandHandler(
- projectStorage,
- projectOwner,
- mainWindowController);
-
- // Call
- bool result = storageCommandHandler.ContinueIfHasChanges();
-
- // Assert
- Assert.IsTrue(result);
-
- mocks.VerifyAll();
- }
-
- [Test]
- public void ContinueIfHasChanges_ProjectSetNoChange_ReturnsTrue()
- {
- // Setup
- var mainWindowController = mocks.Stub();
- var projectMock = mocks.StrictMock();
+ var projectStub = mocks.StrictMock();
+ var projectFactory = mocks.Stub();
var projectStorageMock = mocks.Stub();
- var projectOwnerMock = mocks.Stub();
- projectOwnerMock.Project = projectMock;
+ var projectOwnerStub = mocks.Stub();
+ projectOwnerStub.Stub(po => po.Project).Return(projectStub);
+ projectOwnerStub.Stub(po => po.ProjectFilePath).Return("");
mocks.ReplayAll();
var storageCommandHandler = new StorageCommandHandler(
projectStorageMock,
- projectOwnerMock,
+ projectFactory,
+ projectOwnerStub,
mainWindowController);
// Call
- bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges();
+ bool actionMaycontinue = storageCommandHandler.AskConfirmationUnsavedChanges();
// Assert
Assert.IsTrue(actionMaycontinue);
@@ -427,29 +393,32 @@
[Test]
[RequiresSTA]
- public void ContinueIfHasChanges_ProjectSetWithChangeCancelPressed_ReturnsFalse()
+ public void AskConfirmationUnsavedChanges_ProjectSetWithChangeCancelPressed_ReturnsFalse()
{
// Setup
var mainWindowController = mocks.Stub();
- var projectMock = mocks.Stub();
+ var projectStub = mocks.Stub();
+ var projectFactory = mocks.Stub();
const string projectName = "Project";
- projectMock.Name = projectName;
- var projectStorageMock = mocks.Stub();
- projectStorageMock.Expect(ps => ps.StageProject(projectMock));
+ projectStub.Name = projectName;
+ var projectStorageMock = mocks.StrictMock();
+ projectStorageMock.Expect(ps => ps.StageProject(projectStub));
projectStorageMock.Expect(ps => ps.HasStagedProject).Return(true);
- projectStorageMock.Expect(ps => ps.HasStagedProjectChanges()).IgnoreArguments().Return(true);
+ projectStorageMock.Expect(ps => ps.HasStagedProjectChanges(null)).IgnoreArguments().Return(true);
projectStorageMock.Expect(ps => ps.UnstageProject());
- var projectOwnerMock = mocks.Stub();
- projectOwnerMock.Project = projectMock;
+ var projectOwnerStub = mocks.Stub();
+ projectOwnerStub.Stub(po => po.Project).Return(projectStub);
+ projectOwnerStub.Stub(po => po.ProjectFilePath).Return("");
mocks.ReplayAll();
string messageBoxText = null;
string expectedMessage = string.Format("Sla wijzigingen in het project op: {0}?", projectName);
var storageCommandHandler = new StorageCommandHandler(
projectStorageMock,
- projectOwnerMock,
+ projectFactory,
+ projectOwnerStub,
mainWindowController);
DialogBoxHandler = (name, wnd) =>
@@ -460,7 +429,7 @@
};
// Call
- bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges();
+ bool actionMaycontinue = storageCommandHandler.AskConfirmationUnsavedChanges();
// Assert
Assert.IsFalse(actionMaycontinue);
@@ -471,29 +440,32 @@
[Test]
[RequiresSTA]
- public void ContinueIfHasChanges_ProjectSetWithChangeNoPressed_ReturnsTrue()
+ public void AskConfirmationUnsavedChanges_ProjectSetWithChangeNoPressed_ReturnsTrue()
{
// Setup
var mainWindowController = mocks.Stub();
- var projectMock = mocks.Stub();
+ var projectStub = mocks.Stub();
+ var projectFactory = mocks.Stub();
const string projectName = "Project";
- projectMock.Name = projectName;
- var projectStorageMock = mocks.Stub();
- projectStorageMock.Expect(ps => ps.StageProject(projectMock));
+ projectStub.Name = projectName;
+ var projectStorageMock = mocks.StrictMock();
+ projectStorageMock.Expect(ps => ps.StageProject(projectStub));
projectStorageMock.Expect(ps => ps.HasStagedProject).Return(true);
- projectStorageMock.Expect(ps => ps.HasStagedProjectChanges()).IgnoreArguments().Return(true);
+ projectStorageMock.Expect(ps => ps.HasStagedProjectChanges(null)).IgnoreArguments().Return(true);
projectStorageMock.Expect(ps => ps.UnstageProject());
- var projectOwnerMock = mocks.Stub();
- projectOwnerMock.Project = projectMock;
+ var projectOwnerStub = mocks.Stub();
+ projectOwnerStub.Stub(po => po.Project).Return(projectStub);
+ projectOwnerStub.Stub(po => po.ProjectFilePath).Return("");
mocks.ReplayAll();
string messageBoxText = null;
string expectedMessage = string.Format("Sla wijzigingen in het project op: {0}?", projectName);
var storageCommandHandler = new StorageCommandHandler(
projectStorageMock,
- projectOwnerMock,
+ projectFactory,
+ projectOwnerStub,
mainWindowController);
DialogBoxHandler = (name, wnd) =>
@@ -504,7 +476,7 @@
};
// Call
- bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges();
+ bool actionMaycontinue = storageCommandHandler.AskConfirmationUnsavedChanges();
// Assert
Assert.IsTrue(actionMaycontinue);
@@ -515,24 +487,25 @@
[Test]
[RequiresSTA]
- public void ContinueIfHasChanges_ProjectSetWithChangeYesPressed_ReturnsTrue()
+ public void AskConfirmationUnsavedChanges_ProjectSetWithChangeYesPressed_ReturnsTrue()
{
// Setup
var mainWindowController = mocks.Stub();
- var projectMock = mocks.Stub();
+ var projectStub = mocks.Stub();
+ var projectFactory = mocks.Stub();
const string projectName = "Project";
- projectMock.Name = projectName;
+ projectStub.Name = projectName;
var projectFilePath = "some path";
- var projectStorageMock = mocks.Stub();
- projectStorageMock.Expect(ps => ps.StageProject(projectMock));
+ var projectStorageMock = mocks.StrictMock();
+ projectStorageMock.Expect(ps => ps.StageProject(projectStub));
projectStorageMock.Expect(ps => ps.HasStagedProject).Return(true).Repeat.Twice();
- projectStorageMock.Expect(ps => ps.HasStagedProjectChanges()).IgnoreArguments().Return(true);
+ projectStorageMock.Expect(ps => ps.HasStagedProjectChanges(null)).IgnoreArguments().Return(true);
projectStorageMock.Expect(ps => ps.UnstageProject());
- var projectOwnerMock = mocks.Stub();
- projectOwnerMock.Project = projectMock;
- projectOwnerMock.ProjectFilePath = projectFilePath;
+ var projectOwnerStub = mocks.Stub();
+ projectOwnerStub.Stub(po => po.Project).Return(projectStub);
+ projectOwnerStub.Stub(po => po.ProjectFilePath).Return(projectFilePath);
projectStorageMock.Expect(p => p.SaveProjectAs(projectFilePath));
mocks.ReplayAll();
@@ -542,7 +515,8 @@
var storageCommandHandler = new StorageCommandHandler(
projectStorageMock,
- projectOwnerMock,
+ projectFactory,
+ projectOwnerStub,
mainWindowController);
DialogBoxHandler = (name, wnd) =>
@@ -553,57 +527,13 @@
};
// Call
- bool actionMaycontinue = storageCommandHandler.ContinueIfHasChanges();
+ bool actionMaycontinue = storageCommandHandler.AskConfirmationUnsavedChanges();
// Assert
Assert.IsTrue(actionMaycontinue);
mocks.VerifyAll();
Assert.AreEqual(expectedMessage, messageBoxText);
}
-
- [Test]
- [RequiresSTA]
- public void CreateNewProject_ProjectSetWithChangeCancelPressed_CancelAndLog()
- {
- // Setup
- var mainWindowController = mocks.Stub();
- var projectMock = mocks.Stub();
- const string projectName = "Project";
- projectMock.Name = projectName;
- var projectStorageMock = mocks.Stub();
- projectStorageMock.Expect(ps => ps.StageProject(projectMock));
- projectStorageMock.Expect(ps => ps.HasStagedProject).Return(true);
- projectStorageMock.Expect(ps => ps.HasStagedProjectChanges()).IgnoreArguments().Return(true);
- projectStorageMock.Expect(ps => ps.UnstageProject());
-
- var projectOwnerMock = mocks.Stub();
- projectOwnerMock.Project = projectMock;
- mocks.ReplayAll();
-
- string messageBoxText = null;
- string expectedMessage = string.Format("Sla wijzigingen in het project op: {0}?", projectName);
-
- var storageCommandHandler = new StorageCommandHandler(
- projectStorageMock,
- projectOwnerMock,
- mainWindowController);
-
- DialogBoxHandler = (name, wnd) =>
- {
- var helper = new MessageBoxTester(wnd);
- messageBoxText = helper.Text;
- helper.SendCommand(MessageBoxTester.Command.Cancel);
- };
-
- // Call
- Action call = () => storageCommandHandler.CreateNewProject();
-
- // Assert
- TestHelper.AssertLogMessageIsGenerated(call, Resources.StorageCommandHandler_NewProject_Creating_new_project_cancelled, 1);
-
- mocks.VerifyAll();
- Assert.AreEqual(expectedMessage, messageBoxText);
- }
}
}
\ No newline at end of file
Index: Core/Common/test/Core.Common.Gui.Test/Forms/MainWindow/MainWindowTest.cs
===================================================================
diff -u -re59a206ea06e40bbc9959cd98fc1a10ae7cdcf8c -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/test/Core.Common.Gui.Test/Forms/MainWindow/MainWindowTest.cs (.../MainWindowTest.cs) (revision e59a206ea06e40bbc9959cd98fc1a10ae7cdcf8c)
+++ Core/Common/test/Core.Common.Gui.Test/Forms/MainWindow/MainWindowTest.cs (.../MainWindowTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -422,6 +422,7 @@
var mocks = new MockRepository();
var projectStore = mocks.Stub();
var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
mocks.ReplayAll();
using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
@@ -452,6 +453,7 @@
var mocks = new MockRepository();
var projectStore = mocks.Stub();
var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
mocks.ReplayAll();
using (var mainWindow = new Gui.Forms.MainWindow.MainWindow())
Index: Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs
===================================================================
diff -u -rb099f576f45f1a8fb167d965b357ba675105f4e4 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs (.../GuiCoreTest.cs) (revision b099f576f45f1a8fb167d965b357ba675105f4e4)
+++ Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs (.../GuiCoreTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -76,6 +76,8 @@
var mocks = new MockRepository();
var projectStore = mocks.Stub();
var projectFactory = mocks.Stub();
+ var project = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(project);
mocks.ReplayAll();
var guiCoreSettings = new GuiCoreSettings();
@@ -87,8 +89,8 @@
// Assert
Assert.AreEqual(null, gui.PropertyResolver);
- Assert.AreEqual(null, gui.ProjectFilePath);
- Assert.AreEqual(null, gui.Project);
+ Assert.IsNull(gui.ProjectFilePath);
+ Assert.AreSame(project, gui.Project);
Assert.AreEqual(null, gui.Selection);
@@ -135,7 +137,7 @@
// Setup
var mocks = new MockRepository();
IStoreProject projectStore = nullArgumentIndex == 1 ? null : mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
GuiCoreSettings guiCoreSettings = nullArgumentIndex == 2 ? null : new GuiCoreSettings();
@@ -162,7 +164,8 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
mocks.ReplayAll();
var guiCoreSettings = new GuiCoreSettings();
@@ -181,6 +184,31 @@
[Test]
[STAThread]
+ public void SetProject_SetNull_ThrowsArgumentNullException()
+ {
+ var mocks = new MockRepository();
+ var projectStore = mocks.Stub();
+ var pluginMock = mocks.Stub();
+ pluginMock.Expect(p => p.Deactivate());
+ pluginMock.Expect(p => p.Dispose());
+ var projectFactory = CreateProjectFactory(mocks);
+ mocks.ReplayAll();
+
+ using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
+ {
+ gui.Plugins.Add(pluginMock);
+
+ // Call
+ TestDelegate test = () => gui.SetProject(null, null);
+
+ // Assert
+ Assert.Throws(test);
+ }
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ [STAThread]
public void Dispose_PluginsAdded_PluginsDisabledAndRemovedAndDisposed()
{
// Setup
@@ -189,7 +217,7 @@
var pluginMock = mocks.Stub();
pluginMock.Expect(p => p.Deactivate());
pluginMock.Expect(p => p.Dispose());
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings());
@@ -213,7 +241,7 @@
var pluginMock = mocks.Stub();
pluginMock.Expect(p => p.Deactivate()).Throw(new Exception("Bad stuff happening!"));
pluginMock.Expect(p => p.Dispose());
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings());
@@ -235,7 +263,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings())
@@ -253,36 +281,12 @@
[Test]
[STAThread]
- public void Dispose_HasProject_ClearProject()
- {
- // Setup
- var mocks = new MockRepository();
- var projectStore = mocks.Stub();
- var projectMock = mocks.Stub();
- var projectFactory = mocks.Stub();
- mocks.ReplayAll();
-
- var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings())
- {
- Project = projectMock
- };
-
- // Call
- gui.Dispose();
-
- // Assert
- Assert.IsNull(gui.Project);
- mocks.VerifyAll();
- }
-
- [Test]
- [STAThread]
public void Dispose_HasMainWindow_DiposeOfMainWindow()
{
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var mainWindow = new MainWindow())
@@ -306,7 +310,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var messageWindowLogAppender = new MessageWindowLogAppender();
@@ -347,7 +351,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var toolView = new TestView())
@@ -374,7 +378,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var documentView = new TestView())
@@ -402,7 +406,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
Logger rootLogger = ((Hierarchy) LogManager.GetRepository()).Root;
@@ -444,7 +448,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var appender = new MessageWindowLogAppender();
@@ -494,7 +498,7 @@
var projectStore = mocks.Stub();
var deserializedProject = mocks.Stub();
projectStore.Expect(ps => ps.LoadProject(testFile)).Return(deserializedProject);
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var fixedSettings = new GuiCoreSettings
@@ -511,7 +515,7 @@
// Assert
var expectedMessages = new[]
{
- "Openen van bestaand Ringtoetsproject.",
+ "Openen van bestaand Ringtoetsproject...",
"Bestaand Ringtoetsproject succesvol geopend."
};
TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages);
@@ -544,7 +548,8 @@
var project = mocks.Stub();
project.Name = expectedProjectName;
var projectFactory = mocks.Stub();
- projectFactory.Expect(ph => ph.CreateNewProject()).Return(project);
+ projectFactory.Stub(ph => ph.CreateNewProject()).Return(project);
+
mocks.ReplayAll();
var fixedSettings = new GuiCoreSettings
@@ -561,10 +566,9 @@
// Assert
var expectedMessages = new[]
{
- "Openen van bestaand Ringtoetsproject.",
+ "Openen van bestaand Ringtoetsproject...",
storageExceptionText,
"Het is niet gelukt om het Ringtoetsproject te laden.",
- "Nieuw project aanmaken..."
};
TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages);
@@ -581,7 +585,7 @@
[TestCase(" ")]
[TestCase(null)]
[STAThread]
- public void Run_WithoutFile_CreateNewDefaultProject(string path)
+ public void Run_WithoutFile_DefaultProjectStillSet(string path)
{
// Setup
var mocks = new MockRepository();
@@ -591,7 +595,7 @@
var project = mocks.Stub();
project.Name = expectedProjectName;
var projectFactory = mocks.Stub();
- projectFactory.Expect(ph => ph.CreateNewProject()).Return(project);
+ projectFactory.Stub(ph => ph.CreateNewProject()).Return(project);
mocks.ReplayAll();
var fixedSettings = new GuiCoreSettings
@@ -603,11 +607,11 @@
using (var gui = new GuiCore(mainWindow, projectStore, projectFactory, fixedSettings))
{
// Call
- Action call = () => gui.Run(path);
+ gui.Run(path);
// Assert
- TestHelper.AssertLogMessageIsGenerated(call, "Nieuw project aanmaken...");
Assert.IsNull(gui.ProjectFilePath);
+ Assert.AreSame(project, gui.Project);
var expectedTitle = string.Format("{0} - {1} {2}",
expectedProjectName, fixedSettings.MainWindowTitle, SettingsHelper.ApplicationVersion);
Assert.AreEqual(expectedTitle, mainWindow.Title);
@@ -627,7 +631,7 @@
plugin.Expect(p => p.Activate());
plugin.Expect(p => p.GetViewInfos()).Return(Enumerable.Empty());
plugin.Expect(p => p.GetPropertyInfos()).Return(Enumerable.Empty());
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
// Setup
@@ -656,7 +660,7 @@
plugin.Stub(p => p.Activate()).Throw(new Exception("ERROR!"));
plugin.Expect(p => p.Deactivate());
plugin.Expect(p => p.Dispose());
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
// Setup
@@ -683,7 +687,7 @@
plugin.Stub(p => p.Activate()).Throw(new Exception("ERROR!"));
plugin.Stub(p => p.Deactivate()).Throw(new Exception("MORE ERROR!"));
plugin.Expect(p => p.Dispose());
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
// Setup
@@ -708,7 +712,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
@@ -737,7 +741,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
@@ -777,7 +781,7 @@
});
plugin2.Stub(p => p.Dispose());
plugin2.Stub(p => p.Deactivate());
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
@@ -832,7 +836,7 @@
});
plugin2.Stub(p => p.Dispose());
plugin2.Stub(p => p.Deactivate());
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
@@ -861,7 +865,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
@@ -912,7 +916,7 @@
pluginC.Stub(p => p.GetTreeNodeInfos()).Return(nodesPluginC);
pluginC.Stub(p => p.Dispose());
pluginC.Stub(p => p.Deactivate());
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
@@ -939,7 +943,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var treeView = new TreeViewControl())
@@ -962,7 +966,7 @@
// Setup
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
using (var treeView = new TreeViewControl())
@@ -991,19 +995,19 @@
[Test]
[STAThread]
- public void Project_SetNewValue_FireProjectOpenedEvents()
+ public void SetProject_SetNewValue_FireProjectOpenedEvents()
{
// Setup
var mocks = new MockRepository();
var storeProject = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
var oldProjectMock = mocks.Stub();
var newProjectMock = mocks.Stub();
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), storeProject, projectFactory, new GuiCoreSettings()))
{
- gui.Project = oldProjectMock;
+ gui.SetProject(oldProjectMock, null);
int openedCallCount = 0;
gui.ProjectOpened += project =>
@@ -1013,7 +1017,7 @@
};
// Call
- gui.Project = newProjectMock;
+ gui.SetProject(newProjectMock, null);
// Assert
Assert.AreEqual(1, openedCallCount);
@@ -1028,7 +1032,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var selectionProvider = new TestSelectionProvider();
@@ -1056,7 +1060,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var selectionProvider = new TestSelectionProvider();
@@ -1083,7 +1087,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var selection = new object();
@@ -1110,7 +1114,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var selectionProvider = new TestSelectionProvider();
@@ -1138,7 +1142,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var selection = new object();
@@ -1168,7 +1172,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var selectionProvider = new TestSelectionProvider();
@@ -1197,7 +1201,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var testView = new TestView();
@@ -1226,7 +1230,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var testView = new TestView();
@@ -1255,7 +1259,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var selectionProvider = new TestSelectionProvider();
@@ -1284,7 +1288,7 @@
// Given
var mocks = new MockRepository();
var projectStore = mocks.Stub();
- var projectFactory = mocks.Stub();
+ var projectFactory = CreateProjectFactory(mocks);
mocks.ReplayAll();
var selectionProvider = new TestSelectionProvider();
@@ -1308,30 +1312,30 @@
mocks.VerifyAll();
}
- private class TestSelectionProvider : Control, ISelectionProvider
+ private static IProjectFactory CreateProjectFactory(MockRepository mocks)
{
- private object selection;
+ var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
+ return projectFactory;
+ }
+
+ private class TestSelectionProvider : Control, ISelectionProvider
+ {
public event EventHandler SelectionChanged;
public TestSelectionProvider()
{
- selection = new object();
+ Selection = new object();
}
public object Data { get; set; }
- public object Selection
- {
- get
- {
- return selection;
- }
- }
+ public object Selection { get; private set; }
public void ChangeSelection()
{
- selection = new object();
+ Selection = new object();
if (SelectionChanged != null)
{
Index: Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/GuiCoreIntegrationTest.cs
===================================================================
diff -u -r1eed3e3f652618c52a462edc502cfd4250772314 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/GuiCoreIntegrationTest.cs (.../GuiCoreIntegrationTest.cs) (revision 1eed3e3f652618c52a462edc502cfd4250772314)
+++ Core/Common/test/Core.Common.Integration.Test/Ringtoets/Application.Ringtoets/GuiCoreIntegrationTest.cs (.../GuiCoreIntegrationTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -56,6 +56,7 @@
var mocks = new MockRepository();
var projectStore = mocks.Stub();
var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
@@ -82,6 +83,7 @@
var mocks = new MockRepository();
var projectStore = mocks.Stub();
var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
@@ -99,6 +101,7 @@
var mocks = new MockRepository();
var projectStore = mocks.Stub();
var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
Index: Core/Plugins/test/Core.Plugins.Chart.Test/ChartPluginTest.cs
===================================================================
diff -u -r1eed3e3f652618c52a462edc502cfd4250772314 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Plugins/test/Core.Plugins.Chart.Test/ChartPluginTest.cs (.../ChartPluginTest.cs) (revision 1eed3e3f652618c52a462edc502cfd4250772314)
+++ Core/Plugins/test/Core.Plugins.Chart.Test/ChartPluginTest.cs (.../ChartPluginTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -111,6 +111,7 @@
var mocks = new MockRepository();
var projectStore = mocks.Stub();
var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
Index: Core/Plugins/test/Core.Plugins.Map.Test/MapPluginTest.cs
===================================================================
diff -u -r7a02214c204a80a085b50b8d5fd7f90b9e0b4149 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Plugins/test/Core.Plugins.Map.Test/MapPluginTest.cs (.../MapPluginTest.cs) (revision 7a02214c204a80a085b50b8d5fd7f90b9e0b4149)
+++ Core/Plugins/test/Core.Plugins.Map.Test/MapPluginTest.cs (.../MapPluginTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -165,6 +165,7 @@
var mocks = new MockRepository();
var projectStore = mocks.Stub();
var projectFactory = mocks.Stub();
+ projectFactory.Stub(pf => pf.CreateNewProject()).Return(mocks.Stub());
mocks.ReplayAll();
using (var gui = new GuiCore(new MainWindow(), projectStore, projectFactory, new GuiCoreSettings()))
Index: Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerPluginTest.cs
===================================================================
diff -u -r650277f75faab8d29b4a07b738f0fd2a99ac7ed3 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerPluginTest.cs (.../ProjectExplorerPluginTest.cs) (revision 650277f75faab8d29b4a07b738f0fd2a99ac7ed3)
+++ Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerPluginTest.cs (.../ProjectExplorerPluginTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -84,6 +84,7 @@
guiStub.Stub(g => g.ViewHost).Return(viewHost);
guiStub.Expect(g => g.ProjectOpened += null).IgnoreArguments();
guiStub.Stub(g => g.ProjectOpened -= null).IgnoreArguments();
+ guiStub.Stub(g => g.Project).Return(mocks.Stub());
mocks.ReplayAll();
using (var plugin = new ProjectExplorerPlugin
@@ -116,6 +117,7 @@
guiStub.Stub(g => g.ViewHost).Return(viewHost);
guiStub.Stub(g => g.ProjectOpened += null).IgnoreArguments();
guiStub.Stub(g => g.ProjectOpened -= null).IgnoreArguments();
+ guiStub.Stub(g => g.Project).Return(mocks.Stub());
mocks.ReplayAll();
using (var plugin = new ProjectExplorerPlugin
@@ -152,6 +154,7 @@
viewHost.Stub(vm => vm.SetImage(null, null)).IgnoreArguments();
guiStub.Stub(g => g.ViewHost).Return(viewHost);
guiStub.Stub(g => g.ProjectOpened += null).IgnoreArguments();
+ guiStub.Stub(g => g.Project).Return(mocks.Stub());
guiStub.Expect(g => g.ProjectOpened -= null).IgnoreArguments();
mocks.ReplayAll();
@@ -246,6 +249,8 @@
guiStub.Expect(g => g.ProjectOpened += null).IgnoreArguments();
guiStub.Expect(g => g.ProjectOpened -= null).IgnoreArguments();
+ guiStub.Expect(g => g.Project).Return(initialProjectMock);
+ guiStub.Expect(g => g.Project).Return(newProjectMock);
mocks.ReplayAll();
@@ -254,15 +259,13 @@
Gui = guiStub
})
{
- guiStub.Project = initialProjectMock;
plugin.Activate();
// Precondition
Assert.AreEqual(1, toolViews.Count);
Assert.AreSame(initialProjectMock, toolViews[0].Data);
// Call
- guiStub.Project = newProjectMock;
guiStub.Raise(s => s.ProjectOpened += null, newProjectMock);
// Assert
Index: Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoAssessmentSectionCommandTest.cs
===================================================================
diff -u -r69f931d615d8cd933b51ce0b087c45db08a19a16 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoAssessmentSectionCommandTest.cs (.../AddNewDemoAssessmentSectionCommandTest.cs) (revision 69f931d615d8cd933b51ce0b087c45db08a19a16)
+++ Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoAssessmentSectionCommandTest.cs (.../AddNewDemoAssessmentSectionCommandTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -79,7 +79,7 @@
var mocks = new MockRepository();
var projectOwnerStub = mocks.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var observerMock = mocks.StrictMock();
observerMock.Expect(o => o.UpdateObserver());
Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Commands/AssessmentSectionFromFileCommandHandlerTest.cs
===================================================================
diff -u -r74d6d66cabf1b53c7b1d485efb53a940752eb070 -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Commands/AssessmentSectionFromFileCommandHandlerTest.cs (.../AssessmentSectionFromFileCommandHandlerTest.cs) (revision 74d6d66cabf1b53c7b1d485efb53a940752eb070)
+++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Commands/AssessmentSectionFromFileCommandHandlerTest.cs (.../AssessmentSectionFromFileCommandHandlerTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -184,7 +184,7 @@
var parentDialogStub = mockRepository.Stub();
var project = new RingtoetsProject();
var projectOwnerStub = mockRepository.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var viewControllerMock = mockRepository.StrictMock();
mockRepository.ReplayAll();
@@ -215,7 +215,7 @@
var parentDialogStub = mockRepository.Stub();
var project = new RingtoetsProject();
var projectOwnerStub = mockRepository.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var viewControllerMock = mockRepository.StrictMock();
viewControllerMock.Expect(dvc => dvc.OpenViewForData(null)).IgnoreArguments().Return(true);
mockRepository.ReplayAll();
@@ -253,7 +253,7 @@
var parentDialogStub = mockRepository.Stub();
var project = new RingtoetsProject();
var projectOwnerStub = mockRepository.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var viewControllerMock = mockRepository.StrictMock();
viewControllerMock.Expect(dvc => dvc.OpenViewForData(null)).IgnoreArguments().Return(true);
mockRepository.ReplayAll();
@@ -298,7 +298,7 @@
var parentDialogStub = mockRepository.Stub();
var project = new RingtoetsProject();
var projectOwnerStub = mockRepository.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var viewControllerMock = mockRepository.StrictMock();
viewControllerMock.Expect(dvc => dvc.OpenViewForData(null)).IgnoreArguments().Return(true);
mockRepository.ReplayAll();
@@ -333,7 +333,7 @@
var parentDialogStub = mockRepository.Stub();
var project = new RingtoetsProject();
var projectOwnerStub = mockRepository.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var viewControllerMock = mockRepository.StrictMock();
viewControllerMock.Expect(dvc => dvc.OpenViewForData(null)).IgnoreArguments().Return(true);
mockRepository.ReplayAll();
@@ -373,7 +373,7 @@
var parentDialogStub = mockRepository.Stub();
var project = new RingtoetsProject();
var projectOwnerStub = mockRepository.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var viewControllerMock = mockRepository.StrictMock();
viewControllerMock.Expect(dvc => dvc.OpenViewForData(null)).IgnoreArguments().Return(true);
mockRepository.ReplayAll();
@@ -413,7 +413,7 @@
var parentDialogStub = mockRepository.Stub();
var project = new RingtoetsProject();
var projectOwnerStub = mockRepository.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var viewControllerMock = mockRepository.StrictMock();
viewControllerMock.Expect(dvc => dvc.OpenViewForData(null)).IgnoreArguments().Return(true);
mockRepository.ReplayAll();
@@ -457,7 +457,7 @@
var parentDialogStub = mockRepository.Stub();
var project = new RingtoetsProject();
var projectOwnerStub = mockRepository.Stub();
- projectOwnerStub.Project = project;
+ projectOwnerStub.Stub(po => po.Project).Return(project);
var viewControllerMock = mockRepository.StrictMock();
viewControllerMock.Expect(dvc => dvc.OpenViewForData(null)).IgnoreArguments().Return(true);
mockRepository.ReplayAll();
Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs
===================================================================
diff -u -r8c1fffbb415e7c2470be6d3fa2971103777d418e -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2
--- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs (.../RingtoetsPluginTest.cs) (revision 8c1fffbb415e7c2470be6d3fa2971103777d418e)
+++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/RingtoetsPluginTest.cs (.../RingtoetsPluginTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2)
@@ -94,7 +94,7 @@
gui.Run();
// When
- Action action = () => gui.Project = new RingtoetsProject();
+ Action action = () => gui.SetProject(new RingtoetsProject(), null);
// Then
TestHelper.AssertLogMessagesCount(action, 0);
@@ -135,7 +135,7 @@
project.AssessmentSections.Add(section);
// When
- Action action = () => gui.Project = project;
+ Action action = () => gui.SetProject(project, null);
// Then
TestHelper.AssertLogMessagesCount(action, 0);
@@ -175,7 +175,7 @@
gui.Run();
// When
- Action action = () => gui.Project = project;
+ Action action = () => gui.SetProject(project, null);
// Then
var fileMissingMessage = string.Format("Fout bij het lezen van bestand '{0}': het bestand bestaat niet.", nonExistingFileExistingFile);