|
' 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.Editor.UnitTests
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Utilities.GoToHelpers
Imports Microsoft.CodeAnalysis.FindUsages
Imports Microsoft.CodeAnalysis.Remote.Testing
Friend Class GoToHelpers
Friend Shared Async Function TestAsync(
workspaceDefinition As XElement,
testHost As TestHost,
testingMethod As Func(Of Document, Integer, SimpleFindUsagesContext, Task),
Optional shouldSucceed As Boolean = True,
Optional metadataDefinitions As String() = Nothing) As Task
Using workspace = EditorTestWorkspace.Create(workspaceDefinition, composition:=EditorTestCompositions.EditorFeatures.WithTestHostParts(testHost))
Dim documentWithCursor = workspace.DocumentWithCursor
Dim position = documentWithCursor.CursorPosition.Value
Dim solution = workspace.CurrentSolution
Dim document = Await solution.GetRequiredDocumentAsync(documentWithCursor.Id, includeSourceGenerated:=True, CancellationToken.None)
Dim context = New SimpleFindUsagesContext()
Await testingMethod(document, position, context)
If Not shouldSucceed Then
Assert.NotNull(context.Message)
Else
Dim actualDefinitions = New List(Of FilePathAndSpan)
For Each definition In context.GetDefinitions()
For Each sourceSpan In definition.SourceSpans
actualDefinitions.Add(New FilePathAndSpan(sourceSpan.Document.FilePath, sourceSpan.SourceSpan))
Next
Next
actualDefinitions.Sort()
Dim expectedDefinitions = workspace.Documents.SelectMany(
Function(d) d.SelectedSpans.Select(Function(ss) New FilePathAndSpan(d.FilePath, ss))).ToList()
expectedDefinitions.Sort()
Assert.Equal(expectedDefinitions.Count, actualDefinitions.Count)
For i = 0 To actualDefinitions.Count - 1
Dim actual = actualDefinitions(i)
Dim expected = expectedDefinitions(i)
Assert.True(actual.CompareTo(expected) = 0,
$"Expected: ({expected}) but got: ({actual})")
Next
Dim actualDefinitionsWithoutSpans = context.GetDefinitions().
Where(Function(d) d.SourceSpans.IsDefaultOrEmpty).
Select(Function(di)
Return String.Format("{0}:{1}",
String.Join("", di.MetadataLocations.Single().Name),
String.Join("", di.NameDisplayParts.Select(Function(t) t.Text)))
End Function).ToList()
actualDefinitionsWithoutSpans.Sort()
If metadataDefinitions Is Nothing Then
metadataDefinitions = {}
End If
AssertEx.Equal(metadataDefinitions, actualDefinitionsWithoutSpans)
End If
End Using
End Function
End Class
|