File: Completion\CompletionProviders\EnumCompletionProviderTests.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.VisualBasic.Completion.Providers
 
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion.CompletionProviders
    <Trait(Traits.Feature, Traits.Features.Completion)>
    Public Class EnumCompletionProviderTests
        Inherits AbstractVisualBasicCompletionProviderTests
 
        Friend Overrides Function GetCompletionProviderType() As Type
            Return GetType(EnumCompletionProvider)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545678")>
        Public Async Function TestEditorBrowsable_EnumTypeDotMemberAlways() As Task
            Dim markup = <Text><![CDATA[
Class P
    Sub S()
        Dim d As MyEnum = $$
    End Sub
End Class</a>
]]></Text>.Value
            Dim referencedCode = <Text><![CDATA[
Public Enum MyEnum
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)> Member
End Enum
]]></Text>.Value
            Await VerifyItemInEditorBrowsableContextsAsync(
                markup:=markup,
                referencedCode:=referencedCode,
                item:="MyEnum.Member",
                expectedSymbolsSameSolution:=1,
                expectedSymbolsMetadataReference:=1,
                sourceLanguage:=LanguageNames.VisualBasic,
                referencedLanguage:=LanguageNames.VisualBasic)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545678")>
        Public Async Function TestEditorBrowsable_EnumTypeDotMemberNever() As Task
            Dim markup = <Text><![CDATA[
Class P
    Sub S()
        Dim d As MyEnum = $$
    End Sub
End Class</a>
]]></Text>.Value
            Dim referencedCode = <Text><![CDATA[
Public Enum MyEnum
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> Member
End Enum
]]></Text>.Value
            Await VerifyItemInEditorBrowsableContextsAsync(
                markup:=markup,
                referencedCode:=referencedCode,
                item:="MyEnum.Member",
                expectedSymbolsSameSolution:=1,
                expectedSymbolsMetadataReference:=0,
                sourceLanguage:=LanguageNames.VisualBasic,
                referencedLanguage:=LanguageNames.VisualBasic)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545678")>
        Public Async Function TestEditorBrowsable_EnumTypeDotMemberAdvanced() As Task
            Dim markup = <Text><![CDATA[
Class P
    Sub S()
        Dim d As MyEnum = $$
    End Sub
End Class</a>
]]></Text>.Value
            Dim referencedCode = <Text><![CDATA[
Public Enum MyEnum
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)> Member
End Enum
]]></Text>.Value
 
            HideAdvancedMembers = True
 
            Await VerifyItemInEditorBrowsableContextsAsync(
                markup:=markup,
                referencedCode:=referencedCode,
                item:="MyEnum.Member",
                expectedSymbolsSameSolution:=1,
                expectedSymbolsMetadataReference:=0,
                sourceLanguage:=LanguageNames.VisualBasic,
                referencedLanguage:=LanguageNames.VisualBasic)
 
            HideAdvancedMembers = False
 
            Await VerifyItemInEditorBrowsableContextsAsync(
                markup:=markup,
                referencedCode:=referencedCode,
                item:="MyEnum.Member",
                expectedSymbolsSameSolution:=1,
                expectedSymbolsMetadataReference:=1,
                sourceLanguage:=LanguageNames.VisualBasic,
                referencedLanguage:=LanguageNames.VisualBasic)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/566787")>
        Public Async Function TestTriggeredOnOpenParen() As Task
            Dim markup = <Text><![CDATA[
Module Program
    Sub Main(args As String())
        ' type after this line
        Bar($$
    End Sub
 
    Sub Bar(f As Goo)
    End Sub
End Module
 
Enum Goo
    AMember
    BMember
    CMember
End
]]></Text>.Value
 
            Await VerifyItemExistsAsync(markup, "Goo.AMember", usePreviousCharAsTrigger:=True)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/674390")>
        Public Async Function TestRightSideOfAssignment() As Task
            Dim markup = <Text><![CDATA[
Module Program
    Sub Main(args As String())
        Dim x as Goo
        x = $$
    End Sub
End Module
 
Enum Goo
    AMember
    BMember
    CMember
End
]]></Text>.Value
 
            Await VerifyItemExistsAsync(markup, "Goo.AMember", usePreviousCharAsTrigger:=True)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530491")>
        Public Async Function TestDoNotCrashInObjectInitializer() As Task
            Dim markup = <Text><![CDATA[
Module Program
    Sub Main(args As String())
        Dim z = New Goo() With {.z$$ }
    End Sub

    Class Goo
        Property A As Integer
            Get

            End Get
            Set(value As Integer)

            End Set
        End Property
    End Class
End Module
]]></Text>.Value
 
            Await VerifyNoItemsExistAsync(markup)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/809332")>
        Public Async Function TestCaseStatement() As Task
            Dim markup = <Text><![CDATA[
Enum E
    A
    B
    C
End Enum
 
Module Module1
    Sub Main(args As String())
        Dim value = E.A
 
        Select Case value
            Case $$
        End Select
 
    End Sub
End Module
]]></Text>.Value
 
            Await VerifyItemExistsAsync(markup, "E.A", usePreviousCharAsTrigger:=True)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/854099")>
        Public Async Function TestNotInComment() As Task
            Dim markup = <Text><![CDATA[
Enum E
    A
    B
    C
End Enum
 
Module Module1
    Sub Main(args As String())
        Dim value = E.A
 
        Select Case value
            Case E.A | $$
        End Select
 
    End Sub
End Module
]]></Text>.Value
 
            Await VerifyNoItemsExistAsync(markup, usePreviousCharAsTrigger:=True)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/827897")>
        Public Async Function TestInYieldReturn() As Task
            Dim markup = <Text><![CDATA[
Imports System
Imports System.Collections.Generic

Class C
    Iterator Function M() As IEnumerable(Of DayOfWeek)
        Yield $$
    End Function
End Class
]]></Text>.Value
 
            Await VerifyItemExistsAsync(markup, "DayOfWeek.Friday")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/827897")>
        Public Async Function TestInAsyncMethodReturnStatement() As Task
            Dim markup = <Text><![CDATA[
Imports System
Imports System.Threading.Tasks

Class C
    Async Function M() As Task(Of DayOfWeek)
        Await Task.Delay(1)
        Return $$
    End Function
End Class
]]></Text>.Value
 
            Await VerifyItemExistsAsync(markup, "DayOfWeek.Friday")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/900625")>
        Public Async Function TestInIndexedProperty() As Task
            Dim markup = <Text><![CDATA[
Module Module1

    Enum MyEnum
        flower
    End Enum

    Public Class MyClass1
        Public WriteOnly Property MyProperty(ByVal val1 As MyEnum) As Boolean
            Set(ByVal value As Boolean)

            End Set
        End Property

        Public Sub MyMethod(ByVal val1 As MyEnum)

        End Sub
    End Class

    Sub Main()
        Dim var As MyClass1 = New MyClass1
        ' MARKER
        var.MyMethod(MyEnum.flower)
        var.MyProperty($$MyEnum.flower) = True
    End Sub

End Module
]]></Text>.Value
 
            Await VerifyItemExistsAsync(markup, "MyEnum.flower")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/916483")>
        Public Async Function TestFullyQualified() As Task
            Dim markup = <Text><![CDATA[
Class C
    Public Sub M(day As System.DayOfWeek)
        M($$)
    End Sub
 
    Enum DayOfWeek
        A
        B
    End Enum
End Class
]]></Text>.Value
            Await VerifyItemExistsAsync(markup, "System.DayOfWeek.Friday")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/916467")>
        Public Async Function TestTriggeredForNamedArgument() As Task
            Dim markup = <Text><![CDATA[
Class C
    Public Sub M(day As DayOfWeek)
        M(day:=$$)
    End Sub
 
    Enum DayOfWeek
        A
        B
    End Enum
End Class
]]></Text>.Value
            Await VerifyItemExistsAsync(markup, "DayOfWeek.A", usePreviousCharAsTrigger:=True)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/916467")>
        Public Async Function TestNotTriggeredAfterAssignmentEquals() As Task
            Dim markup = <Text><![CDATA[
Class C
    Public Sub M(day As DayOfWeek)
        Dim x = $$
    End Sub
 
    Enum DayOfWeek
        A
        B
    End Enum
End Class
]]></Text>.Value
            Await VerifyItemIsAbsentAsync(markup, "DayOfWeek.A", usePreviousCharAsTrigger:=True)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815963")>
        Public Async Function TestCaseStatementWithInt32InferredType() As Task
            Dim markup = <Text><![CDATA[
Class C
    Public Sub M(day As DayOfWeek)
        Select Case day
            Case DayOfWeek.A
            Case $$
        End Select
    End Sub

    Enum DayOfWeek
        A
        B
    End Enum
End Class
]]></Text>.Value
            Await VerifyItemExistsAsync(markup, "DayOfWeek.A")
            Await VerifyItemExistsAsync(markup, "DayOfWeek.B")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815963")>
        Public Async Function TestNotInTrivia() As Task
            Dim markup = <Text><![CDATA[
Class C
    Public Sub M(day As DayOfWeek)
        Select Case day
            Case DayOfWeek.A,
                 DayOfWeek.B'$$
            Case
        End Select
    End Sub

    Enum DayOfWeek
        A
        B
    End Enum
End Class
]]></Text>.Value
            Await VerifyNoItemsExistAsync(markup)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815963")>
        Public Async Function TestIncludeEnumAfterTyping() As Task
            Dim markup = <Text><![CDATA[
Enum E
    A
End Enum
 
Class C
    Sub M()
        Const e As E = e$$
    End Sub
End Class
]]></Text>.Value
            Await VerifyItemExistsAsync(markup, "E")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1015797")>
        Public Async Function TestCommitOnComma() As Task
            Dim markup = <Text><![CDATA[
Enum E
    A
End Enum
 
Class C
    Sub M()
        Const e As E = $$
    End Sub
End Class
]]></Text>.Value
 
            Dim expected = <Text><![CDATA[
Enum E
    A
End Enum
 
Class C
    Sub M()
        Const e As E = E.A,
    End Sub
End Class
]]></Text>.Value
 
            Await VerifyProviderCommitAsync(markup, "E.A", expected, ","c)
        End Function
 
        <Fact, WorkItem("https://devdiv.visualstudio.com/DevDiv/_workitems?id=201807&triage=true&_a=edit")>
        Public Async Function TestDoNotCrashAtPosition1AfterEquals() As Task
            Dim markup = <Text><![CDATA[=$$     
]]></Text>.Value
            Await VerifyNoItemsExistAsync(markup)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/12733")>
        Public Async Function NotAfterDot() As Task
            Dim markup = <Text>Module Module1
    Sub Main()
            Do Until (System.Console.ReadKey.Key = System.ConsoleKey.$$
        Loop
    End Sub
End Module</Text>.Value
            Await VerifyNoItemsExistAsync(markup)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/3133")>
        Public Async Function TestInCollectionInitializer1() As Task
            Dim markup = <Text><![CDATA[
Imports System
Imports System.Collections.Generic

Class C
    Sub Main()
        Dim y = New List(Of DayOfWeek) From {
            $$
        }
    End Sub
End Class
]]></Text>.Value
            Await VerifyItemExistsAsync(markup, "DayOfWeek.Monday")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/3133")>
        Public Async Function TestInCollectionInitializer2() As Task
            Dim markup = <Text><![CDATA[
Imports System
Imports System.Collections.Generic

Class C
    Sub Main()
        Dim y = New List(Of DayOfWeek) From {
            DayOfWeek.Monday, $$
        }
    End Sub
End Class
]]></Text>.Value
            Await VerifyItemExistsAsync(markup, "DayOfWeek.Monday")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/3133")>
        Public Async Function TestInCollectionInitializer3() As Task
            Dim markup = <Text><![CDATA[
Imports System
Imports System.Collections.Generic

Class C
    Sub Main()
        Dim y = New List(Of DayOfWeek) From {
            DayOfWeek.Monday,
            $$
        }
    End Sub
End Class
]]></Text>.Value
            Await VerifyItemExistsAsync(markup, "DayOfWeek.Monday")
        End Function
 
        <Fact>
        Public Async Function TestInEnumHasFlag() As Task
            Dim markup = <Text><![CDATA[
Imports System.IO

Class C
    Sub Main()
        Dim f As FileInfo
        f.Attributes.HasFlag($$
    End Sub
End Class
]]></Text>.Value
            Await VerifyItemExistsAsync(markup, "FileAttributes.Hidden")
        End Function
    End Class
End Namespace