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))); } }
public void GetRuleAssemblies() { RuleFinder.GetRuleAssemblies().Should().HaveCount(2); }