File: MoveStaticMembers\VisualBasicMoveStaticMembersTests.vb
Web Access
Project: ..\..\..\src\EditorFeatures\VisualBasicTest\Microsoft.CodeAnalysis.VisualBasic.EditorFeatures.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.EditorFeatures.UnitTests)
' 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.Collections.Immutable
Imports Microsoft.CodeAnalysis.MoveStaticMembers
Imports Microsoft.CodeAnalysis.Test.Utilities.MoveStaticMembers
Imports Microsoft.CodeAnalysis.Testing
Imports Microsoft.CodeAnalysis.Testing.Verifiers
Imports VerifyVB = Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions.VisualBasicCodeRefactoringVerifier(Of
    Microsoft.CodeAnalysis.VisualBasic.CodeRefactorings.MoveStaticMembers.VisualBasicMoveStaticMembersRefactoringProvider)
 
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.MoveStaticMembers
    <UseExportProvider>
    <Trait(Traits.Feature, Traits.Features.CodeActionsMoveStaticMembers)>
    Public Class VisualBasicMoveStaticMembersTests
 
        Private Shared ReadOnly s_testServices As TestComposition = FeaturesTestCompositions.Features.AddParts(GetType(TestMoveStaticMembersService))
 
#Region "Perform New Type Action From Options"
        <Fact>
        Public Async Function TestMoveField() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Test[||]Field As Integer = 0
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/62283")>
        Public Async Function TestMoveField_MultipleDeclarators() As Task
            Dim initialMarkup = "
Class Program
 
    Public Shared G[||]oo As Integer, Bar As Integer
 
End Class
"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("Goo")
            Dim expectedText1 = "
Class Program
 
    Public Shared Bar As Integer
 
End Class
"
            Dim expectedText2 = "Class Class1Helpers
 
    Public Shared Goo As Integer
End Class
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveProperty() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared ReadOnly Property Test[||]Property As Integer
            Get
                Return 0
            End Get
        End Property
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestProperty")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared ReadOnly Property TestProperty As Integer
            Get
                Return 0
            End Get
        End Property
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveEvent() As Task
            Dim initialMarkup = "
Imports System
 
Namespace TestNs
    Public Class Class1
        Public Shared Event Test[||]Event As EventHandler
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestEvent")
            Dim expectedText1 = "
Imports System
 
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Imports System
 
Namespace TestNs
    Class Class1Helpers
        Public Shared Event TestEvent As EventHandler
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveComplexEvent() As Task
            Dim initialMarkup = "
Imports System
 
Namespace TestNs
    Public Class Class1
        Public Shared Custom Event Cl[||]ick As EventHandler
            AddHandler(ByVal value As EventHandler)
                Console.WriteLine(value.ToString())
            End AddHandler
            RemoveHandler(ByVal value As EventHandler)
                Console.WriteLine(value.ToString())
            End RemoveHandler
            RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                Console.WriteLine(sender.ToString())
            End RaiseEvent
        End Event
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("Click")
            Dim expectedText1 = "
Imports System
 
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Imports System
 
Namespace TestNs
    Class Class1Helpers
        Public Shared Custom Event Click As EventHandler
            AddHandler(ByVal value As EventHandler)
                Console.WriteLine(value.ToString())
            End AddHandler
            RemoveHandler(ByVal value As EventHandler)
                Console.WriteLine(value.ToString())
            End RemoveHandler
            RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
                Console.WriteLine(sender.ToString())
            End RaiseEvent
        End Event
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveSub() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Sub Test[||]Sub()
        End Sub
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestSub")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Sub TestSub()
        End Sub
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveConst() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Const Test[||]Const As Integer = 0
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestConst")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Const TestConst As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveNothing() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray(Of String).Empty
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionWithTrivia() As Task
            Dim initialMarkup = "
Namespace TestNs
    ' Comment we don't want to move
    Public Class Class1
        'Comment we want to move
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    ' Comment we don't want to move
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        'Comment we want to move
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestInNestedClass() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Class InnerClass
            Public Shared Function Test[||]Func() As Integer
                Return 0
            End Function
        End Class
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Class InnerClass
        End Class
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestInNestedNamespace() As Task
            Dim initialMarkup = "
Namespace TestNs
    Namespace InnerNs
        Public Class Class1
            Public Shared Function Tes[||]tFunc() As Integer
                Return 0
            End Function
        End Class
    End Namespace
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Namespace InnerNs
        Public Class Class1
        End Class
    End Namespace
End Namespace"
            Dim expectedText2 = "Namespace TestNs.InnerNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFieldNoNamespace() As Task
            Dim initialMarkup = "
Public Class Class1
    Public Shared Test[||]Field As Integer = 0
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Public Class Class1
End Class"
            Dim expectedText2 = "Class Class1Helpers
    Public Shared TestField As Integer = 0
End Class
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFieldNewNamespace() As Task
            Dim initialMarkup = "
Public Class Class1
    Public Shared Test[||]Field As Integer = 0
End Class"
            Dim newTypeName = "TestNs.Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Public Class Class1
End Class"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFieldAddNamespace() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Test[||]Field As Integer = 0
    End Class
End Namespace"
            Dim newTypeName = "InnerNs.Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs.InnerNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveGenericFunction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func(Of T)(item As T) As T
            Return item
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc(Of T)(item As T) As T
            Return item
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionWithGenericClass() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1(Of T)
        Public Shared Function Test[||]Func(item As T) As T
            Return item
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1(Of T)
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers(Of T)
        Public Shared Function TestFunc(item As T) As T
            Return item
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionWithFolders() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveMultipleFunctions() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func1() As Integer
            Return 0
        End Function
 
        Public Shared Function TestFunc2() As Boolean
            Return False
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc1", "TestFunc2")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc1() As Integer
            Return 0
        End Function
 
        Public Shared Function TestFunc2() As Boolean
            Return False
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveOneOfMultipleFuncs() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func1() As Integer
            Return 0
        End Function
 
        Public Shared Function TestFunc2() As Boolean
            Return False
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc2")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function TestFunc1() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
 
        Public Shared Function TestFunc2() As Boolean
            Return False
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveOneOfEach() As Task
            Dim initialMarkup = "
Imports System
 
Namespace TestNs
    Public Class Class1
        Public Shared Test[||]Field As Integer = 0
 
        Public Shared ReadOnly Property TestProperty As Integer
            Get
                Return 0
            End Get
        End Property
 
        Public Shared Event TestEvent As EventHandler
 
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
 
        Public Shared Sub TestSub()
        End Sub
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create(
                "TestField",
                "TestProperty",
                "TestFunc",
                "TestEvent",
                "TestSub")
            Dim expectedText1 = "
Imports System
 
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Imports System
 
Namespace TestNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
 
        Public Shared ReadOnly Property TestProperty As Integer
            Get
                Return 0
            End Get
        End Property
 
        Public Shared Event TestEvent As EventHandler
 
        Public Shared Sub TestSub()
        End Sub
 
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorUsage() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2() As Integer
            Return Class1.TestFunc() + 1
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2() As Integer
            Return Class1Helpers.TestFunc() + 1
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorUsageWithTrivia() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2() As Integer
            ' Keep this comment and these random spaces
            Return Class1. TestFunc( ) +  1
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2() As Integer
            ' Keep this comment and these random spaces
            Return Class1Helpers. TestFunc( ) +  1
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorSourceUsage() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
 
        Public Shared Function TestFunc2() As Integer
            Return TestFunc() + 1
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function TestFunc2() As Integer
            Return Class1Helpers.TestFunc() + 1
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFieldAndRefactorSourceUsage() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Test[||]Field As Integer = 0
 
        Public Shared Function TestFunc2() As Integer
            Return TestField + 1
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function TestFunc2() As Integer
            Return Class1Helpers.TestField + 1
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMovePropertyAndRefactorSourceUsage() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Private Shared _testProperty As Integer
 
        Public Shared Property Test[||]Property As Integer
            Get
                Return _testProperty
            End Get
            Set
                _testProperty = value
            End Set
        End Property
 
        Public Shared Function TestFunc2() As Integer
            Return TestProperty + 1
        End Function
    End Class
End Namespace"
            Dim newTypeName = "ExtraNs.Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("_testProperty", "TestProperty")
            Dim expectedText1 = "
Imports TestNs.ExtraNs
 
Namespace TestNs
    Public Class Class1
        Public Shared Function TestFunc2() As Integer
            Return Class1Helpers.TestProperty + 1
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs.ExtraNs
    Class Class1Helpers
        Private Shared _testProperty As Integer
 
        Public Shared Property TestProperty As Integer
            Get
                Return _testProperty
            End Get
            Set
                _testProperty = value
            End Set
        End Property
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveGenericFunctionAndRefactorImpliedUsage() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func(Of T)(item As T) As T
            Return item
        End Function
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2 As Integer
            Return Class1.TestFunc(5)
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2 As Integer
            Return Class1Helpers.TestFunc(5)
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc(Of T)(item As T) As T
            Return item
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveGenericFunctionAndRefactorUsage() As Task
            Dim initialMarkup = "Imports System
 
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func(Of T)() As Type
            Return GetType(T)
        End Function
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2 As Type
            Return Class1.TestFunc(Of Integer)()
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "Imports System
 
Namespace TestNs
    Public Class Class1
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2 As Type
            Return Class1Helpers.TestFunc(Of Integer)()
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Imports System
 
Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc(Of T)() As Type
            Return GetType(T)
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionFromGenericClassAndRefactorUsage() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1(Of T As New)
        Public Shared Function Test[||]Func() As T
            Return New T()
        End Function
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2 As Integer
            Return Class1(Of Integer).TestFunc()
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1(Of T As New)
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2 As Integer
            Return Class1Helpers(Of Integer).TestFunc()
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers(Of T As New)
        Public Shared Function TestFunc() As T
            Return New T()
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionFromGenericClassAndRefactorPartialTypeArgUsage() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1(Of T1 As New, T2, T3)
        Public Shared Function Test[||]Func() As T1
            Return New T1()
        End Function
 
        Public Shared Function Foo(item As T2) As T2
            Return item
        End Function
 
        Public Shared Function Bar(item As T3) As T3
            Return item
        End Function
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2 As Integer
            Return Class1(Of Integer, String, Double).TestFunc()
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1(Of T1 As New, T2, T3)
        Public Shared Function Foo(item As T2) As T2
            Return item
        End Function
 
        Public Shared Function Bar(item As T3) As T3
            Return item
        End Function
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2 As Integer
            Return Class1Helpers(Of Integer).TestFunc()
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers(Of T1 As New)
        Public Shared Function TestFunc() As T1
            Return New T1()
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorUsageDifferentNamespace() As Task
            Dim initialMarkup = "
Imports TestNs
 
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace
 
Namespace TestNs2
    Public Class Class2
        Public Shared Function TestFunc2() As Integer
            Return Class1.TestFunc() + 1
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Imports TestNs
 
Namespace TestNs
    Public Class Class1
    End Class
End Namespace
 
Namespace TestNs2
    Public Class Class2
        Public Shared Function TestFunc2() As Integer
            Return Class1Helpers.TestFunc() + 1
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorUsageNewNamespace() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2() As Integer
            Return Class1.TestFunc() + 1
        End Function
    End Class
End Namespace"
            Dim newTypeName = "ExtraNs.Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Imports TestNs.ExtraNs
 
Namespace TestNs
    Public Class Class1
    End Class
 
    Public Class Class2
        Public Shared Function TestFunc2() As Integer
            Return Class1Helpers.TestFunc() + 1
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs.ExtraNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorUsageSeparateFile() As Task
            Dim initialMarkup1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialMarkup2 = "
Imports TestNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1.TestFunc() + 1
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText3 = "
Imports TestNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc() + 1
    End Function
End Class"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName)
            test.TestState.Sources.Add(initialMarkup1)
            test.TestState.Sources.Add(initialMarkup2)
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add(expectedText3)
            test.FixedState.Sources.Add((newFileName, expectedText2))
 
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorClassAlias() As Task
            Dim initialMarkup1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialMarkup2 = "
Imports C1 = TestNs.Class1
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return C1.TestFunc() + 1
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText3 = "
Imports TestNs
Imports C1 = TestNs.Class1
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc() + 1
    End Function
End Class"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName)
            test.TestState.Sources.Add(initialMarkup1)
            test.TestState.Sources.Add(initialMarkup2)
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add(expectedText3)
            test.FixedState.Sources.Add((newFileName, expectedText2))
 
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorConflictingName() As Task
            Dim initialMarkup1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialMarkup2 = "
Imports TestNs
 
Public Class Class2
    Public Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 1
        End Function
    End Class
 
    Public Shared Function TestFunc2() As Integer
        Return Class1.TestFunc() + Class1Helpers.TestFunc()
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText3 = "
Imports TestNs
 
Public Class Class2
    Public Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 1
        End Function
    End Class
 
    Public Shared Function TestFunc2() As Integer
        Return TestNs.Class1Helpers.TestFunc() + Class1Helpers.TestFunc()
    End Function
End Class"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName)
            test.TestState.Sources.Add(initialMarkup1)
            test.TestState.Sources.Add(initialMarkup2)
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add(expectedText3)
            test.FixedState.Sources.Add((newFileName, expectedText2))
            ' In this case, the parse gives a MemberAccessExpression for 
            ' "TestNs.Class1Helpers.TestFunc", but we give a QualifiedName
            ' We can just ensure that the text output is the same here
            test.CodeActionValidationMode = Testing.CodeActionValidationMode.None
 
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorQualifiedName() As Task
            Dim initialMarkup1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialMarkup2 = "
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return TestNs.Class1.TestFunc() + 1
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText3 = "
Imports TestNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc() + 1
    End Function
End Class"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName)
            test.TestState.Sources.Add(initialMarkup1)
            test.TestState.Sources.Add(initialMarkup2)
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add(expectedText3)
            test.FixedState.Sources.Add((newFileName, expectedText2))
 
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorClassImports() As Task
            Dim initialMarkup1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialMarkup2 = "
Imports TestNs.Class1
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return TestFunc() + 1
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText3 = "
Imports TestNs
Imports TestNs.Class1
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc() + 1
    End Function
End Class"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName)
            test.TestState.Sources.Add(initialMarkup1)
            test.TestState.Sources.Add(initialMarkup2)
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add(expectedText3)
            test.FixedState.Sources.Add((newFileName, expectedText2))
 
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorNamespaceAlias() As Task
            Dim initialMarkup1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialMarkup2 = "
Imports C1 = TestNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return C1.Class1.TestFunc() + 1
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText3 = "
Imports TestNs
Imports C1 = TestNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc() + 1
    End Function
End Class"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName)
            test.TestState.Sources.Add(initialMarkup1)
            test.TestState.Sources.Add(initialMarkup2)
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add(expectedText3)
            test.FixedState.Sources.Add((newFileName, expectedText2))
 
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionAndRefactorNamespaceAliasNewNamespace() As Task
            Dim initialMarkup1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialMarkup2 = "
Imports C1 = TestNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return C1.Class1.TestFunc() + 1
    End Function
End Class"
            Dim newTypeName = "ExtraNs.Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText3 = "
Imports TestNs.ExtraNs
Imports C1 = TestNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc() + 1
    End Function
End Class"
            Dim expectedText2 = "Namespace TestNs.ExtraNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName)
            test.TestState.Sources.Add(initialMarkup1)
            test.TestState.Sources.Add(initialMarkup2)
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add(expectedText3)
            test.FixedState.Sources.Add((newFileName, expectedText2))
 
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveExtensionFunction() As Task
            Dim initialMarkup = "
Imports System.Runtime.CompilerServices
 
Namespace TestNs
    Public Module Class1
        <Extension>
        Public Function Test[||]Func(other As Other) As Integer
            Return other.OtherInt + 2
        End Function
    End Module
 
    Public Class Class2
        Public Function GetOtherInt() As Integer
            Dim other = New Other()
            Return other.TestFunc()
        End Function
    End Class
 
    Public Class Other
        Public OtherInt As Integer
 
        Public Sub New()
            OtherInt = 5
        End Sub
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Imports System.Runtime.CompilerServices
 
Namespace TestNs
    Public Module Class1
    End Module
 
    Public Class Class2
        Public Function GetOtherInt() As Integer
            Dim other = New Other()
            Return other.TestFunc()
        End Function
    End Class
 
    Public Class Other
        Public OtherInt As Integer
 
        Public Sub New()
            OtherInt = 5
        End Sub
    End Class
End Namespace"
            Dim expectedText2 = "Imports System.Runtime.CompilerServices
 
Namespace TestNs
    Module Class1Helpers
        <Extension>
        Public Function TestFunc(other As Other) As Integer
            Return other.OtherInt + 2
        End Function
    End Module
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveExtensionFunctionAddImports() As Task
            Dim initialMarkup = "
Imports System.Runtime.CompilerServices
Imports TestNs1
Imports TestNs2
 
Namespace TestNs1
    Public Module Class1
        <Extension>
        Public Function Test[||]Func(other As Other) As Integer
            Return other.OtherInt + 2
        End Function
    End Module
End Namespace
 
Namespace TestNs2
    Public Class Class2
        Public Function GetOtherInt() As Integer
            Dim other = New Other()
            Return other.TestFunc()
        End Function
    End Class
 
    Public Class Other
        Public OtherInt As Integer
 
        Public Sub New()
            OtherInt = 5
        End Sub
    End Class
End Namespace"
            Dim newTypeName = "ExtraNs.Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Imports System.Runtime.CompilerServices
Imports TestNs1
Imports TestNs1.ExtraNs
Imports TestNs2
 
Namespace TestNs1
    Public Module Class1
    End Module
End Namespace
 
Namespace TestNs2
    Public Class Class2
        Public Function GetOtherInt() As Integer
            Dim other = New Other()
            Return other.TestFunc()
        End Function
    End Class
 
    Public Class Other
        Public OtherInt As Integer
 
        Public Sub New()
            OtherInt = 5
        End Sub
    End Class
End Namespace"
            Dim expectedText2 = "Imports System.Runtime.CompilerServices
Imports TestNs2
 
Namespace TestNs1.ExtraNs
    Module Class1Helpers
        <Extension>
        Public Function TestFunc(other As Other) As Integer
            Return other.OtherInt + 2
        End Function
    End Module
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionInModule() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Module Class1
        Public Function Test[||]Func() As Integer
            Return 0
        End Function
    End Module
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Module Class1
    End Module
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Module Class1Helpers
        Public Function TestFunc() As Integer
            Return 0
        End Function
    End Module
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionRetainFileBanner() As Task
            Dim initialMarkup = "' Here is an example of a license or something
' That we want to keep/copy over
 
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "' Here is an example of a license or something
' That we want to keep/copy over
 
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "' Here is an example of a license or something
' That we want to keep/copy over
 
Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionWithRootNamespace() As Task
            Dim initialMarkup = "
Public Class Class1
    Public Shared Function Test[||]Func() As Integer
        Return 0
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Public Class Class1
End Class"
            ' if we cut out the root namespace, the returned namespace should still be the same
            Dim expectedText2 = "Class Class1Helpers
    Public Shared Function TestFunc() As Integer
        Return 0
    End Function
End Class
"
 
            Dim test = New Test(newTypeName, selection, newFileName) With {.TestCode = initialMarkup}
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add((newFileName, expectedText2))
            test.SolutionTransforms.Add(
                Function(solution, projectId)
                    Dim project = solution.GetProject(projectId)
                    Dim compilationOptions = DirectCast(project.CompilationOptions, VisualBasicCompilationOptions)
                    Return project.WithCompilationOptions(compilationOptions.WithRootNamespace("RootNs")).Solution
                End Function)
            Await test.RunAsync()
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionWithMultipleRootNamespaces() As Task
            Dim initialMarkup = "
Public Class Class1
    Public Shared Function Test[||]Func() As Integer
        Return 0
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Public Class Class1
End Class"
            ' if we cut out the root namespace, the returned namespace should still be the same
            Dim expectedText2 = "Class Class1Helpers
    Public Shared Function TestFunc() As Integer
        Return 0
    End Function
End Class
"
 
            Dim test = New Test(newTypeName, selection, newFileName) With {.TestCode = initialMarkup}
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add((newFileName, expectedText2))
            test.SolutionTransforms.Add(
                Function(solution, projectId)
                    Dim project = solution.GetProject(projectId)
                    Dim compilationOptions = DirectCast(project.CompilationOptions, VisualBasicCompilationOptions)
                    Return project.WithCompilationOptions(compilationOptions.WithRootNamespace("RootNs.TestNs")).Solution
                End Function)
            Await test.RunAsync()
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionWithRootAndNestedNamespace() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            ' if we cut out the root namespace, the returned namespace should still be the same
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName) With {.TestCode = initialMarkup}
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add((newFileName, expectedText2))
            test.SolutionTransforms.Add(
                Function(solution, projectId)
                    Dim project = solution.GetProject(projectId)
                    Dim compilationOptions = DirectCast(project.CompilationOptions, VisualBasicCompilationOptions)
                    Return project.WithCompilationOptions(compilationOptions.WithRootNamespace("RootNs")).Solution
                End Function)
            Await test.RunAsync()
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionWithRootNamespaceRefactorReferences() As Task
            Dim initialMarkup1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialMarkup2 = "
Imports RootNs.TestNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1.TestFunc()
    End Function
End Class"
            Dim newTypeName = "ExtraNs.Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText3 = "
Imports RootNs.TestNs
Imports RootNs.TestNs.ExtraNs
 
Public Class Class2
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc()
    End Function
End Class"
            Dim expectedText2 = "Namespace TestNs.ExtraNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Dim test = New Test(newTypeName, selection, newFileName)
            test.TestState.Sources.Add(initialMarkup1)
            test.TestState.Sources.Add(initialMarkup2)
            test.FixedState.Sources.Add(expectedText1)
            test.FixedState.Sources.Add(expectedText3)
            test.FixedState.Sources.Add((newFileName, expectedText2))
            test.SolutionTransforms.Add(
                Function(solution, projectId)
                    Dim project = solution.GetProject(projectId)
                    Dim compilationOptions = DirectCast(project.CompilationOptions, VisualBasicCompilationOptions)
                    Return project.WithCompilationOptions(compilationOptions.WithRootNamespace("RootNs")).Solution
                End Function)
            Await test.RunAsync()
        End Function
 
#End Region
#Region "Perform Existing Type Action From Options"
        <Fact>
        Public Async Function TestMoveFieldToExistingType() As Task
            Dim initialSourceMarkup = "
Public Class Class1
    Public Shared Test[||]Field As Integer = 0
End Class"
            Dim initialDestinationMarkup = "
Public Class Class1Helpers
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestField")
            Dim fixedSourceMarkup = "
Public Class Class1
End Class"
            Dim fixedDestinationMarkup = "
Public Class Class1Helpers
    Public Shared TestField As Integer = 0
End Class"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMovePropertyToExistingType() As Task
            Dim initialSourceMarkup = "
Public Class Class1
    Public Shared ReadOnly Property Test[||]Prop As Integer
        Get
            Return 0
        End Get
    End Property
End Class"
            Dim initialDestinationMarkup = "
Public Class Class1Helpers
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestProp")
            Dim fixedSourceMarkup = "
Public Class Class1
End Class"
            Dim fixedDestinationMarkup = "
Public Class Class1Helpers
    Public Shared ReadOnly Property TestProp As Integer
        Get
            Return 0
        End Get
    End Property
End Class"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveEventToExistingType() As Task
            Dim initialSourceMarkup = "
Imports System
 
Public Class Class1
    Public Shared Event Test[||]Event As EventHandler
End Class"
            Dim initialDestinationMarkup = "
Public Class Class1Helpers
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestEvent")
            Dim fixedSourceMarkup = "
Imports System
 
Public Class Class1
End Class"
            Dim fixedDestinationMarkup = "Imports System
 
Public Class Class1Helpers
    Public Shared Event TestEvent As EventHandler
End Class"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionToExistingType() As Task
            Dim initialSourceMarkup = "
Public Class Class1
    Public Shared Function Test[||]Func() As Integer
        Return 0
    End Function
End Class"
            Dim initialDestinationMarkup = "
Public Class Class1Helpers
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim fixedSourceMarkup = "
Public Class Class1
End Class"
            Dim fixedDestinationMarkup = "
Public Class Class1Helpers
    Public Shared Function TestFunc() As Integer
        Return 0
    End Function
End Class"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveSubToExistingType() As Task
            Dim initialSourceMarkup = "
Public Class Class1
    Public Shared Sub Test[||]Sub()
        Return
    End Sub
End Class"
            Dim initialDestinationMarkup = "
Public Class Class1Helpers
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestSub")
            Dim fixedSourceMarkup = "
Public Class Class1
End Class"
            Dim fixedDestinationMarkup = "
Public Class Class1Helpers
    Public Shared Sub TestSub()
        Return
    End Sub
End Class"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveConstToExistingType() As Task
            Dim initialSourceMarkup = "
Public Class Class1
    Public Const Test[||]Field As Integer = 0
End Class"
            Dim initialDestinationMarkup = "
Public Class Class1Helpers
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestField")
            Dim fixedSourceMarkup = "
Public Class Class1
End Class"
            Dim fixedDestinationMarkup = "
Public Class Class1Helpers
    Public Const TestField As Integer = 0
End Class"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveExtensionFunctionToExistingType() As Task
            Dim initialSourceMarkup = "
Imports System.Runtime.CompilerServices
 
Public Module Class1
    <Extension>
    Public Function Test[||]Func(other As Other) As Integer
        Return other.OtherInt + 2
    End Function
End Module
 
Public Class Class2
    Public Function GetOtherInt() As Integer
        Dim other = New Other()
        Return other.TestFunc()
    End Function
End Class
 
Public Class Other
    Public OtherInt As Integer
 
    Public Sub New()
        OtherInt = 5
    End Sub
End Class"
            Dim initialDestinationMarkup = "
Public Module Class1Helpers
End Module"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim fixedSourceMarkup = "
Imports System.Runtime.CompilerServices
 
Public Module Class1
End Module
 
Public Class Class2
    Public Function GetOtherInt() As Integer
        Dim other = New Other()
        Return other.TestFunc()
    End Function
End Class
 
Public Class Other
    Public OtherInt As Integer
 
    Public Sub New()
        OtherInt = 5
    End Sub
End Class"
            Dim fixedDestinationMarkup = "Imports System.Runtime.CompilerServices
 
Public Module Class1Helpers
    <Extension>
    Public Function Test[||]Func(other As Other) As Integer
        Return other.OtherInt + 2
    End Function
End Module"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionToExistingTypeWithNamespace() As Task
            Dim initialSourceMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Test[||]Func() As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim initialDestinationMarkup = "
Namespace TestNs
    Public Class Class1Helpers
    End Class
End Namespace"
            Dim newTypeName = "TestNs.Class1Helpers"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim fixedSourceMarkup = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim fixedDestinationMarkup = "
Namespace TestNs
    Public Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionToExistingTypeWithNewNamespace() As Task
            Dim initialSourceMarkup = "
Public Class Class1
    Public Shared Function Test[||]Func() As Integer
        Return 0
    End Function
End Class"
            Dim initialDestinationMarkup = "
Namespace TestNs
    Public Class Class1Helpers
    End Class
End Namespace"
            Dim newTypeName = "TestNs.Class1Helpers"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim fixedSourceMarkup = "
Public Class Class1
End Class"
            Dim fixedDestinationMarkup = "
Namespace TestNs
    Public Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionToExistingTypeRefactorSourceUsage() As Task
            Dim initialSourceMarkup = "
Public Class Class1
    Public Shared Function Test[||]Func() As Integer
        Return 0
    End Function
 
    Public Shared Function TestFunc2() As Integer
        Return TestFunc()
    End Function
End Class"
            Dim initialDestinationMarkup = "
Public Class Class1Helpers
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim fixedSourceMarkup = "
Public Class Class1
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc()
    End Function
End Class"
            Dim fixedDestinationMarkup = "
Public Class Class1Helpers
    Public Shared Function TestFunc() As Integer
        Return 0
    End Function
End Class"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionToExistingModuleRefactorSourceUsage() As Task
            Dim initialSourceMarkup = "
Public Module Class1
    Public Function Test[||]Func() As Integer
        Return 0
    End Function
 
    Public Function TestFunc2() As Integer
        Return TestFunc()
    End Function
End Module"
            Dim initialDestinationMarkup = "
Public Module Class1Helpers
End Module"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim fixedSourceMarkup = "
Public Module Class1
    Public Function TestFunc2() As Integer
        Return TestFunc()
    End Function
End Module"
            Dim fixedDestinationMarkup = "
Public Module Class1Helpers
    Public Function TestFunc() As Integer
        Return 0
    End Function
End Module"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestMoveFunctionToExistingTypeRefactorDestinationUsage() As Task
            Dim initialSourceMarkup = "
Public Class Class1
    Public Shared Function Test[||]Func() As Integer
        Return 0
    End Function
End Class"
            Dim initialDestinationMarkup = "
Public Class Class1Helpers
    Public Shared Function TestFunc2() As Integer
        Return Class1.TestFunc()
    End Function
End Class"
            Dim newTypeName = "Class1Helpers"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim fixedSourceMarkup = "
Public Class Class1
End Class"
            Dim fixedDestinationMarkup = "
Public Class Class1Helpers
    Public Shared Function TestFunc2() As Integer
        Return Class1Helpers.TestFunc()
    End Function
    Public Shared Function TestFunc() As Integer
        Return 0
    End Function
End Class"
 
            Await TestMovementExistingFileAsync(initialSourceMarkup,
                                                initialDestinationMarkup,
                                                fixedSourceMarkup,
                                                fixedDestinationMarkup,
                                                newTypeName,
                                                selection).ConfigureAwait(False)
        End Function
#End Region
#Region "SelectionTests"
 
        <Fact>
        Public Async Function TestSelectBeforeDeclarationKeyword() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        [||]Public Shared TestField As Integer = 0
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectWholeFieldDeclaration() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        [|Public Shared TestField As Integer = 0|]
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectInDeclarationKeyword1() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Pub[||]lic Shared TestField As Integer = 0
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectInDeclarationKeyword2() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shar[||]ed TestField As Integer = 0
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestField")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared TestField As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        ' There seems to be some whitespace formatting errors when we select multiple members in the following tests
        ' Mostly, when we "split" a variable, a newline should be added but isn't
        <Fact>
        Public Async Function TestSelectMultipleFieldDeclarations() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        [|Public Shared Foo As Integer = 0, Goo As Integer = 0|]
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("Foo", "Goo")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Foo As Integer = 0
        Public Shared Goo As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileWithSelectionAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectOneOfMultipleFieldDeclarations() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared F[||]oo As Integer = 0, Goo As Integer = 0
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("Foo")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Goo As Integer = 0
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Foo As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileWithSelectionAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectMultipleMembers1() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        [|Public Shared Foo As Integer = 0
 
        Public Shared Function DoSomething() As Integer
            Return 4
        End Function|]
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("Foo", "DoSomething")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Foo As Integer = 0
 
        Public Shared Function DoSomething() As Integer
            Return 4
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileWithSelectionAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectMultipleMembers2() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function DoSomething() As Integer
            Return 4
        End [|Function
        Public Shared Foo As Integer = 0|]
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("Foo")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function DoSomething() As Integer
            Return 4
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Foo As Integer = 0
    End Class
End Namespace
"
 
            Await TestMovementNewFileWithSelectionAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectMultipleMembers3() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared ReadOnly Property Prop As Integer
            Get
                Return 4
            [|End Get
        End Property
        Public Shared Foo As Integer = 0
        Public Shared Function DoSometh|]ing() As Integer
            Return 4
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("Foo", "DoSomething")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Shared ReadOnly Property Prop As Integer
            Get
                Return 4
            End Get
        End Property
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Foo As Integer = 0
 
        Public Shared Function DoSomething() As Integer
            Return 4
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileWithSelectionAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectMultipleMembers4() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared ReadOnly Property [|Prop As Integer
            Get
                Return 4
            End Get
        End Property
        Public Shared Foo As Integer = 0
        Public Shared F|]unction DoSomething() As Integer
            Return 4
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("Foo", "Prop")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
        Public Shared Function DoSomething() As Integer
            Return 4
        End Function
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Foo As Integer = 0
 
        Public Shared ReadOnly Property Prop As Integer
            Get
                Return 4
            End Get
        End Property
    End Class
End Namespace
"
 
            Await TestMovementNewFileWithSelectionAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectInMethodParens() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function TestFunc([||]) As Integer
            Return 0
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectInTypeIdentifierMethodDeclaration() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function TestFunc() As Inte[||]ger
            Return 0
        End Function
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestFunc")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared Function TestFunc() As Integer
            Return 0
        End Function
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectInFieldInitializerEquals_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared TestField As Integer =[||] 0
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestSelectInFieldTypeIdentifier_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared TestField As Int[||]eger = 0
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestSelectInMethodBody_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function TestFunc() As Integer
            Retu[||]rn 0
        End Function
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestSelectInMethodClose_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function TestFunc() As Integer
            Return 0
        End Func[||]tion
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestSelectInIncompleteField_NoAction1() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public[||]{|BC30203:|}
    End Class
End Namespace"
 
            Await New Test("", ImmutableArray(Of String).Empty, "") With
            {
                .TestCode = initialMarkup,
                .FixedCode = initialMarkup
            }.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestSelectInIncompleteField_NoAction2() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Sha[||] {|BC30205:TestField|} As Integer = 0
    End Class
End Namespace"
 
            Await New Test("", ImmutableArray(Of String).Empty, "") With
            {
                .TestCode = initialMarkup,
                .FixedCode = initialMarkup
            }.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestSelectNonEmptySpanInIncompleteField_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        [|Public|]{|BC30203:|}
    End Class
End Namespace"
 
            Await New Test("", ImmutableArray(Of String).Empty, "") With
            {
                .TestCode = initialMarkup,
                .FixedCode = initialMarkup
            }.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestSelectNonEmptySpanInsideMethodBlock_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared Function Foo() As Integer
            [|Return 0|]
        End Function
    End Class
End Namespace"
 
            Await New Test("", ImmutableArray(Of String).Empty, "") With
            {
                .TestCode = initialMarkup,
                .FixedCode = initialMarkup
            }.RunAsync().ConfigureAwait(False)
        End Function
 
        <Fact>
        Public Async Function TestSelectNonSharedProperty_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public ReadOnly Property Test[||]Property As Integer
            Get
                Return 0
            End Get
        End Property
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestSelectPropertyGetter_NoAction1() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared ReadOnly Property TestProperty As Integer
            Get[||]
                Return 0
            End Get
        End Property
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestSelectPropertyGetter_NoAction2() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared ReadOnly Property TestProperty As Integer
            [|Get|]
                Return 0
            End Get
        End Property
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestMovePropertyWithNonEmptySelection() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Public Shared ReadOnly Property Test[|Property As Integer
            Get
                Return 0
            End Get|]
        End Property
    End Class
End Namespace"
            Dim newTypeName = "Class1Helpers"
            Dim newFileName = "Class1Helpers.vb"
            Dim selection = ImmutableArray.Create("TestProperty")
            Dim expectedText1 = "
Namespace TestNs
    Public Class Class1
    End Class
End Namespace"
            Dim expectedText2 = "Namespace TestNs
    Class Class1Helpers
        Public Shared ReadOnly Property TestProperty As Integer
            Get
                Return 0
            End Get
        End Property
    End Class
End Namespace
"
 
            Await TestMovementNewFileAsync(initialMarkup, expectedText1, expectedText2, newFileName, selection, newTypeName)
        End Function
 
        <Fact>
        Public Async Function TestSelectConstructor1_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        Shared Sub N[||]ew()
        End Sub
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestSelectConstructor2_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        [|Shared Sub New()|]
        End Sub
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
        <Fact>
        Public Async Function TestSelectOperator_NoAction() As Task
            Dim initialMarkup = "
Namespace TestNs
    Public Class Class1
        [|Public Shared Operator +(a As Class1, b As Class1) As Class1|]
            Return New Class1()
        End Operator
    End Class
End Namespace"
 
            Await TestNoRefactoringAsync(initialMarkup)
        End Function
 
#End Region
 
#Region "Invalid Code Tests"
        <Fact>
        <WorkItem("https://github.com/dotnet/roslyn/issues/66489")>
        Public Async Function TestCSharpCodeInVB() As Task
            Dim initialMarkup = "
                CompoundInstrumenter compound [||]"
            Dim testRun = New Test("", ImmutableArray(Of String).Empty, "") With
            {
                .TestCode = initialMarkup,
                .FixedCode = initialMarkup
            }
 
            testRun.TestState.ExpectedDiagnostics.Add(DiagnosticResult.CompilerError("BC30188").WithSpan(2, 17, 2, 37))
            testRun.TestState.ExpectedDiagnostics.Add(DiagnosticResult.CompilerError("BC30195").WithSpan(2, 38, 2, 46))
            Await testRun.RunAsync()
        End Function
#End Region
 
        Private Class Test
            Inherits VerifyVB.Test
 
            Public Sub New(destinationType As String,
                           members As ImmutableArray(Of String),
                           newFileName As String,
                           Optional testPreselection As Boolean = False,
                           Optional newType As Boolean = True)
                _destinationType = destinationType
                _members = members
                _newFileName = newFileName
                _testPreselection = testPreselection
                _newType = newType
            End Sub
 
            Private ReadOnly _destinationType As String
 
            Private ReadOnly _members As ImmutableArray(Of String)
 
            Private ReadOnly _newFileName As String
 
            Private ReadOnly _testPreselection As Boolean
 
            Private ReadOnly _newType As Boolean
 
            Protected Overrides Function CreateWorkspaceImpl() As Workspace
                Dim hostServices = s_testServices.GetHostServices()
                Dim workspace = New AdhocWorkspace(hostServices)
                Dim optionsService = DirectCast(workspace.Services.GetRequiredService(Of IMoveStaticMembersOptionsService)(), TestMoveStaticMembersService)
                optionsService.DestinationName = _destinationType
                optionsService.Filename = _newFileName
                optionsService.SelectedMembers = _members
                If _testPreselection Then
                    optionsService.ExpectedPrecheckedMembers = _members
                Else
                    optionsService.ExpectedPrecheckedMembers = ImmutableArray(Of String).Empty
                End If
                optionsService.CreateNew = _newType
 
                Return workspace
            End Function
        End Class
 
        Private Shared Async Function TestMovementNewFileAsync(initialMarkup As String,
                                                        expectedSource As String,
                                                        expectedNewFile As String,
                                                        newFileName As String,
                                                        selectedMembers As ImmutableArray(Of String),
                                                        newTypeName As String) As Task
 
            Dim test = New Test(newTypeName, selectedMembers, newFileName) With
            {
                .TestCode = initialMarkup
            }
            test.FixedState.Sources.Add(expectedSource)
            test.FixedState.Sources.Add((newFileName, expectedNewFile))
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        Private Shared Async Function TestMovementExistingFileAsync(initialSourceMarkup As String,
                                                                    initialDestinationMarkup As String,
                                                                    fixedSourceMarkup As String,
                                                                    fixedDestinationMarkup As String,
                                                                    destinationName As String,
                                                                    selectedMembers As ImmutableArray(Of String),
                                                                    Optional destinationFileName As String = Nothing) As Task
            Dim test = New Test(destinationName, selectedMembers, destinationFileName, newType:=False)
            test.TestState.Sources.Add(initialSourceMarkup)
            test.FixedState.Sources.Add(fixedSourceMarkup)
 
            If destinationFileName IsNot Nothing Then
                test.TestState.Sources.Add((destinationFileName, initialDestinationMarkup))
                test.FixedState.Sources.Add((destinationFileName, fixedDestinationMarkup))
            Else
                test.TestState.Sources.Add(initialDestinationMarkup)
                test.FixedState.Sources.Add(fixedDestinationMarkup)
            End If
 
            Await test.RunAsync().ConfigureAwait(False)
        End Function
 
        Private Shared Async Function TestMovementNewFileWithSelectionAsync(initialMarkup As String,
                                                        expectedSource As String,
                                                        expectedNewFile As String,
                                                        newFileName As String,
                                                        selectedMembers As ImmutableArray(Of String),
                                                        newTypeName As String) As Task
 
            Dim test = New Test(newTypeName, selectedMembers, newFileName, testPreselection:=True) With
            {
                .TestCode = initialMarkup
            }
            test.FixedState.Sources.Add(expectedSource)
            test.FixedState.Sources.Add((newFileName, expectedNewFile))
            Await test.RunAsync()
        End Function
 
        Private Shared Async Function TestNoRefactoringAsync(initialMarkup As String) As Task
            Await New Test("", ImmutableArray(Of String).Empty, "") With
            {
                .TestCode = initialMarkup,
                .FixedCode = initialMarkup
            }.RunAsync().ConfigureAwait(False)
        End Function
    End Class
End Namespace