public void GetIssueLocations_NoComment()
        {
            var line   = GetLine(2, @"if (a > b)
{
    Console.WriteLine(a);
}");
            var result = IssueLocationCollector.GetIssueLocations(line).ToList();

            result.Should().BeEmpty();
        }
        public void GetIssueLocations_Noncompliant_With_Offset()
        {
            var line   = GetLine(2, @"if (a > b)
{
    Console.WriteLine(a); //Noncompliant@-1
}");
            var result = IssueLocationCollector.GetIssueLocations(line).ToList();

            result.Should().ContainSingle();

            VerifyIssueLocations(result,
                                 expectedIsPrimary: new[] { true },
                                 expectedLineNumbers: new[] { 2 },
                                 expectedMessages: new string[] { null },
                                 expectedIssueIds: new string[] { null });
        }
        public void GetIssueLocations_Noncompliant_With_Reversed_Message_And_Flows()
        {
            var line   = GetLine(2, @"if (a > b)
{
    Console.WriteLine(a); //Noncompliant {{Some message}} [flow1,flow2]
}");
            var result = IssueLocationCollector.GetIssueLocations(line).ToList();

            result.Should().ContainSingle();

            VerifyIssueLocations(result,
                                 expectedIsPrimary: new[] { true },
                                 expectedLineNumbers: new[] { 3 },
                                 expectedMessages: new[] { "Some message" },
                                 expectedIssueIds: new string[] { null });
        }
        public void GetIssueLocations_Noncompliant_With_Offset_Message_And_Flows()
        {
            var line   = GetLine(2, @"if (a > b)
{
    Console.WriteLine(a); //Noncompliant@-1 [flow1,flow2] {{Some message}}
}");
            var result = IssueLocationCollector.GetIssueLocations(line).ToList();

            result.Should().HaveCount(2);

            VerifyIssueLocations(result,
                                 expectedIsPrimary: new[] { true, true },
                                 expectedLineNumbers: new[] { 2, 2 },
                                 expectedMessages: new[] { "Some message", "Some message" },
                                 expectedIssueIds: new[] { "flow1", "flow2" });
        }
        public void GetIssueLocations_Noncompliant_With_Two_Flows()
        {
            var line   = GetLine(2, @"if (a > b)
{
    Console.WriteLine(a); //Noncompliant [flow1,flow2]
}");
            var result = IssueLocationCollector.GetIssueLocations(line).ToList();

            result.Should().HaveCount(2);

            VerifyIssueLocations(result,
                                 expectedIsPrimary: new[] { true, true },
                                 expectedLineNumbers: new[] { 3, 3 },
                                 expectedMessages: new string[] { null, null },
                                 expectedIssueIds: new[] { "flow1", "flow2" });
        }
        public void GetIssueLocations_Secondary_ExactColumn_Ids()
        {
            var line   = GetLine(2, @"if (a > b)
{
    Console.WriteLine(a); //Secondary ^13#9 [myId]
}");
            var result = IssueLocationCollector.GetIssueLocations(line).ToList();

            result.Should().ContainSingle();

            VerifyIssueLocations(result,
                                 expectedIsPrimary: new[] { false },
                                 expectedLineNumbers: new[] { 3 },
                                 expectedMessages: new string[] { null },
                                 expectedIssueIds: new[] { "myId" });
        }
        public void GetIssueLocations_Noncompliant_Offset_ExactColumn_Message_Whitespaces_Xml()
        {
            var line   = GetLine(2, @"<RootRootRootRootRootRoot />

<!-- Noncompliant @-2 ^5#16 [myIssueId] {{MyMessage}} -->
");
            var result = IssueLocationCollector.GetIssueLocations(line).ToList();

            result.Should().ContainSingle();

            VerifyIssueLocations(result,
                                 expectedIsPrimary: new[] { true },
                                 expectedLineNumbers: new[] { 1 },
                                 expectedMessages: new[] { "MyMessage" },
                                 expectedIssueIds: new[] { "myIssueId" });
            result.Select(issue => issue.Start).Should().Equal(new[] { 4 });
            result.Select(issue => issue.Length).Should().Equal(new[] { 16 });
        }