File: SymbolId\SymbolKeyCompilationsTests.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
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
 
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.SymbolId
 
    Partial Public Class SymbolIdTest
        Inherits SymbolKeyTestBase
 
#Region "No change to symbol"
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528864")>
        Public Sub C2CTypeSymbolUnchanged01()
 
            Dim src1 = <compilation name="C2CTypeSymbolUnchanged01">
                           <file name="a.vb">
Imports System
Public Delegate Sub DGoo(p1 As Integer, p2 As String)
Namespace N1.N2
 
    Public Interface IGoo
    End Interface
 
    Namespace N3
        Public Class CGoo
            Public Structure SGoo
                Public Enum EGoo
                    Zero
                    One
                End Enum
            End Structure
        End Class
    End Namespace
End Namespace
                         </file>
                       </compilation>
 
            Dim src2 = <compilation name="C2CTypeSymbolUnchanged01">
                           <file name="b.vb">
Public Delegate Sub DGoo(p1 As Integer, p2 As String)
Namespace N1.N2
 
    Public Interface IGoo
        Function GetClass() As N3.CGoo
    End Interface
 
    Namespace N3
        Public Class CGoo
            Public Structure SGoo
                ' Update member
                Public Enum EGoo
                    Zero
                    One
                    Two
                End Enum
            End Structure
            ' Add member
            Public Sub M(n As Integer)
                Console.WriteLine(n)
            End Sub
        End Class
    End Namespace
End Namespace
                           </file>
                       </compilation>
 
            Dim comp1 = CreateCompilationWithMscorlib40(src1)
            Dim comp2 = CreateCompilationWithMscorlib40(src2)
 
            Dim originalSymbols = GetSourceSymbols(comp1, SymbolCategory.DeclaredType Or SymbolCategory.DeclaredNamespace)
            Dim newSymbols = GetSourceSymbols(comp2, SymbolCategory.DeclaredType Or SymbolCategory.DeclaredNamespace)
 
            ResolveAndVerifySymbolList(newSymbols, comp2, originalSymbols, comp1)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530198")>
        Public Sub C2CTypeSymbolCaseChangeOnly()
 
            Dim src1 = <compilation name="C2CTypeSymbolCaseChangeOnly">
                           <file name="a.vb">
Imports System
Namespace NGOO
    Public Interface IGOO
        Delegate Sub DGOO(p As Integer)
    End Interface
End Namespace
                         </file>
                       </compilation>
 
            Dim src2 = <compilation name="C2CTypeSymbolCaseChangeOnly">
                           <file name="b.vb">
Imports System
Namespace nGOO
    Public Interface IGoo ' case
        Delegate Sub DgOO(p As Integer)
    End Interface
End Namespace
                           </file>
                       </compilation>
 
            Dim comp1 = CreateCompilationWithMscorlib40(src1)
            Dim comp2 = CreateCompilationWithMscorlib40(src2)
 
            Dim originalSymbols = GetSourceSymbols(comp1, SymbolCategory.DeclaredType Or SymbolCategory.DeclaredNamespace)
            Dim newSymbols = GetSourceSymbols(comp2, SymbolCategory.DeclaredType Or SymbolCategory.DeclaredNamespace)
            ' case-insensitive
            ResolveAndVerifySymbolList(newSymbols, comp2, originalSymbols, comp1)
 
            Dim origlist = originalSymbols.OrderBy(Function(s) s.Name).ToList()
            Dim newlist = newSymbols.OrderBy(Function(s) s.Name).ToList()
            ' case sensitive
            For i = 0 To newlist.Count - 1 Step 1
                Dim sym1 = origlist(i)
                Dim sym2 = newlist(i)
 
                AssertSymbolsIdsEqual(sym2, sym1, SymbolIdComparison.None, expectEqual:=False)
                Dim resolvedSymbol = ResolveSymbol(sym2, comp1, SymbolIdComparison.None) ' ignored
                Assert.NotNull(resolvedSymbol)
                Assert.Equal(sym1, resolvedSymbol)
            Next
 
        End Sub
 
#End Region
 
#Region "Change to symbol but same ID"
 
        <Fact>
        Public Sub C2CTypeSymbolChanged01()
 
            Dim src1 = <compilation name="C2CTypeSymbolChanged01">
                           <file name="a.vb">
Imports System
Public Delegate Sub DGoo(p As Integer)
 
Namespace N1.N2
 
    Public Interface IBase
    End Interface
 
    Public Interface IGoo
    End Interface
 
    Namespace N3
        Public Class CGoo
            Public Structure SGoo
                Public Enum EGoo
                    Zero
                    One
                End Enum
            End Structure
        End Class
    End Namespace
End Namespace
                         </file>
                       </compilation>
 
            Dim src2 = <compilation name="C2CTypeSymbolChanged01">
                           <file name="a.vb">
Public Delegate Sub DGoo(p1 As Integer, p2 As String) ' One more param
 
Namespace N1.N2
 
    Public Interface IBase
    End Interface
 
    Public Interface IGoo
        Inherits IBase ' base
    End Interface
 
    Namespace N3
        Public Class cGoo
            Implements Igoo ' impl
 
            Private Structure SGOO ' modifier
 
                Public Enum egoo As Long ' change base, case
                    Zero
                    ONE
                End Enum
            End Structure
 
        End Class
    End Namespace
End Namespace
                           </file>
                       </compilation>
 
            Dim comp1 = CreateCompilationWithMscorlib40(src1)
            Dim comp2 = CreateCompilationWithMscorlib40(src2)
 
            Dim originalSymbols = GetSourceSymbols(comp1, SymbolCategory.DeclaredType)
            Dim newSymbols = GetSourceSymbols(comp2, SymbolCategory.DeclaredType)
 
            ResolveAndVerifySymbolList(newSymbols, comp2, originalSymbols, comp1)
        End Sub
 
        <Fact>
        Public Sub C2CAssemblySymbolChanged01()
 
            Dim src1 = <compilation name="C2CAssemblySymbolChanged01">
                           <file name="a.vb"><![CDATA[
<Assembly: System.Reflection.AssemblyVersion("1.2.3.4")>
Public Class C
End Class
]]>
                           </file>
                       </compilation>
 
            Dim src2 = <compilation name="C2CAssemblySymbolChanged02">
                           <file name="b.vb"><![CDATA[
<Assembly: System.Reflection.AssemblyVersion("5.6.7.8")>
Public Class C
End Class
]]>
                           </file>
                       </compilation>
 
            Dim comp1 = CreateCompilationWithMscorlib40(src1)
            Dim comp2 = CreateCompilationWithMscorlib40(src2)
 
            Dim sym1 = comp1.SourceModule.GlobalNamespace.GetMembers("C").FirstOrDefault()
            Dim sym2 = comp2.SourceModule.GlobalNamespace.GetMembers("C").FirstOrDefault()
 
            AssertSymbolsIdsEqual(sym2, sym1, SymbolIdComparison.IgnoreCase, expectEqual:=False)
            Assert.Null(ResolveSymbol(sym2, comp1, SymbolIdComparison.IgnoreCase))
            ' ignore asm id 
            ResolveAndVerifySymbol(sym2, sym1, comp1, SymbolIdComparison.IgnoreCase Or SymbolIdComparison.IgnoreAssemblyIds)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530170")>
        Public Sub C2CAssemblySymbolChanged02()
 
            Dim src1 = <compilation name="C2CAssemblySymbolChanged01">
                           <file name="a.vb"><![CDATA[
<Assembly: System.Reflection.AssemblyVersion("1.2.3.4")>
Public Class C
End Class
]]>
                           </file>
                       </compilation>
 
            Dim src2 = <compilation name="C2CAssemblySymbolChanged02">
                           <file name="b.vb"><![CDATA[
<Assembly: System.Reflection.AssemblyVersion("1.2.3.4")>
Public Class C
End Class
]]>
                           </file>
                       </compilation>
 
            Dim comp1 = CreateCompilationWithMscorlib40(src1)
            Dim comp2 = CreateCompilationWithMscorlib40(src2)
 
            Dim originalSymbols = GetSourceSymbols(comp1, SymbolCategory.DeclaredType)
            Dim newSymbols = GetSourceSymbols(comp2, SymbolCategory.DeclaredType)
            Dim sym1 As ISymbol = comp1.Assembly
            Dim sym2 As ISymbol = comp2.Assembly
 
            AssertSymbolsIdsEqual(sym2, sym1, SymbolIdComparison.IgnoreCase, False)
            Assert.Null(ResolveSymbol(sym2, comp1, SymbolIdComparison.IgnoreCase))
            ' ignore asm id 
            ' Same ID
            AssertSymbolsIdsEqual(sym2, sym1, SymbolIdComparison.IgnoreAssemblyIds)
            ' but can NOT resolve
            Assert.Null(ResolveSymbol(sym2, comp1, SymbolIdComparison.IgnoreCase Or SymbolIdComparison.IgnoreAssemblyIds))
 
            sym1 = comp1.Assembly.Modules(0)
            sym2 = comp2.Assembly.Modules(0)
 
            AssertSymbolsIdsEqual(sym2, sym1, SymbolIdComparison.IgnoreCase, False)
            Assert.Null(ResolveSymbol(sym2, comp1, SymbolIdComparison.IgnoreCase))
 
            AssertSymbolsIdsEqual(sym2, sym1, SymbolIdComparison.IgnoreAssemblyIds)
            Assert.Null(ResolveSymbol(sym2, comp1, SymbolIdComparison.IgnoreAssemblyIds))
        End Sub
 
#End Region
 
    End Class
 
End Namespace