Esempio n. 1
0
        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"));
        }
Esempio n. 2
0
        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."));
        }
Esempio n. 3
0
        /// <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);
        }