public void DiagnosticAnalyzerHasRuleAttribute()
        {
            var analyzers = GetDiagnosticAnalyzerTypes(RuleFinder.GetRuleAssemblies());

            foreach (var analyzer in analyzers)
            {
                var ruleDescriptor = analyzer.GetCustomAttributes <RuleAttribute>().SingleOrDefault();
                if (ruleDescriptor == null)
                {
                    throw new Exception(string.Format("RuleAttribute is missing from DiagnosticAnalyzer '{0}'", analyzer.Name));
                }
            }
        }
        public void RuleHasResourceHtml()
        {
            var assemblies = RuleFinder.GetRuleAssemblies();
            var analyzers  = GetDiagnosticAnalyzerTypes(assemblies);

            var resources = new Dictionary <Assembly, string[]>();

            foreach (var assembly in assemblies)
            {
                resources[assembly] = assembly.GetManifestResourceNames();
            }

            var missingDescriptors = new List <string>();

            foreach (var analyzer in analyzers)
            {
                var ruleDescriptor = analyzer.GetCustomAttributes <RuleAttribute>().First();
                var resource       = resources[analyzer.Assembly].SingleOrDefault(r => r.EndsWith(
                                                                                      string.Format(CultureInfo.InvariantCulture, RuleFinder.RuleDescriptionPathPattern,
                                                                                                    ruleDescriptor.Key), StringComparison.OrdinalIgnoreCase));

                if (resource != null)
                {
                    using (var stream = analyzer.Assembly.GetManifestResourceStream(resource))
                        using (var reader = new StreamReader(stream))
                        {
                            var content = reader.ReadToEnd();
                        }
                }
                else
                {
                    missingDescriptors.Add(string.Format("'{0}' ({1})", analyzer.Name, ruleDescriptor.Key));
                }
            }

            if (missingDescriptors.Any())
            {
                throw new Exception(string.Format("Missing HTML description for rule {0}", string.Join(",", missingDescriptors)));
            }
        }
Ejemplo n.º 3
0
 public void GetRuleAssemblies()
 {
     RuleFinder.GetRuleAssemblies().Should().HaveCount(2);
 }