private static void CheckMockFileReport(BuildFileReport fileReport, string expectedFileName) { Assert.IsNotNull(fileReport); Assert.AreEqual <string>(expectedFileName, fileReport.FileName); Assert.IsNotNull(fileReport.LogEntries); Assert.AreEqual <int>(1, fileReport.LogEntries.Count); LogEntry entry = fileReport.LogEntries[0]; Assert.AreEqual <LogLevel>(LogLevel.Information, entry.Level); Assert.AreEqual <string>("Mock", entry.Rule); Assert.AreEqual <string>("Mock", entry.Code); Assert.AreEqual <string>("Checked by mock", entry.Message); Assert.IsTrue(entry.Detail.Contains("detailed message")); }
public void BuildCopShouldReportRuleExceptions() { BuildCopConfiguration config = new BuildCopConfiguration(); buildGroupElement buildGroup = new buildGroupElement(); buildGroup.name = "TestBuildGroup"; buildGroup.enabled = true; buildFilePathElement path = new buildFilePathElement(); path.rootPath = @"BuildFiles"; path.searchPattern = "DefaultConsoleApplication.csproj"; buildGroup.buildFiles.paths.Add(path); ruleElement mockRule = new ruleElement(); mockRule.name = "Mock"; mockRule.type = typeof(ExceptionMockRule).AssemblyQualifiedName; mockRule.RuleChecker = new ExceptionMockRule(mockRule); buildGroup.rules.Add(mockRule); config.buildGroups.Add(buildGroup); BuildCopReport report = BuildCopEngine.Execute(config); Assert.IsNotNull(report); IList <BuildGroupReport> groupReports = report.BuildGroupReports; Assert.IsNotNull(groupReports); Assert.AreEqual <int>(1, groupReports.Count); BuildGroupReport groupReport = groupReports[0]; Assert.IsNotNull(groupReport); Assert.AreEqual <string>("TestBuildGroup", groupReport.BuildGroupName); Assert.IsNotNull(groupReport.BuildFileReports); Assert.AreEqual <int>(1, groupReport.BuildFileReports.Count); BuildFileReport fileReport = groupReport.BuildFileReports[0]; Assert.IsNotNull(fileReport); Assert.AreEqual <string>(@"BuildFiles\DefaultConsoleApplication.csproj", fileReport.FileName); Assert.IsNotNull(fileReport.LogEntries); Assert.AreEqual <int>(1, fileReport.LogEntries.Count); LogEntry entry = fileReport.LogEntries[0]; Assert.AreEqual <LogLevel>(LogLevel.Exception, entry.Level); Assert.AreEqual <string>("An exception occurred while analysing the build file.", entry.Message); Assert.IsNotNull(entry.Detail); Assert.IsTrue(entry.Detail.Contains("ExceptionMock was configured to throw exceptions.")); }
/// <summary> /// Starts analysis using the specified configuration. /// </summary> /// <param name="configuration">The BuildCop configuration to use.</param> /// <param name="buildGroups">The build groups to verify.</param> /// <returns>The report containing the outcome of a verification for a list of build groups.</returns> public static BuildCopReport Execute(BuildCopConfiguration configuration, IList <string> buildGroups) { IList <BuildGroupReport> groupReports = new List <BuildGroupReport>(); IDictionary <string, string> outputTypeMappings = GetOutputTypeMappings(configuration); foreach (buildGroupElement buildGroup in configuration.buildGroups) { bool shouldVerifyBuildGroup = buildGroup.enabled; if (buildGroup.rules.Count == 0) { shouldVerifyBuildGroup = false; } else if (buildGroups != null && !buildGroups.Contains(buildGroup.name)) { shouldVerifyBuildGroup = false; } if (shouldVerifyBuildGroup) { IList <BuildFileReport> fileReports = new List <BuildFileReport>(); // Determine build files. IList <BuildFile> buildFiles = GetBuildFiles(buildGroup.buildFiles); // Determine rules. IList <ruleElement> rules = new List <ruleElement>(); foreach (ruleElement ruleDefinition in buildGroup.rules) { ////BaseRule rule = CreateRule(ruleDefinition, configuration.sharedRules); rules.Add(ruleDefinition); } // Run rules on all build files. foreach (BuildFile buildFile in buildFiles) { List <LogEntry> allEntries = new List <LogEntry>(); try { buildFile.Parse(); foreach (ruleElement rule in rules) { if (!ShouldExcludeFile(buildFile.FileName, rule.excludedFiles)) { if (!ShouldExcludeOutputType(buildFile.OutputType, buildFile.ProjectTypeGuids, outputTypeMappings, rule.excludedOutputTypes)) { if (string.IsNullOrEmpty(rule.type.Trim())) { // Shared rules entry foreach (var sharedRule in configuration.sharedRules) { if (sharedRule.name == rule.name) { IList <LogEntry> ruleEntries = sharedRule.RuleChecker.Check(buildFile); allEntries.AddRange(ruleEntries); } } } else { IList <LogEntry> ruleEntries = rule.RuleChecker.Check(buildFile); allEntries.AddRange(ruleEntries); } } } } } catch (Exception exc) { LogEntry entry = CreateExceptionLogEntry(exc); allEntries.Add(entry); } BuildFileReport fileReport = new BuildFileReport(buildFile.FileName, allEntries); fileReports.Add(fileReport); } groupReports.Add(new BuildGroupReport(buildGroup.name, fileReports)); } } BuildCopReport report = new BuildCopReport(groupReports); // Write reports to formatters. foreach (formatterElement formatterDefinition in configuration.formatters) { formatterDefinition.Formatter.WriteReport(report, formatterDefinition.minimumLogLevel); } return(report); }