/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/Test2/Rename/CSharp/SourceGeneratorTests.vb
135 строк
5 KB
David Wengier
Tests for inline rename
25 июл 2025, 06:52
25 июл 2025, 06:52
6903eab
Код
Авторство
О чём код?
' 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.Rename.ConflictEngine Imports Microsoft.CodeAnalysis.Testing Imports Microsoft.CodeAnalysis.Text Namespace Microsoft.CodeAnalysis.Editor.UnitTests.Rename.CSharp <[UseExportProvider]> <Trait(Traits.Feature, Traits.Features.Rename)> Public Class SourceGeneratorTests Private ReadOnly _outputHelper As Abstractions.ITestOutputHelper Public Sub New(outputHelper As Abstractions.ITestOutputHelper) _outputHelper = outputHelper End Sub <Theory, CombinatorialData> Public Sub RenameColorColorCaseWithGeneratedClassName(host As RenameTestHost) Using result = RenameEngineResult.Create(_outputHelper, <Workspace> <Project Language="C#" AssemblyName="ClassLibrary1" CommonReferences="true"> <Document> public class RegularClass { public GeneratedClass [|$$GeneratedClass|]; } </Document> <DocumentFromSourceGenerator> public class GeneratedClass { } </DocumentFromSourceGenerator> </Project> </Workspace>, host:=host, renameTo:="A") End Using End Sub <Theory, CombinatorialData> Public Sub RenameWithReferenceInGeneratedFile(host As RenameTestHost) Using result = RenameEngineResult.Create(_outputHelper, <Workspace> <Project Language="C#" AssemblyName="ClassLibrary1" CommonReferences="true"> <Document> public class [|$$RegularClass|] { } </Document> <DocumentFromSourceGenerator> public class GeneratedClass { public void M(RegularClass c) { } } </DocumentFromSourceGenerator> </Project> </Workspace>, host:=host, renameTo:="A") End Using End Sub <Theory, CombinatorialData> Public Async Function RenameWithReferenceInRazorGeneratedFile(host As RenameTestHost) As Task Dim generatedMarkup = " public class GeneratedClass { public void M([|RegularClass|] c) { } } " Dim generatedCode As String = "" Dim span As TextSpan TestFileMarkupParser.GetSpan(generatedMarkup, generatedCode, span) Dim sourceGenerator = New Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator(Sub(c) c.AddSource("generated_file.cs", generatedCode)) Using result = RenameEngineResult.Create(_outputHelper, <Workspace> <Project Language="C#" AssemblyName="ClassLibrary1" CommonReferences="true"> <Document> public class [|$$RegularClass|] { } </Document> </Project> </Workspace>, host:=host, sourceGenerator:=sourceGenerator, renameTo:="A") Dim project = result.ConflictResolution.OldSolution.Projects.Single() Dim generatedDocuments = Await project.GetSourceGeneratedDocumentsAsync(CancellationToken.None) Dim generatedTree = Await generatedDocuments.Single().GetSyntaxTreeAsync(CancellationToken.None) Dim location = CodeAnalysis.Location.Create(generatedTree, span) 'Manually assert the generated location, because the test workspace doesn't know about it result.AssertLocationReferencedAs(location, RelatedLocationType.NoConflict) End Using End Function <Theory, CombinatorialData> <WorkItem("https://github.com/dotnet/roslyn/issues/51537")> Public Sub RenameWithCascadeIntoGeneratedFile(host As RenameTestHost) Using result = RenameEngineResult.Create(_outputHelper, <Workspace> <Project Language="C#" AssemblyName="ClassLibrary1" CommonReferences="true"> <Document> public interface IInterface { int [|$$Property|] { get; set; } } public partial class GeneratedClass : IInterface { } </Document> </Project> </Workspace>, host:=host, renameTo:="A", sourceGenerator:=New GeneratorThatImplementsInterfaceMethod()) End Using End Sub #Disable Warning RS1042 Private Class GeneratorThatImplementsInterfaceMethod Implements ISourceGenerator #Enable Warning RS1042 #Disable Warning BC40000 Public Sub Initialize(context As GeneratorInitializationContext) Implements ISourceGenerator.Initialize End Sub Public Sub Execute(context As GeneratorExecutionContext) Implements ISourceGenerator.Execute #Enable Warning BC40000 Dim [interface] = context.Compilation.GetTypeByMetadataName("IInterface") Dim memberName = [interface].MemberNames.Single() Dim text = "public partial class GeneratedClass { public int " + memberName + " { get; set; } }" context.AddSource("Implementation.cs", text) End Sub End Class End Class End Namespace