public override IEnumerable <IIssue> ReadIssues(
     MsBuildIssuesProvider issueProvider,
     IRepositorySettings repositorySettings,
     MsBuildIssuesSettings issueProviderSettings)
 {
     throw new NotImplementedException();
 }
        /// <inheritdoc/>
        public override IEnumerable <IIssue> ReadIssues(
            MsBuildIssuesProvider issueProvider,
            IssueCommentFormat format,
            RepositorySettings repositorySettings,
            MsBuildIssuesSettings issueProviderSettings)
        {
#pragma warning disable SA1123 // Do not place regions within elements
            #region DupFinder Exclusion
#pragma warning restore SA1123 // Do not place regions within elements

            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            issueProviderSettings.NotNull(nameof(issueProviderSettings));

            #endregion

            var result = new List <IIssue>();

            var binLogReader = new BinLogReader();
            foreach (var record in binLogReader.ReadRecords(issueProviderSettings.LogFileContent))
            {
                var buildEventArgs = record.Args;

                if (buildEventArgs is BuildWarningEventArgs buildWarning)
                {
                    var projectFileRelativePath = this.GetProject(buildWarning, repositorySettings);

                    // Read affected file from the warning.
                    if (!this.TryGetFile(buildWarning, repositorySettings, out string fileName))
                    {
                        continue;
                    }

                    var line = GetLine(buildWarning);
                    var rule = buildWarning.Code;

                    // Determine rule URL.
                    Uri ruleUrl = null;
                    if (!string.IsNullOrWhiteSpace(rule))
                    {
                        ruleUrl = MsBuildRuleUrlResolver.Instance.ResolveRuleUrl(rule);
                    }

                    // Build issue.
                    result.Add(
                        IssueBuilder
                        .NewIssue(buildWarning.Message, issueProvider)
                        .WithPriority(IssuePriority.Warning)
                        .InProject(projectFileRelativePath, System.IO.Path.GetFileNameWithoutExtension(projectFileRelativePath))
                        .InFile(fileName, line)
                        .OfRule(rule, ruleUrl)
                        .Create());
                }
            }

            return(result);
        }
示例#3
0
            public void Should_Throw_If_LogFilePath_Is_Null()
            {
                // Given / When
                var result = Record.Exception(() =>
                                              MsBuildIssuesSettings.FromFilePath(
                                                  null,
                                                  new XmlFileLoggerFormat(new FakeLog())));

                // Then
                result.IsArgumentNullException("logFilePath");
            }
示例#4
0
            public void Should_Throw_If_Format_For_LogFileContent_Is_Null()
            {
                // Given / When
                var result = Record.Exception(() =>
                                              MsBuildIssuesSettings.FromContent(
                                                  "foo",
                                                  null));

                // Then
                result.IsArgumentNullException("format");
            }
示例#5
0
            public void Should_Throw_If_LogFileContent_Is_WhiteSpace()
            {
                // Given / When
                var result = Record.Exception(() =>
                                              MsBuildIssuesSettings.FromContent(
                                                  " ",
                                                  new XmlFileLoggerFormat(new FakeLog())));

                // Then
                result.IsArgumentOutOfRangeException("logFileContent");
            }
            public void Should_Set_LogFileContent_If_Empty()
            {
                // Given
                byte[] logFileContent = Array.Empty <byte>();
                var    format         = new XmlFileLoggerLogFileFormat(new FakeLog());

                // When
                var settings = new MsBuildIssuesSettings(logFileContent, format);

                // Then
                settings.LogFileContent.ShouldBe(logFileContent);
            }
示例#7
0
            public void Should_Set_LogContent()
            {
                // Given
                var logFileContent = "Foo".ToByteArray();
                var format         = new XmlFileLoggerLogFileFormat(new FakeLog());

                // When
                var settings = new MsBuildIssuesSettings(logFileContent, format);

                // Then
                settings.LogFileContent.ShouldBe(logFileContent);
            }
            public void Should_Throw_If_IssueProviderSettings_Are_Null()
            {
                // Given
                var log = new FakeLog();
                MsBuildIssuesSettings settings = null;

                // When
                var result = Record.Exception(() => new MsBuildIssuesProvider(log, settings));

                // Then
                result.IsArgumentNullException("issueProviderSettings");
            }
            public void Should_Throw_If_Log_Is_Null()
            {
                // Given / When
                var result = Record.Exception(() =>
                                              new MsBuildIssuesProvider(
                                                  null,
                                                  MsBuildIssuesSettings.FromContent(
                                                      "Foo",
                                                      new XmlFileLoggerFormat(new FakeLog()))));

                // Then
                result.IsArgumentNullException("log");
            }
示例#10
0
            public void Should_Set_Property_Values_Passed_To_Constructor()
            {
                // Given
                const string logFileContent = "foo";
                var          format         = new XmlFileLoggerFormat(new FakeLog());

                // When
                var settings = MsBuildIssuesSettings.FromContent(logFileContent, format);

                // Then
                settings.LogFileContent.ShouldBe(logFileContent);
                settings.Format.ShouldBe(format);
            }
示例#11
0
            public void Should_Set_LogContent_From_LogFilePath()
            {
                // Given
                var format = new XmlFileLoggerLogFileFormat(new FakeLog());

                using (var tempFile = new ResourceTempFile("Cake.Issues.MsBuild.Tests.Testfiles.XmlFileLoggerLogFileFormat.FullLog.xml"))
                {
                    // When
                    var settings = new MsBuildIssuesSettings(tempFile.FileName, format);

                    // Then
                    settings.LogFileContent.ShouldBe(tempFile.Content);
                }
            }
            public void Should_Throw_If_Log_Is_Null()
            {
                // Given
                ICakeLog log      = null;
                var      settings =
                    new MsBuildIssuesSettings(
                        "Foo".ToByteArray(),
                        new XmlFileLoggerLogFileFormat(new FakeLog()));

                // When
                var result = Record.Exception(() => new MsBuildIssuesProvider(log, settings));

                // Then
                result.IsArgumentNullException("log");
            }
示例#13
0
        /// <inheritdoc/>
        public override IEnumerable <IIssue> ReadIssues(
            MsBuildIssuesProvider issueProvider,
            IRepositorySettings repositorySettings,
            MsBuildIssuesSettings issueProviderSettings)
        {
#pragma warning disable SA1123 // Do not place regions within elements
            #region DupFinder Exclusion
#pragma warning restore SA1123 // Do not place regions within elements

            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            issueProviderSettings.NotNull(nameof(issueProviderSettings));

            #endregion

            var result = new List <IIssue>();

            var binLogReader = new BinLogReader();
            foreach (var record in binLogReader.ReadRecords(issueProviderSettings.LogFileContent))
            {
                var buildEventArgs = record.Args;

                IIssue issue = null;
                if (buildEventArgs is BuildErrorEventArgs buildError)
                {
                    issue = this.GetIssue(buildError, issueProvider, repositorySettings);
                }
                else if (buildEventArgs is BuildWarningEventArgs buildWarning)
                {
                    issue = this.GetIssue(buildWarning, issueProvider, repositorySettings);
                }

                if (issue == null)
                {
                    continue;
                }

                result.Add(issue);
            }

            return(result);
        }
        public MsBuildIssuesProviderFixture(string fileResourceName)
        {
            this.Log = new FakeLog {
                Verbosity = Verbosity.Normal
            };

            using (var stream = this.GetType().Assembly.GetManifestResourceStream("Cake.Issues.MsBuild.Tests.Testfiles." + fileResourceName))
            {
                using (var sr = new StreamReader(stream))
                {
                    this.MsBuildIssuesSettings =
                        MsBuildIssuesSettings.FromContent(
                            sr.ReadToEnd(),
                            new XmlFileLoggerFormat(this.Log));
                }
            }

            this.RepositorySettings =
                new RepositorySettings(@"c:\Source\Cake.Issues.MsBuild");
        }
示例#15
0
            public void Should_Read_File_From_Disk()
            {
                var fileName = Path.GetTempFileName();

                try
                {
                    // Given
                    string expected;
                    using (var ms = new MemoryStream())
                        using (var stream = this.GetType().Assembly.GetManifestResourceStream("Cake.Issues.MsBuild.Tests.Testfiles.IssueWithFile.xml"))
                        {
                            stream.CopyTo(ms);
                            var data = ms.ToArray();

                            using (var file = new FileStream(fileName, FileMode.Create, FileAccess.Write))
                            {
                                file.Write(data, 0, data.Length);
                            }

                            expected = ConvertFromUtf8(data);
                        }

                    // When
                    var settings =
                        MsBuildIssuesSettings.FromFilePath(
                            fileName,
                            new XmlFileLoggerFormat(new FakeLog()));

                    // Then
                    settings.LogFileContent.ShouldBe(expected);
                }
                finally
                {
                    if (File.Exists(fileName))
                    {
                        File.Delete(fileName);
                    }
                }
            }
        /// <inheritdoc/>
        public override IEnumerable <IIssue> ReadIssues(
            MsBuildIssuesProvider issueProvider,
            IRepositorySettings repositorySettings,
            MsBuildIssuesSettings issueProviderSettings)
        {
#pragma warning disable SA1123 // Do not place regions within elements
            #region DupFinder Exclusion
#pragma warning restore SA1123 // Do not place regions within elements

            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            issueProviderSettings.NotNull(nameof(issueProviderSettings));

            #endregion

            var result = new List <IIssue>();

            // Read log file.
            var raw         = issueProviderSettings.LogFileContent.ToStringUsingEncoding(true);
            var filtered    = string.Concat(raw.Where(c => !char.IsControl(c)));
            var logDocument = XDocument.Parse(filtered);

            // Loop through all warning and error tags.
            var elements = new List <XElement>(logDocument.Descendants("warning"));
            elements.AddRange(logDocument.Descendants("error"));

            foreach (var element in elements)
            {
                // Ignore warnings or errors without a message.
                if (string.IsNullOrWhiteSpace(element.Value))
                {
                    continue;
                }

                // Read affected project from the warning or error.
                if (!this.TryGetProject(element, repositorySettings, out string projectFileRelativePath))
                {
                    continue;
                }

                // Read affected file from the warning or error.
                if (!this.TryGetFile(element, repositorySettings, out string fileName))
                {
                    continue;
                }

                // Read affected line from the warning or error.
                if (!TryGetLine(element, out var line))
                {
                    continue;
                }

                // Read affected column from the warning or error.
                if (!TryGetColumn(element, out var column))
                {
                    continue;
                }

                // Read rule code from the warning or error.
                if (!TryGetRule(element, out string rule))
                {
                    continue;
                }

                // Determine rule URL.
                Uri ruleUrl = null;
                if (!string.IsNullOrWhiteSpace(rule))
                {
                    ruleUrl = MsBuildRuleUrlResolver.Instance.ResolveRuleUrl(rule);
                }

                var priority = element.Name.LocalName == "error" ? IssuePriority.Error : IssuePriority.Warning;

                // Build issue.
                result.Add(
                    IssueBuilder
                    .NewIssue(element.Value, issueProvider)
                    .WithPriority(priority)
                    .InProject(projectFileRelativePath, System.IO.Path.GetFileNameWithoutExtension(projectFileRelativePath))
                    .InFile(fileName, line, column)
                    .OfRule(rule, ruleUrl)
                    .Create());
            }

            return(result);
        }
示例#17
0
        /// <inheritdoc/>
        public override IEnumerable <IIssue> ReadIssues(
            MsBuildIssuesProvider issueProvider,
            IssueCommentFormat format,
            RepositorySettings repositorySettings,
            MsBuildIssuesSettings issueProviderSettings)
        {
#pragma warning disable SA1123 // Do not place regions within elements
            #region DupFinder Exclusion
#pragma warning restore SA1123 // Do not place regions within elements

            issueProvider.NotNull(nameof(issueProvider));
            repositorySettings.NotNull(nameof(repositorySettings));
            issueProviderSettings.NotNull(nameof(issueProviderSettings));

            #endregion

            var result = new List <IIssue>();

            // Read log file.
            var logDocument = XDocument.Parse(issueProviderSettings.LogFileContent.ToStringUsingEncoding(true));

            // Loop through all warning tags.
            foreach (var warning in logDocument.Descendants("warning"))
            {
                // Read affected project from the warning.
                if (!this.TryGetProject(warning, repositorySettings, out string projectFileRelativePath))
                {
                    continue;
                }

                // Read affected file from the warning.
                if (!this.TryGetFile(warning, repositorySettings, out string fileName))
                {
                    continue;
                }

                // Read affected line from the warning.
                if (!TryGetLine(warning, out var line))
                {
                    continue;
                }

                // Read rule code from the warning.
                if (!TryGetRule(warning, out string rule))
                {
                    continue;
                }

                // Determine rule URL.
                Uri ruleUrl = null;
                if (!string.IsNullOrWhiteSpace(rule))
                {
                    ruleUrl = MsBuildRuleUrlResolver.Instance.ResolveRuleUrl(rule);
                }

                // Build issue.
                result.Add(
                    IssueBuilder
                    .NewIssue(warning.Value, issueProvider)
                    .WithPriority(IssuePriority.Warning)
                    .InProject(projectFileRelativePath, System.IO.Path.GetFileNameWithoutExtension(projectFileRelativePath))
                    .InFile(fileName, line)
                    .OfRule(rule, ruleUrl)
                    .Create());
            }

            return(result);
        }