public void ShouldNotAddNonCSharpFile() { var project = new FakeProject(fileName: @"c:\test\code\fake.csproj"); var expectedXml = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>"); project.XmlRepresentation = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>"); project.AddFile("some content", @"c:\test\code\foo.txt"); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"c:\test\code\foo.txt" }; var handler = new AddToProjectHandler(solution, new FakeWindowsFileSystem()); handler.AddToProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public void ShouldThrowProjectNotFoundExceptionWhenProjectNotFound() { var project = GetProject("<xml/>"); var solution = new FakeSolution(@"/test/fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"/test/folder/Test.cs" }; var handler = new AddToProjectHandler(solution, new FakeUnixFileSystem()); handler.AddToProject(request); }
public void ShouldThrowProjectNotFoundExceptionWhenProjectNotFound() { var project = new FakeProject(fileName: @"/test/code/fake.csproj"); var solution = new FakeSolution(@"/test/fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"/test/folder/Test.cs" }; var handler = new AddToProjectHandler(solution); handler.AddToProject(request); }
public void ShouldThrowProjectNotFoundExceptionForOrphanProject() { var solution = new FakeSolution(@"/test/fake.sln"); var project = new OrphanProject(new FileSystem(), new Logger(Verbosity.Quiet)); project.Files.Add(new CSharpFile(project, "/test/folder/Test.cs", "Some content...")); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"/test/folder/Test.cs" }; var handler = new AddToProjectHandler(solution, new FakeUnixFileSystem()); handler.AddToProject(request); }
public void AddToProject(AddToProjectRequest request) { if (request.FileName == null || !request.FileName.EndsWith(".cs")) { return; } var relativeProject = _solution.ProjectContainingFile(request.FileName); if (relativeProject == null || relativeProject is OrphanProject) { throw new ProjectNotFoundException(string.Format("Unable to find project relative to file {0}", request.FileName)); } var project = relativeProject.AsXml(); var relativeFileName = new Uri(relativeProject.FileName) .MakeRelativeUri(new Uri(request.FileName)) .ToString() .ForceWindowsPathSeparator(); var absoluteFileName = request.FileName.ForceWindowsPathSeparator(); var compilationNodes = project.Element(_msBuildNameSpace + "Project") .Elements(_msBuildNameSpace + "ItemGroup") .Elements(_msBuildNameSpace + "Compile").ToList(); var fileAlreadyInProject = compilationNodes .Select(n => n.Attribute("Include").Value) .Any(path => path.Equals(absoluteFileName, StringComparison.InvariantCultureIgnoreCase) || path.Equals(relativeFileName, StringComparison.InvariantCultureIgnoreCase)); if (!fileAlreadyInProject) { var compilationNodeParent = compilationNodes.First().Parent; var newFileElement = new XElement(_msBuildNameSpace + "Compile", new XAttribute("Include", relativeFileName)); compilationNodeParent.Add(newFileElement); relativeProject.Save(project); } }
public void ShouldNotAddFileToProjectWhenAlreadyExists() { var project = GetProject(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""Test.cs""/></ItemGroup></Project>"); var expectedXml = project.AsXml(); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new AddToProjectHandler(solution, new FakeWindowsFileSystem()); handler.AddToProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public void ShouldAddNewFileToProject() { var project = new FakeProject(fileName: @"c:\test\code\fake.csproj"); project.XmlRepresentation = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>"); var expectedXml = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""files\Test.cs""/></ItemGroup></Project>"); project.AddFile("some content", @"c:\test\code\files\Test.cs"); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"c:\test\code\files\Test.cs" }; var handler = new AddToProjectHandler(solution); handler.AddToProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public void ShouldAlwaysUseWindowsFileSeparatorWhenAddingToProject() { if (PlatformService.IsUnix) { var project = GetProject(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>" , @"/test/code/fake.csproj"); var expectedXml = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""folder\Test.cs""/></ItemGroup></Project>"); project.Files.Add(new CSharpFile(project, @"/test/code/folder/Test.cs", "some c# code")); var solution = new FakeSolution(@"/test/fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"/test/code/folder/Test.cs" }; var handler = new AddToProjectHandler(solution, new FakeUnixFileSystem()); handler.AddToProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); } }
public void ShouldAlwaysUseWindowsFileSeparatorWhenAddingToProject() { if (PlatformService.IsUnix) { var project = new FakeProject (fileName: @"/test/code/fake.csproj"); project.XmlRepresentation = XDocument.Parse (@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>"); var expectedXml = XDocument.Parse (@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""folder\Test.cs""/></ItemGroup></Project>"); project.AddFile ("some content", @"/test/code/folder/Test.cs"); var solution = new FakeSolution (@"/test/fake.sln"); solution.Projects.Add (project); var request = new AddToProjectRequest { FileName = @"/test/code/folder/Test.cs" }; var handler = new AddToProjectHandler (solution, new FakeUnixFileSystem()); handler.AddToProject (request); project.AsXml ().ToString ().ShouldEqual (expectedXml.ToString ()); } }
public void AddToProject(AddToProjectRequest request) { if (request.FileName == null || !request.FileName.EndsWith(".cs")) { return; } var relativeProject = _solution.ProjectContainingFile(request.FileName); if (relativeProject == null || relativeProject is OrphanProject) { throw new ProjectNotFoundException(string.Format("Unable to find project relative to file {0}", request.FileName)); } var project = relativeProject.AsXml(); var requestFile = new FileInfo(request.FileName).FullName; var projectDirectory = new FileInfo(relativeProject.FileName).Directory; var relativeFileName = requestFile.Replace(projectDirectory.FullName, "").Replace("/", @"\").Substring(1); var compilationNodes = project.Element(_msBuildNameSpace + "Project") .Elements(_msBuildNameSpace + "ItemGroup") .Elements(_msBuildNameSpace + "Compile").ToList(); var fileAlreadyInProject = compilationNodes.Any(n => n.Attribute("Include").Value.Equals(relativeFileName, StringComparison.InvariantCultureIgnoreCase)); if (!fileAlreadyInProject) { var compilationNodeParent = compilationNodes.First().Parent; var newFileElement = new XElement(_msBuildNameSpace + "Compile", new XAttribute("Include", relativeFileName)); compilationNodeParent.Add(newFileElement); relativeProject.Save(project); } }
public void ShouldAddNewFileToProject() { var project = GetProject(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>"); project.Files.Add(new CSharpFile(project, @"c:\test\code\files\Test.cs", "some c# code")); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"c:\test\code\files\Test.cs" }; var handler = new AddToProjectHandler(solution, new FakeWindowsFileSystem()); handler.AddToProject(request); var expectedXml = XDocument.Parse( @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""files\Test.cs""/></ItemGroup></Project>"); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public void ShouldNotAddFileToProjectWhenAlreadyExists() { var project = GetProject (@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""Test.cs""/><Compile Include=""c:\test2\Absolute.cs""/><Compile Include=""..\..\test2\Foreign.cs""/></ItemGroup></Project>"); var expectedXml = project.AsXml (); var solution = new FakeSolution (@"c:\test\fake.sln"); solution.Projects.Add (project); // test relative internal var request = new AddToProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new AddToProjectHandler (solution); handler.AddToProject (request); project.AsXml ().ToString ().ShouldEqual (expectedXml.ToString ()); // test absolute request = new AddToProjectRequest { FileName = @"c:\test2\Absolute.cs" }; handler = new AddToProjectHandler (solution); handler.AddToProject (request); project.AsXml ().ToString ().ShouldEqual (expectedXml.ToString ()); // test relative foreign tree request = new AddToProjectRequest { FileName = @"c:\test2\Foreign.cs" }; handler = new AddToProjectHandler (solution); handler.AddToProject (request); project.AsXml ().ToString ().ShouldEqual (expectedXml.ToString ()); }
public void ShouldAlwaysUseWindowsFileSeparatorWhenAddingToProject() { var project = new FakeProject(fileName: @"/test/code/fake.csproj"); project.XmlRepresentation = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>"); var expectedXml = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""folder\Test.cs""/></ItemGroup></Project>"); project.AddFile("some content", @"/test/code/folder/Test.cs"); var solution = new FakeSolution(@"/test/fake.sln"); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"/test/code/folder/Test.cs" }; var handler = new AddToProjectHandler(solution); handler.AddToProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public void ShouldThrowProjectNotFoundExceptionForOrphanProject() { var solution = new FakeSolution(@"/test/fake.sln"); var project = new OrphanProject(); project.Files.Add(new CSharpFile(project, "/test/folder/Test.cs", "Some content...")); solution.Projects.Add(project); var request = new AddToProjectRequest { FileName = @"/test/folder/Test.cs" }; var handler = new AddToProjectHandler(solution); handler.AddToProject(request); }