/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/VisualStudio/IntegrationTest/New.IntegrationTests/VisualBasic/BasicAddMissingReference.cs
196 строк
9 KB
Cyrus Najmabadi
revise
10 июл 2025, 04:33
10 июл 2025, 04:33
24e1752
Код
Авторство
О чём код?
// 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. using System.Threading.Tasks; using System.Xml.Linq; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Test.Utilities; using Microsoft.VisualStudio.IntegrationTest.Utilities; using Roslyn.VisualStudio.IntegrationTests; using Roslyn.VisualStudio.NewIntegrationTests.InProcess; using Xunit; namespace Roslyn.VisualStudio.NewIntegrationTests.VisualBasic; [Trait(Traits.Feature, Traits.Features.AddMissingReference)] public class BasicAddMissingReference : AbstractEditorTest { private const string FileInLibraryProject1 = """ Public Class Class1 Inherits System.Windows.Forms.Form Public Sub goo() End Sub End Class Public Class class2 Public Sub goo(ByVal x As System.Windows.Forms.Form) End Sub Public Event ee As System.Windows.Forms.ColumnClickEventHandler End Class Public Class class3 Implements System.Windows.Forms.IButtonControl Public Property DialogResult() As System.Windows.Forms.DialogResult Implements System.Windows.Forms.IButtonControl.DialogResult Get End Get Set(ByVal Value As System.Windows.Forms.DialogResult) End Set End Property Public Sub NotifyDefault(ByVal value As Boolean) Implements System.Windows.Forms.IButtonControl.NotifyDefault End Sub Public Sub PerformClick() Implements System.Windows.Forms.IButtonControl.PerformClick End Sub End Class """; private const string FileInLibraryProject2 = """ Public Class Class1 Inherits System.Xml.XmlAttribute Sub New() MyBase.New(Nothing, Nothing, Nothing, Nothing) End Sub Sub goo() End Sub Public bar As ClassLibrary3.Class1 End Class """; private const string FileInLibraryProject3 = """ Public Class Class1 Public Enum E E1 E2 End Enum Public Function Goo() As ADODB.Recordset Dim x As ADODB.Recordset = Nothing Return x End Function End Class """; private const string FileInConsoleProject1 = """ Imports System.Data.XLinq Module Module1 Sub Main() 'ERRID_UnreferencedAssembly3 Dim y As New ClassLibrary1.class2 y.goo(Nothing) 'ERRID_UnreferencedAssemblyEvent3 AddHandler y.ee, Nothing 'ERRID_UnreferencedAssemblyBase3 Dim x As New ClassLibrary1.Class1 x.goo() 'ERRID_UnreferencedAssemblyImplements3 Dim z As New ClassLibrary1.class3 Dim xxx = z.DialogResult 'ERRID_SymbolFromUnreferencedProject3 Dim a As New ClassLibrary2.Class1 Dim c As Boolean = a.HasChildNodes() Dim d = a.bar End Sub End Module """; private const string ClassLibrary1Name = "ClassLibrary1"; private const string ClassLibrary2Name = "ClassLibrary2"; private const string ClassLibrary3Name = "ClassLibrary3"; private const string ConsoleProjectName = "ConsoleApplication1"; protected override string LanguageName => LanguageNames.VisualBasic; public override async Task InitializeAsync() { await base.InitializeAsync().ConfigureAwait(true); await TestServices.SolutionExplorer.CreateSolutionAsync("ReferenceErrors", solutionElement: XElement.Parse( "<Solution>" + $" <Project ProjectName=\"{ClassLibrary1Name}\" ProjectTemplate=\"{WellKnownProjectTemplates.WinFormsApplication}\" Language=\"{LanguageNames.VisualBasic}\">" + " <Document FileName=\"Class1.vb\"><![CDATA[" + FileInLibraryProject1 + "]]>" + " </Document>" + " </Project>" + $" <Project ProjectName=\"{ClassLibrary2Name}\" ProjectReferences=\"{ClassLibrary3Name}\" ProjectTemplate=\"{WellKnownProjectTemplates.ClassLibrary}\" Language=\"{LanguageNames.VisualBasic}\">" + " <Document FileName=\"Class1.vb\"><![CDATA[" + FileInLibraryProject2 + "]]>" + " </Document>" + " </Project>" + $" <Project ProjectName=\"{ClassLibrary3Name}\" ProjectTemplate=\"{WellKnownProjectTemplates.ClassLibrary}\" Language=\"{LanguageNames.VisualBasic}\">" + " <Document FileName=\"Class1.vb\"><![CDATA[" + FileInLibraryProject3 + "]]>" + " </Document>" + " </Project>" + $" <Project ProjectName=\"{ConsoleProjectName}\" ProjectReferences=\"{ClassLibrary1Name};{ClassLibrary2Name}\" ProjectTemplate=\"{WellKnownProjectTemplates.ConsoleApplication}\" Language=\"{LanguageNames.VisualBasic}\">" + " <Document FileName=\"Module1.vb\"><![CDATA[" + FileInConsoleProject1 + "]]>" + " </Document>" + " </Project>" + "</Solution>"), HangMitigatingCancellationToken); } [IdeFact] public async Task VerifyAvailableCodeActions() { var consoleProject = ConsoleProjectName; await TestServices.SolutionExplorer.OpenFileAsync(consoleProject, "Module1.vb", HangMitigatingCancellationToken); await TestServices.Editor.PlaceCaretAsync("y.goo", charsOffset: 1, HangMitigatingCancellationToken); await TestServices.Editor.InvokeCodeActionListAsync(HangMitigatingCancellationToken); await TestServices.EditorVerifier.CodeActionAsync("Add reference to 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.", applyFix: false, cancellationToken: HangMitigatingCancellationToken); await TestServices.Editor.PlaceCaretAsync("x.goo", charsOffset: 1, HangMitigatingCancellationToken); await TestServices.Editor.InvokeCodeActionListAsync(HangMitigatingCancellationToken); await TestServices.EditorVerifier.CodeActionAsync("Add reference to 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.", applyFix: false, cancellationToken: HangMitigatingCancellationToken); await TestServices.Editor.PlaceCaretAsync("z.DialogResult", charsOffset: 1, HangMitigatingCancellationToken); await TestServices.Editor.InvokeCodeActionListAsync(HangMitigatingCancellationToken); await TestServices.EditorVerifier.CodeActionAsync("Add reference to 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.", applyFix: false, cancellationToken: HangMitigatingCancellationToken); await TestServices.Editor.PlaceCaretAsync("a.bar", charsOffset: 1, HangMitigatingCancellationToken); await TestServices.Editor.InvokeCodeActionListAsync(HangMitigatingCancellationToken); await TestServices.EditorVerifier.CodeActionAsync("Add project reference to 'ClassLibrary3'.", applyFix: false, cancellationToken: HangMitigatingCancellationToken); } [IdeFact] public async Task InvokeSomeFixesInVisualBasicThenVerifyReferences() { await TestServices.SolutionExplorer.OpenFileAsync(ConsoleProjectName, "Module1.vb", HangMitigatingCancellationToken); await TestServices.Editor.PlaceCaretAsync("y.goo", charsOffset: 1, HangMitigatingCancellationToken); await TestServices.Editor.InvokeCodeActionListAsync(HangMitigatingCancellationToken); await TestServices.EditorVerifier.CodeActionAsync("Add reference to 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.", applyFix: true, cancellationToken: HangMitigatingCancellationToken); await TestServices.SolutionVerifier.AssemblyReferencePresentAsync( projectName: ConsoleProjectName, assemblyName: "System.Windows.Forms", assemblyVersion: "4.0.0.0", assemblyPublicKeyToken: "b77a5c561934e089", HangMitigatingCancellationToken); await TestServices.Editor.PlaceCaretAsync("a.bar", charsOffset: 1, HangMitigatingCancellationToken); await TestServices.Editor.InvokeCodeActionListAsync(HangMitigatingCancellationToken); await TestServices.EditorVerifier.CodeActionAsync("Add project reference to 'ClassLibrary3'.", applyFix: true, cancellationToken: HangMitigatingCancellationToken); await TestServices.SolutionVerifier.ProjectReferencePresentAsync( projectName: ConsoleProjectName, referencedProjectName: ClassLibrary3Name, HangMitigatingCancellationToken); } }