public void E2E_BareProject_FilesToAnalyse() { // Checks the integration targets handle non-VB/C# project types // that don't import the standard targets or set the expected properties // The project info should be created as normal and the correct files to analyze detected. // Arrange var rootInputFolder = TestUtils.CreateTestSpecificFolder(TestContext, "Inputs"); var rootOutputFolder = TestUtils.CreateTestSpecificFolder(TestContext, "Outputs"); var sqTargetFile = TestUtils.EnsureAnalysisTargetsExists(TestContext); var projectFilePath = Path.Combine(rootInputFolder, "project.txt"); var projectGuid = Guid.NewGuid(); var codeFile = CreateEmptyFile(rootInputFolder, "code.cpp"); var contentFile = CreateEmptyFile(rootInputFolder, "code.js"); var unanalysedFile = CreateEmptyFile(rootInputFolder, "text.shouldnotbeanalysed"); var excludedFile = CreateEmptyFile(rootInputFolder, "excluded.cpp"); var projectXml = @"<?xml version='1.0' encoding='utf-8'?> <Project ToolsVersion='12.0' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'> <PropertyGroup> <ProjectGuid>{0}</ProjectGuid> <SonarQubeTempPath>{1}</SonarQubeTempPath> <SonarQubeOutputPath>{1}</SonarQubeOutputPath> <SonarQubeBuildTasksAssemblyFile>{2}</SonarQubeBuildTasksAssemblyFile> </PropertyGroup> <ItemGroup> <ClCompile Include='{4}' /> <Content Include='{5}' /> <ShouldBeIgnored Include='{6}' /> <ClCompile Include='{7}'> <SonarQubeExclude>true</SonarQubeExclude> </ClCompile> </ItemGroup> <Import Project='{3}' /> <Target Name='Build'> <Message Importance='high' Text='In dummy build target' /> </Target> </Project> "; var projectRoot = BuildUtilities.CreateProjectFromTemplate(projectFilePath, TestContext, projectXml, projectGuid.ToString(), rootOutputFolder, typeof(WriteProjectInfoFile).Assembly.Location, sqTargetFile, codeFile, contentFile, unanalysedFile, excludedFile ); // Act var result = BuildRunner.BuildTargets(TestContext, projectRoot.FullPath, TargetConstants.DefaultBuildTarget); // Assert result.BuildSucceeded.Should().BeTrue(); result.AssertExpectedTargetOrdering( TargetConstants.DefaultBuildTarget, TargetConstants.CategoriseProjectTarget, TargetConstants.CalculateFilesToAnalyzeTarget, TargetConstants.WriteProjectDataTarget); // Check the content of the project info xml var projectInfo = ProjectInfoAssertions.AssertProjectInfoExists(rootOutputFolder, projectRoot.FullPath); projectInfo.ProjectGuid.Should().Be(projectGuid, "Unexpected project guid"); projectInfo.ProjectLanguage.Should().BeNull("Expecting the project language to be null"); projectInfo.IsExcluded.Should().BeFalse("Project should not be marked as excluded"); projectInfo.ProjectType.Should().Be(ProjectType.Product, "Project should be marked as a product project"); projectInfo.AnalysisResults.Should().HaveCount(1, "Unexpected number of analysis results created"); // Check the correct list of files to analyze were returned var filesToAnalyse = ProjectInfoAssertions.AssertAnalysisResultExists(projectInfo, AnalysisType.FilesToAnalyze.ToString()); var actualFilesToAnalyse = File.ReadAllLines(filesToAnalyse.Location); actualFilesToAnalyse.Should().BeEquivalentTo(new string[] { codeFile, contentFile }, "Unexpected list of files to analyze"); }
public void E2E_BareProject_CorrectlyCategorised() { // Checks that projects that don't include the standard managed targets are still // processed correctly e.g. can be excluded, marked as test projects etc // Arrange var rootInputFolder = TestUtils.CreateTestSpecificFolder(TestContext, "Inputs"); var rootOutputFolder = TestUtils.CreateTestSpecificFolder(TestContext, "Outputs"); var sqTargetFile = TestUtils.EnsureAnalysisTargetsExists(TestContext); var projectFilePath = Path.Combine(rootInputFolder, "project.txt"); var projectGuid = Guid.NewGuid(); var projectXml = @"<?xml version='1.0' encoding='utf-8'?> <Project ToolsVersion='12.0' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'> <PropertyGroup> <SonarQubeExclude>true</SonarQubeExclude> <Language>my.language</Language> <ProjectTypeGuids>{4}</ProjectTypeGuids> <ProjectGuid>{0}</ProjectGuid> <SonarQubeTempPath>{1}</SonarQubeTempPath> <SonarQubeOutputPath>{1}</SonarQubeOutputPath> <SonarQubeBuildTasksAssemblyFile>{2}</SonarQubeBuildTasksAssemblyFile> </PropertyGroup> <ItemGroup> <!-- no recognized content --> </ItemGroup> <Import Project='{3}' /> <Target Name='Build'> <Message Importance='high' Text='In dummy build target' /> </Target> </Project> "; var projectRoot = BuildUtilities.CreateProjectFromTemplate(projectFilePath, TestContext, projectXml, projectGuid.ToString(), rootOutputFolder, typeof(WriteProjectInfoFile).Assembly.Location, sqTargetFile, TargetConstants.MsTestProjectTypeGuid ); // Act var result = BuildRunner.BuildTargets(TestContext, projectRoot.FullPath, TargetConstants.DefaultBuildTarget); // Assert result.BuildSucceeded.Should().BeTrue(); result.AssertExpectedTargetOrdering( TargetConstants.DefaultBuildTarget, TargetConstants.CategoriseProjectTarget, TargetConstants.CalculateFilesToAnalyzeTarget, TargetConstants.WriteProjectDataTarget); // Check the project info var projectInfo = ProjectInfoAssertions.AssertProjectInfoExists(rootOutputFolder, projectRoot.FullPath); projectInfo.IsExcluded.Should().BeTrue("Expecting the project to be marked as excluded"); projectInfo.ProjectLanguage.Should().Be("my.language", "Unexpected project language"); projectInfo.ProjectType.Should().Be(ProjectType.Test, "Project should be marked as a test project"); projectInfo.AnalysisResults.Should().BeEmpty("Unexpected number of analysis results created"); }