File: Semantics\MissingRuntimeHelpers.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.IO
Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.SpecialType
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.OverloadResolution
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics
 
    Public Class MissingRuntimeHelpers
        Inherits BasicTestBase
 
        <Fact>
        Public Sub SpecialMembers()
 
            Dim compilationDef =
<compilation name="SpecialMembers">
    <file name="a.vb">
Class Program
  Sub Main()
    Dim Ob As Object = Nothing
    Dim St As String = Nothing
    Dim [Do] as Double = 0
    Dim Da as Date = Nothing
    Dim De as Decimal = Nothing
    Dim ChArray As Char() = Nothing
 
    Test([Do] ^ [Do])
    Test(Da > Da)
    Test(De > De)
    Test(De + De)
    Test(St + St)
    Test(-De)
    Test(CType(ChArray, String))
    Test(CDec([Do]))
    Test(CInt(De))
    Test(CInt([Do]))
  End Sub
 
  Sub Test(x As Object)
  End Sub
End Class
 
Namespace System
    Public Class [Object]
    End Class
 
    Public Class [String]
    End Class
 
    Public Class Array
    End Class
 
    Public Structure Void
    End Structure
 
    Public Structure [Double]
    End Structure
 
    Public Structure Int32
    End Structure
 
    Public Structure [Boolean]
    End Structure
 
    Public Structure DateTime
    End Structure
 
    Public Structure [Decimal]
    End Structure
 
    Public Structure [Char]
    End Structure
 
    Public Class ValueType
    End Class
End Namespace
 
    </file>
</compilation>
 
            Dim compilation = CompilationUtils.CreateEmptyCompilationWithReferences(compilationDef, New MetadataReference() {})
 
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC35000: Requested operation is not available because the runtime library function 'System.DateTime.New' is not defined.
    Dim Da as Date = Nothing
                     ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Decimal.New' is not defined.
    Dim De as Decimal = Nothing
                        ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Math.Pow' is not defined.
    Test([Do] ^ [Do])
         ~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.DateTime.Compare' is not defined.
    Test(Da > Da)
         ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Decimal.Compare' is not defined.
    Test(De > De)
         ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Decimal.Add' is not defined.
    Test(De + De)
         ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.String.Concat' is not defined.
    Test(St + St)
         ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Decimal.Negate' is not defined.
    Test(-De)
         ~~~
BC35000: Requested operation is not available because the runtime library function 'System.String.New' is not defined.
    Test(CType(ChArray, String))
         ~~~~~~~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Decimal.New' is not defined.
    Test(CDec([Do]))
         ~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Convert.ToInt32' is not defined.
    Test(CInt(De))
         ~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Math.Round' is not defined.
    Test(CInt([Do]))
         ~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact>
        Public Sub WellKnownMembers()
            Dim compilationDef =
<compilation name="WellKnownMembers">
    <file name="a.vb">
Class Program
  Sub Main()
    Dim Ob As Object = Nothing
    Dim St as String = Nothing
    Dim [Do] as Double = 0
    Dim Bo As Boolean = false
 
    Test(St > St)
    Test(Ob AndAlso Ob)
    Test(Ob + Ob)
    Test(St Like St)
    Test(Ob > Ob)
    Test(Not Ob)
    Test(CType(Ob, Char()))
    Test(CLng(Ob))
    Test(CStr([Do]))
    Test(CInt(St))
    Test(CDec(Bo))
  End Sub
 
  Sub Test(x As Object)
  End Sub
End Class
    </file>
</compilation>
 
            Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(compilationDef)
 
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.CompareString' is not defined.
    Test(St > St)
         ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToBoolean' is not defined.
    Test(Ob AndAlso Ob)
         ~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.AddObject' is not defined.
    Test(Ob + Ob)
         ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString' is not defined.
    Test(St Like St)
         ~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.CompareObjectGreater' is not defined.
    Test(Ob > Ob)
         ~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.NotObject' is not defined.
    Test(Not Ob)
         ~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToCharArrayRankOne' is not defined.
    Test(CType(Ob, Char()))
         ~~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToLong' is not defined.
    Test(CLng(Ob))
         ~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToString' is not defined.
    Test(CStr([Do]))
         ~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger' is not defined.
    Test(CInt(St))
         ~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToDecimal' is not defined.
    Test(CDec(Bo))
         ~~~~~~~~
</expected>)
        End Sub
 
        <Fact>
        Public Sub MissingCompareExchange()
 
            Dim compilationDef =
<compilation name="SpecialMembers">
    <file name="a.vb">
 
Delegate Sub E1()
Class Program
  public event e as E1
 
  public shared Sub Main()
     dim v as new Program
     AddHandler v.e, AddressOf Main
  End Sub  
End Class
 
Namespace System
    Public Class [Object]
    End Class
 
    Public Class [String]
    End Class
 
    Public Class Array
    End Class
 
    Public Structure Void
    End Structure
 
    Public Structure [Double]
    End Structure
 
    Public Structure Int32
    End Structure
 
    Public Structure [Boolean]
    End Structure
 
    Public Structure DateTime
    End Structure
 
    Public Structure [Decimal]
    End Structure
 
    Public Structure [Char]
    End Structure
 
    Public Structure IntPtr
    End Structure
 
    Public Class ValueType
    End Class
 
    Public Class [Delegate]
    End Class
 
    Public Class MulticastDelegate
    End Class
End Namespace
 
    </file>
</compilation>
 
            Dim compilation = CompilationUtils.CreateEmptyCompilationWithReferences(compilationDef, New MetadataReference() {})
 
            CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<expected>
BC30002: Type 'System.AsyncCallback' is not defined.
Delegate Sub E1()
~~~~~~~~~~~~~~~~~
BC30002: Type 'System.IAsyncResult' is not defined.
Delegate Sub E1()
~~~~~~~~~~~~~~~~~
</expected>)
 
            CompilationUtils.AssertTheseCompileDiagnostics(compilation,
<expected>
BC30002: Type 'System.AsyncCallback' is not defined.
Delegate Sub E1()
~~~~~~~~~~~~~~~~~
BC30002: Type 'System.IAsyncResult' is not defined.
Delegate Sub E1()
~~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Delegate.Combine' is not defined.
  public event e as E1
  ~~~~~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'System.Delegate.Remove' is not defined.
  public event e as E1
  ~~~~~~~~~~~~~~~~~~~~
</expected>)
 
        End Sub
 
        <Fact>
        Public Sub MalformedSystemArray()
 
            Dim compilationDef =
<compilation name="SpecialMembers">
    <file name="a.vb">
 
Class Program
  public shared Sub Main()
    dim x() as integer = nothing
 
    for each e in x
    next
 
  End Sub  
End Class
 
Namespace System
    Public Class [Object]
    End Class
 
    Public Class [String]
    End Class
 
    Public Class Array
        Public Readonly Property Length as integer
            Get
                return 0
            end get
        end property
    End Class
 
    Public Structure Void
    End Structure
 
    Public Structure [Double]
    End Structure
 
    Public Structure Int32
    End Structure
 
    Public Structure [Boolean]
    End Structure
 
    Public Structure DateTime
    End Structure
 
    Public Structure [Decimal]
    End Structure
 
    Public Structure [Char]
    End Structure
 
    Public Structure IntPtr
    End Structure
 
    Public Class ValueType
    End Class
End Namespace
 
    </file>
</compilation>
 
            Dim compilation = CompilationUtils.CreateEmptyCompilationWithReferences(compilationDef, New MetadataReference() {})
 
            CompilationUtils.AssertTheseCompileDiagnostics(compilation,
<expected>
BC32023: Expression is of type 'Integer()', which is not a collection type.
    for each e in x
                  ~
</expected>)
 
            CompilationUtils.AssertTheseDiagnostics(compilation,
<expected>
BC32023: Expression is of type 'Integer()', which is not a collection type.
    for each e in x
                  ~
</expected>)
 
        End Sub
 
    End Class
End Namespace