File: Debugging\VisualBasicBreakpointResolutionServiceTests.vb
Web Access
Project: src\src\VisualStudio\Core\Test\Microsoft.VisualStudio.LanguageServices.UnitTests.vbproj (Microsoft.VisualStudio.LanguageServices.UnitTests)
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
 
Imports System.Threading
Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.Debugging
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Extensions
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Debugging
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.UnitTests.Debugging
    <[UseExportProvider]>
    Public Class VisualBasicBreakpointResolutionServiceTests
 
        Public Async Function TestSpanWithLengthAsync(markup As XElement, length As Integer) As Task
            Dim position As Integer? = Nothing
            Dim expectedSpan As TextSpan? = Nothing
            Dim source As String = Nothing
            MarkupTestFile.GetPositionAndSpan(markup.NormalizedValue, source, position, expectedSpan)
 
            Using workspace = TestWorkspace.CreateVisualBasic(source)
                Dim document = workspace.CurrentSolution.Projects.First.Documents.First
                Dim result As BreakpointResolutionResult = Await VisualBasicBreakpointResolutionService.GetBreakpointAsync(document, position.Value, length, CancellationToken.None)
                Assert.True(expectedSpan.Value = result.TextSpan,
                                String.Format(vbCrLf & "Expected: {0} ""{1}""" & vbCrLf & "Actual: {2} ""{3}""",
                                                expectedSpan.Value,
                                                source.Substring(expectedSpan.Value.Start, expectedSpan.Value.Length),
                                                result.TextSpan,
                                                source.Substring(result.TextSpan.Start, result.TextSpan.Length)))
            End Using
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/876520")>
        Public Async Function TestBreakpointSpansMultipleMethods() As Task
            ' Normal case: debugger passing BP spans "sub Goo() end sub"
            Await TestSpanWithLengthAsync(<text>
class C
  [|$$sub Goo()|]
  end sub
 
  sub Bar()
  end sub
end class</text>, 20)
 
            ' Rare case: debugger passing BP spans "sub Goo() end sub sub Bar() end sub"
            Await TestSpanWithLengthAsync(<text>
class C
  $$sub Goo()
  end sub
 
  [|sub Bar()|]
  end sub
end class</text>, 35)
        End Function
    End Class
End Namespace