コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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());
        }
コード例 #8
0
ファイル: AddToProjectTests.cs プロジェクト: dykim07/vim-ide
        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());
        }
コード例 #9
0
        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());
            }
        }
コード例 #10
0
        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 ());
            }
        }
コード例 #11
0
        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);
            }
        }
コード例 #12
0
        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);
            }
        }
コード例 #13
0
        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());
        }
コード例 #14
0
ファイル: AddToProjectTests.cs プロジェクト: Reese-D/my_emacs
        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 ());
        }
コード例 #15
0
        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());
        }
コード例 #16
0
ファイル: AddToProjectTests.cs プロジェクト: dykim07/vim-ide
        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);
        }
コード例 #17
0
ファイル: AddToProjectTests.cs プロジェクト: dykim07/vim-ide
        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);
        }