Beispiel #1
0
        public void NoCopy()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create();

            projectRootElement.AddProperty(NoneItemsPredictor.OutDirPropertyName, @"bin\");
            projectRootElement.AddItem(EmbeddedResourceItemsPredictor.EmbeddedResourceItemName, "Resource1.resx");
            projectRootElement.AddItem(EmbeddedResourceItemsPredictor.EmbeddedResourceItemName, "Resource2.resx");
            projectRootElement.AddItem(EmbeddedResourceItemsPredictor.EmbeddedResourceItemName, "Resource3.resx");

            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            var expectedInputFiles = new[]
            {
                new PredictedItem("Resource1.resx", nameof(EmbeddedResourceItemsPredictor)),
                new PredictedItem("Resource2.resx", nameof(EmbeddedResourceItemsPredictor)),
                new PredictedItem("Resource3.resx", nameof(EmbeddedResourceItemsPredictor)),
            };

            new EmbeddedResourceItemsPredictor()
            .GetProjectPredictions(projectInstance)
            .AssertPredictions(
                projectInstance,
                expectedInputFiles,
                null,
                null,
                null);
        }
        public void SettingConditionDirties()
        {
            string file = null;

            try
            {
                file = Microsoft.Build.Shared.FileUtilities.GetTemporaryFile();
                ProjectRootElement importProject = ProjectRootElement.Create();
                importProject.AddProperty("p", "v1");
                importProject.Save(file);

                string content = String.Format
                                 (
                    @"<Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003' >
    <Import Project='{0}'/>
</Project>",
                    file
                                 );

                Project project             = new Project(XmlReader.Create(new StringReader(content)));
                ProjectImportElement import = Helpers.GetFirst(project.Xml.Imports);
                import.Condition = "false";

                Assert.AreEqual("v1", project.GetPropertyValue("p"));

                project.ReevaluateIfNecessary();

                Assert.AreEqual(String.Empty, project.GetPropertyValue("p"));
            }
            finally
            {
                File.Delete(file);
            }
        }
            private ProjectRootElement CreateProject()
            {
                Microsoft.Build.Evaluation.Project project = null;
                try
                {
                    project = Microsoft.Expression.Project.Build.BuildManager.GetProject(DocumentReference.Create(this.originalProjectFilePath));
                }
                catch (ArgumentException argumentException)
                {
                }
                ProjectRootElement projectRootElement = ProjectRootElement.Create();

                projectRootElement.ToolsVersion = "4.0";
                this.AddBuildProperties(projectRootElement, project);
                projectRootElement.AddItemGroup();
                projectRootElement.AddPropertyGroup();
                projectRootElement.AddProperty("IntermediateOutputPath", Microsoft.Expression.Framework.Documents.PathHelper.GetDirectoryNameOrRoot(this.xamlPath));
                this.AddAssemblyReferences(projectRootElement, project);
                this.AddImports(projectRootElement, project);
                if (!this.IsSilverlightApplication(project))
                {
                    this.AddWpfImports(projectRootElement);
                }
                projectRootElement.AddItem("Page", this.xamlPath);
                string str = Microsoft.Expression.Framework.Documents.PathHelper.ResolveCombinedPath(Microsoft.Expression.Framework.Documents.PathHelper.GetDirectoryNameOrRoot(this.xamlPath), "MarkupCompileAssembly.proj");

                projectRootElement.Save(str);
                return(projectRootElement);
            }
        public void ImportGroupFalseCondition()
        {
            ProjectRootElement xml1 = ProjectRootElement.Create("p1");

            xml1.AddProperty("p", "v1");
            xml1.AddImportGroup().AddImport("p2");
            xml1.LastChild.Condition = "false";
            ProjectRootElement xml2 = ProjectRootElement.Create("p2");

            xml2.AddProperty("p", "v2");

            Project project = new Project(xml1);

            StringWriter writer = new StringWriter();

            project.SaveLogicalProject(writer);

            string expected = ObjectModelHelpers.CleanupFileContents(
                @"<?xml version=""1.0"" encoding=""utf-16""?>
<!--
============================================================================================================================================
" + CurrentDirectoryXmlCommentFriendly + Path.DirectorySeparatorChar + @"p1
============================================================================================================================================
-->
<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace"">
  <PropertyGroup>
    <p>v1</p>
  </PropertyGroup>
  <!--<ImportGroup Condition=""false"">-->
  <!--<Import Project=""p2"" />-->
  <!--</ImportGroup>-->
</Project>");

            Helpers.VerifyAssertLineByLine(expected, writer.ToString());
        }
Beispiel #5
0
        public void WriteProjectInfo_AnalysisFileList_FilesTypes_Defaults()
        {
            // Check that all default item types are included for analysis

            // Arrange
            string rootInputFolder  = TestUtils.CreateTestSpecificFolder(this.TestContext, "Inputs");
            string rootOutputFolder = TestUtils.CreateTestSpecificFolder(this.TestContext, "Outputs");

            ProjectDescriptor  descriptor  = BuildUtilities.CreateValidProjectDescriptor(rootInputFolder, "fileTypes.proj.txt");
            ProjectRootElement projectRoot = CreateInitializedProject(descriptor, new WellKnownProjectProperties(), rootOutputFolder);

            // Files we don't expect to be included by default
            AddFileToProject(projectRoot, "fooType");
            AddFileToProject(projectRoot, "barType");

            // Files we expect to be included by default
            string managed1       = AddFileToProject(projectRoot, TargetProperties.ItemType_Compile, sonarQubeExclude: null);
            string content1       = AddFileToProject(projectRoot, TargetProperties.ItemType_Content, sonarQubeExclude: null);
            string embedded1      = AddFileToProject(projectRoot, "EmbeddedResource", sonarQubeExclude: null);
            string none1          = AddFileToProject(projectRoot, "None", sonarQubeExclude: null);
            string nativeCompile1 = AddFileToProject(projectRoot, "ClCompile", sonarQubeExclude: null);
            string page1          = AddFileToProject(projectRoot, "Page", sonarQubeExclude: null);
            string typeScript1    = AddFileToProject(projectRoot, "TypeScriptCompile", sonarQubeExclude: null);

            // Act
            ProjectInfo projectInfo = ExecuteWriteProjectInfo(projectRoot, rootOutputFolder);

            // Assert
            AssertResultFileExists(projectInfo, AnalysisType.FilesToAnalyze, managed1, content1, embedded1, none1, nativeCompile1, page1, typeScript1);

            projectRoot.AddProperty("SQAnalysisFileItemTypes", "$(SQAnalysisFileItemTypes);fooType;barType;");
        }
        public void WithCopy()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create();

            projectRootElement.AddProperty(XamlAppDefPredictor.OutDirPropertyName, @"bin\");
            projectRootElement.AddItem(XamlAppDefPredictor.XamlAppDefItemName, "Foo.xaml")
            .AddMetadata("CopyToOutputDirectory", "PreserveNewest");
            projectRootElement.AddItem(XamlAppDefPredictor.XamlAppDefItemName, "Bar.xaml")
            .AddMetadata("CopyToOutputDirectory", "Always");
            projectRootElement.AddItem(XamlAppDefPredictor.XamlAppDefItemName, "Baz.xaml")
            .AddMetadata("CopyToOutputDirectory", "Never");
            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            var expectedInputFiles = new[]
            {
                new PredictedItem("Foo.xaml", nameof(XamlAppDefPredictor)),
                new PredictedItem("Bar.xaml", nameof(XamlAppDefPredictor)),
                new PredictedItem("Baz.xaml", nameof(XamlAppDefPredictor)),
            };

            var expectedOutputFiles = new[]
            {
                new PredictedItem(@"bin\Foo.xaml", nameof(XamlAppDefPredictor)),
                new PredictedItem(@"bin\Bar.xaml", nameof(XamlAppDefPredictor)),
            };

            new XamlAppDefPredictor()
            .GetProjectPredictions(projectInstance)
            .AssertPredictions(
                projectInstance,
                expectedInputFiles,
                null,
                expectedOutputFiles,
                null);
        }
Beispiel #7
0
        public void WriteProjectInfo_AnalysisFileList_FilesTypes_OnlySpecified()
        {
            // Arrange
            string rootInputFolder  = TestUtils.CreateTestSpecificFolder(this.TestContext, "Inputs");
            string rootOutputFolder = TestUtils.CreateTestSpecificFolder(this.TestContext, "Outputs");

            ProjectDescriptor  descriptor  = BuildUtilities.CreateValidProjectDescriptor(rootInputFolder, "fileTypes.proj.txt");
            ProjectRootElement projectRoot = CreateInitializedProject(descriptor, new WellKnownProjectProperties(), rootOutputFolder);

            // Files we don't expect to be included by default
            string fooType1 = AddFileToProject(projectRoot, "fooType", sonarQubeExclude: null);
            string xxxType1 = AddFileToProject(projectRoot, "xxxType", sonarQubeExclude: null);

            AddFileToProject(projectRoot, "barType", sonarQubeExclude: null);

            // Files we'd normally expect to be included by default
            AddFileToProject(projectRoot, TargetProperties.ItemType_Compile, sonarQubeExclude: null);
            AddFileToProject(projectRoot, TargetProperties.ItemType_Content, sonarQubeExclude: null);

            projectRoot.AddProperty("SQAnalysisFileItemTypes", "fooType;xxxType");

            // Act
            ProjectInfo projectInfo = ExecuteWriteProjectInfo(projectRoot, rootOutputFolder);

            // Assert
            AssertResultFileExists(projectInfo, AnalysisType.FilesToAnalyze, fooType1, xxxType1);
        }
Beispiel #8
0
        public void NoCopy()
        {
            string             projectFile        = Path.Combine(_rootDir, @"src\project.csproj");
            ProjectRootElement projectRootElement = ProjectRootElement.Create(projectFile);

            projectRootElement.AddProperty(ContentItemsPredictor.OutDirPropertyName, @"bin\");

            const bool         shouldCopy = false;
            ProjectRootElement dep1       = CreateDependencyProject("dep1", shouldCopy);
            ProjectRootElement dep2       = CreateDependencyProject("dep2", shouldCopy);
            ProjectRootElement dep3       = CreateDependencyProject("dep3", shouldCopy);

            // The main project depends on 1 and 2; 2 depends on 3; 3 depends on 1. Note that this predictor should *not* be transitive
            projectRootElement.AddItem("ProjectReference", @"..\dep1\dep1.proj");
            projectRootElement.AddItem("ProjectReference", @"..\dep2\dep2.proj");
            dep2.AddItem("ProjectReference", @"..\dep3\dep3.proj");
            dep3.AddItem("ProjectReference", @"..\dep1\dep1.proj");

            projectRootElement.Save();
            dep1.Save();
            dep2.Save();
            dep3.Save();

            new GetCopyToOutputDirectoryItemsGraphPredictor()
            .GetProjectPredictions(projectFile)
            .AssertNoPredictions();
        }
Beispiel #9
0
        public void WithCopy()
        {
            string             projectFile        = Path.Combine(_rootDir, @"src\project.csproj");
            ProjectRootElement projectRootElement = ProjectRootElement.Create(projectFile);

            projectRootElement.AddProperty(GetCopyToOutputDirectoryItemsGraphPredictor.OutDirPropertyName, @"bin\");

            const bool         shouldCopy = true;
            ProjectRootElement dep1       = CreateDependencyProject("dep1", shouldCopy);
            ProjectRootElement dep2       = CreateDependencyProject("dep2", shouldCopy);
            ProjectRootElement dep3       = CreateDependencyProject("dep3", shouldCopy);

            // The main project depends on 1 and 2; 2 depends on 3; 3 depends on 1. Note that this should *not* be transitive
            projectRootElement.AddItem("ProjectReference", @"..\dep1\dep1.proj");
            projectRootElement.AddItem("ProjectReference", @"..\dep2\dep2.proj");
            dep2.AddItem("ProjectReference", @"..\dep3\dep3.proj");
            dep3.AddItem("ProjectReference", @"..\dep1\dep1.proj");

            projectRootElement.Save();
            dep1.Save();
            dep2.Save();
            dep3.Save();

            var expectedInputFiles = new[]
            {
                new PredictedItem(@"dep1\dep1.xml", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep1\dep1.resx", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep1\dep1.cs", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep1\dep1.txt", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep1\dep1.xaml", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep2\dep2.xml", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep2\dep2.resx", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep2\dep2.cs", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep2\dep2.txt", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"dep2\dep2.xaml", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
            };

            var expectedOutputFiles = new[]
            {
                new PredictedItem(@"src\bin\dep1.xml", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep1.resx", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep1.cs", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep1.txt", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep1.xaml", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep2.xml", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep2.resx", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep2.cs", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep2.txt", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
                new PredictedItem(@"src\bin\dep2.xaml", nameof(GetCopyToOutputDirectoryItemsGraphPredictor)),
            };

            new GetCopyToOutputDirectoryItemsGraphPredictor()
            .GetProjectPredictions(projectFile)
            .AssertPredictions(
                _rootDir,
                expectedInputFiles,
                null,
                expectedOutputFiles,
                null);
        }
Beispiel #10
0
        private static Project CreateTestProject(string outDir, string outputPath)
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create();

            if (outDir != null)
            {
                projectRootElement.AddProperty(OutDirOrOutputPathIsOutputDir.OutDirMacro, outDir);
            }

            if (outputPath != null)
            {
                projectRootElement.AddProperty(OutDirOrOutputPathIsOutputDir.OutputPathMacro, outputPath);
            }

            return(TestHelpers.CreateProjectFromRootElement(projectRootElement));
        }
Beispiel #11
0
        public void FindItemsForClickOnceWithBaseApplicationManifests()
        {
            ProjectRootElement projectRootElement = CreateProjectRootElement();

            // This is generally set by the toolset for certain output types
            projectRootElement.AddProperty(ManifestsPredictor.GenerateClickOnceManifestsPropertyName, "true");

            projectRootElement.AddItem(ManifestsPredictor.BaseApplicationManifestItemName, @"Properties\app.manifest");

            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            var expectedInputFiles = new[]
            {
                new PredictedItem(@"Properties\app.manifest", nameof(ManifestsPredictor)),
            };
            var expectedOutputFiles = new[]
            {
                new PredictedItem(@"obj\Release\MyApplication.exe.manifest", nameof(ManifestsPredictor)),
                new PredictedItem(@"bin\Release\MyApplication.exe.manifest", nameof(ManifestsPredictor)),
                new PredictedItem(@"obj\Release\MyApplication.application", nameof(ManifestsPredictor)),
                new PredictedItem(@"bin\Release\MyApplication.application", nameof(ManifestsPredictor)),
            };

            new ManifestsPredictor()
            .GetProjectPredictions(projectInstance)
            .AssertPredictions(
                projectInstance,
                expectedInputFiles.MakeAbsolute(_rootDir),
                null,
                expectedOutputFiles.MakeAbsolute(_rootDir),
                null);
        }
Beispiel #12
0
        public void Roslyn_Settings_TempFolderIsNotSet()
        {
            // Arrange
            BuildLogger logger = new BuildLogger();

            WellKnownProjectProperties properties = new WellKnownProjectProperties();

            properties.ErrorLog = "pre-existing.log";
            properties.ResolvedCodeAnalysisRuleset = "pre-existing.ruleset";
            properties.WarningsAsErrors            = "CS101";
            properties.TreatWarningsAsErrors       = "true";

            ProjectRootElement projectRoot = CreateValidProjectSetup(properties);

            projectRoot.AddProperty(TargetProperties.SonarQubeTempPath, string.Empty); // needs to overwritten once the valid project has been created

            // Act
            BuildResult result = BuildUtilities.BuildTargets(projectRoot, logger, TargetConstants.OverrideRoslynAnalysisTarget);

            // Assert
            logger.AssertTargetNotExecuted(TargetConstants.OverrideRoslynAnalysisTarget);
            logger.AssertTargetNotExecuted(TargetConstants.SetRoslynAnalysisPropertiesTarget);

            // Existing properties should not be changed
            AssertExpectedErrorLog(result, "pre-existing.log");
            AssertExpectedResolvedRuleset(result, "pre-existing.ruleset");
            BuildAssertions.AssertExpectedItemGroupCount(result, TargetProperties.AnalyzerItemType, 0);
            BuildAssertions.AssertExpectedItemGroupCount(result, TargetProperties.AdditionalFilesItemType, 0);

            BuildAssertions.AssertExpectedPropertyValue(result.ProjectStateAfterBuild, TargetProperties.TreatWarningsAsErrors, "true");
            BuildAssertions.AssertExpectedPropertyValue(result.ProjectStateAfterBuild, TargetProperties.WarningsAsErrors, "CS101");
        }
        public void OutputFileNamesWithoutVersion()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create();
            projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true");
            projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage");
            projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3");
            projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputPathPropertyName, "bin");
            projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj");
            projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg");
            projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputFileNamesWithoutVersionPropertyName, "true");
            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            var expectedOutputFiles = new[]
            {
                new PredictedItem(@"obj\SomePackage.nuspec", nameof(GeneratePackageOnBuildPredictor)),
                new PredictedItem(@"bin\SomePackage.nupkg", nameof(GeneratePackageOnBuildPredictor)),
            };
            new GeneratePackageOnBuildPredictor()
                .GetProjectPredictions(projectInstance)
                .AssertPredictions(
                    projectInstance,
                    null,
                    null,
                    expectedOutputFiles,
                    null);
        }
Beispiel #14
0
        /// <summary>
        /// Create a build file that build the projects in the specified order
        /// </summary>
        /// <param name="buildFilePath"></param>
        /// <param name="projectList"></param>
        /// <returns></returns>
        public static bool CreateBuildFile(string buildFilePath, List <string> projectList)
        {
            ProjectRootElement proj = ProjectRootElement.Create(buildFilePath);

            proj.AddProperty("Configuration", "Release");
            proj.AddProperty("Platform", "x86");

            ProjectTargetElement trgt = proj.AddTarget("Build");

            foreach (string p in projectList)
            {
                ProjectTaskElement task = trgt.AddTask("MSBuild");
                task.SetParameter("Projects", p);
            }

            proj.Save();
            return(true);
        }
Beispiel #15
0
        /// <summary>
        /// Creates and returns a minimal C# or VB project file that can be built.
        /// The project imports the C#/VB targets and any other optional targets that are specified.
        /// The project is NOT saved.
        /// </summary>
        /// <param name="preImportProperties">Any properties that need to be set before the C# targets are imported. Can be null.</param>
        /// <param name="importsBeforeTargets">Any targets that should be imported before the C# targets are imported. Optional.</param>
        public static ProjectRootElement CreateMinimalBuildableProject(IDictionary <string, string> preImportProperties, bool isVBProject, params string[] importsBeforeTargets)
        {
            ProjectRootElement root = ProjectRootElement.Create();

            foreach (string importTarget in importsBeforeTargets)
            {
                Assert.IsTrue(File.Exists(importTarget), "Test error: the specified target file does not exist. Path: {0}", importTarget);
                root.AddImport(importTarget);
            }

            if (preImportProperties != null)
            {
                foreach (KeyValuePair <string, string> kvp in preImportProperties)
                {
                    root.AddProperty(kvp.Key, kvp.Value);
                }
            }

            // Ensure the output path is set
            if (preImportProperties == null || !preImportProperties.ContainsKey("OutputPath"))
            {
                root.AddProperty("OutputPath", @"bin\");
            }

            // Ensure the language is set
            if (preImportProperties == null || !preImportProperties.ContainsKey("Language"))
            {
                root.AddProperty("Language", isVBProject ? "VB" : "C#");
            }

            // Import the standard Microsoft targets
            if (isVBProject)
            {
                root.AddImport("$(MSBuildToolsPath)\\Microsoft.VisualBasic.targets");
            }
            else
            {
                root.AddImport("$(MSBuildToolsPath)\\Microsoft.CSharp.targets");
            }
            root.AddProperty("OutputType", "library"); // build a library so we don't need a Main method

            return(root);
        }
        public void SigningDisabled()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create("project.csproj");

            projectRootElement.AddProperty(AssemblyOriginatorKeyFilePredictor.AssemblyOriginatorKeyFilePropertyName, "StrongNaming.snk");
            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            new AssemblyOriginatorKeyFilePredictor()
            .GetProjectPredictions(projectInstance)
            .AssertNoPredictions();
        }
Beispiel #17
0
        public void SetCondition()
        {
            ProjectRootElement     project  = ProjectRootElement.Create();
            ProjectPropertyElement property = project.AddProperty("p", "v1");

            Helpers.ClearDirtyFlag(property.ContainingProject);

            property.Condition = "c";
            Assert.Equal("c", property.Condition);
            Assert.Equal(true, property.ContainingProject.HasUnsavedChanges);
        }
Beispiel #18
0
        public void SetSameValue()
        {
            ProjectRootElement     project  = ProjectRootElement.Create();
            ProjectPropertyElement property = project.AddProperty("p", "v1");

            Helpers.ClearDirtyFlag(property.ContainingProject);

            property.Value = "v1";
            Assert.Equal("v1", property.Value);
            Assert.Equal(false, property.ContainingProject.HasUnsavedChanges);
        }
        public void NoKeyFile()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create("project.csproj");

            projectRootElement.AddProperty(AssemblyOriginatorKeyFilePredictor.SignAssemblyPropertyName, "true");
            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            new AssemblyOriginatorKeyFilePredictor()
            .GetProjectPredictions(projectInstance)
            .AssertNoPredictions();
        }
        private static ProjectInstance CreateTestProjectInstance(string intermediateOutDir)
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create();

            if (intermediateOutDir != null)
            {
                projectRootElement.AddProperty(IntermediateOutputPathPredictor.IntermediateOutputPathMacro, intermediateOutDir);
            }

            return(TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement));
        }
        public void FindItems()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create("project.csproj");

            projectRootElement.AddProperty(AssemblyOriginatorKeyFilePredictor.SignAssemblyPropertyName, "true");
            projectRootElement.AddProperty(AssemblyOriginatorKeyFilePredictor.AssemblyOriginatorKeyFilePropertyName, "StrongNaming.snk");
            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            var expectedInputFiles = new[]
            {
                new PredictedItem("StrongNaming.snk", nameof(AssemblyOriginatorKeyFilePredictor)),
            };

            new AssemblyOriginatorKeyFilePredictor()
            .GetProjectPredictions(projectInstance)
            .AssertPredictions(
                projectInstance,
                expectedInputFiles,
                null,
                null,
                null);
        }
Beispiel #22
0
        public static void SetProperty(this ProjectRootElement prel, string name, string value)
        {
            var existing = prel.PropertyGroups.SelectMany(g => g.Properties).FirstOrDefault(p => p.Name == name);

            if (existing != null)
            {
                existing.Value = value;
            }
            else
            {
                prel.AddProperty(name, value);
            }
        }
        public void FindItemsWithAddinPaths()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create(Path.Combine(_rootDir, @"project.csproj"));

            projectRootElement.AddProperty(StyleCopPredictor.StyleCopEnabledPropertyName, "true");
            projectRootElement.AddProperty(StyleCopPredictor.StyleCopOutputFilePropertyName, @"bin\x64\StyleCopViolations.xml");
            projectRootElement.AddTarget(StyleCopPredictor.StyleCopTargetName);

            projectRootElement.AddItem(StyleCopPredictor.StyleCopAdditionalAddinPathsItemName, @"addinPaths\1");
            projectRootElement.AddItem(StyleCopPredictor.StyleCopAdditionalAddinPathsItemName, @"addinPaths\2");
            projectRootElement.AddItem(StyleCopPredictor.StyleCopAdditionalAddinPathsItemName, @"addinPaths\3");
            projectRootElement.AddItem(StyleCopPredictor.StyleCopAdditionalAddinPathsItemName, @"addinPaths\doesNotExist"); // Will be excluded

            Directory.CreateDirectory(Path.Combine(_rootDir, @"addinPaths\1"));
            Directory.CreateDirectory(Path.Combine(_rootDir, @"addinPaths\2"));
            Directory.CreateDirectory(Path.Combine(_rootDir, @"addinPaths\3"));

            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            var expectedInputDirectories = new[]
            {
                new PredictedItem(@"addinPaths\1", nameof(StyleCopPredictor)),
                new PredictedItem(@"addinPaths\2", nameof(StyleCopPredictor)),
                new PredictedItem(@"addinPaths\3", nameof(StyleCopPredictor)),
            };
            var expectedOutputFiles = new[]
            {
                new PredictedItem(@"bin\x64\StyleCopViolations.xml", nameof(StyleCopPredictor)),
            };

            new StyleCopPredictor()
            .GetProjectPredictions(projectInstance)
            .AssertPredictions(
                projectInstance,
                null,
                expectedInputDirectories.MakeAbsolute(_rootDir),
                expectedOutputFiles.MakeAbsolute(_rootDir),
                null);
        }
Beispiel #24
0
        public void ImportGroup()
        {
            ProjectRootElement xml1 = ProjectRootElement.Create("p1");

            xml1.AddProperty("p", "v1");
            xml1.AddImportGroup().AddImport("p2");
            ProjectRootElement xml2 = ProjectRootElement.Create("p2");

            xml2.AddProperty("p", "v2");

            Project project = new Project(xml1);

            StringWriter writer = new StringWriter();

            project.SaveLogicalProject(writer);

            string expected = ObjectModelHelpers.CleanupFileContents(
                @"<?xml version=""1.0"" encoding=""utf-16""?>
<!--
============================================================================================================================================
" + Directory.GetCurrentDirectory() + @"\p1
============================================================================================================================================
-->
<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace"">
  <PropertyGroup>
    <p>v1</p>
  </PropertyGroup>
  <!--<ImportGroup>-->
  <!--
============================================================================================================================================
  <Import Project=""p2"">

" + Directory.GetCurrentDirectory() + @"\p2
============================================================================================================================================
-->
  <PropertyGroup>
    <p>v2</p>
  </PropertyGroup>
  <!--
============================================================================================================================================
  </Import>

" + Directory.GetCurrentDirectory() + @"\p1
============================================================================================================================================
-->
  <!--</ImportGroup>-->
</Project>");

            Helpers.VerifyAssertLineByLine(expected, writer.ToString());
        }
        public void SkipOtherProjectTypes()
        {
            string             projectFile        = Path.Combine(_rootDir, @"src\project.csproj");
            ProjectRootElement projectRootElement = ProjectRootElement.Create(projectFile);

            projectRootElement.AddProperty(ServiceFabricPackageRootFilesGraphPredictor.ServicePackageRootFolderPropertyName, "PackageRoot");
            projectRootElement.AddItem("ProjectReference", @"..\dep1\dep1.csproj");
            projectRootElement.AddItem("ProjectReference", @"..\dep2\dep2.csproj");
            projectRootElement.AddItem("ProjectReference", @"..\dep3\dep3.csproj");
            projectRootElement.AddItem("ProjectReference", @"..\dep4\dep4.csproj");

            // Content package file
            string             dependency1File        = Path.Combine(_rootDir, @"dep1\dep1.csproj");
            ProjectRootElement dependency1RootElement = ProjectRootElement.Create(dependency1File);

            dependency1RootElement.AddItem(ContentItemsPredictor.ContentItemName, @"PackageRoot\Config\Settings.xml");
            Directory.CreateDirectory(Path.Combine(_rootDir, @"dep1\PackageRoot"));

            // None package file
            string             dependency2File        = Path.Combine(_rootDir, @"dep2\dep2.csproj");
            ProjectRootElement dependency2RootElement = ProjectRootElement.Create(dependency2File);

            dependency2RootElement.AddItem(NoneItemsPredictor.NoneItemName, @"PackageRoot\Config\Settings.xml");
            Directory.CreateDirectory(Path.Combine(_rootDir, @"dep2\PackageRoot"));

            // Linked package file
            string             dependency3File        = Path.Combine(_rootDir, @"dep3\dep3.csproj");
            ProjectRootElement dependency3RootElement = ProjectRootElement.Create(dependency3File);

            dependency3RootElement.AddItem(ContentItemsPredictor.ContentItemName, @"..\dep3_linked\PackageRoot\Config\Settings.xml")
            .AddMetadata("Link", @"PackageRoot\Config\Settings.xml");
            Directory.CreateDirectory(Path.Combine(_rootDir, @"dep3\PackageRoot"));

            // Package file on disk
            string             dependency4File        = Path.Combine(_rootDir, @"dep4\dep4.csproj");
            ProjectRootElement dependency4RootElement = ProjectRootElement.Create(dependency4File);

            Directory.CreateDirectory(Path.Combine(_rootDir, @"dep4\PackageRoot\Config"));
            File.WriteAllText(Path.Combine(_rootDir, @"dep4\PackageRoot\Config\Settings.xml"), "dummy");

            projectRootElement.Save();
            dependency1RootElement.Save();
            dependency2RootElement.Save();
            dependency3RootElement.Save();
            dependency4RootElement.Save();

            new ServiceFabricPackageRootFilesGraphPredictor()
            .GetProjectPredictions(projectFile)
            .AssertNoPredictions();
        }
        protected static void AddOrSetProperty(ProjectRootElement project, string name, string value)
        {
            bool anySet = false;

            foreach (var prop in project.Properties.Where(p => p.Name == name))
            {
                prop.Value = value;
                anySet     = true;
            }

            if (!anySet)
            {
                project.AddProperty(name, value);
            }
        }
        public void FindItemsWithNoSettingsFile()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create(Path.Combine(_rootDir, @"project.csproj"));

            projectRootElement.AddProperty(StyleCopPredictor.StyleCopEnabledPropertyName, "true");
            projectRootElement.AddProperty(StyleCopPredictor.StyleCopOutputFilePropertyName, @"bin\x64\StyleCopViolations.xml");
            projectRootElement.AddTarget(StyleCopPredictor.StyleCopTargetName);

            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            var expectedOutputFiles = new[]
            {
                new PredictedItem(@"bin\x64\StyleCopViolations.xml", nameof(StyleCopPredictor)),
            };

            new StyleCopPredictor()
            .GetProjectPredictions(projectInstance)
            .AssertPredictions(
                projectInstance,
                null,
                null,
                expectedOutputFiles.MakeAbsolute(_rootDir),
                null);
        }
        public void SetMetadata()
        {
            ProjectRootElement xml = ProjectRootElement.Create();

            xml.AddProperty("p", "v");
            xml.AddItemDefinitionGroup().AddItemDefinition("i").AddMetadata("m", "m0");
            xml.AddItem("i", "i1");

            Project project = new Project(xml);

            ProjectMetadata metadatum = project.ItemDefinitions["i"].GetMetadata("m");

            metadatum.UnevaluatedValue = "$(p)";

            Assert.Equal("v", Helpers.GetFirst(project.GetItems("i")).GetMetadataValue("m"));
        }
        private ProjectPropertyElement MergeProperties(ProjectPropertyElement baseProperty, ProjectPropertyElement addedProperty)
        {
            var mergedProperty = _projectElementGenerator.AddProperty("___TEMP___", "___TEMP___");

            mergedProperty.CopyFrom(addedProperty);

            var basePropertyValues  = baseProperty.Value.Split(';');
            var addedPropertyValues = addedProperty.Value.Split(';');

            var intersectedValues = basePropertyValues.Intersect(addedPropertyValues, StringComparer.Ordinal);

            intersectedValues = RemoveValuesWithVariable(intersectedValues);

            mergedProperty.Value = string.Join(";", addedPropertyValues.Except(intersectedValues));

            return(mergedProperty);
        }
Beispiel #30
0
        public void NoCopy()
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create();

            projectRootElement.AddProperty(ContentItemsPredictor.OutDirPropertyName, @"bin\");
            projectRootElement.AddItem(ContentItemsPredictor.ContentItemName, "Foo.xml");

            ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement);

            new ContentItemsPredictor()
            .GetProjectPredictions(projectInstance)
            .AssertPredictions(
                projectInstance,
                new[] { new PredictedItem("Foo.xml", nameof(ContentItemsPredictor)) },
                null,
                null,
                null);
        }