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); }
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"); }
public void Should_Throw_If_Format_For_LogFileContent_Is_Null() { // Given / When var result = Record.Exception(() => MsBuildIssuesSettings.FromContent( "foo", null)); // Then result.IsArgumentNullException("format"); }
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); }
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"); }
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); }
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"); }
/// <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"); }
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); }
/// <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); }