File: ProjectSystemShim\VisualBasicCompilerOptionsTests.vb
Web Access
Project: src\src\VisualStudio\Core\Test\Microsoft.VisualStudio.LanguageServices.UnitTests.vbproj (Microsoft.VisualStudio.LanguageServices.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.Emit
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem
Imports Microsoft.VisualStudio.LanguageServices.UnitTests.ProjectSystemShim.Framework
Imports Microsoft.VisualStudio.LanguageServices.UnitTests.ProjectSystemShim.VisualBasicHelpers
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.ProjectSystemShim
    <[UseExportProvider]>
    <Trait(Traits.Feature, Traits.Features.ProjectSystemShims)>
    Public Class VisualBasicCompilerOptions
        <WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/867840")>
        Public Sub ConditionalCompilationOptionsIncludesTargetAndVersion()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                project.SetCompilerOptions(CreateMinimalCompilerOptions(project))
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
 
                Assert.Contains(New KeyValuePair(Of String, Object)("VBC_VER", PredefinedPreprocessorSymbols.CurrentVersionNumber), options.PreprocessorSymbols)
                Assert.Contains(New KeyValuePair(Of String, Object)("TARGET", "exe"), options.PreprocessorSymbols)
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530980")>
        Public Sub DocumentationModeSetToDiagnoseIfProducingDocFile()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                Dim compilerOptions = CreateMinimalCompilerOptions(project)
                compilerOptions.wszXMLDocName = "DocFile.xml"
                project.SetCompilerOptions(compilerOptions)
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
 
                Assert.Equal(DocumentationMode.Diagnose, options.DocumentationMode)
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact>
        Public Sub SetCompilerOptions_LangVersion14()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                Dim compilerOptionsHost = DirectCast(project, Implementation.ProjectSystem.Interop.ICompilerOptionsHostObject)
                Dim supported As Boolean
                compilerOptionsHost.SetCompilerOptions("/langversion:14", supported)
                Assert.True(supported)
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
 
                ' SetCompilerOptions only handles versions 15.3 and up, so we are ignoring the
                ' /langversion:14 above in favor of the legacy value. Since the legacy value was
                ' not set, it'll just be default.
                Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), options.LanguageVersion)
                Assert.Equal(LanguageVersion.Default, options.SpecifiedLanguageVersion)
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact>
        Public Sub SetCompilerOptions_LangVersion15()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                Dim compilerOptionsHost = DirectCast(project, Implementation.ProjectSystem.Interop.ICompilerOptionsHostObject)
                Dim supported As Boolean
                compilerOptionsHost.SetCompilerOptions("/langversion:15", supported)
                Assert.True(supported)
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
 
                ' SetCompilerOptions only handles versions 15.3 and up, so we are ignoring the
                ' /langversion:14 above in favor of the legacy value. Since the legacy value was
                ' not set, it'll just be default.
                Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), options.LanguageVersion)
                Assert.Equal(LanguageVersion.Default, options.SpecifiedLanguageVersion)
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact>
        Public Sub SetCompilerOptions_LangVersionDefault()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                Dim compilerOptionsHost = DirectCast(project, Implementation.ProjectSystem.Interop.ICompilerOptionsHostObject)
                Dim supported As Boolean
                compilerOptionsHost.SetCompilerOptions("/langversion:Default", supported)
                Assert.True(supported)
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
 
                Assert.Equal(LanguageVersion.Default.MapSpecifiedToEffectiveVersion(), options.LanguageVersion)
                Assert.Equal(LanguageVersion.Default, options.SpecifiedLanguageVersion)
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact>
        Public Sub SetCompilerOptions_LangVersion15_3()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                Dim compilerOptionsHost = DirectCast(project, Implementation.ProjectSystem.Interop.ICompilerOptionsHostObject)
                Dim supported As Boolean
                compilerOptionsHost.SetCompilerOptions("/langversion:15.3", supported)
                Assert.True(supported)
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
 
                Assert.Equal(LanguageVersion.VisualBasic15_3, options.LanguageVersion)
                Assert.Equal(LanguageVersion.VisualBasic15_3, options.SpecifiedLanguageVersion)
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact>
        Public Sub SetCompilerOptions_LangVersionLatest()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                Dim compilerOptionsHost = DirectCast(project, Implementation.ProjectSystem.Interop.ICompilerOptionsHostObject)
                Dim supported As Boolean
                compilerOptionsHost.SetCompilerOptions("/langversion:latest", supported)
                Assert.True(supported)
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
 
                Assert.Equal(LanguageVersion.Latest.MapSpecifiedToEffectiveVersion(), options.LanguageVersion)
                Assert.Equal(LanguageVersion.Latest, options.SpecifiedLanguageVersion)
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530980")>
        Public Sub DocumentationModeSetToParseIfNotProducingDocFile()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                Dim compilerOptions = CreateMinimalCompilerOptions(project)
                compilerOptions.wszXMLDocName = ""
                project.SetCompilerOptions(compilerOptions)
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.ParseOptions, VisualBasicParseOptions)
 
                Assert.Equal(DocumentationMode.Parse, options.DocumentationMode)
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1092636")>
        <WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1040247")>
        <WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1048368")>
        Public Sub ProjectWarningsOptionSetAndUnset()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
 
                Dim compilerOptions = CreateMinimalCompilerOptions(project)
                compilerOptions.wszWarningsAsErrors = "1234"
                project.SetCompilerOptions(compilerOptions)
 
                Dim workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                Dim options = DirectCast(workspaceProject.CompilationOptions, VisualBasicCompilationOptions)
 
                Assert.Equal(ReportDiagnostic.Error, options.SpecificDiagnosticOptions("BC1234"))
 
                compilerOptions.wszWarningsAsErrors = ""
                project.SetCompilerOptions(compilerOptions)
 
                workspaceProject = environment.Workspace.CurrentSolution.Projects.Single()
                options = DirectCast(workspaceProject.CompilationOptions, VisualBasicCompilationOptions)
 
                Assert.False(options.SpecificDiagnosticOptions.ContainsKey("BC1234"))
 
                project.Disconnect()
            End Using
        End Sub
 
        <WpfFact, WorkItem("https://github.com/dotnet/roslyn/pull/33401")>
        Public Sub ProjectOutputPathAndOutputExeNameChange()
            Using environment = New TestEnvironment()
                Dim project = CreateVisualBasicProject(environment, "Test")
                Dim compilerOptions = CreateMinimalCompilerOptions(project)
                compilerOptions.wszOutputPath = "C:\"
                compilerOptions.wszExeName = "test.dll"
                project.SetCompilerOptions(compilerOptions)
                Assert.Equal("C:\test.dll", project.GetOutputFileName())
 
                Assert.Equal("C:\test.dll", project.Test_ProjectSystemProject.CompilationOutputAssemblyFilePath)
 
                ' Change output folder from command line arguments - verify that objOutputPath changes.
                Dim newPath = "C:\NewFolder\test.dll"
                compilerOptions = CreateMinimalCompilerOptions(project)
                compilerOptions.wszOutputPath = "C:\NewFolder"
                compilerOptions.wszExeName = "test.dll"
                project.SetCompilerOptions(compilerOptions)
                Assert.Equal(newPath, project.GetOutputFileName())
 
                Assert.Equal("C:\NewFolder\test.dll", project.Test_ProjectSystemProject.CompilationOutputAssemblyFilePath)
 
                ' Change output file name - verify that outputPath changes.
                newPath = "C:\NewFolder\test2.dll"
                compilerOptions = CreateMinimalCompilerOptions(project)
                compilerOptions.wszOutputPath = "C:\NewFolder"
                compilerOptions.wszExeName = "test2.dll"
                project.SetCompilerOptions(compilerOptions)
                Assert.Equal(newPath, project.GetOutputFileName())
 
                Assert.Equal("C:\NewFolder\test2.dll", project.Test_ProjectSystemProject.CompilationOutputAssemblyFilePath)
 
                ' Change output file name and folder - verify that outputPath changes.
                newPath = "C:\NewFolder3\test3.dll"
                compilerOptions = CreateMinimalCompilerOptions(project)
                compilerOptions.wszOutputPath = "C:\NewFolder3"
                compilerOptions.wszExeName = "test3.dll"
                project.SetCompilerOptions(compilerOptions)
                Assert.Equal(newPath, project.GetOutputFileName())
 
                Assert.Equal("C:\NewFolder3\test3.dll", project.Test_ProjectSystemProject.CompilationOutputAssemblyFilePath)
 
                ' Relative path - set by VBIntelliProj in VB Web App project
                compilerOptions = CreateMinimalCompilerOptions(project)
                compilerOptions.wszOutputPath = "\"
                compilerOptions.wszExeName = "test3.dll"
                project.SetCompilerOptions(compilerOptions)
                Assert.Equal(Nothing, project.GetOutputFileName())
                Assert.Equal(Nothing, project.Test_ProjectSystemProject.CompilationOutputAssemblyFilePath)
            End Using
        End Sub
    End Class
End Namespace