File: Organizing\OrganizeTypeDeclarationTests.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 Microsoft.CodeAnalysis.Editor.Commanding.Commands
Imports Microsoft.CodeAnalysis.Editor.Implementation.Organizing
Imports Microsoft.CodeAnalysis.Editor.[Shared].Utilities
Imports Microsoft.CodeAnalysis.Editor.UnitTests
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
 
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Organizing
    Public Class OrganizeTypeDeclarationTests
        Inherits AbstractOrganizerTests
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestFieldsWithoutInitializers1() As Task
            Dim initial =
    <element>class C 
    dim A as Integer
    dim B as Integer
    dim C as Integer
end class</element>
 
            Dim final =
    <element>class C 
    dim A as Integer
    dim B as Integer
    dim C as Integer
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestFieldsWithoutInitializers2() As Task
 
            Dim initial =
    <element>class C 
    dim C as Integer
    dim B as Integer
    dim A as Integer
end class</element>
 
            Dim final =
    <element>class C 
    dim A as Integer
    dim B as Integer
    dim C as Integer
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestFieldsWithInitializers1() As Task
 
            Dim initial =
    <element>class C 
    dim C as Integer = 0
    dim B as Integer
    dim A as Integer
end class</element>
 
            Dim final =
    <element>class C 
    dim A as Integer
    dim B as Integer
    dim C as Integer = 0
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestFieldsWithInitializers2() As Task
 
            Dim initial =
    <element>class C 
    dim C as Integer = 0
    dim B as Integer = 0
    dim A as Integer
end class</element>
 
            Dim final =
    <element>class C 
    dim A as Integer
    dim C as Integer = 0
    dim B as Integer = 0
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestEnumStatement() As Task
 
            Dim initial =
    <element>class C 
     Enum Super
           create = 1
     End Enum
     Shared Friend Function Bar() As Integer
     End Function
end class</element>
 
            Dim final =
    <element>class C 
     Shared Friend Function Bar() As Integer
     End Function
     Enum Super
           create = 1
     End Enum
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestSharedInstance() As Task
 
            Dim initial =
    <element>class C 
    dim A as Integer
    shared B as Integer
    dim C as Integer
    shared D as Integer
end class</element>
 
            Dim final =
    <element>class C 
    shared B as Integer
    shared D as Integer
    dim A as Integer
    dim C as Integer
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestAccessibility() As Task
 
            Dim initial =
    <element>class C 
    dim A as Integer
    private B as Integer
    friend C as Integer
    protected D as Integer
    public E as Integer
end class</element>
 
            Dim final =
    <element>class C 
    public E as Integer
    protected D as Integer
    friend C as Integer
    dim A as Integer
    private B as Integer
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestSharedAccessibility() As Task
 
            Dim initial =
    <element>class C 
    dim A1 as Integer
    private B1 as Integer
    friend C1 as Integer
    protected D1 as Integer
    public E1 as Integer
    shared A2 as Integer
    shared private B2 as Integer
    shared friend C2 as Integer
    shared protected D2 as Integer
    shared public E2 as Integer
end class</element>
 
            Dim final =
    <element>class C 
    shared public E2 as Integer
    shared protected D2 as Integer
    shared friend C2 as Integer
    shared A2 as Integer
    shared private B2 as Integer
    public E1 as Integer
    protected D1 as Integer
    friend C1 as Integer
    dim A1 as Integer
    private B1 as Integer
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestMethodsAccessModifiers() As Task
 
            Dim initial =
    <element>class C 
        Shared Public Sub Main(args As String())
        End Sub
        Shared Friend Function Bar() As Integer
        End Function
        Shared Private Function Goo() As Integer
        End Function
        Function Goo() As Integer
        End Function  
        Shared Protected Function Moo() As Integer
        End Function  
End class</element>
 
            Dim final =
    <element>class C 
        Shared Private Function Goo() As Integer
        End Function
        Shared Public Sub Main(args As String())
        End Sub
        Shared Protected Function Moo() As Integer
        End Function  
        Shared Friend Function Bar() As Integer
        End Function
        Function Goo() As Integer
        End Function  
End class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestGenerics() As Task
 
            Dim initial =
<element>class C 
    sub B(of X,Y)()
    end sub
    sub B(of Z)()
    end sub
    sub B()
    end sub
    sub A(of X,Y)()
    end sub
    sub A(of Z)()
    end sub
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class C 
    sub A()
    end sub
    sub A(of Z)()
    end sub
    sub A(of X,Y)()
    end sub
    sub B()
    end sub
    sub B(of Z)()
    end sub
    sub B(of X,Y)()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestInsidePPRegion() As Task
 
            Dim initial =
<element>class C 
#If True Then
    dim c as Integer
    dim b as Integer
    dim a as Integer
#End If
end class</element>
 
            Dim final =
    <element>class C 
#If True Then
    dim a as Integer
    dim b as Integer
    dim c as Integer
#End If
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestInsidePPRegion2() As Task
 
            Dim initial =
    <element>class C 
#If True Then
    dim z as Integer
    dim y as Integer
    dim x as Integer
#End If
#If True Then
    dim c as Integer
    dim b as Integer
    dim a as Integer
#End If
end class</element>
 
            Dim final =
    <element>class C 
#If True Then
    dim x as Integer
    dim y as Integer
    dim z as Integer
#End If
#If True Then
    dim a as Integer
    dim b as Integer
    dim c as Integer
#End If
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestInsidePPRegion3() As Task
 
            Dim initial =
    <element>class C 
    dim z as Integer
    dim y as Integer
#If True Then
    dim x as Integer
    dim c as Integer
#End If
    dim b as Integer
    dim a as Integer
end class</element>
 
            Dim final =
    <element>class C 
    dim y as Integer
    dim z as Integer
#If True Then
    dim c as Integer
    dim x as Integer
#End If
    dim a as Integer
    dim b as Integer
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestInsidePPRegion4() As Task
 
            Dim initial =
    <element>class C 
    sub c()
    end sub
    sub b()
    end sub
    sub a()
#If True Then
#End If
    end sub
end class</element>
 
            Dim final =
    <element>class C 
    sub a()
#If True Then
#End If
    end sub
    sub b()
    end sub
    sub c()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestInsidePPRegion5() As Task
 
            Dim initial =
    <element>class C 
    sub c()
    end sub
    sub b()
    end sub
    sub a()
#If True Then
#Else
#End If
    end sub
end class</element>
 
            Dim final =
    <element>class C 
    sub a()
#If True Then
#Else
#End If
    end sub
    sub b()
    end sub
    sub c()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestInsidePPRegion6() As Task
 
            Dim initial =
    <element>class C 
#region
    sub e()
    end sub
    sub d()
    end sub
    sub c()
#region
    end sub
#end region
    sub b()
    end sub
    sub a()
    end sub
#end region
end class</element>
 
            Dim final =
    <element>class C 
#region
    sub d()
    end sub
    sub e()
    end sub
    sub c()
#region
    end sub
#end region
    sub a()
    end sub
    sub b()
    end sub
#end region
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestPinned() As Task
 
            Dim initial =
    <element>class C 
    sub z()
    end sub
    sub y()
    end sub
    sub x()
#If True Then
    end sub
    dim n as Integer
    dim m as Integer
    sub c()
#End If
    end sub
    sub b()
    end sub
    sub a()
    end sub
end class</element>
 
            Dim final =
    <element>class C 
    sub y()
    end sub
    sub z()
    end sub
    sub x()
#If True Then
    end sub
    dim m as Integer
    dim n as Integer
    sub c()
#End If
    end sub
    sub a()
    end sub
    sub b()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, Trait(Traits.Feature, Traits.Features.Organizing)>
        Public Async Function TestSensitivity() As Task
            Dim initial =
<element>class 
    dim Bb as Integer
    dim B as Integer
    dim bB as Integer
    dim b as Integer
    dim Aa as Integer
    dim a as Integer
    dim A as Integer
    dim aa as Integer
    dim aA as Integer
    dim AA as Integer
    dim bb as Integer
    dim BB as Integer
    dim bBb as Integer
    dim bbB as Integer
    dim あ as Integer
    dim ア as Integer
    dim ア as Integer
    dim ああ as Integer
    dim あア as Integer
    dim あア as Integer
    dim アあ as Integer
    dim cC as Integer
    dim Cc as Integer
    dim アア as Integer
    dim アア as Integer
    dim アあ as Integer
    dim アア as Integer
    dim アア as Integer
    dim BBb as Integer
    dim BbB as Integer
    dim bBB as Integer
    dim BBB as Integer
    dim c as Integer
    dim C as Integer
    dim bbb as Integer
    dim Bbb as Integer
    dim cc as Integer
    dim cC as Integer
    dim CC as Integer
end class</element>
 
            Dim final =
<element>class 
    dim a as Integer
    dim A as Integer
    dim aa as Integer
    dim aA as Integer
    dim Aa as Integer
    dim AA as Integer
    dim b as Integer
    dim B as Integer
    dim bb as Integer
    dim bB as Integer
    dim Bb as Integer
    dim BB as Integer
    dim bbb as Integer
    dim bbB as Integer
    dim bBb as Integer
    dim bBB as Integer
    dim Bbb as Integer
    dim BbB as Integer
    dim BBb as Integer
    dim BBB as Integer
    dim c as Integer
    dim C as Integer
    dim cc as Integer
    dim cC as Integer
    dim cC as Integer
    dim Cc as Integer
    dim CC as Integer
    dim ア as Integer
    dim ア as Integer
    dim あ as Integer
    dim アア as Integer
    dim アア as Integer
    dim アア as Integer
    dim アア as Integer
    dim アあ as Integer
    dim アあ as Integer
    dim あア as Integer
    dim あア as Integer
    dim ああ as Integer
end class</element>
 
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestWhitespaceBetweenMethods1() As Task
            Dim initial =
<element>class Program
    sub B()
    end sub
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
    sub A()
    end sub
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestWhitespaceBetweenMethods2() As Task
            Dim initial =
<element>class Program
    sub B()
    end sub
 
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
    sub A()
    end sub
 
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestWhitespaceBetweenMethods3() As Task
            Dim initial =
<element>class Program
 
    sub B()
    end sub
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
 
    sub A()
    end sub
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestWhitespaceBetweenMethods4() As Task
            Dim initial =
<element>class Program
 
 
    sub B()
    end sub
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
 
 
    sub A()
    end sub
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestWhitespaceBetweenMethods5() As Task
            Dim initial =
<element>class Program
 
 
    sub B()
    end sub
 
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
 
 
    sub A()
    end sub
 
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestWhitespaceBetweenMethods6() As Task
            Dim initial =
<element>class Program
 
 
    sub B()
    end sub
 
 
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
 
 
    sub A()
    end sub
 
 
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestMoveComments1() As Task
            Dim initial =
<element>class Program
    ' B
    sub B()
    end sub
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
    sub A()
    end sub
 
    ' B
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestMoveComments2() As Task
            Dim initial =
<element>class Program
    ' B
    sub B()
    end sub
 
    ' A
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
    ' A
    sub A()
    end sub
 
    ' B
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestMoveDocComments1() As Task
            Dim initial =
<element>class Program
    ''' B
    sub B()
    end sub
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
    sub A()
    end sub
 
    ''' B
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestMoveDocComments2() As Task
            Dim initial =
<element>class Program
    ''' B
 
    sub B()
    end sub
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
    sub A()
    end sub
 
    ''' B
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestDontMoveBanner() As Task
            Dim initial =
<element>class Program
    ' Banner
 
    sub B()
    end sub
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
    ' Banner
 
    sub A()
    end sub
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestDontMoveBanner2() As Task
            Dim initial =
<element>class Program
    ' Banner
 
    ' More banner
    ' Bannery stuff
 
    sub B()
    end sub
 
    sub A()
    end sub
end class</element>
 
            Dim final =
<element>class Program
    ' Banner
 
    ' More banner
    ' Bannery stuff
 
    sub A()
    end sub
 
    sub B()
    end sub
end class</element>
            Await CheckAsync(initial, final)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537614")>
        Public Async Function TestBug2592() As Task
            Dim initial =
<element>Namespace Acme
    Public Class Goo
        
        
        Shared Public Sub Main(args As String())
        End Sub
        
        Public Shared Function Bar() As Integer
        End Function
    End Class
End Namespace</element>
 
            Dim final =
<element>Namespace Acme
    Public Class Goo
        
        
        Public Shared Function Bar() As Integer
        End Function
        
        Shared Public Sub Main(args As String())
        End Sub
    End Class
End Namespace</element>
            Await CheckAsync(initial, final)
        End Function
 
        <WpfFact>
        <Trait(Traits.Feature, Traits.Features.Organizing)>
        <Trait(Traits.Feature, Traits.Features.Interactive)>
        Public Sub TestOrganizingCommandsDisabledInSubmission()
            Using workspace = TestWorkspace.Create(
                <Workspace>
                    <Submission Language="Visual Basic" CommonReferences="true">  
                        Class C
                            Private $goo As Object
                        End Class
                    </Submission>
                </Workspace>,
                workspaceKind:=WorkspaceKind.Interactive,
                composition:=EditorTestCompositions.EditorFeaturesWpf)
 
                ' Force initialization.
                workspace.GetOpenDocumentIds().Select(Function(id) workspace.GetTestDocument(id).GetTextView()).ToList()
 
                Dim textView = workspace.Documents.Single().GetTextView()
 
                Dim handler = New OrganizeDocumentCommandHandler(workspace.GetService(Of IThreadingContext), workspace.GlobalOptions)
 
                Dim state = handler.GetCommandState(New SortAndRemoveUnnecessaryImportsCommandArgs(textView, textView.TextBuffer))
                Assert.True(state.IsUnspecified)
 
                state = handler.GetCommandState(New OrganizeDocumentCommandArgs(textView, textView.TextBuffer))
                Assert.True(state.IsUnspecified)
            End Using
        End Sub
    End Class
End Namespace