File: VisualBasic\BasicExtractInterfaceDialog.cs
Web Access
Project: ..\..\..\src\VisualStudio\IntegrationTest\IntegrationTests\Microsoft.VisualStudio.LanguageServices.IntegrationTests.csproj (Microsoft.VisualStudio.LanguageServices.IntegrationTests)
// 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 Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Microsoft.VisualStudio.IntegrationTest.Utilities.OutOfProcess;
using Roslyn.Test.Utilities;
using Xunit;
using Xunit.Abstractions;
using ProjectUtils = Microsoft.VisualStudio.IntegrationTest.Utilities.Common.ProjectUtils;
 
namespace Roslyn.VisualStudio.IntegrationTests.VisualBasic
{
    [Collection(nameof(SharedIntegrationHostFixture))]
    [Trait(Traits.Feature, Traits.Features.CodeActionsExtractInterface)]
    public class BasicExtractInterfaceDialog : AbstractEditorTest
    {
        protected override string LanguageName => LanguageNames.VisualBasic;
 
        private ExtractInterfaceDialog_OutOfProc ExtractInterfaceDialog => VisualStudio.ExtractInterfaceDialog;
 
        public BasicExtractInterfaceDialog(VisualStudioInstanceFactory instanceFactory)
            : base(instanceFactory, nameof(BasicExtractInterfaceDialog))
        {
        }
 
        [WpfFact]
        public void CoreScenario()
        {
            SetUpEditor(@"Class C$$
    Public Sub M()
    End Sub
End Class");
 
            VisualStudio.Editor.InvokeCodeActionList();
            VisualStudio.Editor.Verify.CodeAction("Extract interface...",
                applyFix: true,
                blockUntilComplete: false);
 
            ExtractInterfaceDialog.VerifyOpen();
            ExtractInterfaceDialog.ClickOK();
            ExtractInterfaceDialog.VerifyClosed();
 
            var project = new ProjectUtils.Project(ProjectName);
            VisualStudio.SolutionExplorer.OpenFile(project, "Class1.vb");
 
            VisualStudio.Editor.Verify.TextContains(@"Class C
    Implements IC
 
    Public Sub M() Implements IC.M
    End Sub
End Class");
 
            VisualStudio.SolutionExplorer.OpenFile(project, "IC.vb");
 
            VisualStudio.Editor.Verify.TextContains(@"Interface IC
    Sub M()
End Interface");
        }
 
        [WpfFact]
        public void CheckFileName()
        {
            SetUpEditor(@"Class C2$$
    Public Sub M()
    End Sub
End Class");
 
            VisualStudio.Editor.InvokeCodeActionList();
            VisualStudio.Editor.Verify.CodeAction("Extract interface...",
                applyFix: true,
                blockUntilComplete: false);
 
            ExtractInterfaceDialog.VerifyOpen();
 
            var fileName = ExtractInterfaceDialog.GetTargetFileName();
 
            Assert.Equal(expected: "IC2.vb", actual: fileName);
 
            ExtractInterfaceDialog.ClickCancel();
        }
 
        [WpfFact]
        public void CheckSameFile()
        {
            SetUpEditor(@"Class C$$
    Public Sub M()
    End Sub
End Class");
            VisualStudio.Editor.InvokeCodeActionList();
            VisualStudio.Editor.Verify.CodeAction("Extract interface...",
                applyFix: true,
                blockUntilComplete: false);
 
            ExtractInterfaceDialog.VerifyOpen();
 
            ExtractInterfaceDialog.SelectSameFile();
 
            ExtractInterfaceDialog.ClickOK();
            ExtractInterfaceDialog.VerifyClosed();
 
            _ = new ProjectUtils.Project(ProjectName);
            VisualStudio.Editor.Verify.TextContains(@"Interface IC
    Sub M()
End Interface
 
Class C
    Implements IC
 
    Public Sub M() Implements IC.M
    End Sub
End Class");
 
        }
 
        [WpfFact]
        public void CheckSameFileOnlySelectedItems()
        {
            SetUpEditor(@"Class C$$
    Public Sub M1()
    Public Sub M2()
    End Sub
End Class");
 
            VisualStudio.Editor.InvokeCodeActionList();
            VisualStudio.Editor.Verify.CodeAction("Extract interface...",
                applyFix: true,
                blockUntilComplete: false);
 
            ExtractInterfaceDialog.VerifyOpen();
            ExtractInterfaceDialog.ClickDeselectAll();
            ExtractInterfaceDialog.ToggleItem("M2()");
            ExtractInterfaceDialog.SelectSameFile();
            ExtractInterfaceDialog.ClickOK();
            ExtractInterfaceDialog.VerifyClosed();
 
            VisualStudio.Editor.Verify.TextContains(@"Interface IC
    Sub M2()
End Interface
 
Class C
    Implements IC
 
    Public Sub M1()
    Public Sub M2() Implements IC.M2
    End Sub
End Class");
        }
 
        [WpfFact]
        public void CheckSameFileNamespace()
        {
            SetUpEditor(@"Namespace A
    Class C$$
        Public Sub M()
        End Sub
    End Class
End Namespace");
 
            VisualStudio.Editor.InvokeCodeActionList();
            VisualStudio.Editor.Verify.CodeAction("Extract interface...",
                applyFix: true,
                blockUntilComplete: false);
 
            ExtractInterfaceDialog.VerifyOpen();
 
            ExtractInterfaceDialog.SelectSameFile();
 
            ExtractInterfaceDialog.ClickOK();
            ExtractInterfaceDialog.VerifyClosed();
 
            _ = new ProjectUtils.Project(ProjectName);
            VisualStudio.Editor.Verify.TextContains(@"Namespace A
    Interface IC
        Sub M()
    End Interface
 
    Class C
        Implements IC
 
        Public Sub M() Implements IC.M
        End Sub
    End Class
End Namespace");
        }
    }
}