public void Roslyn_Settings_ValidSetup() { // Arrange BuildLogger logger = new BuildLogger(); // Set the config directory so the targets know where to look for the analysis config file string confDir = TestUtils.CreateTestSpecificFolder(this.TestContext, "config"); // Create a valid config file containing analyzer settings string[] expectedAssemblies = new string[] { "c:\\data\\config.analyzer1.dll", "c:\\config2.dll" }; string[] analyzerAdditionalFiles = new string[] { "c:\\config.1.txt", "c:\\config.2.txt" }; AnalysisConfig config = new AnalysisConfig(); AnalyzerSettings analyzerSettings = new AnalyzerSettings(); analyzerSettings.Language = "cs"; analyzerSettings.RuleSetFilePath = "d:\\my.ruleset"; analyzerSettings.AnalyzerAssemblyPaths = expectedAssemblies.ToList(); analyzerSettings.AdditionalFilePaths = analyzerAdditionalFiles.ToList(); config.AnalyzersSettings = new List <AnalyzerSettings>(); config.AnalyzersSettings.Add(analyzerSettings); string configFilePath = Path.Combine(confDir, FileConstants.ConfigFileName); config.Save(configFilePath); // Create the project WellKnownProjectProperties properties = new WellKnownProjectProperties(); properties.SonarQubeConfigPath = confDir; properties.ResolvedCodeAnalysisRuleset = "c:\\should.be.overridden.ruleset"; ProjectRootElement projectRoot = CreateValidProjectSetup(properties); projectRoot.AddItem(TargetProperties.AnalyzerItemType, "should.be.removed.analyzer1.dll"); projectRoot.AddItem(TargetProperties.AnalyzerItemType, "c:\\should.be.removed.analyzer2.dll"); string[] notRemovedAdditionalFiles = new string[] { "should.not.be.removed.additional1.txt", "should.not.be.removed.additional2.txt" }; foreach (var notRemovedAdditionalFile in notRemovedAdditionalFiles) { projectRoot.AddItem(TargetProperties.AdditionalFilesItemType, notRemovedAdditionalFile); } // Act BuildResult result = BuildUtilities.BuildTargets(projectRoot, logger, TargetConstants.OverrideRoslynAnalysisTarget); string projectSpecificConfFilePath = result.ProjectStateAfterBuild.GetPropertyValue(TargetProperties.ProjectConfFilePath); string[] expectedRoslynAdditionalFiles = new string[] { projectSpecificConfFilePath } .Concat(analyzerAdditionalFiles) .Concat(notRemovedAdditionalFiles) .ToArray(); // Assert logger.AssertTargetExecuted(TargetConstants.OverrideRoslynAnalysisTarget); logger.AssertTargetExecuted(TargetConstants.SetRoslynAnalysisPropertiesTarget); BuildAssertions.AssertTargetSucceeded(result, TargetConstants.OverrideRoslynAnalysisTarget); // Check the error log and ruleset properties are set AssertErrorLogIsSetBySonarQubeTargets(result); AssertExpectedResolvedRuleset(result, "d:\\my.ruleset"); AssertExpectedItemValuesExists(result, TargetProperties.AdditionalFilesItemType, expectedRoslynAdditionalFiles); AssertExpectedItemValuesExists(result, TargetProperties.AnalyzerItemType, expectedAssemblies); BuildAssertions.AssertWarningsAreNotTreatedAsErrorsNorIgnored(result); }
public void E2E_FxCop_AllConditionsMet_VB() { // Arrange string rootInputFolder = TestUtils.CreateTestSpecificFolder(this.TestContext, "Inputs"); string rootOutputFolder = TestUtils.CreateTestSpecificFolder(this.TestContext, "Outputs"); string fxCopLogFile = Path.Combine(rootInputFolder, "FxCopResults.xml"); WellKnownProjectProperties preImportProperties = new WellKnownProjectProperties(); preImportProperties.SonarQubeTempPath = rootOutputFolder; // FIXME preImportProperties.SonarQubeOutputPath = rootOutputFolder; preImportProperties.RunCodeAnalysis = "false"; preImportProperties.CodeAnalysisLogFile = fxCopLogFile; preImportProperties.CodeAnalysisRuleset = "specifiedInProject.ruleset"; preImportProperties.TreatWarningsAsErrors = "true"; // we expect these values to be overridden preImportProperties.WarningsAsErrors = "VB0111;VB0222"; preImportProperties.WarningLevel = "0"; preImportProperties[TargetProperties.SonarQubeConfigPath] = rootInputFolder; CreateValidFxCopRuleset(rootInputFolder, string.Format(TargetProperties.SonarQubeRulesetFormat, "vbnet")); ProjectRootElement projectRoot = BuildUtilities.CreateValidProjectRoot(this.TestContext, rootInputFolder, preImportProperties, isVBProject: true); string itemPath = TestUtils.CreateTextFile(rootInputFolder, "my.vb", @"Public Class Class1 Public Sub DoStuff() End Sub End Class"); projectRoot.AddItem(TargetProperties.ItemType_Compile, itemPath); projectRoot.Save(); BuildLogger logger = new BuildLogger(); // Act BuildResult result = BuildUtilities.BuildTargets(projectRoot, logger); // Assert BuildAssertions.AssertTargetSucceeded(result, TargetConstants.DefaultBuildTarget); logger.AssertExpectedTargetOrdering( TargetConstants.DetectFxCopRulesetTarget, TargetConstants.CategoriseProjectTarget, TargetConstants.OverrideFxCopSettingsTarget, TargetConstants.FxCopTarget, TargetConstants.SetFxCopResultsTarget, TargetConstants.DefaultBuildTarget, TargetConstants.CalculateFilesToAnalyzeTarget, TargetConstants.WriteProjectDataTarget); AssertAllFxCopTargetsExecuted(logger); Assert.IsTrue(File.Exists(fxCopLogFile), "FxCop log file should have been produced"); BuildAssertions.AssertWarningsAreNotTreatedAsErrorsNorIgnored(result); ProjectInfo projectInfo = ProjectInfoAssertions.AssertProjectInfoExists(rootOutputFolder, projectRoot.FullPath); ProjectInfoAssertions.AssertAnalysisResultExists(projectInfo, AnalysisType.FxCop.ToString(), fxCopLogFile); }