File: Semantics\OptionApis.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 Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics
    Public Class OptionApis
        Inherits SemanticModelTestBase
 
        <Fact>
        Public Sub Options1()
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="GetSemanticInfo">
    <file name="allon.vb">
Option Strict On
Option Infer On
Option Explicit On
Option Compare Text
    </file>
    <file name="alloff.vb">
Option Strict Off
Option Infer Off
Option Explicit Off
Option Compare Binary
    </file>
    <file name="empty.vb"></file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom).WithOptionInfer(False).WithOptionExplicit(True).WithOptionCompareText(False))
 
            Dim semanticModelAllOn = CompilationUtils.GetSemanticModel(compilation, "allon.vb")
            Assert.Equal(OptionStrict.On, semanticModelAllOn.OptionStrict)
            Assert.Equal(True, semanticModelAllOn.OptionInfer)
            Assert.Equal(True, semanticModelAllOn.OptionExplicit)
            Assert.Equal(True, semanticModelAllOn.OptionCompareText)
 
            Dim semanticModelAllOff = CompilationUtils.GetSemanticModel(compilation, "alloff.vb")
            Assert.Equal(OptionStrict.Off, semanticModelAllOff.OptionStrict)
            Assert.Equal(False, semanticModelAllOff.OptionInfer)
            Assert.Equal(False, semanticModelAllOff.OptionExplicit)
            Assert.Equal(False, semanticModelAllOff.OptionCompareText)
 
            Dim semanticModelEmpty = CompilationUtils.GetSemanticModel(compilation, "empty.vb")
            Assert.Equal(OptionStrict.Custom, semanticModelEmpty.OptionStrict)
            Assert.Equal(False, semanticModelEmpty.OptionInfer)
            Assert.Equal(True, semanticModelEmpty.OptionExplicit)
            Assert.Equal(False, semanticModelEmpty.OptionCompareText)
        End Sub
 
        <Fact>
        <WorkItem(50610, "https://github.com/dotnet/roslyn/issues/50610")>
        Public Sub MissingParts_01()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option Text
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.CompareKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.None, stmt.ValueKeyword.Kind)
            Assert.True(stmt.NameKeyword.IsMissing)
            Assert.False(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertTheseDiagnostics(
<expected>
BC30208: 'Compare' expected.
Option Text
       ~~~~
</expected>)
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
 
        <Fact>
        Public Sub MissingParts_02()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option Compare
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.CompareKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.BinaryKeyword, stmt.ValueKeyword.Kind)
            Assert.False(stmt.NameKeyword.IsMissing)
            Assert.True(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertTheseDiagnostics(
<expected>
BC30207: 'Option Compare' must be followed by 'Text' or 'Binary'.
Option Compare
~~~~~~~~~~~~~~
</expected>)
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
 
        <Fact>
        Public Sub MissingParts_03()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option Strict
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.StrictKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.None, stmt.ValueKeyword.Kind)
            Assert.False(stmt.NameKeyword.IsMissing)
            Assert.False(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertNoDiagnostics()
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
 
        <Fact>
        Public Sub MissingParts_04()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option Infer
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.InferKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.None, stmt.ValueKeyword.Kind)
            Assert.False(stmt.NameKeyword.IsMissing)
            Assert.False(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertNoDiagnostics()
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
 
        <Fact>
        Public Sub MissingParts_05()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option Explicit
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.ExplicitKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.None, stmt.ValueKeyword.Kind)
            Assert.False(stmt.NameKeyword.IsMissing)
            Assert.False(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertNoDiagnostics()
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
 
        <Fact>
        Public Sub MissingParts_06()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option On
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.StrictKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.None, stmt.ValueKeyword.Kind)
            Assert.True(stmt.NameKeyword.IsMissing)
            Assert.False(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertTheseDiagnostics(
<expected>
BC30206: 'Option' must be followed by 'Compare', 'Explicit', 'Infer', or 'Strict'.
Option On
       ~~
</expected>)
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
 
        <Fact>
        Public Sub MissingParts_07()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option Off
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.StrictKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.None, stmt.ValueKeyword.Kind)
            Assert.True(stmt.NameKeyword.IsMissing)
            Assert.False(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertTheseDiagnostics(
<expected>
BC30206: 'Option' must be followed by 'Compare', 'Explicit', 'Infer', or 'Strict'.
Option Off
       ~~~
</expected>)
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
 
        <Fact>
        Public Sub MissingParts_08()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.StrictKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.None, stmt.ValueKeyword.Kind)
            Assert.True(stmt.NameKeyword.IsMissing)
            Assert.False(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertTheseDiagnostics(
<expected>
BC30206: 'Option' must be followed by 'Compare', 'Explicit', 'Infer', or 'Strict'.
Option
~~~~~~
</expected>)
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
 
        <Fact>
        <WorkItem(50610, "https://github.com/dotnet/roslyn/issues/50610")>
        Public Sub MissingParts_09()
            Dim compilation = CreateCompilation(
<compilation name="GetSemanticInfo">
    <file name="a.vb">
Option Binary
    </file>
</compilation>)
 
            Dim tree = compilation.SyntaxTrees.Single()
            Dim root = tree.GetRoot()
 
            Dim stmt = root.DescendantNodes().OfType(Of OptionStatementSyntax)().Single()
 
            Assert.Equal(SyntaxKind.CompareKeyword, stmt.NameKeyword.Kind)
            Assert.Equal(SyntaxKind.None, stmt.ValueKeyword.Kind)
            Assert.True(stmt.NameKeyword.IsMissing)
            Assert.False(stmt.ValueKeyword.IsMissing)
 
            compilation.AssertTheseDiagnostics(
<expected>
BC30208: 'Compare' expected.
Option Binary
       ~~~~~~
</expected>)
 
            Dim model = compilation.GetSemanticModel(tree)
            For i As Integer = 0 To root.Span.End
                model.GetEnclosingSymbol(i)
            Next
        End Sub
    End Class
End Namespace