示例#1
0
        public void WillNotAddDuplicateGacAssemblyReference()
        {
            var project = GetProject(
                @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""System.Web.Mvc"" />
                    </ItemGroup>
                </Project>");

            Solution.Projects.Add(project);

            const string expectedXml = @"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""System.Web.Mvc"" />
                    </ItemGroup>
                </Project>";

            var request = new AddReferenceRequest
            {
                Reference = @"System.Web.Mvc",
                FileName  = @"c:\test\one\test.cs"
            };

            var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddGacReferenceProcessor() }, new NativeFileSystem()));

            handler.AddReference(request);
            _fs.File.ReadAllText(project.FileName).ShouldEqualXml(expectedXml);
        }
示例#2
0
        public void WillNotAddDuplicateGacAssemblyReference()
        {
            var project = CreateDefaultProjectWithGacReference();

            Solution.Projects.Add(project);

            var expectedXml = XDocument.Parse(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""System.Web.Mvc"" />
                    </ItemGroup>
                </Project>");

            var request = new AddReferenceRequest
            {
                Reference = @"System.Web.Mvc",
                FileName  = @"c:\test\one\test.cs"
            };

            var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddGacReferenceProcessor() }, new FileSystem()));

            handler.AddReference(request);

            project.AsXml().ToString().ShouldEqual(expectedXml.ToString());
        }
        public void ShouldNotAddDuplicateFileReference()
        {
            var project = CreateDefaultProjectWithFileReference();

            Solution.Projects.Add(project);

            var request = new AddReferenceRequest
            {
                Reference = @"c:\test\packages\HelloWorld\lib\net40\Hello.World.dll",
                FileName  = @"c:\test\one\test.cs"
            };

            var expectedXml = XDocument.Parse(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""Hello.World"">
                            <HintPath>..\packages\HelloWorld\lib\net40\Hello.World.dll</HintPath>
                        </Reference>
                    </ItemGroup>
                </Project>");

            var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddFileReferenceProcessor() }, new FakeFileSystem()));

            handler.AddReference(request);

            project.AsXml().ToString().ShouldEqual(expectedXml.ToString());
            project.References.FirstOrDefault(r => r.GetType() == typeof(FakeAssembly)).ShouldBeNull();
        }
        public void CanAddFileReferenceWhenNoReferencesExist()
        {
            var project = CreateDefaultProject();

            Solution.Projects.Add(project);

            var request = new AddReferenceRequest
            {
                Reference = @"c:\test\packages\SomeTest\lib\net40\Some.Test.dll",
                FileName  = @"c:\test\one\test.cs"
            };

            var expectedXml = XDocument.Parse(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""Some.Test"">
                            <HintPath>..\packages\SomeTest\lib\net40\Some.Test.dll</HintPath>
                        </Reference>
                    </ItemGroup>
                </Project>");

            var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddFileReferenceProcessor() }));

            handler.AddReference(request);

            project.AsXml().ToString().ShouldEqual(expectedXml.ToString());
            ((FakeAssembly)project.References.First(r => r.GetType() == typeof(FakeAssembly))).AssemblyPath.ShouldEqual(@"c:\test\packages\SomeTest\lib\net40\Some.Test.dll");
        }
示例#5
0
        public void CanAddProjectReferenceWhenProjectReferencesExist()
        {
            var projectOne = CreateDefaultProject();

            var projectTwoId = Guid.NewGuid();
            var projectTwo   = new FakeProject("faketwo", @"c:\test\two\fake2.csproj", projectTwoId);

            projectTwo.Title = "Project Two";
            projectTwo.AddFile("some content", @"c:\test\two\test.cs");
            projectTwo.XmlRepresentation = XDocument.Parse(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <ProjectReference Include=""..\existing\project.csproj"">
                            <Project>{1-2-3-4}</Project>
                            <Name>Existing Project</Name>
                        </ProjectReference>
                    </ItemGroup>
                </Project>");

            var expectedXml = XDocument.Parse(string.Format(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <ProjectReference Include=""..\existing\project.csproj"">
                            <Project>{{1-2-3-4}}</Project>
                            <Name>Existing Project</Name>
                        </ProjectReference>
                        <ProjectReference Include=""..\one\fake1.csproj"">
                            <Project>{0}</Project>
                            <Name>Project One</Name>
                        </ProjectReference>
                    </ItemGroup>
                </Project>", string.Concat("{", projectOne.ProjectId.ToString().ToUpperInvariant(), "}")));

            Solution.Projects.Add(projectOne);
            Solution.Projects.Add(projectTwo);

            var request = new AddReferenceRequest
            {
                Reference = @"fake1",
                FileName  = @"c:\test\two\test.cs"
            };

            var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddProjectReferenceProcessor(Solution) }));

            handler.AddReference(request);

            projectTwo.AsXml().ToString().ShouldEqual(expectedXml.ToString());
        }
        public void CanAddProjectReferenceWhenNoProjectReferencesExist()
        {
            var projectOne = GetProject(
                @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                </Project>");

            projectOne.Title     = "Project One";
            projectOne.ProjectId = Guid.NewGuid();

            var projectTwo = GetProject(
                @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                </Project>", @"c:\test\two\fake2.csproj");

            _solution.Projects.Add(projectOne);
            _solution.Projects.Add(projectTwo);

            projectTwo.Files.Add(new CSharpFile(projectTwo, @"c:\test\two\test.cs", "some c# code"));
            var request = new AddReferenceRequest
            {
                Reference = @"fake1",
                FileName  = @"c:\test\two\test.cs"
            };

            var handler = new AddReferenceHandler(_solution, new AddReferenceProcessorFactory(_solution, new IReferenceProcessor[] { new AddProjectReferenceProcessor(_solution) }, new NativeFileSystem()));

            handler.AddReference(request);

            var expectedXml = string.Format(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <ProjectReference Include=""..\one\fake1.csproj"">
                            <Project>{{{0}}}</Project>
                            <Name>Project One</Name>
                        </ProjectReference>
                    </ItemGroup>
                </Project>", projectOne.ProjectId.ToString().ToUpperInvariant());

            _fs.File.ReadAllText(projectTwo.FileName).ShouldEqualXml(expectedXml);
        }
        public void WillNotAddDuplicateProjectReference()
        {
            var projectOne = GetProject(
                @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                                     <ItemGroup>
                                         <Compile Include=""Test.cs""/>
                                     </ItemGroup>
                                 </Project>");

            var projectTwoId = Guid.NewGuid();
            var xml          = string.Format(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <ProjectReference Include=""..\one\fake1.csproj"">
                            <Project>{0}</Project>
                            <Name>Project One</Name>
                        </ProjectReference>
                    </ItemGroup>
                </Project>", string.Concat("{", projectOne.ProjectId.ToString().ToUpperInvariant(), "}"));
            var projectTwo   = GetProject(xml, @"c:\test\two\fake2.csproj");

            projectTwo.Title = "Project Two";

            projectTwo.Files.Add(new CSharpFile(projectTwo, @"c:\test\two\test.cs", "some c# code"));

            projectTwo.ProjectId = projectTwoId;

            var expectedXml = XDocument.Parse(xml);

            _solution.Projects.Add(projectOne);
            _solution.Projects.Add(projectTwo);

            var request = new AddReferenceRequest
            {
                Reference = @"fake1",
                FileName  = @"c:\test\two\test.cs"
            };

            var handler  = new AddReferenceHandler(_solution, new AddReferenceProcessorFactory(_solution, new IReferenceProcessor[] { new AddProjectReferenceProcessor(_solution) }, new NativeFileSystem()));
            var response = handler.AddReference(request);

            projectTwo.AsXml().ToString().ShouldEqual(expectedXml.ToString());
            response.Message.ShouldEqual("Reference already added");
        }
示例#8
0
        public void CanAddFileReference()
        {
            var project = GetProject(
                @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""Hello.World"">
                            <HintPath>..\packages\HelloWorld\lib\net40\Does.Not.Exist.dll</HintPath>
                        </Reference>
                    </ItemGroup>
                </Project>");

            Solution.Projects.Add(project);

            var request = new AddReferenceRequest
            {
                Reference = @"c:\test\packages\SomeTest\lib\net40\Some.Test.dll",
                FileName  = @"c:\test\one\test.cs"
            };

            const string expectedXml = @"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""Hello.World"">
                            <HintPath>..\packages\HelloWorld\lib\net40\Does.Not.Exist.dll</HintPath>
                        </Reference>
                        <Reference Include=""Some.Test"">
                            <HintPath>..\packages\SomeTest\lib\net40\Some.Test.dll</HintPath>
                        </Reference>
                    </ItemGroup>
                </Project>";

            var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddFileReferenceProcessor() }, new FakeWindowsFileSystem()));

            handler.AddReference(request);

            _fs.File.ReadAllText(project.FileName).ShouldEqualXml(expectedXml);

            project.References.Select(r => ((DefaultUnresolvedAssembly)r).AssemblyName)
            .ShouldContain(@"c:\test\packages\SomeTest\lib\net40\Some.Test.dll");
        }
示例#9
0
        public void ShouldNotAddCircularReference()
        {
            var projectOne = CreateDefaultProject();

            var projectTwoId = Guid.NewGuid();
            var projectTwo   = new FakeProject("faketwo", @"c:\test\two\fake2.csproj", projectTwoId);

            projectTwo.Title = "Project Two";
            projectTwo.AddFile("some content", @"c:\test\two\test.cs");
            projectTwo.AddReference(new ProjectReference(Solution, "Project One"));

            var xml = string.Format(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <ProjectReference Include=""..\one\fake1.csproj"">
                            <Project>{0}</Project>
                            <Name>Project One</Name>
                        </ProjectReference>
                    </ItemGroup>
                </Project>", string.Concat("{", projectOne.ProjectId.ToString().ToUpperInvariant(), "}"));

            var expectedXml = XDocument.Parse(xml);

            projectTwo.XmlRepresentation = XDocument.Parse(xml);

            Solution.Projects.Add(projectOne);
            Solution.Projects.Add(projectTwo);

            var request = new AddReferenceRequest
            {
                Reference = @"fake2",
                FileName  = @"c:\test\one\test.cs"
            };

            var handler  = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddProjectReferenceProcessor(Solution) }));
            var response = handler.AddReference(request);

            projectTwo.AsXml().ToString().ShouldEqual(expectedXml.ToString());
            response.Message.ShouldEqual("Reference will create circular dependency");
        }
示例#10
0
        public void ShouldNotAddDuplicateFileReference()
        {
            var project = GetProject(
                @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""Hello.World"">
                            <HintPath>..\packages\HelloWorld\lib\net40\Hello.World.dll</HintPath>
                        </Reference>
                    </ItemGroup>
                </Project>");

            Solution.Projects.Add(project);

            var request = new AddReferenceRequest
            {
                Reference = @"c:\test\packages\HelloWorld\lib\net40\Hello.World.dll",
                FileName  = @"c:\test\one\test.cs"
            };

            const string expectedXml = @"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""Hello.World"">
                            <HintPath>..\packages\HelloWorld\lib\net40\Hello.World.dll</HintPath>
                        </Reference>
                    </ItemGroup>
                </Project>";

            var handler = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddFileReferenceProcessor() }, new FakeFileSystem()));

            handler.AddReference(request);
            _fs.File.ReadAllText(project.FileName).ShouldEqualXml(expectedXml);
        }
示例#11
0
        public void CanAddGacAssemblyReference()
        {
            var project = GetProject(
                @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                </Project>");

            Solution.Projects.Add(project);

            var path =
                _fs.Path.Combine(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5", "System.Web.Mvc.dll");

            _fs.File.WriteAllText(path, "");
            const string expectedXml = @"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                    <ItemGroup>
                        <Reference Include=""System.Web.Mvc"" />
                    </ItemGroup>
                </Project>";

            var request = new AddReferenceRequest
            {
                Reference = @"System.Web.Mvc",
                FileName  = @"c:\test\one\test.cs"
            };

            var handler  = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddGacReferenceProcessor() }, new NativeFileSystem()));
            var response = handler.AddReference(request);

            response.Message.ShouldEqual("Reference to System.Web.Mvc added successfully");
            _fs.File.ReadAllText(project.FileName).ShouldEqualXml(expectedXml);
        }
示例#12
0
        public void ShouldNotAddGacReferenceThatDoesNotExist()
        {
            const string xml = @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                </Project>";

            var project = GetProject(xml);

            Solution.Projects.Add(project);

            var request = new AddReferenceRequest
            {
                Reference = @"System.Web.Mvc",
                FileName  = @"c:\test\one\test.cs"
            };

            var handler  = new AddReferenceHandler(Solution, new AddReferenceProcessorFactory(Solution, new IReferenceProcessor[] { new AddGacReferenceProcessor() }, new NativeFileSystem()));
            var response = handler.AddReference(request);

            response.Message.ShouldEqual("Did not find System.Web.Mvc");
            _fs.File.ReadAllText(project.FileName).ShouldEqualXml(xml);
        }