private void CheckMergedRulesetFile(GetAnalyzerSettings executedTask, string originalRulesetFullPath)
        {
            var expectedMergedRulesetFilePath = RuleSetAssertions.CheckMergedRulesetFile(executedTask.ProjectSpecificConfigDirectory, originalRulesetFullPath);

            TestContext.AddResultFile(expectedMergedRulesetFilePath);
            executedTask.RuleSetFilePath.Should().Be(expectedMergedRulesetFilePath);
        }
        public void Roslyn_Settings_ValidSetup_NonLegacyServer_MergeSettings()
        {
            // Arrange

            var dir = TestUtils.CreateTestSpecificFolder(TestContext);
            var dummyQpRulesetPath = TestUtils.CreateValidEmptyRuleset(dir, "dummyQp");

            // Create a valid config containing analyzer settings
            var config = new AnalysisConfig
            {
                SonarQubeVersion = "7.5", // non-legacy version
                ServerSettings   = new AnalysisProperties
                {
                    new Property {
                        Id = "sonar.cs.roslyn.ignoreIssues", Value = "false"
                    }
                },
                AnalyzersSettings = new List <AnalyzerSettings>
                {
                    new AnalyzerSettings
                    {
                        Language        = "cs",
                        RuleSetFilePath = dummyQpRulesetPath,
                        AnalyzerPlugins = new List <AnalyzerPlugin>
                        {
                            CreateAnalyzerPlugin("c:\\data\\new\\analyzer1.dll", "c:\\new.analyzer2.dll")
                        },
                        AdditionalFilePaths = new List <string> {
                            "c:\\config\\duplicate.1.txt", "c:\\duplicate.2.txt"
                        }
                    }
                }
            };

            var testSpecificProjectXml = @"
  <PropertyGroup>
    <ResolvedCodeAnalysisRuleSet>c:\original.ruleset</ResolvedCodeAnalysisRuleSet>
    <Language>C#</Language>
  </PropertyGroup>

  <ItemGroup>
    <!-- all analyzers specified in the project file should be preserved -->
    <Analyzer Include='c:\original\should.be.removed\analyzer1.dll' />
    <Analyzer Include='original\should.be.preserved\analyzer3.dll' />
  </ItemGroup>
  <ItemGroup>
    <!-- These additional files don't match ones in the config and should be preserved -->
    <AdditionalFiles Include='should.not.be.removed.additional1.txt' />
    <AdditionalFiles Include='should.not.be.removed.additional2.txt' />

    <!-- This additional file matches one in the config and should be replaced -->
    <AdditionalFiles Include='d:/should.be.removed/DUPLICATE.1.TXT' />
    <AdditionalFiles Include='d:\should.be.removed\duplicate.2.TXT' />

  </ItemGroup>
";
            var projectFilePath        = CreateProjectFile(config, testSpecificProjectXml);

            // Act
            var result = BuildRunner.BuildTargets(TestContext, projectFilePath, TargetConstants.OverrideRoslynAnalysisTarget);

            // Assert
            result.AssertTargetExecuted(TargetConstants.CreateProjectSpecificDirs);
            result.AssertTargetExecuted(TargetConstants.OverrideRoslynAnalysisTarget);
            result.AssertTargetExecuted(TargetConstants.SetRoslynAnalysisPropertiesTarget);
            result.BuildSucceeded.Should().BeTrue();

            // Check the error log and ruleset properties are set
            AssertErrorLogIsSetBySonarQubeTargets(result);

            var actualProjectSpecificConfFolder = result.GetCapturedPropertyValue(TargetProperties.ProjectSpecificConfDir);

            Directory.Exists(actualProjectSpecificConfFolder).Should().BeTrue();

            var expectedMergedRuleSetFilePath = Path.Combine(actualProjectSpecificConfFolder, "merged.ruleset");

            AssertExpectedResolvedRuleset(result, expectedMergedRuleSetFilePath);
            RuleSetAssertions.CheckMergedRulesetFile(actualProjectSpecificConfFolder,
                                                     @"c:\original.ruleset");

            AssertExpectedAdditionalFiles(result,
                                          result.GetCapturedPropertyValue(TargetProperties.ProjectConfFilePath),
                                          "should.not.be.removed.additional1.txt",
                                          "should.not.be.removed.additional2.txt",
                                          "c:\\config\\duplicate.1.txt",
                                          "c:\\duplicate.2.txt");

            AssertExpectedAnalyzers(result,
                                    "c:\\data\\new\\analyzer1.dll",
                                    "c:\\new.analyzer2.dll",
                                    "original\\should.be.preserved\\analyzer3.dll");

            AssertWarningsAreNotTreatedAsErrorsNorIgnored(result);
        }