File: src\Analyzers\VisualBasic\Tests\AddExplicitCast\AddExplicitCastTests.vb
Web Access
Project: src\src\CodeStyle\VisualBasic\Tests\Microsoft.CodeAnalysis.VisualBasic.CodeStyle.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.CodeStyle.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 Microsoft.CodeAnalysis.CodeActions
Imports Microsoft.CodeAnalysis.CodeFixes
Imports Microsoft.CodeAnalysis.Diagnostics
Imports Microsoft.CodeAnalysis.VisualBasic.CodeFixes.AddExplicitCast
 
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Diagnostics.AddExplicitCast
    <Trait(Traits.Feature, Traits.Features.CodeActionsAddExplicitCast)>
    Partial Public Class AddExplicitCastTests
        Inherits AbstractVisualBasicDiagnosticProviderBasedUserDiagnosticTest_NoEditor
 
        Friend Overrides Function CreateDiagnosticProviderAndFixer(workspace As Workspace) As (DiagnosticAnalyzer, CodeFixProvider)
            Return (Nothing, New VisualBasicAddExplicitCastCodeFixProvider)
        End Function
 
        Protected Overrides Function MassageActions(actions As ImmutableArray(Of CodeAction)) As ImmutableArray(Of CodeAction)
            Return FlattenActions(actions)
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCBool() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = 0
        Dim b As Boolean = [|i|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = 0
        Dim b As Boolean = CBool(i)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCByte() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim b As Byte = 1
        Dim c As Byte = 2
        b = [|b & c|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim b As Byte = 1
        Dim c As Byte = 2
        b = CByte(b & c)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCChar() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim s As String = 0.ToString()
        Dim ch As Char = [|s|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim s As String = 0.ToString()
        Dim ch As Char = CChar(s)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCDate() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim s As String = #2006-06-13#.ToString()
        Dim dt As Date = [|s|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim s As String = #2006-06-13#.ToString()
        Dim dt As Date = CDate(s)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCDbl() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim s As String = 1.0R.ToString()
        Dim db As Double = [|s|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim s As String = 1.0R.ToString()
        Dim db As Double = CDbl(s)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCDec() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim db As Double = 1.0R
        Dim dc As Decimal = [|db|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim db As Double = 1.0R
        Dim dc As Decimal = CDec(db)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCInt() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim db As Double = 1.0R
        Dim i As Integer = [|db|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim db As Double = 1.0R
        Dim i As Integer = CInt(db)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCLng() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim db As Double = 1.0R
        Dim lg As Long = [|db|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim db As Double = 1.0R
        Dim lg As Long = CLng(db)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCSByte() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim dc As Decimal = -14.02D
        Dim sb As SByte = [|dc|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim dc As Decimal = -14.02D
        Dim sb As SByte = CSByte(dc)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCShort() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = 2
        Dim sh As Short = [|i|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = 2
        Dim sh As Short = CShort(i)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCSng() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim db As Double = 1.0R
        Dim sn As Single = [|db|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim db As Double = 1.0R
        Dim sn As Single = CSng(db)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCStr() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = 1
        Dim s As String = [|i|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = 1
        Dim s As String = CStr(i)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentObjectToStringCStr() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim o As Object = 1.ToString()
        Dim s As String = [|o|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim o As Object = 1.ToString()
        Dim s As String = CStr(o)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCUInt() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = -1
        Dim ui As UInteger = [|i|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = -1
        Dim ui As UInteger = CUInt(i)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCULng() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim l As Long = -1
        Dim ul As ULong =[|l|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim l As Long = -1
        Dim ul As ULong = CULng(l)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestPredefinedAssignmentCUShort() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = -2
        Dim us As UShort = [|i|]
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = -2
        Dim us As UShort = CUShort(i)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestAssignment() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Base
End Class
Class Derived
    Inherits Base
End Class
Module M1
    Sub Main()
        Dim d As Derived = Nothing
        Dim b As Base = Nothing
        d = [|b|]
    End Sub
End Module",
"Option Strict On
Class Base
End Class
Class Derived
    Inherits Base
End Class
Module M1
    Sub Main()
        Dim d As Derived = Nothing
        Dim b As Base = Nothing
        d = CType(b, Derived)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestMethodCall() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Base
End Class
Class Derived
    Inherits Base
End Class
Module M1
    Sub goo(d As Derived)
    End Sub
    Sub Main()
        Dim b As Base = Nothing
        goo([|b|])
    End Sub
End Module",
"Option Strict On
Class Base
End Class
Class Derived
    Inherits Base
End Class
Module M1
    Sub goo(d As Derived)
    End Sub
    Sub Main()
        Dim b As Base = Nothing
        goo(CType(b, Derived))
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestMethodCallPredefined() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub goo(d As Integer)
    End Sub
    Sub Main()
        goo([|""10""|])
    End Sub
End Module",
"Option Strict On
Module M1
    Sub goo(d As Integer)
    End Sub
    Sub Main()
        goo(CInt(""10""))
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestConditional() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = 10
        Dim b = If([|i|], True, False)
    End Sub
End Module",
"Option Strict On
Module M1
    Sub Main()
        Dim i As Integer = 10
        Dim b = If(CBool(i), True, False)
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestReturn() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module M1
    Function goo() As Integer
        Return [|""10""|] 
 End Function
End Module",
"Option Strict On
Module M1
    Function goo() As Integer
        Return CInt(""10"")
    End Function
End Module")
        End Function
 
        <Fact>
        Public Async Function TestObjectCreation() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Base
End Class
Class Derived
    Inherits Base
End Class
Module M1
    Sub Main()
        Dim l = Function() As Derived
                    Return [|New Base()|]
                End Function
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestAttribute() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module Program
    <System.Obsolete(""as"", [|10|])>
    Sub Main(args As String())
    End Sub
End Module",
"Option Strict On
Module Program
    <System.Obsolete(""as"", CBool(10))>
    Sub Main(args As String())
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestClassAttribute() As Task
            Await TestInRegularAndScriptAsync(
"<[|TestOverload|](1)>
Class Program
End Class
Public Class TestOverloadAttribute
    Inherits System.Attribute
    Public Sub New(param As Short)
    End Sub
    Public Sub New(param As TestEnum)
    End Sub
End Class
Public Enum TestEnum
    One = 1
End Enum",
"<TestOverload(CShort(1))>
Class Program
End Class
Public Class TestOverloadAttribute
    Inherits System.Attribute
    Public Sub New(param As Short)
    End Sub
    Public Sub New(param As TestEnum)
    End Sub
End Class
Public Enum TestEnum
    One = 1
End Enum", compilationOptions:=New VisualBasicCompilationOptions(OutputKind.ConsoleApplication, optionStrict:=OptionStrict.Off))
        End Function
 
        <Fact>
        Public Async Function TestMultiline() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module Program
    Sub Main(args As String())
        Dim x As Integer = [|10.0 +
        11.0 +
        10|] ' asas 
    End Sub
End Module",
"Option Strict On
Module Program
    Sub Main(args As String())
        Dim x As Integer = CInt(10.0 +
        11.0 +
        10) ' asas 
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestWidening() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Module Program
    Sub Main(args As String())
        Dim x As Double = 10[||]
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestInvalidCast() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class A
End Class
Class B
End Class
Module Program[||]
    Sub Main(args As String())
        Dim x As A = New B()
    End Sub
End Module")
        End Function
 
        <Fact>
        Public Async Function TestOptionStrictOn() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Module Module1
    Sub Main()
        Dim red = ColorF.FromArgb(255, 255, 0, 0)
        Dim c As Color = [|red|]
    End Sub
End Module
Public Structure ColorF
    Public A, R, G, B As Single
    Public Shared Function FromArgb(a As Double, r As Double, g As Double, b As Double) As ColorF
        Return New ColorF With {.A = CSng(a), .R = CSng(r), .G = CSng(g), .B = CSng(b)}
    End Function
    Public Shared Widening Operator CType(x As Color) As ColorF
        Return ColorF.FromArgb(x.A / 255, x.R / 255, x.G / 255, x.B / 255)
    End Operator
    Public Shared Narrowing Operator CType(x As ColorF) As Color
        Return Color.FromArgb(CByte(x.A * 255), CByte(x.R * 255), CByte(x.G * 255), CByte(x.B * 255))
    End Operator
End Structure
Public Structure Color
    Public A, R, G, B As Byte
    Public Shared Function FromArgb(a As Byte, r As Byte, g As Byte, b As Byte) As Color
        Return New Color With {.A = a, .R = r, .G = g, .B = b}
    End Function
End Structure",
"Option Strict On
Module Module1
    Sub Main()
        Dim red = ColorF.FromArgb(255, 255, 0, 0)
        Dim c As Color = CType(red, Color)
    End Sub
End Module
Public Structure ColorF
    Public A, R, G, B As Single
    Public Shared Function FromArgb(a As Double, r As Double, g As Double, b As Double) As ColorF
        Return New ColorF With {.A = CSng(a), .R = CSng(r), .G = CSng(g), .B = CSng(b)}
    End Function
    Public Shared Widening Operator CType(x As Color) As ColorF
        Return ColorF.FromArgb(x.A / 255, x.R / 255, x.G / 255, x.B / 255)
    End Operator
    Public Shared Narrowing Operator CType(x As ColorF) As Color
        Return Color.FromArgb(CByte(x.A * 255), CByte(x.R * 255), CByte(x.G * 255), CByte(x.B * 255))
    End Operator
End Structure
Public Structure Color
    Public A, R, G, B As Byte
    Public Shared Function FromArgb(a As Byte, r As Byte, g As Byte, b As Byte) As Color
        Return New Color With {.A = a, .R = r, .G = g, .B = b}
    End Function
End Structure")
        End Function
 
        <Fact>
        Public Async Function SimpleVariableDeclaration() As Task
 
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim d As Derived = [|b|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim d As Derived = CType(b, Derived)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function SimpleVariableDeclarationWithFunctionInnvocation() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Sub M()
        Dim d As Derived = [|returnBase()|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Sub M()
        Dim d As Derived = CType(returnBase(), Derived)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function ReturnStatementWithObject() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Derived
        Dim b As Base
        Return [|b|]
    End Function
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Derived
        Dim b As Base
        Return CType(b, Derived)
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function ReturnStatementWithIEnumerator() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System.Collections.Generic
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As IEnumerable(Of Derived)
        Dim b As Base
        Return [|b|]
    End Function
End Class",
"Option Strict On
Imports System.Collections.Generic
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As IEnumerable(Of Derived)
        Dim b As Base
        Return CType(b, IEnumerable(Of Derived))
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function YieldReturnStatementWithObject() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System.Collections.Generic
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Iterator Function returnBase() As IEnumerable(Of Derived)
        Dim b As Base = New Base
        Yield [||]b
    End Function
End Class",
"Option Strict On
Imports System.Collections.Generic
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Iterator Function returnBase() As IEnumerable(Of Derived)
        Dim b As Base = New Base
        Yield CType(b, Derived)
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function ReturnStatementWithFunctionInnvocation() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Function returnDerived() As Derived
        Return [|returnBase()|]
    End Function
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Function returnDerived() As Derived
        Return CType(returnBase(), Derived)
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function SimpleFunctionArgumentsWithObject1() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Sub passDerived(ByVal d As Derived)
    End Sub
 
    Private Sub M()
        Dim b As Base
        passDerived([||]b)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Sub passDerived(ByVal d As Derived)
    End Sub
 
    Private Sub M()
        Dim b As Base
        passDerived(CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function SimpleFunctionArgumentsWithObject2() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Sub passDerived(i As Integer, ByVal d As Derived)
    End Sub
 
    Private Sub M()
        Dim b As Base
        passDerived(1, [||]b)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Sub passDerived(i As Integer, ByVal d As Derived)
    End Sub
 
    Private Sub M()
        Dim b As Base
        passDerived(1, CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function SimpleFunctionArgumentsWithFunctionInvocation() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Sub passDerived(ByVal d As Derived)
    End Sub
 
    Private Sub M()
        passDerived([|returnBase()|])
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function returnBase() As Base
        Dim b As Base
        Return b
    End Function
 
    Private Sub passDerived(ByVal d As Derived)
    End Sub
 
    Private Sub M()
        passDerived(CType(returnBase(), Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function SimpleConstructorArgumentsWithObject() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub New(ByVal d As Derived)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test = New Test([||]b)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub New(ByVal d As Derived)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test = New Test(CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function VariableDeclarationWithPublicFieldMember() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public b As Base
 
        Public Sub New(ByVal b As Base)
            Me.b = b
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test = New Test(b)
        Dim d As Derived = t.b[||]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public b As Base
 
        Public Sub New(ByVal b As Base)
            Me.b = b
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test = New Test(b)
        Dim d As Derived = CType(t.b, Derived)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function VariableDeclarationWithPrivateFieldMember() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Private b As Base
 
        Public Sub New(ByVal b As Base)
            Me.b = b
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test = New Test(b)
        Dim d As Derived = t.b[||]
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function PublicMemberFunctionArgument1() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System.Collections.Generic
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M()
        Dim b As Base = New Derived
        Dim list As List(Of Derived) = New List(Of Derived)()
        list.Add([|b|])
    End Sub
End Class",
"Option Strict On
Imports System.Collections.Generic
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M()
        Dim b As Base = New Derived
        Dim list As List(Of Derived) = New List(Of Derived)()
        list.Add(CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function PublicMemberFunctionArgument2() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub testing(ByVal d As Derived)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test
        t.testing([||]b)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub testing(ByVal d As Derived)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test
        t.testing(CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function PrivateMemberFunctionArgument() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Private Sub testing(ByVal d As Derived)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test
        t.testing([||]b)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MemberFunctions() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub testing(ByVal d As Derived)
        End Sub
 
        Private Sub testing(ByVal b As Base)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test
        t.testing([||]b)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub testing(ByVal d As Derived)
        End Sub
 
        Private Sub testing(ByVal b As Base)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base
        Dim t As Test
        t.testing(CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function BaseConstructorArgument() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub New(ByVal d As Derived)
        End Sub
    End Class
 
    Class Derived_Test
        Inherits Test
 
        Public Sub New(ByVal b As Base)
            MyBase.New([||]b)
        End Sub
    End Class
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub New(ByVal d As Derived)
        End Sub
    End Class
 
    Class Derived_Test
        Inherits Test
 
        Public Sub New(ByVal b As Base)
            MyBase.New(CType(b, Derived))
        End Sub
    End Class
End Class")
        End Function
 
        <Fact>
        Public Async Function ThisConstructorArgument() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub New(ByVal d As Derived)
        End Sub
 
        Public Sub New(ByVal b As Base, ByVal i As Integer)
            Me.New([||]b)
        End Sub
    End Class
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub New(ByVal d As Derived)
        End Sub
 
        Public Sub New(ByVal b As Base, ByVal i As Integer)
            Me.New(CType(b, Derived))
        End Sub
    End Class
End Class")
        End Function
 
        <Fact>
        Public Async Function ObjectInitializer() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M()
        Dim d As Derived = [|New Base()|]
        Dim d2 As Derived = New Test()
    End Sub
End Class
")
        End Function
 
        <Fact>
        Public Async Function ObjectInitializer2() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Shared Narrowing Operator CType(t As Test) As Derived
            Return New Derived
        End Operator
    End Class
 
    Private Sub M()
        Dim d2 As Derived = New Test()[||]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Shared Narrowing Operator CType(t As Test) As Derived
            Return New Derived
        End Operator
    End Class
 
    Private Sub M()
        Dim d2 As Derived = CType(New Test(), Derived)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function ObjectInitializer3() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function M() As Derived
        Return [||]New Base
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function ObjectInitializer4() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Shared Narrowing Operator CType(t As Test) As Derived
            Return New Derived
        End Operator
    End Class
 
    Private Function M() As Derived
        Return [||]New Test
    End Function
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Shared Narrowing Operator CType(t As Test) As Derived
            Return New Derived
        End Operator
    End Class
 
    Private Function M() As Derived
        Return CType(New Test, Derived)
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function ObjectInitializer5() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M(d As Derived)
    End Sub
 
    Private Sub Goo()
        M([||]new Base)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function ObjectInitializer6() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Shared Narrowing Operator CType(t As Test) As Derived
            Return New Derived
        End Operator
    End Class
 
    Private Sub M(d As Derived)
    End Sub
 
    Private Sub Goo()
        M([||]new Test)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Shared Narrowing Operator CType(t As Test) As Derived
            Return New Derived
        End Operator
    End Class
 
    Private Sub M(d As Derived)
    End Sub
 
    Private Sub Goo()
        M(CType(new Test, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function ObjectInitializer7() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M(d As Julia)
    End Sub
 
    Private Sub Goo()
        M([||]new Base)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function ObjectInitializer8() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Private Shared Narrowing Operator CType(t As Test) As Derived
            Return New Derived
        End Operator
    End Class
 
    Private Sub M(d As Derived)
    End Sub
 
    Private Sub Goo()
        M([||]new Test)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Private Shared Narrowing Operator CType(t As Test) As Derived
            Return New Derived
        End Operator
    End Class
 
    Private Sub M(d As Derived)
    End Sub
 
    Private Sub Goo()
        M(CType(new Test, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function InheritInterfaces1() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
    End Interface
 
    Class Derived
        Implements Base1, Base2
    End Class
 
    Private Sub Goo(ByRef b As Base2)
        Dim d As Derived = [||]b
    End Sub
End Class",
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
    End Interface
 
    Class Derived
        Implements Base1, Base2
    End Class
 
    Private Sub Goo(ByRef b As Base2)
        Dim d As Derived = CType(b, Derived)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function InheritInterfaces2() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
    End Interface
 
    Class Derived1
        Implements Base1, Base2
    End Class
 
    Class Derived2
        Inherits Derived1
    End Class
 
    Private Sub Goo(ByRef b As Base2)
        Dim d As Derived2 = [||]b
    End Sub
End Class",
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
    End Interface
 
    Class Derived1
        Implements Base1, Base2
    End Class
 
    Class Derived2
        Inherits Derived1
    End Class
 
    Private Sub Goo(ByRef b As Base2)
        Dim d As Derived2 = CType(b, Derived2)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function InheritInterfaces3() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
        Implements Base1
    End Interface
 
    Private Function Goo(ByRef b As Base1) As Base2
        Return b[||]
    End Function
End Class",
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
        Implements Base1
    End Interface
 
    Private Function Goo(ByRef b As Base1) As Base2
        Return CType(b, Base2)
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function InheritInterfaces4() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
        Implements Base1
    End Interface
 
    Private Sub Goo(ByRef b As Base1)
        Dim b2 As Base2 = b[||]
    End Sub
End Class",
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
        Implements Base1
    End Interface
 
    Private Sub Goo(ByRef b As Base1)
        Dim b2 As Base2 = CType(b, Base2)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function InheritInterfaces5() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
        Inherits Base1
    End Interface
 
    Interface Base3
    End Interface
 
    Class Derived1
        Implements Base2, Base3
    End Class
 
    Class Derived2
        Inherits Derived1
    End Class
 
    Private Sub Goo(ByRef b As Derived2)
    End Sub
 
    Private Sub M(ByRef b As Base1)
        Goo([||]b)
    End Sub
End Class",
"Option Strict On
Class Program
    Interface Base1
    End Interface
 
    Interface Base2
        Inherits Base1
    End Interface
 
    Interface Base3
    End Interface
 
    Class Derived1
        Implements Base2, Base3
    End Class
 
    Class Derived2
        Inherits Derived1
    End Class
 
    Private Sub Goo(ByRef b As Derived2)
    End Sub
 
    Private Sub M(ByRef b As Base1)
        Goo(CType(b, Derived2))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function GenericType() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M()
        Dim func1 As Func(Of Base, Base) = Function(b) b
        Dim func2 As Func(Of Derived, Derived) = func1[||]
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function GenericType2() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Interface IA
    End Interface
 
    Interface IB
        Inherits IA
    End Interface
 
    Interface A(Of T As IA)
    End Interface
 
    Class B(Of T As IB)
        Implements A(Of T)
    End Class
 
    Private Sub Goo()
        Dim b As B(Of IB) = New B(Of IB)
        Dim c1 As A(Of IA) = b[||]
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function GenericType3() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Interface IA
    End Interface
 
    Class CB
        Implements IA
    End Class
 
    Interface A(Of T As IA, U)
    End Interface
 
    Class B(Of T As CB, U)
        Implements A(Of T, U)
    End Class
 
    Private Sub Goo()
        Dim b As B(Of CB, Integer) = New B(Of CB, Integer)
        Dim c1 As A(Of IA, String) = b[||]
    End Sub
End Class",
"Option Strict On
Class Program
    Interface IA
    End Interface
 
    Class CB
        Implements IA
    End Class
 
    Interface A(Of T As IA, U)
    End Interface
 
    Class B(Of T As CB, U)
        Implements A(Of T, U)
    End Class
 
    Private Sub Goo()
        Dim b As B(Of CB, Integer) = New B(Of CB, Integer)
        Dim c1 As A(Of IA, String) = CType(b, A(Of IA, String))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction1() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M()
        Dim foo As Func(Of Base, Derived) = Function(d) d[||]
    End Sub
End Class",
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M()
        Dim foo As Func(Of Base, Derived) = Function(d) CType(d, Derived)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction2() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo()
        Dim func As Func(Of Derived, Derived) = Function(d) d
        Dim b As Base
        Dim b2 As Base = func(b[||])
    End Sub
End Class",
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo()
        Dim func As Func(Of Derived, Derived) = Function(d) d
        Dim b As Base
        Dim b2 As Base = func(CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction3() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo()
        Dim func As Func(Of Base, Base) = Function(d) d
        Dim b As Base
        Dim b2 As Derived = [||]func(b)
    End Sub
End Class",
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo()
        Dim func As Func(Of Base, Base) = Function(d) d
        Dim b As Base
        Dim b2 As Derived = CType(func(b), Derived)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction4() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function Goo() As Derived
        Dim func As Func(Of Base, Base) = Function(d) d
        Dim b As Base
        Return [||]func(b)
    End Function
End Class",
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Function Goo() As Derived
        Dim func As Func(Of Base, Base) = Function(d) d
        Dim b As Base
        Return CType(func(b), Derived)
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction5_ReturnStatement() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Shared Function Goo() As Action(Of Base)
        Return [|Sub(ByVal b As Derived)
                   Console.WriteLine()
               End Sub|]
    End Function
End Class",
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Shared Function Goo() As Action(Of Base)
        Return CType(Sub(ByVal b As Derived)
                   Console.WriteLine()
               End Sub, Action(Of Base))
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction6_Arguments() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M(ByVal d As Derived, ByVal action As Action(Of Derived))
    End Sub
 
    Private Sub Goo()
        Dim b As Base = New Derived()
        M([||]b, Sub(ByVal d As Derived)
             End Sub)
    End Sub
End Class",
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M(ByVal d As Derived, ByVal action As Action(Of Derived))
    End Sub
 
    Private Sub Goo()
        Dim b As Base = New Derived()
        M(CType(b, Derived), Sub(ByVal d As Derived)
             End Sub)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction7_Arguments() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M(ByVal d As Derived, ByRef action As Action(Of Derived))
    End Sub
 
    Private Sub Goo()
        Dim b As Base = New Derived()
        M(b[||], Sub(ByRef d As Base)
             End Sub)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction8_Arguments() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Imports System
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Shared Sub M(ByVal d As Derived, ParamArray action As Action(Of Derived)())
    End Sub
 
    Private Shared Sub Goo()
        Dim b1 As Base = New Derived()
        Dim action As Action(Of Derived) = Sub(b)
                                           End Sub
        M([||]b1, action, action)
    End Sub
End Class",
"Option Strict On
Imports System
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Shared Sub M(ByVal d As Derived, ParamArray action As Action(Of Derived)())
    End Sub
 
    Private Shared Sub Goo()
        Dim b1 As Base = New Derived()
        Dim action As Action(Of Derived) = Sub(b)
                                           End Sub
        M(CType(b1, Derived), action, action)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function RedundantCast1() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo()
        Dim b As Base
        Dim d As Derived = [||]CType(b, Base)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo()
        Dim b As Base
        Dim d As Derived = CType(b, Derived)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function RedundantCast2() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived1
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived1
    End Class
 
    Private Sub Goo()
        Dim b As Base
        Dim d As Derived2 = [||]CType(b, Derived1)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived1
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived1
    End Class
 
    Private Sub Goo()
        Dim b As Base
        Dim d As Derived2 = CType(b, Derived2)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function RedundantCast3() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M(ByVal d As Derived)
    End Sub
 
    Private Sub Goo()
        Dim b As Base
        M([||]CType(b, Base))
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub M(ByVal d As Derived)
    End Sub
 
    Private Sub Goo()
        Dim b As Base
        M(CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function RedundantCast4() As Task
            ' Currently not offered, but could be allowed in the future.
            Await TestMissingAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived1
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Base
    End Class
 
    Private Sub M(ByRef d As Derived2)
    End Sub
 
    Private Sub Goo()
        Dim b As Base
        M([||]CType(b, Derived1))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function LambdaFunction9_Arguments() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Imports System
 
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Shared Sub M(ByVal d As Derived, ParamArray action As Action(Of Derived)())
    End Sub
 
    Private Shared Sub Goo()
        Dim b1 As Base = New Derived()
        Dim list() As Action(Of Derived) = {}
        Dim action As Action(Of Derived) = Sub(b)
                                           End Sub
        M([||]b1, list, action)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function ExactMethodCandidate() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
        Public Sub Testing(ByRef d As Base)
        End Sub
    End Class
 
    Class Derived
        Inherits Base
 
        Public Overloads Sub Testing(ByRef d As Derived)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim d As Derived = New Derived()
        d.Testing([||]b)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates1_ArgumentsInOrder_NoLabels() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByVal i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        [||]Goo("""", b)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByVal i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Goo("""", CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates2_ArgumentsInOrder_NoLabels() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived, ByVal i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Goo("""", [||]b, 1)
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived, ByVal i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Goo("""", CType(b, Derived), 1)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates3_ArgumentsInOrder_NoLabels_Params() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        [|Goo("""", b)|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Goo("""", CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates4_ArgumentsInOrder_NoLabels_Params() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        [|Goo("""", b, 1, 2, 3)|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Goo("""", CType(b, Derived), 1, 2, 3)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates5_ArgumentsInOrder_NoLabels_Params() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Derived())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim d As Derived = New Derived()
        [|Goo("""", d, b, b)|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Derived())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim d As Derived = New Derived()
        Goo("""", d, CType(b, Derived), b)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates6_ArgumentsOutOfOrder_NoLabels() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        [|Goo(b, """")|]
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates7_ArgumentsInOrder_SomeLabels() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived, i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        [|Goo("""", d:=b, 1)|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived, i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Goo("""", d:=CType(b, Derived), 1)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates8_ArgumentsInOrder_SomeLabels_Params() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim strlist = New String(0) {}
        [|Goo("""", d:=b, strlist)|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim strlist = New String(0) {}
        Goo("""", d:=CType(b, Derived), strlist)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates9_ArgumentsInOrder_SomeLabels_Params() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim strlist = New String(0) {}
        [|Goo("""", d:=b, list:=strlist)|]
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates10_ArgumentsInOrder_SomeLabels_Params_OmittedArgument() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim strlist = New String(0) {}
        [|Goo("""", d:=b, )|]
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates11_ArgumentsOutOfOrder_SomeLabels() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        [|Goo(d:=b, """", 1)|]
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates12_ArgumentsOutOfOrder_SomeLabels() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        [|Goo("""", i:=1, d:=b)|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Goo("""", i:=1, d:=CType(b, Derived))
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MethodCandidates13_ArgumentsOutOfOrder_SomeLabels() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim strlist = New String(0) {}
        [|Goo(s:="""", d:=b, strlist)|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal d As Derived, ParamArray list As Object())
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim strlist = New String(0) {}
        Goo(s:="""", d:=CType(b, Derived), strlist)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function ConstructorCandidates() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub New(ByVal s As String, ByVal d As Derived, ByVal i As Integer)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim t As Test = [|New Test(d:=b, s:="""", i:=1)|]
    End Sub
End Class",
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Test
        Public Sub New(ByVal s As String, ByVal d As Derived, ByVal i As Integer)
        End Sub
    End Class
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim t As Test = New Test(d:=CType(b, Derived), s:="""", i:=1)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function MultipleOptions1() As Task
            Dim initialMarkup = "
Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Class Test
        Public Sub New(ByVal s As String, ByRef b As Base, ByVal i As Integer, ParamArray list As Object())
            [|Me.New(d:=b, s:=s, i:=i)|]
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived2, ByVal i As Integer)
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived, ByVal i As Integer)
        End Sub
    End Class
End Class"
 
            Dim workspace = CreateWorkspaceFromOptions(initialMarkup, New TestParameters())
            Dim actions = Await GetCodeActionsAsync(workspace, New TestParameters())
            Assert.Equal(2, actions.Item1.Length)
 
            Dim expect_format = "
Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Class Test
        Public Sub New(ByVal s As String, ByRef b As Base, ByVal i As Integer, ParamArray list As Object())
            Me.New(d:=CType(b, {0}), s:=s, i:=i)
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived2, ByVal i As Integer)
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived, ByVal i As Integer)
        End Sub
    End Class
End Class"
            Await TestInRegularAndScriptAsync(initialMarkup, String.Format(expect_format, "Derived"), index:=0,
                title:=String.Format(CodeFixesResources.Convert_type_to_0, "Derived"))
 
            Await TestInRegularAndScriptAsync(initialMarkup, String.Format(expect_format, "Derived2"), index:=1,
                title:=String.Format(CodeFixesResources.Convert_type_to_0, "Derived2"))
        End Function
 
        <Fact>
        Public Async Function MultipleOptions2() As Task
            Dim initialMarkup = "
Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Class Test
        Public Sub New(ByVal s As String, ByRef b As Base, ByVal i As Integer, ParamArray list As Object())
            [|Me.New(d:=b, s:=s, i:=i)|]
        End Sub
 
        Private Sub New(ByRef d As Derived2, ByVal s As String, ByVal i As Integer)
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived, ByVal i As Integer)
        End Sub
    End Class
End Class"
 
            Dim workspace = CreateWorkspaceFromOptions(initialMarkup, New TestParameters())
            Dim actions = Await GetCodeActionsAsync(workspace, New TestParameters())
            Assert.Equal(2, actions.Item1.Length)
 
            Dim expect_format = "
Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Class Test
        Public Sub New(ByVal s As String, ByRef b As Base, ByVal i As Integer, ParamArray list As Object())
            Me.New(d:=CType(b, {0}), s:=s, i:=i)
        End Sub
 
        Private Sub New(ByRef d As Derived2, ByVal s As String, ByVal i As Integer)
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived, ByVal i As Integer)
        End Sub
    End Class
End Class"
            Await TestInRegularAndScriptAsync(initialMarkup, String.Format(expect_format, "Derived"), index:=0,
                title:=String.Format(CodeFixesResources.Convert_type_to_0, "Derived"))
 
            Await TestInRegularAndScriptAsync(initialMarkup, String.Format(expect_format, "Derived2"), index:=1,
                title:=String.Format(CodeFixesResources.Convert_type_to_0, "Derived2"))
        End Function
 
        <Fact>
        Public Async Function MultipleOptions3() As Task
            Dim initialMarkup = "
Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Class Test
        Public Sub New(ByVal s As String, ByRef b As Base, ByVal i As Integer, ParamArray list As Object())
            [|Me.New(d:=b, s:=s, i:=i)|]
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived2, ByVal i As Integer, ParamArray list As Object())
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived, ByVal i As Integer)
        End Sub
    End Class
End Class"
 
            Dim expect = "
Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Class Test
        Public Sub New(ByVal s As String, ByRef b As Base, ByVal i As Integer, ParamArray list As Object())
            Me.New(d:=CType(b, Derived), s:=s, i:=i)
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived2, ByVal i As Integer, ParamArray list As Object())
        End Sub
 
        Private Sub New(ByVal s As String, ByRef d As Derived, ByVal i As Integer)
        End Sub
    End Class
End Class"
 
            Await TestInRegularAndScriptAsync(initialMarkup, expect)
        End Function
 
        <Fact>
        Public Async Function MultipleOptions4() As Task
            Dim initialMarkup = "
Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal j As Integer, ByVal i As Integer, ByVal d As Derived)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByVal i As Integer, ByVal d As Derived2)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim strlist = New String(0) {}
        [|Goo("""", 1, i:=1, d:=b)|]
    End Sub
End Class"
 
            Dim expect = "
Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Private Sub Goo(ByVal s As String, ByVal j As Integer, ByVal i As Integer, ByVal d As Derived)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByVal i As Integer, ByVal d As Derived2)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Dim strlist = New String(0) {}
        Goo("""", 1, i:=1, d:=CType(b, Derived))
    End Sub
End Class"
 
            Await TestInRegularAndScriptAsync(initialMarkup, expect)
        End Function
 
        <Fact>
        Public Async Function MultipleOptions5() As Task
            Dim initialMarkup = "
Option Strict On
Class Program
    Class Base
        Public Shared Narrowing Operator CType(x As Base) As String
            Return """"
        End Operator
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Private Sub Goo(ByRef d As Derived, ByVal s As String, ByVal i As Integer)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived2, ByVal i As Integer)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByVal d As String, ByVal i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        [|Goo(s:="""", i:=1, d:=b)|]
    End Sub
End Class"
 
            Dim workspace = CreateWorkspaceFromOptions(initialMarkup, New TestParameters())
            Dim actions = Await GetCodeActionsAsync(workspace, New TestParameters())
            Assert.Equal(3, actions.Item1.Length)
 
            Dim expect_format = "
Option Strict On
Class Program
    Class Base
        Public Shared Narrowing Operator CType(x As Base) As String
            Return """"
        End Operator
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Private Sub Goo(ByRef d As Derived, ByVal s As String, ByVal i As Integer)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByRef d As Derived2, ByVal i As Integer)
    End Sub
 
    Private Sub Goo(ByVal s As String, ByVal d As String, ByVal i As Integer)
    End Sub
 
    Private Sub M()
        Dim b As Base = New Base()
        Goo(s:="""", i:=1, d:={0})
    End Sub
End Class"
 
            Await TestInRegularAndScriptAsync(initialMarkup, String.Format(expect_format, "CStr(b)"), index:=0,
                title:=String.Format(CodeFixesResources.Convert_type_to_0, "String"))
 
            Await TestInRegularAndScriptAsync(initialMarkup, String.Format(expect_format, "CType(b, Derived)"), index:=1,
                title:=String.Format(CodeFixesResources.Convert_type_to_0, "Derived"))
 
            Await TestInRegularAndScriptAsync(initialMarkup, String.Format(expect_format, "CType(b, Derived2)"), index:=2,
                title:=String.Format(CodeFixesResources.Convert_type_to_0, "Derived2"))
        End Function
 
        <Fact>
        Public Async Function MultipleOptions6() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Strict On
Class Program
    Class Base
    End Class
 
    Class Derived
        Inherits Base
    End Class
 
    Class Derived2
        Inherits Derived
    End Class
 
    Private Sub Goo(ByVal d1 As Derived)
    End Sub
 
    Private Sub Goo(ByVal d2 As Derived2)
    End Sub
 
    Private Sub M()
        [|Goo(New Base())|]
    End Sub
End Class")
        End Function
    End Class
End Namespace