static void Main(string[] args)
        {
            var file = new RulesetFile();

            var sources = typeof(Program)
                          .Assembly
                          .GetTypes()
                          .Where(t => typeof(RuleSource).IsAssignableFrom(t))
                          .Where(t => !t.IsAbstract)
                          .Where(t => t.GetConstructor(new Type[0]) != null)
                          .Select(Activator.CreateInstance)
                          .Cast <RuleSource>();

            foreach (var source in sources)
            {
                var section = source.GetSection();

                file.AnalyzerSettings.Add(new AnalyzerSetting
                {
                    AnalyzerId    = source.AnalyzerId,
                    RuleNamespace = source.AnalyzerId,
                    Sections      = { section }
                });
            }

            Console.WriteLine(file.Generate());
        }
Ejemplo n.º 2
0
        public void Costructor_GetXmlFromFile_IfFileExist()
        {
            var expectedXml     = $"<?xml version=\"1.0\" encoding=\"utf-8\"?><RuleSet Name=\"{Guid.NewGuid()}\" Description=\"{Guid.NewGuid()}\" ToolsVersion=\"10.0\"></RuleSet>";
            var expectedXmlPath = Path.Combine(workDirectory.Path, "expected.ruleset");

            File.WriteAllText(expectedXmlPath, expectedXml);

            var rulesetFile = new RulesetFile(expectedXmlPath);

            Assert.AreEqual(expectedXml, rulesetFile.Document.OuterXml);
        }
Ejemplo n.º 3
0
        public void Include_AddRulesetPathAsIs_IfRulesetPathIsMicrosoftRules()
        {
            var dummyPath   = Path.Combine(workDirectory.Path, $"{Guid.NewGuid()}.ruleset");
            var rulesetFile = new RulesetFile(dummyPath);

            var microsoftRules = "allrules.ruleset";

            rulesetFile.Include(microsoftRules);

            Console.WriteLine($"Xml should be contains Include with Path '{microsoftRules}':");
            Console.WriteLine(rulesetFile.Document.OuterXml);
            Assert.IsNotNull(SearchByXpath(rulesetFile.Document, $"a:RuleSet/a:Include[@Path = '{microsoftRules}']").Single());
        }
Ejemplo n.º 4
0
        public void Include_AddRulesetPathAsRelative_IfRulesetPathIsAbsolute()
        {
            var dummyPath   = Path.Combine(workDirectory.Path, $"{Guid.NewGuid()}.ruleset");
            var rulesetFile = new RulesetFile(dummyPath);

            var expectedRelRulesetPath = $"..\\dummyFolder\\{Guid.NewGuid()}.ruleset";
            var absoluteRulesetPath    = Path.GetFullPath(Path.Combine(workDirectory.Path, expectedRelRulesetPath));

            rulesetFile.Include(absoluteRulesetPath);

            Console.WriteLine($"Xml should be contains Include with Path '{expectedRelRulesetPath}':");
            Console.WriteLine(rulesetFile.Document.OuterXml);
            Assert.IsNotNull(SearchByXpath(rulesetFile.Document, $"a:RuleSet/a:Include[@Path = '{expectedRelRulesetPath}']").Single());
        }
Ejemplo n.º 5
0
        public void BindRuleset_NoBindRuleset_IfBindingAlreadyExists()
        {
            var rulesetName = $"Other.ruleset";
            var rulesetPath = Path.Combine(workDirectory.Path, rulesetName);
            var rulesetFile = new RulesetFile(rulesetPath);
            var projectFile = CreateProjectFile(defaultCsprojXml);

            projectFile.BindRuleset(rulesetFile);

            Console.WriteLine($"ProjectFile should be contains 2 old rulesetBindings:");
            Console.WriteLine(projectFile.Document.OuterXml);
            var rulesetBindings = SearchByXpath(projectFile.Document, "//a:CodeAnalysisRuleSet");

            Assert.AreEqual(2, rulesetBindings.Count);
        }
Ejemplo n.º 6
0
        public void Include_NotAddRuleset_IfCurrentPathAlreadyIncluded()
        {
            var dummyPath   = Path.Combine(workDirectory.Path, $"{Guid.NewGuid()}.ruleset");
            var rulesetFile = new RulesetFile(dummyPath);

            var rulesetPath = $"dummyFolder\\{Guid.NewGuid()}.ruleset";

            rulesetFile.Include(rulesetPath);
            rulesetFile.Include(rulesetPath);
            rulesetFile.Include(rulesetPath);

            Console.WriteLine($"Xml should be contains only one Include with Path '{rulesetPath}':");
            Console.WriteLine(rulesetFile.Document.OuterXml);
            Assert.IsNotNull(SearchByXpath(rulesetFile.Document, $"a:RuleSet/a:Include[@Path = '{rulesetPath}']").Single());
        }
Ejemplo n.º 7
0
        public void Costructor_GetXmlFromTemplate_IfFileNotExist()
        {
            var nullName = Guid.NewGuid().ToString();
            var nullPath = Path.Combine(workDirectory.Path, $"{nullName}.ruleset");

            if (File.Exists(nullPath))
            {
                File.Delete(nullPath);
            }

            var rulesetFile = new RulesetFile(nullPath);

            Console.WriteLine($"Xml should be contains RuleSet with Name '{nullName}':");
            Console.WriteLine(rulesetFile.Document.OuterXml);
            Assert.IsNotNull(SearchByXpath(rulesetFile.Document, $"/a:RuleSet[@Name = '{nullName}']").Single());
        }
Ejemplo n.º 8
0
        public void BindRuleset_MoveOldRulesetBindings_FromProjectFileToRulesetFile()
        {
            var rulesetName = $"{Guid.NewGuid()}.ruleset";
            var rulesetPath = Path.Combine(workDirectory.Path, rulesetName);
            var rulesetFile = new RulesetFile(rulesetPath);
            var projectFile = CreateProjectFile(defaultCsprojXml);

            projectFile.BindRuleset(rulesetFile);

            Console.WriteLine($"ProjectFile should be contains only one CodeAnalysisRuleSet with value '{rulesetName}':");
            Console.WriteLine(projectFile.Document.OuterXml);
            var rulesetBinding = SearchByXpath(projectFile.Document, "//a:CodeAnalysisRuleSet").Single();

            Assert.AreEqual(rulesetName, rulesetBinding.InnerText);

            Console.WriteLine($"RulesetFile should be contains oldRulesetBindings:");
            Console.WriteLine(rulesetFile.Document.OuterXml);
            var oldRulesetBindings = SearchByXpath(rulesetFile.Document, "//a:Include");

            Assert.AreEqual(2, oldRulesetBindings.Count);
        }