From cc85f6564a3528f3d8a1a14fcbadb34cf8bfcb51 Mon Sep 17 00:00:00 2001 From: mrward Date: Thu, 24 Feb 2011 21:52:30 +0000 Subject: [PATCH] Add logging to SharpDevelopProjectSystem. --- .../Project/Src/SharpDevelopProjectSystem.cs | 89 +++++++- .../Test/PackageManagement.Tests.csproj | 3 + .../Test/Src/Helpers/FileNameAndDirectory.cs | 43 ++++ .../Src/Helpers/FileNameAndProjectName.cs | 43 ++++ .../Src/Helpers/ReferenceAndProjectName.cs | 43 ++++ .../TestableSharpDevelopProjectSystem.cs | 42 ++++ .../Src/SharpDevelopProjectSystemTests.cs | 215 ++++++++++++++---- 7 files changed, 425 insertions(+), 53 deletions(-) create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FileNameAndDirectory.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FileNameAndProjectName.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReferenceAndProjectName.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs index 88fcfe5ccd..e9d828679c 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Runtime.Versioning; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Project; using NuGet; @@ -60,6 +61,7 @@ namespace ICSharpCode.PackageManagement ReferenceProjectItem assemblyReference = CreateReference(referencePath); ProjectService.AddProjectItem(project, assemblyReference); project.Save(); + LogAddedReferenceToProject(assemblyReference); } ReferenceProjectItem CreateReference(string referencePath) @@ -70,6 +72,21 @@ namespace ICSharpCode.PackageManagement return assemblyReference; } + void LogAddedReferenceToProject(ReferenceProjectItem referenceProjectItem) + { + LogAddedReferenceToProject(referenceProjectItem.Include, ProjectName); + } + + protected virtual void LogAddedReferenceToProject(string referenceName, string projectName) + { + DebugLogFormat("Added reference '{0}' to project '{1}'.", referenceName, projectName); + } + + void DebugLogFormat(string format, params object[] args) + { + Logger.Log(MessageLevel.Debug, format, args); + } + public bool ReferenceExists(string name) { ReferenceProjectItem referenceProjectItem = FindReference(name); @@ -101,9 +118,20 @@ namespace ICSharpCode.PackageManagement if (referenceProjectItem != null) { ProjectService.RemoveProjectItem(project, referenceProjectItem); project.Save(); + LogRemovedReferenceFromProject(referenceProjectItem); } } + void LogRemovedReferenceFromProject(ReferenceProjectItem referenceProjectItem) + { + LogRemovedReferenceFromProject(referenceProjectItem.Include, ProjectName); + } + + protected virtual void LogRemovedReferenceFromProject(string referenceName, string projectName) + { + DebugLogFormat("Removed reference '{0}' from project '{1}'.", referenceName, projectName); + } + public bool IsSupportedFile(string path) { return !IsAppConfigFile(path); @@ -121,6 +149,7 @@ namespace ICSharpCode.PackageManagement if (ShouldAddFileToProject(path)) { AddFileToProject(path); } + LogAddedFileToProject(path); } protected virtual void PhysicalFileSystemAddFile(string path, Stream stream) @@ -128,6 +157,23 @@ namespace ICSharpCode.PackageManagement base.AddFile(path, stream); } + bool ShouldAddFileToProject(string path) + { + return !IsBinDirectory(path) && !FileExistsInProject(path); + } + + bool IsBinDirectory(string path) + { + string directoryName = Path.GetDirectoryName(path); + return IsMatchIgnoringCase(directoryName, "bin"); + } + + bool FileExistsInProject(string path) + { + string fullPath = GetFullPath(path); + return project.IsFileInProject(fullPath); + } + void AddFileToProject(string path) { FileProjectItem fileItem = CreateFileProjectItem(path); @@ -143,21 +189,14 @@ namespace ICSharpCode.PackageManagement return fileItem; } - bool ShouldAddFileToProject(string path) - { - return !IsBinDirectory(path) && !FileExistsInProject(path); - } - - bool IsBinDirectory(string path) + void LogAddedFileToProject(string fileName) { - string directoryName = Path.GetDirectoryName(path); - return IsMatchIgnoringCase(directoryName, "bin"); + LogAddedFileToProject(fileName, ProjectName); } - bool FileExistsInProject(string path) + protected virtual void LogAddedFileToProject(string fileName, string projectName) { - string fullPath = GetFullPath(path); - return project.IsFileInProject(fullPath); + DebugLogFormat("Added file '{0}' to project '{1}'.", fileName, projectName); } public override void DeleteDirectory(string path, bool recursive) @@ -165,6 +204,7 @@ namespace ICSharpCode.PackageManagement string directory = GetFullPath(path); fileService.RemoveDirectory(directory); project.Save(); + LogDeletedDirectory(path); } public override void DeleteFile(string path) @@ -172,6 +212,33 @@ namespace ICSharpCode.PackageManagement string fileName = GetFullPath(path); fileService.RemoveFile(fileName); project.Save(); + LogDeletedFileInfo(path); + } + + protected virtual void LogDeletedDirectory(string folder) + { + DebugLogFormat("Removed folder '{0}'.", folder); + } + + void LogDeletedFileInfo(string path) + { + string fileName = Path.GetFileName(path); + string directory = Path.GetDirectoryName(path); + if (String.IsNullOrEmpty(directory)) { + LogDeletedFile(fileName); + } else { + LogDeletedFileFromDirectory(fileName, directory); + } + } + + protected virtual void LogDeletedFile(string fileName) + { + DebugLogFormat("Removed file '{0}'.", fileName); + } + + protected virtual void LogDeletedFileFromDirectory(string fileName, string directory) + { + DebugLogFormat("Removed file '{0}' from folder '{1}'.", fileName, directory); } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 74cea6cada..9581602815 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -81,10 +81,13 @@ + + + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FileNameAndDirectory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FileNameAndDirectory.cs new file mode 100644 index 0000000000..3060e39a6b --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FileNameAndDirectory.cs @@ -0,0 +1,43 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace PackageManagement.Tests.Helpers +{ + public class FileNameAndDirectory + { + public FileNameAndDirectory() + { + } + + public FileNameAndDirectory(string fileName, string folder) + { + this.FileName = fileName; + this.Folder = folder; + } + + public string FileName; + public string Folder; + + public override bool Equals(object obj) + { + FileNameAndDirectory rhs = obj as FileNameAndDirectory; + if (rhs != null) { + return (FileName == rhs.FileName) && + (Folder == rhs.Folder); + } + return false; + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override string ToString() + { + return String.Format("[FileNameAndDirectory FileName={0}, Folder={1}]", FileName, Folder); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FileNameAndProjectName.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FileNameAndProjectName.cs new file mode 100644 index 0000000000..9d2562392e --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FileNameAndProjectName.cs @@ -0,0 +1,43 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace PackageManagement.Tests.Helpers +{ + public class FileNameAndProjectName + { + public FileNameAndProjectName() + { + } + + public FileNameAndProjectName(string fileName, string projectName) + { + this.FileName = fileName; + this.ProjectName = projectName; + } + + public string FileName; + public string ProjectName; + + public override bool Equals(object obj) + { + FileNameAndProjectName rhs = obj as FileNameAndProjectName; + if (rhs != null) { + return (rhs.FileName == FileName) && + (rhs.ProjectName == ProjectName); + } + return false; + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override string ToString() + { + return String.Format("[FileNameAndProjectName FileName={0}, ProjectName={1}]", FileName, ProjectName); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReferenceAndProjectName.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReferenceAndProjectName.cs new file mode 100644 index 0000000000..28fcc524f1 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReferenceAndProjectName.cs @@ -0,0 +1,43 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace PackageManagement.Tests.Helpers +{ + public class ReferenceAndProjectName + { + public ReferenceAndProjectName() + { + } + + public ReferenceAndProjectName(string reference, string project) + { + this.Reference = reference; + this.Project = project; + } + + public string Reference; + public string Project; + + public override bool Equals(object obj) + { + ReferenceAndProjectName rhs = obj as ReferenceAndProjectName; + if (rhs != null) { + return (rhs.Project == Project) && + (rhs.Reference == Reference); + } + return false; + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override string ToString() + { + return String.Format("[ReferenceAndProjectName Reference={0}, Project={1}]", Reference, Project); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableSharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableSharpDevelopProjectSystem.cs index 2b61b069dd..3eb65414bb 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableSharpDevelopProjectSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableSharpDevelopProjectSystem.cs @@ -4,6 +4,7 @@ using System; using System.IO; using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Design; using ICSharpCode.SharpDevelop.Project; namespace PackageManagement.Tests.Helpers @@ -13,6 +14,13 @@ namespace PackageManagement.Tests.Helpers public string PathPassedToPhysicalFileSystemAddFile; public Stream StreamPassedToPhysicalFileSystemAddFile; public FakeFileService FakeFileService; + public FakePackageManagementOutputMessagesView FakeOutputMessagesView; + public string FileNamePassedToLogDeletedFile; + public FileNameAndDirectory FileNameAndDirectoryPassedToLogDeletedFileFromDirectory; + public string DirectoryPassedToLogDeletedDirectory; + public ReferenceAndProjectName ReferenceAndProjectNamePassedToLogAddedReferenceToProject; + public ReferenceAndProjectName ReferenceAndProjectNamePassedToLogRemovedReferenceFromProject; + public FileNameAndProjectName FileNameAndProjectNamePassedToLogAddedFileToProject; public TestableSharpDevelopProjectSystem(MSBuildBasedProject project) : this(project, new FakeFileService(project)) @@ -23,6 +31,7 @@ namespace PackageManagement.Tests.Helpers : base(project, fileService) { FakeFileService = (FakeFileService)fileService; + Logger = FakeOutputMessagesView; } protected override void PhysicalFileSystemAddFile(string path, Stream stream) @@ -30,5 +39,38 @@ namespace PackageManagement.Tests.Helpers PathPassedToPhysicalFileSystemAddFile = path; StreamPassedToPhysicalFileSystemAddFile = stream; } + + protected override void LogDeletedFile(string fileName) + { + FileNamePassedToLogDeletedFile = fileName; + } + + protected override void LogDeletedFileFromDirectory(string fileName, string directory) + { + FileNameAndDirectoryPassedToLogDeletedFileFromDirectory = new FileNameAndDirectory(fileName, directory); + } + + protected override void LogDeletedDirectory(string directory) + { + DirectoryPassedToLogDeletedDirectory = directory; + } + + protected override void LogAddedReferenceToProject(string referenceName, string projectName) + { + ReferenceAndProjectNamePassedToLogAddedReferenceToProject = + new ReferenceAndProjectName(referenceName, projectName); + } + + protected override void LogRemovedReferenceFromProject(string referenceName, string projectName) + { + ReferenceAndProjectNamePassedToLogRemovedReferenceFromProject = + new ReferenceAndProjectName(referenceName, projectName); + } + + protected override void LogAddedFileToProject(string fileName, string projectName) + { + FileNameAndProjectNamePassedToLogAddedFileToProject = + new FileNameAndProjectName(fileName, projectName); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs index e7abd75b5e..adb654f167 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs @@ -28,11 +28,21 @@ namespace PackageManagement.Tests project = ProjectHelper.CreateTestProject(); } + void CreateTestProject(string fileName) + { + CreateTestProject(); + project.FileName = fileName; + } + + void AddFileToProject(string fileName) + { + ProjectHelper.AddFile(project, fileName); + } + [Test] public void Root_NewInstanceCreated_ReturnsProjectDirectory() { - CreateTestProject(); - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); CreateProjectSystem(project); string expectedRoot = @"d:\projects\MyProject\"; @@ -231,6 +241,24 @@ namespace PackageManagement.Tests ReferenceProjectItemAssert.AreEqual(expectedReferenceItem, referenceItem); } + [Test] + public void AddReference_AddReferenceToNUnitFramework_AddingReferenceIsLogged() + { + CreateTestProject(); + CreateProjectSystem(project); + project.Name = "MyTestProject"; + + string fileName = @"d:\projects\packages\nunit\nunit.framework.dll"; + projectSystem.AddReference(fileName, null); + + var expectedReferenceAndProjectName = new ReferenceAndProjectName() { + Reference = "nunit.framework", + Project = "MyTestProject" + }; + + Assert.AreEqual(expectedReferenceAndProjectName, projectSystem.ReferenceAndProjectNamePassedToLogAddedReferenceToProject); + } + [Test] public void RemoveReference_ReferenceBeingRemovedHasFileExtension_ReferenceRemovedFromProject() { @@ -284,6 +312,25 @@ namespace PackageManagement.Tests Assert.AreEqual(0, project.ItemsWhenSaved.Count); } + [Test] + public void RemoveReference_ReferenceBeingRemovedHasFileExtension_ReferenceRemovalIsLogged() + { + CreateTestProject(); + project.Name = "MyTestProject"; + ProjectHelper.AddReference(project, "nunit.framework"); + CreateProjectSystem(project); + + string fileName = @"d:\projects\packages\nunit\nunit.framework.dll"; + projectSystem.RemoveReference(fileName); + + var expectedReferenceAndProjectName = new ReferenceAndProjectName { + Reference = "nunit.framework", + Project = "MyTestProject" + }; + + Assert.AreEqual(expectedReferenceAndProjectName, projectSystem.ReferenceAndProjectNamePassedToLogRemovedReferenceFromProject); + } + [Test] public void AddFile_NewFile_AddsFileToFileSystem() { @@ -301,8 +348,7 @@ namespace PackageManagement.Tests [Test] public void AddFile_NewFile_AddsFileToProject() { - CreateTestProject(); - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); project.ItemTypeToReturnFromGetDefaultItemType = ItemType.Compile; CreateProjectSystem(project); @@ -319,8 +365,7 @@ namespace PackageManagement.Tests [Test] public void AddFile_NewResxFile_AddsFileToProjectWithCorrectItemType() { - CreateTestProject(); - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); project.ItemTypeToReturnFromGetDefaultItemType = ItemType.EmbeddedResource; CreateProjectSystem(project); @@ -337,8 +382,7 @@ namespace PackageManagement.Tests [Test] public void AddFile_RelativeFileNameUsed_AddsFileToProject() { - CreateTestProject(); - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); project.ItemTypeToReturnFromGetDefaultItemType = ItemType.Compile; CreateProjectSystem(project); @@ -356,8 +400,7 @@ namespace PackageManagement.Tests [Test] public void AddFile_RelativeFileNameWithNoPathUsed_AddsFileToProject() { - CreateTestProject(); - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); project.ItemTypeToReturnFromGetDefaultItemType = ItemType.Compile; CreateProjectSystem(project); @@ -375,9 +418,8 @@ namespace PackageManagement.Tests [Test] public void AddFile_NewFile_ProjectIsSavedAfterFileAddedToProject() { - CreateTestProject(); + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); project.IsSaved = false; - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; CreateProjectSystem(project); string fileName = @"d:\projects\MyProject\src\NewFile.cs"; @@ -389,8 +431,7 @@ namespace PackageManagement.Tests [Test] public void AddFile_NewFileToBeAddedInBinFolder_FileIsNotAddedToProject() { - CreateTestProject(); - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); CreateProjectSystem(project); string fileName = @"bin\NewFile.dll"; @@ -404,8 +445,7 @@ namespace PackageManagement.Tests [Test] public void AddFile_NewFileToBeAddedInBinFolderWithBinFolderNameInUpperCase_FileIsNotAddedToProject() { - CreateTestProject(); - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); CreateProjectSystem(project); string fileName = @"BIN\NewFile.dll"; @@ -419,43 +459,70 @@ namespace PackageManagement.Tests [Test] public void AddFile_FileAlreadyExistsInProject_FileIsNotAddedToProject() { - CreateTestProject(); - project.FileName = @"d:\projects\MyProject\MyProject.csproj"; + CreateTestProject(@"d:\projects\MyProject\MyProject.csproj"); project.ItemTypeToReturnFromGetDefaultItemType = ItemType.Compile; - CreateProjectSystem(project); + CreateProjectSystem(project); + AddFileToProject(@"d:\projects\MyProject\src\NewFile.cs"); - string relativeFileName = @"src\NewFile.cs"; - string fileName = @"d:\projects\MyProject\src\NewFile.cs"; - ProjectHelper.AddFile(project, fileName); - - projectSystem.AddFile(relativeFileName, null); + projectSystem.AddFile(@"src\NewFile.cs", null); int projectItemsCount = project.Items.Count; Assert.AreEqual(1, projectItemsCount); } + [Test] + public void AddFile_NewFile_FileAddedToProjectIsLogged() + { + CreateTestProject(@"d:\temp\MyProject.csproj"); + project.Name = "MyTestProject"; + CreateProjectSystem(project); + + projectSystem.AddFile(@"src\files\abc.cs", null); + + var expectedFileNameAndProjectName = new FileNameAndProjectName { + FileName = @"src\files\abc.cs", + ProjectName = "MyTestProject" + }; + + Assert.AreEqual(expectedFileNameAndProjectName, projectSystem.FileNameAndProjectNamePassedToLogAddedFileToProject); + } + + [Test] + public void AddFile_NewFileAlreadyExistsInProject_FileIsStillLogged() + { + CreateTestProject(@"d:\temp\MyProject.csproj"); + project.Name = "MyTestProject"; + AddFileToProject(@"src\files\abc.cs"); + CreateProjectSystem(project); + + projectSystem.AddFile(@"src\files\abc.cs", null); + + var expectedFileNameAndProjectName = new FileNameAndProjectName { + FileName = @"src\files\abc.cs", + ProjectName = "MyTestProject" + }; + + Assert.AreEqual(expectedFileNameAndProjectName, projectSystem.FileNameAndProjectNamePassedToLogAddedFileToProject); + } + [Test] public void DeleteFile_DeletesFileFromFileSystem_CallsFileServiceRemoveFile() { - CreateTestProject(); - project.FileName = @"d:\temp\MyProject.csproj"; - string fileName = @"d:\temp\test.cs"; - ProjectHelper.AddFile(project, fileName); + CreateTestProject(@"d:\temp\MyProject.csproj"); + AddFileToProject(@"d:\temp\test.cs"); CreateProjectSystem(project); projectSystem.DeleteFile("test.cs"); - Assert.AreEqual(fileName, projectSystem.FakeFileService.PathPassedToRemoveFile); + Assert.AreEqual(@"d:\temp\test.cs", projectSystem.FakeFileService.PathPassedToRemoveFile); } [Test] public void DeleteFile_DeletesFileFromFileSystem_ProjectIsSavedAfterFileRemoved() { - CreateTestProject(); - project.FileName = @"d:\temp\MyProject.csproj"; + CreateTestProject(@"d:\temp\MyProject.csproj"); project.IsSaved = false; - string fileName = @"d:\temp\test.cs"; - ProjectHelper.AddFile(project, fileName); + AddFileToProject(@"d:\temp\test.cs"); CreateProjectSystem(project); projectSystem.DeleteFile("test.cs"); @@ -463,34 +530,98 @@ namespace PackageManagement.Tests Assert.AreEqual(0, project.ItemsWhenSaved.Count); } + [Test] + public void DeleteFile_DeletesFileFromFileSystem_FileDeletionLogged() + { + CreateTestProject(@"d:\temp\MyProject.csproj"); + AddFileToProject(@"d:\temp\test.cs"); + CreateProjectSystem(project); + + projectSystem.DeleteFile("test.cs"); + + Assert.AreEqual("test.cs", projectSystem.FileNamePassedToLogDeletedFile); + } + + [Test] + public void DeleteFile_DeletesFileFromFileSystem_FolderInformationNotLogged() + { + CreateTestProject(@"d:\temp\MyProject.csproj"); + AddFileToProject(@"d:\temp\test.cs"); + CreateProjectSystem(project); + + projectSystem.DeleteFile("test.cs"); + + Assert.IsNull(projectSystem.FileNameAndDirectoryPassedToLogDeletedFileFromDirectory); + } + + [Test] + public void DeleteFile_DeletesFileFromSubFolder_FileDeletionLogged() + { + CreateTestProject(@"d:\temp\MyProject.csproj"); + AddFileToProject(@"d:\temp\src\Files\test.cs"); + CreateProjectSystem(project); + + projectSystem.DeleteFile(@"src\Files\test.cs"); + + var expectedFileNameAndFolder = new FileNameAndDirectory() { + FileName = "test.cs", + Folder = @"src\Files" + }; + + var actualFileNameAndFolder = projectSystem.FileNameAndDirectoryPassedToLogDeletedFileFromDirectory; + + Assert.AreEqual(expectedFileNameAndFolder, actualFileNameAndFolder); + } + + [Test] + public void DeleteFile_DeletesFileFromSubFolder_FileDeletionWithoutFolderInformationIsNotLogged() + { + CreateTestProject(@"d:\temp\MyProject.csproj"); + AddFileToProject(@"d:\temp\src\Files\test.cs"); + CreateProjectSystem(project); + + projectSystem.DeleteFile(@"src\Files\test.cs"); + + Assert.IsNull(projectSystem.FileNamePassedToLogDeletedFile); + } + [Test] public void DeleteDirectory_DeletesDirectoryFromFileSystem_CallsFileServiceRemoveDirectory() { - CreateTestProject(); - project.FileName = @"d:\temp\MyProject.csproj"; - string fileName = @"d:\temp\test\test.cs"; - ProjectHelper.AddFile(project, fileName); + CreateTestProject(@"d:\temp\MyProject.csproj"); + AddFileToProject(@"d:\temp\test\test.cs"); CreateProjectSystem(project); - string path = @"d:\temp\test"; projectSystem.DeleteDirectory("test"); + string path = @"d:\temp\test"; Assert.AreEqual(path, projectSystem.FakeFileService.PathPassedToRemoveDirectory); } [Test] public void DeleteDirectory_DeletesDirectoryFromFileSystem_ProjectIsSavedAfterDirectoryDeleted() { - CreateTestProject(); - project.FileName = @"d:\temp\MyProject.csproj"; - string fileName = @"d:\temp\test\test.cs"; - ProjectHelper.AddFile(project, fileName); + CreateTestProject(@"d:\temp\MyProject.csproj"); project.IsSaved = false; + AddFileToProject(@"d:\temp\test\test.cs"); CreateProjectSystem(project); projectSystem.DeleteDirectory("test"); Assert.AreEqual(0, project.ItemsWhenSaved.Count); } + + [Test] + public void DeleteDirectory_DeletesDirectoryFromFileSystem_DirectoryIsLogged() + { + CreateTestProject(@"d:\temp\MyProject.csproj"); + project.IsSaved = false; + AddFileToProject(@"d:\temp\test\test.cs"); + CreateProjectSystem(project); + + projectSystem.DeleteDirectory("test"); + + Assert.AreEqual("test", projectSystem.DirectoryPassedToLogDeletedDirectory); + } } }