public void Convert_IssueHasTwoFlows_IssueVisualizationWithTwoFlows()
        {
            var firstFlowFirstLocation  = CreateLocation(Path.GetRandomFileName());
            var firstFlowSecondLocation = CreateLocation(Path.GetRandomFileName());
            var firstFlow = CreateFlow(firstFlowFirstLocation, firstFlowSecondLocation);

            var secondFlowFirstLocation  = CreateLocation(Path.GetRandomFileName());
            var secondFlowSecondLocation = CreateLocation(Path.GetRandomFileName());
            var secondFlow = CreateFlow(secondFlowFirstLocation, secondFlowSecondLocation);

            var issueSpan = CreateNonEmptySpan();
            var issue     = CreateIssue(Path.GetRandomFileName(), firstFlow, secondFlow);

            SetupSpanCalculator(issue, issueSpan);

            var expectedFirstFlowFirstLocationVisualization  = new AnalysisIssueLocationVisualization(1, firstFlowFirstLocation);
            var expectedFirstFlowSecondLocationVisualization = new AnalysisIssueLocationVisualization(2, firstFlowSecondLocation);
            var expectedFirstFlowVisualization = new AnalysisIssueFlowVisualization(1, new[] { expectedFirstFlowFirstLocationVisualization, expectedFirstFlowSecondLocationVisualization }, firstFlow);

            var expectedSecondFlowFirstLocationVisualization  = new AnalysisIssueLocationVisualization(1, secondFlowFirstLocation);
            var expectedSecondFlowSecondLocationVisualization = new AnalysisIssueLocationVisualization(2, secondFlowSecondLocation);
            var expectedSecondFlowVisualization = new AnalysisIssueFlowVisualization(2, new[] { expectedSecondFlowFirstLocationVisualization, expectedSecondFlowSecondLocationVisualization }, secondFlow);

            var expectedIssueVisualization = new AnalysisIssueVisualization(new[] { expectedFirstFlowVisualization, expectedSecondFlowVisualization }, issue, issueSpan);

            var actualIssueVisualization = testSubject.Convert(issue, textSnapshotMock);

            AssertConversion(expectedIssueVisualization, actualIssueVisualization);
        }
        public void Convert_IssueHasLocationsInDifferentFiles_CalculatesSpanForLocationsInSameFile()
        {
            var issueFilePath = Path.GetRandomFileName();

            var locationInSameFile    = CreateLocation(issueFilePath);
            var locationInAnotherFile = CreateLocation(Path.GetRandomFileName());
            var flow = CreateFlow(locationInSameFile, locationInAnotherFile);

            var issueSpan = CreateNonEmptySpan();
            var issue     = CreateIssue(issueFilePath, flow);

            SetupSpanCalculator(issue, issueSpan);

            var locationSpan = CreateNonEmptySpan();

            SetupSpanCalculator(locationInSameFile, locationSpan);

            var expectedLocation1 = new AnalysisIssueLocationVisualization(1, locationInSameFile)
            {
                Span = locationSpan
            };
            var expectedLocation2 = new AnalysisIssueLocationVisualization(2, locationInAnotherFile)
            {
                Span = null
            };
            var expectedFlow = new AnalysisIssueFlowVisualization(1, new[] { expectedLocation1, expectedLocation2 }, flow);
            var expectedIssueVisualization = new AnalysisIssueVisualization(new[] { expectedFlow }, issue, issueSpan);

            var actualIssueVisualization = testSubject.Convert(issue, textSnapshotMock);

            AssertConversion(expectedIssueVisualization, actualIssueVisualization);
        }
        public void Convert_IssueHasOneFlow_IssueVisualizationWithFlow()
        {
            var location = CreateLocation(Path.GetRandomFileName());
            var flow     = CreateFlow(location);

            var issueSpan = CreateNonEmptySpan();
            var issue     = CreateIssue(Path.GetRandomFileName(), flow);

            SetupSpanCalculator(issue, issueSpan);

            var expectedLocationVisualization = new AnalysisIssueLocationVisualization(1, location);
            var expectedFlowVisualization     = new AnalysisIssueFlowVisualization(1, new[] { expectedLocationVisualization }, flow);
            var expectedIssueVisualization    = new AnalysisIssueVisualization(new[] { expectedFlowVisualization }, issue, issueSpan);

            var actualIssueVisualization = testSubject.Convert(issue, textSnapshotMock);

            AssertConversion(expectedIssueVisualization, actualIssueVisualization);
        }