public void RoslynConfig_NoAssemblies()
        {
            // Arrange
            var rootFolder = CreateTestFolders();
            var logger     = new TestLogger();
            var rules      = createRules();
            var language   = RoslynAnalyzerProvider.CSharpLanguage;

            // missing properties to get plugin related properties
            var sonarProperties = new ListPropertiesProvider(new Dictionary <string, string>
            {
                { "wintellect.analyzerId", "Wintellect.Analyzers" },
                { "wintellect.ruleNamespace", "Wintellect.Analyzers" },
                { "sonaranalyzer-cs.analyzerId", "SonarAnalyzer.CSharp" },
                { "sonaranalyzer-cs.ruleNamespace", "SonarAnalyzer.CSharp" }
            });

            var mockInstaller = new MockAnalyzerInstaller
            {
                AnalyzerPluginsToReturn = new List <AnalyzerPlugin> {
                    CreateAnalyzerPlugin("c:\\assembly1.dll", "d:\\foo\\assembly2.dll")
                }
            };
            var settings = CreateSettings(rootFolder);

            var testSubject = new RoslynAnalyzerProvider(mockInstaller, logger);

            // Act
            var actualSettings = testSubject.SetupAnalyzer(settings, sonarProperties, rules, language);

            // Assert
            CheckSettingsInvariants(actualSettings);
            logger.AssertWarningsLogged(0);
            logger.AssertErrorsLogged(0);

            CheckRuleset(actualSettings.RulesetPath, rootFolder, language);
            CheckTestRuleset(actualSettings.DeactivatedRulesetPath, rootFolder, language);

            actualSettings.AnalyzerPlugins.Should().BeEmpty();
            var plugins = new List <string>();

            mockInstaller.AssertExpectedPluginsRequested(plugins);
        }
        public void RoslynConfig_ValidProfile()
        {
            // Arrange
            var rootFolder    = CreateTestFolders();
            var logger        = new TestLogger();
            var rules         = createRules();
            var language      = RoslynAnalyzerProvider.CSharpLanguage;
            var mockInstaller = new MockAnalyzerInstaller
            {
                AnalyzerPluginsToReturn = new List <AnalyzerPlugin>
                {
                    CreateAnalyzerPlugin("c:\\assembly1.dll"),
                    CreateAnalyzerPlugin("d:\\foo\\assembly2.dll")
                }
            };
            var settings = CreateSettings(rootFolder);

            var sonarProperties = new ListPropertiesProvider(new Dictionary <string, string>
            {
                // for ruleset
                { "wintellect.analyzerId", "Wintellect.Analyzers" },
                { "wintellect.ruleNamespace", "Wintellect.Analyzers" },

                // to fetch assemblies
                { "wintellect.pluginKey", "wintellect" },
                { "wintellect.pluginVersion", "1.13.0" },
                { "wintellect.staticResourceName", "SonarAnalyzer.zip" },

                { "sonaranalyzer-cs.analyzerId", "SonarAnalyzer.CSharp" },
                { "sonaranalyzer-cs.ruleNamespace", "SonarAnalyzer.CSharp" },
                { "sonaranalyzer-cs.pluginKey", "csharp" },
                { "sonaranalyzer-cs.staticResourceName", "SonarAnalyzer.zip" },
                { "sonaranalyzer-cs.nuget.packageId", "SonarAnalyzer.CSharp" },
                { "sonaranalyzer-cs.pluginVersion", "1.13.0" },
                { "sonaranalyzer-cs.nuget.packageVersion", "1.13.0" },

                // Extra properties - those started sonar.cs should be included, the others ignored
                { "sonar.vb.testPropertyPattern", "foo" },
                { "sonar.cs.testPropertyPattern", "foo" },
                { "sonar.sources", "**/*.*" },
                { "sonar.cs.foo", "bar" }
            });
            var expectedSonarLintXml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<AnalysisInput>
  <Settings>
    <Setting>
      <Key>sonar.cs.testPropertyPattern</Key>
      <Value>foo</Value>
    </Setting>
    <Setting>
      <Key>sonar.cs.foo</Key>
      <Value>bar</Value>
    </Setting>
  </Settings>
  <Rules>
    <Rule>
      <Key>S1116</Key>
      <Parameters>
        <Parameter>
          <Key>key</Key>
          <Value>value</Value>
        </Parameter>
      </Parameters>
    </Rule>
    <Rule>
      <Key>S1125</Key>
    </Rule>
  </Rules>
  <Files>
  </Files>
</AnalysisInput>
";
            var testSubject          = new RoslynAnalyzerProvider(mockInstaller, logger);

            // Act
            var actualSettings = testSubject.SetupAnalyzer(settings, sonarProperties, rules, language);

            // Assert
            CheckSettingsInvariants(actualSettings);
            logger.AssertWarningsLogged(0);
            logger.AssertErrorsLogged(0);

            CheckRuleset(actualSettings.RulesetPath, rootFolder, language);
            CheckTestRuleset(actualSettings.DeactivatedRulesetPath, rootFolder, language);

            // Currently, only SonarLint.xml is written
            var filePaths = actualSettings.AdditionalFilePaths;

            filePaths.Should().ContainSingle();
            CheckExpectedAdditionalFileExists("SonarLint.xml", expectedSonarLintXml, actualSettings);

            CheckExpectedAssemblies(actualSettings, "c:\\assembly1.dll", "d:\\foo\\assembly2.dll");
            var plugins = new List <string>
            {
                "wintellect",
                "csharp"
            };

            mockInstaller.AssertExpectedPluginsRequested(plugins);
        }