File: Compilation\GetImportScopesTests.vb
Web Access
Project: src\src\Compilers\VisualBasic\Test\Semantic\Microsoft.CodeAnalysis.VisualBasic.Semantic.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.Semantic.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 System.Linq
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
 
    Public Class GetImportScopesTests
        Inherits SemanticModelTestBase
 
        Private Shared Function GetImportScopes(text As String) As ImmutableArray(Of IImportScope)
            Dim tree = Parse(text)
            Dim comp = CreateCompilation(tree)
            Dim model = comp.GetSemanticModel(tree)
            Dim scopes = model.GetImportScopes(FindPositionFromText(tree, "'pos"))
            Return scopes
        End Function
 
        <Fact>
        Public Sub TestEmptyFile()
            Dim text = "'pos"
            Dim scopes = GetImportScopes(text)
            Assert.Empty(scopes)
        End Sub
 
        <Fact>
        Public Sub TestNoImportsBeforeMemberDeclaration()
            Dim Text = "'pos
class C
end class"
            Dim scopes = GetImportScopes(Text)
            Assert.Empty(scopes)
        End Sub
 
        Private Shared Function IsNamespaceWithName(symbol As INamespaceOrTypeSymbol, name As String) As Boolean
            Return TryCast(symbol, INamespaceSymbol)?.Name = name
        End Function
 
        Private Shared Function IsAliasWithName(symbol As IAliasSymbol, aliasName As String, targetName As String, inGlobalNamespace As Boolean) As Boolean
            Return symbol.Name = aliasName AndAlso symbol.Target.Name = targetName AndAlso TypeOf symbol.Target Is INamespaceSymbol AndAlso DirectCast(symbol.Target, INamespaceSymbol).ContainingNamespace.IsGlobalNamespace = inGlobalNamespace
        End Function
 
        Private Shared Function IsSimpleImportsClauseWithName(declaringSyntaxReference As SyntaxReference, name As String) As Boolean
            Dim syntax = declaringSyntaxReference.GetSyntax()
            Return TypeOf syntax Is IdentifierNameSyntax AndAlso
                TypeOf syntax.Parent Is SimpleImportsClauseSyntax AndAlso
                name = DirectCast(syntax, IdentifierNameSyntax).Identifier.Text
        End Function
 
        Private Shared Function IsAliasImportsClauseWithName(aliasSymbol As IAliasSymbol, name As String) As Boolean
            Dim syntax = aliasSymbol.DeclaringSyntaxReferences.Single().GetSyntax()
            Return TypeOf syntax Is SimpleImportsClauseSyntax AndAlso DirectCast(syntax, SimpleImportsClauseSyntax).Alias.Identifier.Text = name
        End Function
 
#Region "normal Imports"
 
        <Fact>
        Public Sub TestBeforeImports()
            Dim Text = "'pos
imports System"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Imports)
            Assert.True(IsNamespaceWithName(scopes.Single().Imports.Single().NamespaceOrType, NameOf(System)))
            Assert.True(IsSimpleImportsClauseWithName(scopes.Single().Imports.Single().DeclaringSyntaxReference, NameOf(System)))
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestAfterImportsNoContent()
            Dim Text = "
imports System
'pos"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Imports)
            Assert.True(IsNamespaceWithName(scopes.Single().Imports.Single().NamespaceOrType, NameOf(System)))
            Assert.True(IsSimpleImportsClauseWithName(scopes.Single().Imports.Single().DeclaringSyntaxReference, NameOf(System)))
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestAfterImportsBeforeMemberDeclaration()
            Dim Text = "
imports System
'pos
class C
end class
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
            Assert.True(IsNamespaceWithName(scopes.Single().Imports.Single().NamespaceOrType, NameOf(System)))
            Assert.True(IsSimpleImportsClauseWithName(scopes.Single().Imports.Single().DeclaringSyntaxReference, NameOf(System)))
        End Sub
 
        <Fact>
        Public Sub TestAfterMultipleImportsNoContent()
            Dim Text = "
imports System
imports Microsoft
'pos"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Equal(2, scopes.Single().Imports.Length)
 
            Assert.True(scopes.Single().Imports.Any(Function(i) IsNamespaceWithName(i.NamespaceOrType, NameOf(System))))
            Assert.True(scopes.Single().Imports.Any(Function(i) IsNamespaceWithName(i.NamespaceOrType, NameOf(Microsoft))))
 
            Assert.True(scopes.Single().Imports.Any(Function(i) IsSimpleImportsClauseWithName(i.DeclaringSyntaxReference, NameOf(System))))
            Assert.True(scopes.Single().Imports.Any(Function(i) IsSimpleImportsClauseWithName(i.DeclaringSyntaxReference, NameOf(Microsoft))))
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestNestedNamespaceOuterPosition()
            Dim Text = "
imports System
 
class C
    'pos
end class
 
namespace N
    class D
    end class
end namespace
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Imports)
            Assert.True(IsNamespaceWithName(scopes.Single().Imports.Single().NamespaceOrType, NameOf(System)))
            Assert.True(IsSimpleImportsClauseWithName(scopes.Single().Imports.Single().DeclaringSyntaxReference, NameOf(System)))
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestNestedNamespaceInnerPosition()
            Dim Text = "
imports System
 
namespace N
    class C
        'pos
    end class
end namespace
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single.Imports)
            Assert.True(IsNamespaceWithName(scopes.Single().Imports.Single().NamespaceOrType, NameOf(System)))
            Assert.True(IsSimpleImportsClauseWithName(scopes.Single().Imports.Single().DeclaringSyntaxReference, NameOf(System)))
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestNestedNamespaceInnerPositionIntermediaryEmptyNamespace()
            Dim Text = "
imports System
 
namespace Outer
    namespace N
        class C
            'pos
        end class
    end namespace
end namespace
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Imports)
            Assert.True(IsNamespaceWithName(scopes.Single().Imports.Single().NamespaceOrType, NameOf(System)))
            Assert.True(IsSimpleImportsClauseWithName(scopes.Single().Imports.Single().DeclaringSyntaxReference, NameOf(System)))
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
#End Region
 
#Region "aliases"
 
        <Fact>
        Public Sub TestBeforeAlias()
            Dim Text = "'pos
imports S = System"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Aliases)
            Assert.True(IsAliasWithName(scopes.Single.Aliases().Single(), "S", NameOf(System), inGlobalNamespace:=True))
            Assert.True(IsAliasImportsClauseWithName(scopes.Single.Aliases().Single(), "S"))
 
            Assert.Empty(scopes.Single().Imports)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestAfterAliasNoContent()
            Dim Text = "
imports S = System
'pos"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Aliases)
            Assert.True(IsAliasWithName(scopes.Single.Aliases().Single(), "S", NameOf(System), inGlobalNamespace:=True))
            Assert.True(IsAliasImportsClauseWithName(scopes.Single.Aliases().Single(), "S"))
 
            Assert.Empty(scopes.Single().Imports)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestAfterAliasBeforeMemberDeclaration()
            Dim Text = "
imports S = System
'pos
class C
end class
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Aliases)
            Assert.True(IsAliasWithName(scopes.Single.Aliases().Single(), "S", NameOf(System), inGlobalNamespace:=True))
            Assert.True(IsAliasImportsClauseWithName(scopes.Single.Aliases().Single(), "S"))
 
            Assert.Empty(scopes.Single().Imports)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestAfterMultipleAliasesNoContent()
            Dim Text = "
imports S = System
imports M = Microsoft
'pos"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Equal(2, scopes.Single().Aliases.Length)
 
            Assert.True(scopes.Single().Aliases.Any(Function(a) IsAliasWithName(a, "S", NameOf(System), inGlobalNamespace:=True)))
            Assert.True(scopes.Single().Aliases.Any(Function(a) IsAliasImportsClauseWithName(a, "S")))
            Assert.True(scopes.Single().Aliases.Any(Function(a) IsAliasWithName(a, "M", NameOf(Microsoft), inGlobalNamespace:=True)))
            Assert.True(scopes.Single().Aliases.Any(Function(a) IsAliasImportsClauseWithName(a, "M")))
 
            Assert.Empty(scopes.Single().Imports)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestAliasNestedNamespaceOuterPosition()
            Dim Text = "
imports S = System
 
class C
    'pos
end lass
 
namespace N
end namespace
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Aliases)
            Assert.True(IsAliasWithName(scopes.Single.Aliases().Single(), "S", NameOf(System), inGlobalNamespace:=True))
            Assert.True(IsAliasImportsClauseWithName(scopes.Single.Aliases().Single(), "S"))
 
            Assert.Empty(scopes.Single().Imports)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
        <Fact>
        Public Sub TestAliasNestedNamespaceInnerPosition()
            Dim text = "
imports S = System
 
namespace N
    class C
        'pos
    end class
end namespace
"
            Dim scopes = GetImportScopes(text)
 
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Aliases)
            Assert.True(IsAliasWithName(scopes.Single.Aliases().Single(), "S", NameOf(System), inGlobalNamespace:=True))
            Assert.True(IsAliasImportsClauseWithName(scopes.Single.Aliases().Single(), "S"))
 
            Assert.Empty(scopes.Single().Imports)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().XmlNamespaces)
        End Sub
 
#End Region
 
        ' Imports <xmlns:r1="http://roslyn">
 
#Region "xml namespace"
 
        <Fact>
        Public Sub TestBeforeXmlNamespae()
            Dim Text = "'pos
Imports <xmlns:r1=""http://roslyn"">"
            Dim scopes = GetImportScopes(Text)
 
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().XmlNamespaces)
            Assert.Equal("http://roslyn", scopes.Single().XmlNamespaces.Single().XmlNamespace)
            Assert.True(TypeOf scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.Equal("<xmlns:r1=""http://roslyn"">", scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax().ToString())
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().Imports)
        End Sub
 
        <Fact>
        Public Sub TestAfterXmlNamespaceNoContent()
            Dim Text = "
Imports <xmlns:r1=""http://roslyn"">
'pos"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().XmlNamespaces)
            Assert.Equal("http://roslyn", scopes.Single().XmlNamespaces.Single().XmlNamespace)
            Assert.True(TypeOf scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.Equal("<xmlns:r1=""http://roslyn"">", scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax().ToString())
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().Imports)
        End Sub
 
        <Fact>
        Public Sub TestAfterXmlNamespaceBeforeMemberDeclaration()
            Dim Text = "
Imports <xmlns:r1=""http://roslyn"">
'pos
class C
end class
"
            Dim scopes = GetImportScopes(Text)
 
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().XmlNamespaces)
            Assert.Equal("http://roslyn", scopes.Single().XmlNamespaces.Single().XmlNamespace)
            Assert.True(TypeOf scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.Equal("<xmlns:r1=""http://roslyn"">", scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax().ToString())
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().Imports)
        End Sub
 
        <Fact>
        Public Sub TestAfterMultipleXmlNamespacesNoContent()
            Dim Text = "
Imports <xmlns:r1=""http://roslyn"">
Imports <xmlns:r2=""http://roslyn2"">
'pos"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Equal(2, scopes.Single().XmlNamespaces.Length)
 
            Assert.True(scopes.Single().XmlNamespaces.Any(Function(x) x.XmlNamespace = "http://roslyn"))
            Assert.True(TypeOf scopes.Single().XmlNamespaces.First().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.True(scopes.Single().XmlNamespaces.Any(Function(x) x.DeclaringSyntaxReference.GetSyntax().ToString() = "<xmlns:r1=""http://roslyn"">"))
 
            Assert.True(scopes.Single().XmlNamespaces.Any(Function(X) X.XmlNamespace = "http://roslyn2"))
            Assert.True(TypeOf scopes.Single().XmlNamespaces.Last().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.True(scopes.Single().XmlNamespaces.Any(Function(x) x.DeclaringSyntaxReference.GetSyntax().ToString() = "<xmlns:r2=""http://roslyn2"">"))
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().Imports)
        End Sub
 
        <Fact>
        Public Sub TestXmlNamespaceNestedNamespaceOuterPosition()
            Dim Text = "
Imports <xmlns:r1=""http://roslyn"">
 
class C
    'pos
end class
 
namespace N
    class D
    end class
end namespace
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().XmlNamespaces)
            Assert.Equal("http://roslyn", scopes.Single().XmlNamespaces.Single().XmlNamespace)
            Assert.True(TypeOf scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.Equal("<xmlns:r1=""http://roslyn"">", scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax().ToString())
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().Imports)
        End Sub
 
        <Fact>
        Public Sub TestXmlNamespaceNestedNamespaceInnerPosition()
            Dim Text = "
Imports <xmlns:r1=""http://roslyn"">
 
namespace N
    class C
        'pos
    end class
end namespace
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().XmlNamespaces)
            Assert.Equal("http://roslyn", scopes.Single().XmlNamespaces.Single().XmlNamespace)
            Assert.True(TypeOf scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.Equal("<xmlns:r1=""http://roslyn"">", scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax().ToString())
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().Imports)
        End Sub
 
        <Fact>
        Public Sub TestXmlNamespaceNestedNamespaceInnerPositionIntermediaryEmptyNamespace()
            Dim Text = "
Imports <xmlns:r1=""http://roslyn"">
 
namespace Outer
    namespace N
        class C
            'pos
        end class
    end namespace
end namespace
"
            Dim scopes = GetImportScopes(Text)
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().XmlNamespaces)
            Assert.Equal("http://roslyn", scopes.Single().XmlNamespaces.Single().XmlNamespace)
            Assert.True(TypeOf scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.Equal("<xmlns:r1=""http://roslyn"">", scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax().ToString())
 
            Assert.Empty(scopes.Single().Aliases)
            Assert.Empty(scopes.Single().ExternAliases)
            Assert.Empty(scopes.Single().Imports)
        End Sub
 
#End Region
 
#Region "global imports"
 
        Public Shared Function GetGlobalImportsOptions(ParamArray values As String()) As VisualBasicCompilationOptions
            Return TestOptions.ReleaseDll.WithGlobalImports(
                values.Select(Function(v) GlobalImport.Parse(v)))
        End Function
 
        <Fact>
        Public Sub TestEmptyFile_WithGlobalImports()
            Dim Text = "
'pos"
            Dim tree = Parse(Text)
            Dim comp = CreateCompilation(tree, options:=GetGlobalImportsOptions("System", "M = Microsoft", "<xmlns:r1=""http://roslyn"">"))
            Dim model = comp.GetSemanticModel(tree)
            Dim scopes = model.GetImportScopes(FindPositionFromText(tree, "'pos"))
 
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Aliases)
            Assert.True(IsAliasWithName(scopes.Single().Aliases.Single(), "M", "Microsoft", inGlobalNamespace:=True))
            Assert.Empty(scopes.Single.Aliases().Single().DeclaringSyntaxReferences)
 
            Assert.Single(scopes.Single().Imports)
            Assert.True(IsNamespaceWithName(scopes.Single().Imports.Single().NamespaceOrType, "System"))
            Assert.Null(scopes.Single().Imports.Single.DeclaringSyntaxReference)
 
            Assert.Single(scopes.Single().XmlNamespaces)
            Assert.Equal("http://roslyn", scopes.Single().XmlNamespaces.Single().XmlNamespace)
            Assert.Null(scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference)
 
            Assert.Empty(scopes.Single().ExternAliases)
        End Sub
 
        <Fact>
        Public Sub TestInsideDeclaration_WithGlobalImports()
            Dim Text = "
class C
    'pos
end class"
            Dim tree = Parse(Text)
            Dim comp = CreateCompilation(tree, options:=GetGlobalImportsOptions("System", "M = Microsoft", "<xmlns:r1=""http://roslyn"">"))
            Dim model = comp.GetSemanticModel(tree)
            Dim scopes = model.GetImportScopes(FindPositionFromText(tree, "'pos"))
            Assert.Single(scopes)
 
            Assert.Single(scopes.Single().Aliases)
            Assert.True(IsAliasWithName(scopes.Single().Aliases.Single(), "M", "Microsoft", inGlobalNamespace:=True))
            Assert.Empty(scopes.Single.Aliases().Single().DeclaringSyntaxReferences)
 
            Assert.Single(scopes.Single().Imports)
            Assert.True(IsNamespaceWithName(scopes.Single().Imports.Single().NamespaceOrType, "System"))
            Assert.Null(scopes.Single().Imports.Single.DeclaringSyntaxReference)
 
            Assert.Single(scopes.Single().XmlNamespaces)
            Assert.Equal("http://roslyn", scopes.Single().XmlNamespaces.Single().XmlNamespace)
            Assert.Null(scopes.Single().XmlNamespaces.Single().DeclaringSyntaxReference)
 
            Assert.Empty(scopes.Single().ExternAliases)
        End Sub
 
        <Fact>
        Public Sub TestGlobalImportsAndFileImports()
            Dim text = "
imports System.IO
imports T = System.Threading
imports <xmlns:r2=""http://roslyn2"">
 
class C
    'pos
end class
"
            Dim tree = Parse(text)
            Dim comp = CreateCompilation(tree, options:=GetGlobalImportsOptions("System", "M = Microsoft", "<xmlns:r1=""http://roslyn"">"))
            Dim model = comp.GetSemanticModel(tree)
            dim scopes = model.GetImportScopes(FindPositionFromText(tree, "'pos"))
 
            Assert.Equal(2, scopes.Length)
 
            Assert.Single(scopes(0).Aliases)
            Assert.True(IsAliasWithName(scopes(0).Aliases.Single(), "T", "Threading", inGlobalNamespace:=False))
            Assert.True(IsAliasImportsClauseWithName(scopes(0).Aliases().Single(), "T"))
 
            Assert.Single(scopes(0).Imports)
            Assert.True(IsNamespaceWithName(scopes(0).Imports.Single().NamespaceOrType, "IO"))
            Dim syntax = scopes(0).Imports.Single.DeclaringSyntaxReference.GetSyntax()
            Assert.True(TypeOf syntax Is QualifiedNameSyntax)
            Assert.True(TypeOf syntax.Parent Is SimpleImportsClauseSyntax)
            Assert.Equal("System.IO", syntax.ToString())
 
            Assert.Single(scopes(0).XmlNamespaces)
            Assert.Equal("http://roslyn2", scopes(0).XmlNamespaces.Single().XmlNamespace)
            Assert.True(TypeOf scopes(0).XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax() Is XmlNamespaceImportsClauseSyntax)
            Assert.Equal("<xmlns:r2=""http://roslyn2"">", scopes(0).XmlNamespaces.Single().DeclaringSyntaxReference.GetSyntax().ToString())
 
            Assert.Single(scopes(1).Aliases)
            Assert.True(IsAliasWithName(scopes(1).Aliases.Single(), "M", "Microsoft", inGlobalNamespace:=True))
            Assert.Empty(scopes(1).Aliases().Single().DeclaringSyntaxReferences)
 
            Assert.Single(scopes(1).Imports)
            Assert.True(IsNamespaceWithName(scopes(1).Imports.Single().NamespaceOrType, "System"))
            Assert.Null(scopes(1).Imports.Single.DeclaringSyntaxReference)
 
            Assert.Single(scopes(1).XmlNamespaces)
            Assert.Equal("http://roslyn", scopes(1).XmlNamespaces.Single().XmlNamespace)
            Assert.Null(scopes(1).XmlNamespaces.Single().DeclaringSyntaxReference)
 
            Assert.Empty(scopes(0).ExternAliases)
            Assert.Empty(scopes(1).ExternAliases)
        End Sub
 
#End Region
 
    End Class
End Namespace