File: SymbolsTests\Source\NamedTypeTests.vb
Web Access
Project: src\src\Compilers\VisualBasic\Test\Symbol\Microsoft.CodeAnalysis.VisualBasic.Symbol.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.Symbol.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.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
    Public Class NamedTypeTests
        Inherits BasicTestBase
 
        Public Shared ReadOnly TestData As Object()() = New Object()() {
            New Object() {
"
structure C
end structure"
            },
            New Object() {
"
enum C
end enum"
            },
            New Object() {
"
interface C
end interface"
            },
            New Object() {
"
delegate sub C()"
            }
        }
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType1(type As String)
 
            Dim compilation = CreateCompilation($"<System.CLSCompliant(false)> {type}")
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.False(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType2(type As String)
 
            Dim compilation = CreateCompilation($"<System.Runtime.InteropServices.TypeIdentifierAttribute> {type}")
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType3(type As String)
 
            Dim compilation = CreateCompilation($"<System.Runtime.InteropServices.TypeIdentifier> {type}")
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType4(type As String)
 
            Dim compilation = CreateCompilation($"
imports System.Runtime.InteropServices
 
<TypeIdentifierAttribute> {type}")
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType5(type As String)
 
            Dim compilation = CreateCompilation($"
imports System.Runtime.InteropServices
 
<TypeIdentifier> {type}")
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType6(type As String)
 
            Dim compilation = CreateCompilation($"
imports TI = System.Runtime.InteropServices.TypeIdentifierAttribute
 
<TI> {type}")
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType7(type As String)
 
            Dim compilation = CreateCompilation($"
imports TIAttribute = System.Runtime.InteropServices.TypeIdentifierAttribute
 
<TIAttribute> {type}")
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType8(type As String)
 
            Dim compilation = CreateCompilation($"
imports TIAttribute = System.Runtime.InteropServices.TypeIdentifierAttribute
 
<TI> {type}")
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType9(type As String)
 
            Dim compilation = CreateCompilation({
                $"
<TI> {type}"
}, options:=TestOptions.ReleaseDll.WithGlobalImports(New GlobalImport(
                SimpleImportsClause(
                    ImportAliasClause("TI"),
                    ParseName("System.Runtime.InteropServices.TypeIdentifierAttribute")), "TI")))
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType10(type As String)
 
            Dim compilation = CreateCompilation({
                $"
<TIAttribute> {type}"
}, options:=TestOptions.ReleaseDll.WithGlobalImports(New GlobalImport(
                SimpleImportsClause(
                    ImportAliasClause("TIAttribute"),
                    ParseName("System.Runtime.InteropServices.TypeIdentifierAttribute")), "TIAttribute")))
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType11(type As String)
 
            Dim compilation = CreateCompilation({
                $"
<TI> {type}"
}, options:=TestOptions.ReleaseDll.WithGlobalImports(New GlobalImport(
                SimpleImportsClause(
                    ImportAliasClause("TIAttribute"),
                    ParseName("System.Runtime.InteropServices.TypeIdentifierAttribute")), "TIAttribute")))
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C")
            Assert.True(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType12(type As String)
 
            Dim compilation = CreateCompilation({
                $"
imports X = TIAttribute
namespace N
{{
    <X> {type}
}}"
}, options:=TestOptions.ReleaseDll.WithGlobalImports(New GlobalImport(
                SimpleImportsClause(
                    ImportAliasClause("TIAttribute"),
                    ParseName("System.Runtime.InteropServices.TypeIdentifierAttribute")), "TIAttribute")))
 
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamespaceSymbol)("N").GetMember(Of NamedTypeSymbol)("C")
 
            ' VB doesn't allow an import to reference a global alias
            Assert.False(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType13(type As String)
 
            Dim compilation = CreateCompilation({
                $"
imports XAttribute = TIAttribute
namespace N
{{
    <XAttribute> {type}
}}"
}, options:=TestOptions.ReleaseDll.WithGlobalImports(New GlobalImport(
                SimpleImportsClause(
                    ImportAliasClause("TIAttribute"),
                    ParseName("System.Runtime.InteropServices.TypeIdentifierAttribute")), "TIAttribute")))
 
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamespaceSymbol)("N").GetMember(Of NamedTypeSymbol)("C")
 
            ' VB doesn't allow an import to reference a global alias
            Assert.False(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
 
        <Theory, MemberData(NameOf(TestData))>
        <WorkItem(1393763, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1393763")>
        Public Sub IsExplicitDefinitionOfNoPiaLocalType14(type As String)
            Dim compilation = CreateCompilation({
                "global imports TIAttribute = System.Runtime.InteropServices.TypeIdentifierAttribute",
                $"
imports XAttribute = TIAttribute
namespace N
{{
    <X> {type}
}}"
}, options:=TestOptions.ReleaseDll.WithGlobalImports(New GlobalImport(
                SimpleImportsClause(
                    ImportAliasClause("TIAttribute"),
                    ParseName("System.Runtime.InteropServices.TypeIdentifierAttribute")), "TIAttribute")))
 
            Dim namedType = compilation.GlobalNamespace.GetMember(Of NamespaceSymbol)("N").GetMember(Of NamedTypeSymbol)("C")
 
            ' VB doesn't allow an import to reference a global alias
            Assert.False(namedType.IsExplicitDefinitionOfNoPiaLocalType)
        End Sub
    End Class
End Namespace