public void Should_Throw_If_MessageText_Is_Different(string expectedValue, string actualValue)
            {
                // Given
                var fixture = new IssueCheckerFixture("Identifier", actualValue, "ProviderType", "ProviderName");

                // When
                var result = Record.Exception(() =>
                                              IssueChecker.Check(
                                                  fixture.Issue,
                                                  fixture.ProviderType,
                                                  fixture.ProviderName,
                                                  fixture.Run,
                                                  fixture.Identifier,
                                                  fixture.ProjectFileRelativePath,
                                                  fixture.ProjectName,
                                                  fixture.AffectedFileRelativePath,
                                                  fixture.Line,
                                                  fixture.EndLine,
                                                  fixture.Column,
                                                  fixture.EndColumn,
                                                  fixture.FileLink,
                                                  expectedValue,
                                                  fixture.MessageHtml,
                                                  fixture.MessageMarkdown,
                                                  fixture.Priority,
                                                  fixture.PriorityName,
                                                  fixture.Rule,
                                                  fixture.RuleUrl));

                // Then
                result.ShouldBeOfType <Exception>();
                result.Message.ShouldStartWith("Expected issue.MessageText");
            }
Ejemplo n.º 2
0
            public void Should_Throw_If_Priority_Is_Different(IssuePriority expectedValue, IssuePriority actualValue)
            {
                // Given
                var fixture = new IssueCheckerFixture();
                var issue   =
                    fixture.IssueBuilder
                    .WithPriority(actualValue)
                    .Create();

                // When
                var result = Record.Exception(() =>
                                              IssueChecker.Check(
                                                  issue,
                                                  fixture.ProviderType,
                                                  fixture.ProviderName,
                                                  fixture.ProjectFileRelativePath,
                                                  fixture.ProjectName,
                                                  fixture.AffectedFileRelativePath,
                                                  fixture.Line,
                                                  fixture.MessageText,
                                                  fixture.MessageHtml,
                                                  fixture.MessageMarkdown,
                                                  (int)expectedValue,
                                                  fixture.PriorityName,
                                                  fixture.Rule,
                                                  fixture.RuleUrl));

                // Then
                result.ShouldBeOfType <Exception>();
                result.Message.ShouldStartWith("Expected issue.Priority");
            }
Ejemplo n.º 3
0
            public void Should_Throw_If_ProviderName_Is_Different(string expectedValue, string actualValue)
            {
                // Given
                var fixture = new IssueCheckerFixture("Message", "ProviderType", actualValue);

                // When
                var result = Record.Exception(() =>
                                              IssueChecker.Check(
                                                  fixture.Issue,
                                                  fixture.ProviderType,
                                                  expectedValue,
                                                  fixture.ProjectFileRelativePath,
                                                  fixture.ProjectName,
                                                  fixture.AffectedFileRelativePath,
                                                  fixture.Line,
                                                  fixture.Message,
                                                  fixture.Priority,
                                                  fixture.PriorityName,
                                                  fixture.Rule,
                                                  fixture.RuleUrl));

                // Then
                result.ShouldBeOfType <Exception>();
                result.Message.ShouldStartWith("Expected issue.ProviderName");
            }
Ejemplo n.º 4
0
            public void Should_Throw_If_Issue_Is_Null()
            {
                // Given
                var    fixture = new IssueCheckerFixture();
                IIssue issue   = null;

                // When
                var result = Record.Exception(() =>
                                              IssueChecker.Check(
                                                  issue,
                                                  fixture.ProviderType,
                                                  fixture.ProviderName,
                                                  fixture.ProjectFileRelativePath,
                                                  fixture.ProjectName,
                                                  fixture.AffectedFileRelativePath,
                                                  fixture.Line,
                                                  fixture.Message,
                                                  fixture.Priority,
                                                  fixture.PriorityName,
                                                  fixture.Rule,
                                                  fixture.RuleUrl));

                // Then
                result.IsArgumentNullException("issue");
            }
Ejemplo n.º 5
0
            public void Should_Read_Both_Warnings_And_Errors()
            {
                // Given
                var fixture = new MsBuildIssuesProviderFixture <XmlFileLoggerLogFileFormat>("IssueWithBothWarningAndErrors.xml");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(2);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        @"Microsoft.Usage : 'ConfigurationManager.GetSortedConfigFiles(String)' creates an exception of type 'ApplicationException', an exception type that is not sufficiently specific and should never be raised by user code. If this exception instance might be thrown, use a different exception type.",
                        "Cake.Issues.MsBuild.MsBuildIssuesProvider",
                        "MSBuild")
                    .InProjectOfName(string.Empty)
                    .InFile(@"src\Cake.Issues.MsBuild.Tests\MsBuildIssuesProviderTests.cs", 1311)
                    .OfRule("CA2201", new Uri("https://www.google.com/search?q=\"CA2201:\"+site:docs.microsoft.com"))
                    .WithPriority(IssuePriority.Warning));
                IssueChecker.Check(
                    issues[1],
                    IssueBuilder.NewIssue(
                        @"'ConfigurationManager.GetSortedConfigFiles(String)': not all code paths return a value",
                        "Cake.Issues.MsBuild.MsBuildIssuesProvider",
                        "MSBuild")
                    .InProjectOfName(string.Empty)
                    .InFile(@"src\Cake.Issues.MsBuild.Tests\MsBuildIssuesProviderTests.cs", 1311)
                    .OfRule("CS0161", null)
                    .WithPriority(IssuePriority.Error));
            }
Ejemplo n.º 6
0
            public void Should_Throw_If_RuleUrl_Is_Different(string expectedValue, string actualValue)
            {
                // Given
                var fixture = new IssueCheckerFixture();
                var issue   =
                    fixture.IssueBuilder
                    .OfRule(fixture.Rule, new Uri(actualValue))
                    .Create();

                // When
                var result = Record.Exception(() =>
                                              IssueChecker.Check(
                                                  issue,
                                                  fixture.ProviderType,
                                                  fixture.ProviderName,
                                                  fixture.ProjectFileRelativePath,
                                                  fixture.ProjectName,
                                                  fixture.AffectedFileRelativePath,
                                                  fixture.Line,
                                                  fixture.Message,
                                                  fixture.Priority,
                                                  fixture.PriorityName,
                                                  fixture.Rule,
                                                  new Uri(expectedValue)));

                // Then
                result.ShouldBeOfType <Exception>();
                result.Message.ShouldStartWith("Expected issue.RuleUrl");
            }
            public void Should_Read_Basic_Issues_Correct()
            {
                // Given
                var fixture = new TerraformProviderFixture("basic.json", @"./");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(2);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "\"anonymous\": [DEPRECATED] For versions later than 3.0.0, absence of a token enables this mode",
                        "Cake.Issues.Terraform.TerraformIssuesProvider",
                        "Terraform")
                    .WithPriority(IssuePriority.Warning));
                IssueChecker.Check(
                    issues[1],
                    IssueBuilder.NewIssue(
                        "The argument \"name\" is required, but no definition was found.",
                        "Cake.Issues.Terraform.TerraformIssuesProvider",
                        "Terraform")
                    .InFile("main.tf", 14, 14, 37, 37)
                    .OfRule("Missing required argument")
                    .WithPriority(IssuePriority.Error));
            }
Ejemplo n.º 8
0
            public void Should_Return_List_Of_IssuesV2()
            {
                // Given
                var filePath = new FilePath("Testfiles/issuesV2.json");

                // When
                var result = filePath.DeserializeToIssues().ToList();

                // Then
                result.Count.ShouldBe(2);
                IssueChecker.Check(
                    result[0],
                    IssueBuilder.NewIssue(
                        "Something went wrong.",
                        "TestProvider",
                        "Test Provider")
                    .WithMessageInHtmlFormat("Something went <b>wrong</b>.")
                    .WithMessageInMarkdownFormat("Something went **wrong**.")
                    .InProject(@"src\Foo\Bar.csproj", "Bar")
                    .InFile(@"src\Foo\Bar.cs", 42)
                    .OfRule("Rule", new Uri("https://google.com"))
                    .WithPriority(IssuePriority.Warning));
                IssueChecker.Check(
                    result[1],
                    IssueBuilder.NewIssue(
                        "Something went wrong again.",
                        "TestProvider",
                        "Test Provider")
                    .WithMessageInHtmlFormat("Something went <b>wrong</b> again.")
                    .WithMessageInMarkdownFormat("Something went **wrong** again.")
                    .InProject(@"src\Foo\Bar.csproj", "Bar")
                    .InFile(@"src\Foo\Bar2.cs")
                    .WithPriority(IssuePriority.Warning));
            }
            public void Should_Read_Issue_Correct()
            {
                // Given
                var fixture = new DupFinderIssuesProviderFixture("DupFinder.xml");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(5);
                issues.Count(i =>
                             i.FilePath() == "Src/Foo.cs" &&
                             i.Line == 16 && i.EndLine == 232).ShouldBe(1);

                var issueToVerify = issues.Single(i =>
                                                  i.FilePath() == "Src/Foo.cs" &&
                                                  i.Line == 16 && i.EndLine == 232);

                IssueChecker.Check(
                    issueToVerify,
                    IssueBuilder.NewIssue(
                        ExpectedIssueIdentifier,
                        ExpectedIssueMessage,
                        "Cake.Issues.DupFinder.DupFinderIssuesProvider",
                        "DupFinder")
                    .WithMessageInMarkdownFormat(ExpectedIssueMarkdownMessage)
                    .WithMessageInHtmlFormat(ExpectedIssueHtmlMessage)
                    .InFile(@"Src\Foo.cs", 16, 232, null, null)
                    .OfRule("dupFinder")
                    .WithPriority(IssuePriority.Warning)
                    .Create());
            }
            public void Should_Not_Throw_If_All_Values_Are_The_Same()
            {
                // Given
                var fixture = new IssueCheckerFixture();

                // When
                IssueChecker.Check(
                    fixture.Issue,
                    fixture.ProviderType,
                    fixture.ProviderName,
                    fixture.Run,
                    fixture.Identifier,
                    fixture.ProjectFileRelativePath,
                    fixture.ProjectName,
                    fixture.AffectedFileRelativePath,
                    fixture.Line,
                    fixture.EndLine,
                    fixture.Column,
                    fixture.EndColumn,
                    fixture.FileLink,
                    fixture.MessageText,
                    fixture.MessageHtml,
                    fixture.MessageMarkdown,
                    fixture.Priority,
                    fixture.PriorityName,
                    fixture.Rule,
                    fixture.RuleUrl);

                // Then
            }
Ejemplo n.º 11
0
            public void Should_Not_Throw_If_Issues_Are_Identical()
            {
                // Given
                var fixture       = new IssueCheckerFixture();
                var issueToCheck  = fixture.IssueBuilder.Create();
                var expectedIssue = fixture.IssueBuilder;

                // When
                IssueChecker.Check(issueToCheck, expectedIssue);

                // Then
            }
            public void Should_Read_Error_Correct()
            {
                // Given
                var fixture = new TerraformProviderFixture("error.json", @"./");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "\nPlugin reinitialization required...",
                        "Cake.Issues.Terraform.TerraformIssuesProvider",
                        "Terraform")
                    .OfRule("Could not load plugin")
                    .WithPriority(IssuePriority.Error));
            }
Ejemplo n.º 13
0
            public void Should_Read_Issue_Without_Code_Correct()
            {
                // Given
                var fixture = new MsBuildIssuesProviderFixture <XmlFileLoggerLogFileFormat>("IssueWithoutCode.xml");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues.Single(),
                    IssueBuilder.NewIssue(
                        "SA1300 : CSharp.Naming : namespace names begin with an upper-case letter: foo.",
                        "Cake.Issues.MsBuild.MsBuildIssuesProvider",
                        "MSBuild")
                    .InProjectOfName(string.Empty)
                    .InFile(@"src\Cake.Issues.MsBuild.Tests\MsBuildIssuesProviderTests.cs", 21, 1)
                    .WithPriority(IssuePriority.Warning));
            }
Ejemplo n.º 14
0
            public void Should_Read_Issue_Without_File_Correct()
            {
                // Given
                var fixture = new MsBuildIssuesProviderFixture <XmlFileLoggerLogFileFormat>("IssueWithoutFile.xml");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues.Single(),
                    IssueBuilder.NewIssue(
                        "Microsoft.Naming : Rename type name 'UniqueQueue(Of T)' so that it does not end in 'Queue'.",
                        "Cake.Issues.MsBuild.MsBuildIssuesProvider",
                        "MSBuild")
                    .InProjectOfName(string.Empty)
                    .OfRule("CA1711", new Uri("https://www.google.com/search?q=\"CA1711:\"+site:docs.microsoft.com"))
                    .WithPriority(IssuePriority.Warning));
            }
            public void Should_Read_Issue_Without_Rule_Correct()
            {
                // Given
                var fixture = new EsLintIssuesProviderFixture <JsonLogFileFormat>("issueWithoutRule.json");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues.Single(),
                    IssueBuilder.NewIssue(
                        "some message.",
                        "Cake.Issues.EsLint.EsLintIssuesProvider",
                        "ESLint")
                    .InFile(@"src\Cake.Issues.EsLint.Tests\Testfiles\fullOfProblems.js", 1, 10)
                    .WithPriority(IssuePriority.Error)
                    .Create());
            }
Ejemplo n.º 16
0
            public void Should_Read_Line_Zero_Correct()
            {
                // Given
                var fixture = new DocFxProviderFixture("entry-with-line-0.json", @"./");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "Invalid file link:(~/foo.md).",
                        "Cake.Issues.DocFx.DocFxIssuesProvider",
                        "DocFX")
                    .InFile(@"~/toc.yml")
                    .OfRule("BuildCore.Build Document.LinkPhaseHandlerWithIncremental.TocDocumentProcessor.Save")
                    .WithPriority(IssuePriority.Warning));
            }
Ejemplo n.º 17
0
            public void Should_Read_Suggestions_Correct()
            {
                // Given
                var fixture = new DocFxProviderFixture("entry-of-level-suggestion.json", @"./");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "Invalid file link:(~/foo.md).",
                        "Cake.Issues.DocFx.DocFxIssuesProvider",
                        "DocFX")
                    .InFile(@"bar.md", 45)
                    .OfRule("Build Document.LinkPhaseHandler.ConceptualDocumentProcessor.Save")
                    .WithPriority(IssuePriority.Suggestion));
            }
Ejemplo n.º 18
0
            public void Should_Read_Issue_Correct(string docRootPath, string docRelativePath)
            {
                // Given
                var fixture = new DocFxProviderFixture("docfx.json", docRootPath);

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "Invalid cross reference \"[Foo](xref:foo)\".",
                        "Cake.Issues.DocFx.DocFxIssuesProvider",
                        "DocFX")
                    .InFile(docRelativePath + @"index.md")
                    .OfRule("Build Document.LinkPhaseHandler.Apply Templates")
                    .WithPriority(IssuePriority.Warning));
            }
Ejemplo n.º 19
0
            public void Should_Throw_If_ExpectedIssue_Is_Null()
            {
#pragma warning disable SA1123 // Do not place regions within elements
                #region DupFinder Exclusion
#pragma warning restore SA1123 // Do not place regions within elements

                // Given
                var    fixture       = new IssueBuilderFixture();
                var    issueToCheck  = fixture.IssueBuilder.Create();
                IIssue expectedIssue = null;

                // When
                var result = Record.Exception(() =>
                                              IssueChecker.Check(issueToCheck, expectedIssue));

                // Then
                result.IsArgumentNullException("expectedIssue");

                #endregion
            }
Ejemplo n.º 20
0
            public void Should_Return_Issue()
            {
                // Given
                var filePath = new FilePath("Testfiles/issue.json");

                // When
                var result = filePath.DeserializeToIssue();

                // Then
                IssueChecker.Check(
                    result,
                    IssueBuilder.NewIssue(
                        "Something went wrong.",
                        "TestProvider",
                        "Test Provider")
                    .InProject(@"src\Foo\Bar.csproj", "Bar")
                    .InFile(@"src\Foo\Bar.cs", 42)
                    .OfRule("Rule", new Uri("https://google.com"))
                    .WithPriority(IssuePriority.Warning));
            }
            public void Should_Read_Issue_Without_Line_And_Column_Correct()
            {
                // Given
                var fixture = new EsLintIssuesProviderFixture <JsonLogFileFormat>("issueWithoutLineAndColumn.json");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues.Single(),
                    IssueBuilder.NewIssue(
                        "some message.",
                        "Cake.Issues.EsLint.EsLintIssuesProvider",
                        "ESLint")
                    .InFile(@"src\Cake.Issues.EsLint.Tests\Testfiles\fullOfProblems.js")
                    .OfRule("some-rule", new Uri("http://eslint.org/docs/rules/some-rule"))
                    .WithPriority(IssuePriority.Error)
                    .Create());
            }
Ejemplo n.º 22
0
            public void Should_Read_Issue_With_File_Without_Path_Correct()
            {
                // Given
                var fixture = new MsBuildIssuesProviderFixture <XmlFileLoggerLogFileFormat>("IssueWithOnlyFileName.xml");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues.Single(),
                    IssueBuilder.NewIssue(
                        "The variable 'foo' is assigned but its value is never used",
                        "Cake.Issues.MsBuild.MsBuildIssuesProvider",
                        "MSBuild")
                    .InProjectOfName(string.Empty)
                    .InFile(@"src\Cake.Issues.MsBuild.Tests\MsBuildIssuesProviderTests.cs", 13, 17)
                    .OfRule("CS0219")
                    .WithPriority(IssuePriority.Warning));
            }
Ejemplo n.º 23
0
            public void Should_Read_Issue_With_Line_Zero_Correct()
            {
                // Given
                var fixture = new MsBuildIssuesProviderFixture <XmlFileLoggerLogFileFormat>("IssueWithLineZero.xml");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues.Single(),
                    IssueBuilder.NewIssue(
                        @"Unable to locate any documentation sources for 'c:\Source\Cake.Prca\Cake.Prca..csproj' (Configuration: Debug Platform: AnyCPU)",
                        "Cake.Issues.MsBuild.MsBuildIssuesProvider",
                        "MSBuild")
                    .InProject("Cake.Prca.shfbproj", "Cake.Prca")
                    .InFile("SHFB")
                    .OfRule("BE0006")
                    .WithPriority(IssuePriority.Warning));
            }
Ejemplo n.º 24
0
            public void Should_Read_Errors()
            {
                // Given
                var fixture = new MsBuildIssuesProviderFixture <XmlFileLoggerLogFileFormat>("IssueWithError.xml");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        @"'ConfigurationManager.GetSortedConfigFiles(String)': not all code paths return a value",
                        "Cake.Issues.MsBuild.MsBuildIssuesProvider",
                        "MSBuild")
                    .InProjectOfName(string.Empty)
                    .InFile(@"src\Cake.Issues.MsBuild.Tests\MsBuildIssuesProviderTests.cs", 1311)
                    .OfRule("CS0161", null)
                    .WithPriority(IssuePriority.Error));
            }
            public void Should_Read_Issue_MD013_Correct()
            {
                // Given
                var fixture =
                    new MarkdownlintIssuesProviderFixture <MarkdownlintCliJsonLogFileFormat>("MD013.json");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "Line length: Expected: 80; Actual: 124",
                        "Cake.Issues.Markdownlint.MarkdownlintIssuesProvider",
                        "markdownlint")
                    .InFile("docs/extending/fundamentals.md", 7, 7, 81, 125)
                    .OfRule("MD013", new Uri("https://github.com/DavidAnson/markdownlint/blob/v0.23.1/doc/Rules.md#md013"))
                    .WithPriority(IssuePriority.Warning));
            }
            public void Should_Read_Issue_MD025_Correct()
            {
                // Given
                var fixture =
                    new MarkdownlintIssuesProviderFixture <MarkdownlintCliJsonLogFileFormat>("MD025.json");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "Multiple top-level headings in the same document",
                        "Cake.Issues.Markdownlint.MarkdownlintIssuesProvider",
                        "markdownlint")
                    .InFile("docs/extending/issue-provider/helper.md", 13)
                    .OfRule("MD025", new Uri("https://github.com/DavidAnson/markdownlint/blob/v0.23.1/doc/Rules.md#md025"))
                    .WithPriority(IssuePriority.Warning));
            }
            public void Should_Read_Issue_MD034_Correct()
            {
                // Given
                var fixture =
                    new MarkdownlintIssuesProviderFixture <MarkdownlintCliJsonLogFileFormat>("MD034.json");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(1);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "Bare URL used",
                        "Cake.Issues.Markdownlint.MarkdownlintIssuesProvider",
                        "markdownlint")
                    .InFile("docs/report-formats/sarif/release-notes.md", 139, 139, 6, 74)
                    .OfRule("MD034", new Uri("https://github.com/DavidAnson/markdownlint/blob/v0.23.1/doc/Rules.md#md034"))
                    .WithPriority(IssuePriority.Warning));
            }
Ejemplo n.º 28
0
            public void Should_Not_Throw_If_All_Values_Are_The_Same()
            {
                // Given
                var fixture = new IssueCheckerFixture();

                // When
                IssueChecker.Check(
                    fixture.Issue,
                    fixture.ProviderType,
                    fixture.ProviderName,
                    fixture.ProjectFileRelativePath,
                    fixture.ProjectName,
                    fixture.AffectedFileRelativePath,
                    fixture.Line,
                    fixture.Message,
                    fixture.Priority,
                    fixture.PriorityName,
                    fixture.Rule,
                    fixture.RuleUrl);

                // Then
            }
            public void ShouldAddRealUrlsToMessagesIfFileLinkSettingsWereProvided()
            {
                // Given
                var repositoryUrl = new Uri("http://*****:*****@"Src\Foo.cs", 16, 232, null, null)
                    .OfRule("dupFinder")
                    .WithPriority(IssuePriority.Warning)
                    .Create());
            }
            public void Should_Read_Issues_Correct()
            {
                // Given
                var fixture = new MarkdownlintIssuesProviderFixture <MarkdownlintV1LogFileFormat>("markdownlint.json");

                // When
                var issues = fixture.ReadIssues().ToList();

                // Then
                issues.Count.ShouldBe(3);
                IssueChecker.Check(
                    issues[0],
                    IssueBuilder.NewIssue(
                        "Hard tabs",
                        "Cake.Issues.Markdownlint.MarkdownlintIssuesProvider",
                        "markdownlint")
                    .InFile("bad.md", 3)
                    .OfRule("MD010", new Uri("https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md#md010"))
                    .WithPriority(IssuePriority.Warning));
                IssueChecker.Check(
                    issues[1],
                    IssueBuilder.NewIssue(
                        "No space after hash on atx style header",
                        "Cake.Issues.Markdownlint.MarkdownlintIssuesProvider",
                        "markdownlint")
                    .InFile("bad.md", 1)
                    .OfRule("MD018", new Uri("https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md#md018"))
                    .WithPriority(IssuePriority.Warning));
                IssueChecker.Check(
                    issues[2],
                    IssueBuilder.NewIssue(
                        "No space after hash on atx style header",
                        "Cake.Issues.Markdownlint.MarkdownlintIssuesProvider",
                        "markdownlint")
                    .InFile("bad.md", 3)
                    .OfRule("MD018", new Uri("https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md#md018"))
                    .WithPriority(IssuePriority.Warning));
            }