public void ValidatesFileIsWritableProgram()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                AssemblyAttributes = new AssemblyAttributes(),
                FilePath           = new FileInfo("test.cs")
            });

            var copiedProjectFile = Path.Combine("TestFiles", "OtherTestProjects", $"{nameof(ValidatesFileIsWritableProgram)}.readonly");

            if (File.Exists(copiedProjectFile))
            {
                File.SetAttributes(copiedProjectFile, FileAttributes.Normal);
                File.Delete(copiedProjectFile);
            }

            File.Copy(Path.Combine("TestFiles", "OtherTestProjects", "readonly.testcsproj"), copiedProjectFile);
            File.SetAttributes(copiedProjectFile, FileAttributes.ReadOnly);
            var project = new ProjectReader().Read(copiedProjectFile);

            var messageNum = 0;
            var progress   = new Progress <string>(x =>
            {
                if (messageNum++ == 0)
                {
                    Assert.AreEqual(
                        $@"TestFiles\OtherTestProjects\{nameof(ValidatesFileIsWritableProgram)}.readonly is readonly, please make the file writable first (checkout from source control?).",
                        x);
                }
            });

            writer.Write(project, false);
        }
        public void ValidatesFileIsWritable()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                AssemblyAttributes = new AssemblyAttributes(),
                FilePath           = new System.IO.FileInfo("test.cs")
            });

            var copiedProjectFile = $"TestFiles\\OtherTestProjects\\{nameof(ValidatesFileIsWritable)}.readonly";

            File.Copy("TestFiles\\OtherTestProjects\\readonly.testcsproj", copiedProjectFile);
            File.SetAttributes(copiedProjectFile, FileAttributes.ReadOnly);
            var project = new ProjectReader().Read(copiedProjectFile);

            var messageNum = 0;
            var progress   = new Progress <string>(x =>
            {
                if (messageNum++ == 0)
                {
                    Assert.AreEqual(
                        $@"TestFiles\OtherTestProjects\{nameof(ValidatesFileIsWritable)}.readonly is readonly, please make the file writable first (checkout from source control?).",
                        x);
                }
            });

            writer.Write(project, false, progress);
        }
示例#3
0
        public void SkipDelaySignNull()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                DelaySign = null
            }, new System.IO.FileInfo("test.cs"));

            var delaySign = xmlNode.Element("PropertyGroup").Element("DelaySign");

            Assert.IsNull(delaySign);
        }
        public void SkipDelaySignNull()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                PropertyGroups = new[] { new XElement("PropertyGroup") },
                FilePath       = new FileInfo("test.cs")
            });

            var delaySign = xmlNode.Elements("PropertyGroup").First().Element("DelaySign");

            Assert.IsNull(delaySign);
        }
示例#5
0
        public void OutputDelaySignFalse()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                DelaySign = false,
            }, new System.IO.FileInfo("test.cs"));

            var delaySign = xmlNode.Element("PropertyGroup").Element("DelaySign");

            Assert.IsNotNull(delaySign);
            Assert.AreEqual("false", delaySign.Value);
        }
示例#6
0
        public void GenerateAssemblyInfoOnNothingSpecifiedTest()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project()
            {
                AssemblyAttributes = new AssemblyAttributes()
            }, new System.IO.FileInfo("test.cs"));

            var generateAssemblyInfo = xmlNode.Element("PropertyGroup").Element("GenerateAssemblyInfo");

            Assert.IsNotNull(generateAssemblyInfo);
            Assert.AreEqual("false", generateAssemblyInfo.Value);
        }
        public void OutputAppendTargetFrameworkToOutputPathTrue()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                AppendTargetFrameworkToOutputPath = true,
                FilePath = new FileInfo("test.cs")
            });

            var appendTargetFrameworkToOutputPath = xmlNode.Element("PropertyGroup").Element("AppendTargetFrameworkToOutputPath");

            Assert.IsNull(appendTargetFrameworkToOutputPath);
        }
        public void OutputDelaySignFalse()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                PropertyGroups = new[] { new XElement("PropertyGroup", new XElement("DelaySign", "false")) },
                FilePath       = new FileInfo("test.cs")
            });

            var delaySign = xmlNode.Elements("PropertyGroup").First().Element("DelaySign");

            Assert.IsNotNull(delaySign);
            Assert.AreEqual("false", delaySign.Value);
        }
        public void OutputAppendTargetFrameworkToOutputPathFalse()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                AppendTargetFrameworkToOutputPath = false,
                FilePath = new FileInfo("test.cs")
            });

            var appendTargetFrameworkToOutputPath = xmlNode.Element("PropertyGroup").Element("AppendTargetFrameworkToOutputPath");

            Assert.IsNotNull(appendTargetFrameworkToOutputPath);
            Assert.AreEqual("false", appendTargetFrameworkToOutputPath.Value);
        }
示例#10
0
        public void OutputDelaySignTrue()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                DelaySign = true,
                FilePath  = new FileInfo("test.cs")
            });

            var delaySign = xmlNode.Element("PropertyGroup").Element("DelaySign");

            Assert.IsNotNull(delaySign);
            Assert.AreEqual("true", delaySign.Value);
        }
示例#11
0
        public void GeneratesAssemblyInfoNodesWhenSpecifiedTest()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                AssemblyAttributes = new AssemblyAttributes {
                    Company = "Company"
                }
            }, new System.IO.FileInfo("test.cs"));

            var generateAssemblyInfo = xmlNode.Element("PropertyGroup").Element("GenerateAssemblyInfo");

            Assert.IsNull(generateAssemblyInfo);

            var generateAssemblyCompany = xmlNode.Element("PropertyGroup").Element("GenerateAssemblyCompanyAttribute");

            Assert.IsNotNull(generateAssemblyCompany);
            Assert.AreEqual("false", generateAssemblyCompany.Value);
        }
示例#12
0
        public void PreventEmptyAssemblyReferences()
        {
            var project = new Project
            {
                AssemblyReferences = new List <AssemblyReference>
                {
                    new AssemblyReference()
                    {
                        Include = "System"
                    }
                },
                FilePath = new FileInfo("test.cs")
            };

            var writer = new ProjectWriter(_ => { }, _ => { });

            var xmlNode = writer.CreateXml(project);

            Assert.IsNull(xmlNode.Element("ItemGroup"));
        }
示例#13
0
        public async Task WritesDistinctConfigurations()
        {
            const string xml = @"
<Project DefaultTargets=""Build"" xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"" ToolsVersion=""4.0"">
  <Import Project=""$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props"" Condition=""Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')"" />
  <PropertyGroup>
    <VisualStudioVersion Condition=""'$(VisualStudioVersion)' == ''"">15.0</VisualStudioVersion>
    <OldToolsVersion>14.0</OldToolsVersion>
    <DslTargetsPath>..\SDK\v15.0\MSBuild\DSLTools</DslTargetsPath>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <MinimumVisualStudioVersion>15.0</MinimumVisualStudioVersion>
  </PropertyGroup>
  <PropertyGroup>
    <Configuration Condition="" '$(Configuration)' == '' "">Debug</Configuration>
    <Platform Condition="" '$(Platform)' == '' "">AnyCPU</Platform>
    <ProjectGuid>{87161453-D71B-4ABB-BADB-1D0E621E8EA0}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Class1</RootNamespace>
    <AssemblyName>Class1</AssemblyName>
    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile />
  </PropertyGroup>
  <PropertyGroup Condition="" '$(Configuration)|$(Platform)' == 'Debug|x86' "">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <DocumentationFile>bin\Debug\Class1.xml</DocumentationFile>
    <RunCodeAnalysis>false</RunCodeAnalysis>
    <CodeAnalysisRuleSet>..\FxCop.Rules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <PropertyGroup Condition="" '$(Configuration)|$(Platform)' == 'Debug|x64' "">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <DocumentationFile>bin\Release\Class1.xml</DocumentationFile>
    <RunCodeAnalysis>true</RunCodeAnalysis>
    <CodeAnalysisRuleSet>..\FxCop.Rules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <PropertyGroup Condition=""'$(Configuration)|$(Platform)' == 'Release|x86'"">
    <OutputPath>bin\Release_CI\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>..\FxCop.Rules.ruleset</CodeAnalysisRuleSet>
    <DocumentationFile>bin\Release_CI\Class1.xml</DocumentationFile>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <RunCodeAnalysis>true</RunCodeAnalysis>
  </PropertyGroup>
  <PropertyGroup Condition=""'$(Configuration)|$(Platform)' == 'Release|x64'"">
    <OutputPath>bin\Release_CI\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>..\FxCop.Rules.ruleset</CodeAnalysisRuleSet>
    <DocumentationFile>bin\Release_CI\Class1.xml</DocumentationFile>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <RunCodeAnalysis>true</RunCodeAnalysis>
  </PropertyGroup>
 </Project>";

            var project = await ParseAndTransform(xml).ConfigureAwait(false);

            Assert.AreEqual(2, project.Configurations.Count);
            Assert.AreEqual(1, project.Configurations.Count(x => x == "Debug"));
            Assert.AreEqual(1, project.Configurations.Count(x => x == "Release"));

            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(project);

            var generatedConfigurations = xmlNode.Element("PropertyGroup").Element("Configurations");

            Assert.IsNull(generatedConfigurations);
        }