/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/Test2/Rename/RenameTestHelpers.vb
188 строк
10 KB
David Barbet
Fix RenameTestHelpers VB formatting
10 апр 2026, 21:58
10 апр 2026, 21:58
2ecba58
Код
Авторство
О чём код?
' 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 Imports System.Collections.Immutable Imports System.Composition Imports System.IO Imports System.Threading Imports Microsoft.CodeAnalysis.Host Imports Microsoft.CodeAnalysis.Host.Mef Imports Microsoft.CodeAnalysis.Editor.Implementation.InlineRename Imports Microsoft.CodeAnalysis.Editor.Implementation.RenameTracking Imports Microsoft.CodeAnalysis.Editor.Shared.Utilities Imports Microsoft.CodeAnalysis.Editor.UnitTests.RenameTracking Imports Microsoft.CodeAnalysis.Editor.UnitTests.Utilities.GoToHelpers Imports Microsoft.CodeAnalysis.Options Imports Microsoft.CodeAnalysis.Shared.TestHooks Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.Text.Shared.Extensions Imports Microsoft.VisualStudio.Text Imports Microsoft.VisualStudio.Text.Operations Imports Microsoft.VisualStudio.Text.Tagging Namespace Microsoft.CodeAnalysis.Editor.UnitTests.Rename Friend Module RenameTestHelpers Private ReadOnly s_composition As TestComposition = EditorTestCompositions.EditorFeatures.AddParts( GetType(MockDocumentNavigationServiceFactory), GetType(MockPreviewDialogService), GetType(TestWorkspaceConfigurationService)) Private Function GetSessionInfo(workspace As EditorTestWorkspace) As (document As Document, textSpan As TextSpan) Dim hostdoc = workspace.DocumentWithCursor Dim caretPosition = hostdoc.CursorPosition.Value Dim textBuffer = hostdoc.GetTextBuffer() ' Make sure the undo manager is hooked up to this text buffer. This is automatically ' done in any real editor. workspace.GetService(Of ITextBufferUndoManagerProvider).GetTextBufferUndoManager(textBuffer) Dim solution = workspace.CurrentSolution Dim token = solution.GetDocument(hostdoc.Id).GetSyntaxRootAsync().Result.FindToken(caretPosition) Return (solution.GetDocument(hostdoc.Id), token.Span) End Function Public Function StartSession(workspace As EditorTestWorkspace) As InlineRenameSession Dim renameService = workspace.GetService(Of IInlineRenameService)() Dim sessionInfo = GetSessionInfo(workspace) Return DirectCast(renameService.StartInlineSession(sessionInfo.document, sessionInfo.textSpan, CancellationToken.None).Session, InlineRenameSession) End Function Public Sub AssertTokenRenamable(workspace As EditorTestWorkspace) Dim renameService = DirectCast(workspace.GetService(Of IInlineRenameService)(), InlineRenameService) Dim sessionInfo = GetSessionInfo(workspace) Dim result = renameService.StartInlineSession(sessionInfo.document, sessionInfo.textSpan, CancellationToken.None) Assert.True(result.CanRename) Assert.Null(result.LocalizedErrorMessage) End Sub Public Sub AssertTokenNotRenamable(workspace As EditorTestWorkspace) Dim renameService = DirectCast(workspace.GetService(Of IInlineRenameService)(), InlineRenameService) Dim sessionInfo = GetSessionInfo(workspace) Dim result = renameService.StartInlineSession(sessionInfo.document, sessionInfo.textSpan, CancellationToken.None) Assert.False(result.CanRename) Assert.NotNull(result.LocalizedErrorMessage) End Sub Public Async Function VerifyTagsAreCorrect(workspace As EditorTestWorkspace) As Task Await WaitForRename(workspace) For Each document In workspace.Documents For Each annotations In document.AnnotatedSpans Dim expectedReplacementText = annotations.Key If expectedReplacementText <> "CONFLICT" Then For Each annotatedSpan In annotations.Value Dim trackingSpan = document.InitialTextSnapshot.CreateTrackingSpan(annotatedSpan.ToSpan(), SpanTrackingMode.EdgeInclusive) Assert.Equal(expectedReplacementText, trackingSpan.GetText(document.GetTextBuffer().CurrentSnapshot)) Next End If Next Next End Function Public Async Function VerifyChangedSourceGeneratedDocumentFileNames(workspace As EditorTestWorkspace, ParamArray mappedFiles As String()) As Task Await WaitForRename(workspace) Assert.Equal(workspace.ChangedSourceGeneratedDocumentFileNames, mappedFiles) End Function Public Sub VerifyFileName(document As Document, newIdentifierName As String) Dim expectedName = Path.ChangeExtension(newIdentifierName, Path.GetExtension(document.Name)) Assert.Equal(expectedName, document.Name) End Sub Public Sub VerifyFileName(workspace As EditorTestWorkspace, newIdentifierName As String) Dim documentId = workspace.Documents.Single().Id VerifyFileName(workspace.CurrentSolution.GetDocument(documentId), newIdentifierName) End Sub #Disable Warning IDE0060 ' Remove unused parameter - https://github.com/dotnet/roslyn/issues/45890 Public Function CreateWorkspaceWithWaiter(element As XElement, host As RenameTestHost, ParamArray additionalParts As Type()) As EditorTestWorkspace #Enable Warning IDE0060 ' Remove unused parameter Dim composition = If(additionalParts.Length = 0, s_composition, s_composition.AddParts(additionalParts)) Dim workspace = EditorTestWorkspace.CreateWorkspace(element, composition:=composition) workspace.GetOpenDocumentIds().Select(Function(id) workspace.GetTestDocument(id).GetTextView()).ToList() Return workspace End Function Public Async Function WaitForRename(workspace As EditorTestWorkspace) As Task Dim provider = workspace.ExportProvider.GetExportedValue(Of AsynchronousOperationListenerProvider) Await provider.WaitAllDispatcherOperationAndTasksAsync(workspace, FeatureAttribute.EventHookup, FeatureAttribute.Rename, FeatureAttribute.RenameTracking) End Function Public Function CreateRenameTrackingTagger(workspace As EditorTestWorkspace, document As EditorTestHostDocument) As ITagger(Of RenameTrackingTag) Dim tracker = New RenameTrackingTaggerProvider( workspace.GetService(Of IThreadingContext), workspace.GetService(Of IInlineRenameService)(), workspace.GetService(Of IGlobalOptionService)(), workspace.GetService(Of IAsynchronousOperationListenerProvider)) Return tracker.CreateTagger(Of RenameTrackingTag)(document.GetTextBuffer()) End Function Public Async Function VerifyNoRenameTrackingTags(tagger As ITagger(Of RenameTrackingTag), workspace As EditorTestWorkspace, document As EditorTestHostDocument) As Task Dim tags = Await GetRenameTrackingTags(tagger, workspace, document) Assert.Equal(0, tags.Count()) End Function Public Async Function VerifyRenameTrackingTags(tagger As ITagger(Of RenameTrackingTag), workspace As EditorTestWorkspace, document As EditorTestHostDocument, expectedTagCount As Integer) As Task Dim tags = Await GetRenameTrackingTags(tagger, workspace, document) Assert.Equal(expectedTagCount, tags.Count()) End Function Public Async Function GetRenameTrackingTags(tagger As ITagger(Of RenameTrackingTag), workspace As EditorTestWorkspace, document As EditorTestHostDocument) As Task(Of IEnumerable(Of ITagSpan(Of RenameTrackingTag))) Await WaitForRename(workspace) Dim view = document.GetTextView() Return tagger.GetTags(view.TextBuffer.CurrentSnapshot.GetSnapshotSpanCollection()) End Function <ExportWorkspaceService(GetType(ISourceGeneratedDocumentSpanMappingService)), [Shared]> <PartNotDiscoverable> Friend NotInheritable Class TestRazorSourceGeneratedDocumentSpanMappingService Implements ISourceGeneratedDocumentSpanMappingService <ImportingConstructor> <Obsolete(MefConstruction.ImportingConstructorMessage, True)> Public Sub New() End Sub Public Function CanMapSpans(sourceGeneratedDocument As SourceGeneratedDocument) As Boolean Implements ISourceGeneratedDocumentSpanMappingService.CanMapSpans Return String.Equals(Path.GetFileName(sourceGeneratedDocument.FilePath), "generated_file.cs", StringComparison.OrdinalIgnoreCase) End Function Public Async Function GetMappedTextChangesAsync(oldDocument As SourceGeneratedDocument, newDocument As SourceGeneratedDocument, cancellationToken As CancellationToken) As Task(Of ImmutableArray(Of MappedTextChange)) Implements ISourceGeneratedDocumentSpanMappingService.GetMappedTextChangesAsync If Not CanMapSpans(newDocument) Then Return ImmutableArray(Of MappedTextChange).Empty End If Dim changes = Await newDocument.GetTextChangesAsync(oldDocument, cancellationToken).ConfigureAwait(False) Dim builder = ImmutableArray.CreateBuilder(Of MappedTextChange)(changes.Count) For Each change In changes builder.Add(New MappedTextChange(newDocument.FilePath, change)) Next Return builder.MoveToImmutable() End Function Public Async Function MapSpansAsync(document As SourceGeneratedDocument, spans As ImmutableArray(Of TextSpan), cancellationToken As CancellationToken) As Task(Of ImmutableArray(Of MappedSpanResult)) Implements ISourceGeneratedDocumentSpanMappingService.MapSpansAsync If Not CanMapSpans(document) Then Return ImmutableArray(Of MappedSpanResult).Empty End If Dim sourceText = Await document.GetTextAsync(cancellationToken).ConfigureAwait(False) Dim builder = ImmutableArray.CreateBuilder(Of MappedSpanResult)(spans.Length) For Each span In spans builder.Add(New MappedSpanResult(document.FilePath, sourceText.Lines.GetLinePositionSpan(span), span)) Next Return builder.MoveToImmutable() End Function End Class End Module End Namespace