File: IntroduceVariable\IntroduceVariableTests.vb
Web Access
Project: src\src\Features\VisualBasicTest\Microsoft.CodeAnalysis.VisualBasic.Features.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.Features.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.CodeRefactorings
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.IntroduceVariable
Imports Microsoft.CodeAnalysis.UnitTests
 
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.CodeRefactorings.IntroduceVariable
    <Trait(Traits.Feature, Traits.Features.CodeActionsIntroduceVariable)>
    <Trait(Traits.Feature, Traits.Features.CodeActionsExtractMethod)>
    Public Class IntroduceVariableTests
        Inherits AbstractVisualBasicCodeActionTest_NoEditor
 
        Protected Overrides Function CreateCodeRefactoringProvider(workspace As TestWorkspace, parameters As TestParameters) As CodeRefactoringProvider
            Return New IntroduceVariableCodeRefactoringProvider()
        End Function
 
        Protected Overrides Function MassageActions(actions As ImmutableArray(Of CodeAction)) As ImmutableArray(Of CodeAction)
            Return GetNestedActions(actions)
        End Function
 
        <Fact>
        Public Async Function Test1() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Console.WriteLine([|1 + 1|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Const {|Rename:Value|} As Integer = 1 + 1
        Console.WriteLine(Value)
    End Sub
End Module",
index:=2)
        End Function
 
        <Fact>
        Public Async Function Test2() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Console.WriteLine([|1 + 1|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Const {|Rename:Value|} As Integer = 1 + 1
        Console.WriteLine(Value)
    End Sub
End Module",
index:=3)
        End Function
 
        <Fact>
        Public Async Function TestInSingleLineIfExpression1() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If goo([|1 + 1|]) Then bar(1 + 1)
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Const {|Rename:V|} As Integer = 1 + 1
        If goo(V) Then bar(1 + 1)
    End Sub
End Module",
index:=2)
        End Function
 
        <Fact>
        Public Async Function TestInSingleLineIfExpression2() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If goo([|1 + 1|]) Then bar(1 + 1)
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Const {|Rename:V|} As Integer = 1 + 1
        If goo(V) Then bar(V)
    End Sub
End Module",
index:=3)
        End Function
 
        <Fact>
        Public Async Function TestInSingleLineIfStatement1() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If goo(1 + 1) Then bar([|1 + 1|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If goo(1 + 1) Then
            Const {|Rename:V|} As Integer = 1 + 1
            bar(V)
        End If
    End Sub
End Module",
index:=2)
        End Function
 
        <Fact>
        Public Async Function TestInSingleLineIfStatement2() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If goo(1 + 1) Then bar([|1 + 1|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Const {|Rename:V|} As Integer = 1 + 1
        If goo(V) Then bar(V)
    End Sub
End Module",
index:=3)
        End Function
 
        <Fact>
        Public Async Function TestNoIntroduceFieldOnMethodTypeParameter() As Task
            Dim source = "Module Program
    Sub Main(Of T)()
        Goo([|CType(2.ToString(), T)|])
    End Sub
End Module"
            Await TestExactActionSetOfferedAsync(
                source,
                expectedActionSet:={
                    String.Format(FeaturesResources.Introduce_local_for_0, "CType(2.ToString(), T)"),
                    String.Format(FeaturesResources.Introduce_local_for_all_occurrences_of_0, "CType(2.ToString(), T)")})
 
            ' Verifies "Introduce field ..." is missing
        End Function
 
        <Fact>
        Public Async Function TestNoIntroduceFieldOnMethodParameter() As Task
            Dim source = "Module Program
    Sub Main(x As Integer)
        Goo([|x.ToString()|])
    End Sub
End Module"
            Await TestExactActionSetOfferedAsync(
                source,
                expectedActionSet:={
                    String.Format(FeaturesResources.Introduce_local_for_0, "x.ToString()"),
                    String.Format(FeaturesResources.Introduce_local_for_all_occurrences_of_0, "x.ToString()")})
 
            ' Verifies "Introduce field ..." is missing
        End Function
 
        <Fact>
        Public Async Function TestNoRefactoringOnExpressionInAssignmentStatement() As Task
            Dim source = "Module Program
    Sub Main(x As Integer)
        Dim r = [|x.ToString()|]
    End Sub
End Module"
            Await TestMissingInRegularAndScriptAsync(source)
        End Function
 
        <Fact>
        Public Async Function TestLocalGeneratedInInnerBlock1() As Task
            Dim source = "Module Program
    Sub Main(x As Integer)
        If True Then
            Goo([|x.ToString()|])
        End If
    End Sub
End Module"
            Dim expected = "Module Program
    Sub Main(x As Integer)
        If True Then
            Dim {|Rename:v|} As String = x.ToString()
            Goo(v)
        End If
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact>
        Public Async Function TestLocalGeneratedInInnerBlock2() As Task
            Dim source = "Module Program
    Sub Main(x As Integer)
        If True Then
            Goo([|x.ToString()|])
        End If
    End Sub
End Module"
            Dim expected = "Module Program
    Sub Main(x As Integer)
        If True Then
            Dim {|Rename:v|} As String = x.ToString()
            Goo(v)
        End If
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact>
        Public Async Function TestLocalFromSingleExpressionInAnonType() As Task
            Dim source = "Module Program
    Sub Main(x As Integer)
        Dim f1 = New With {.SomeString = [|x.ToString()|]}
    End Sub
End Module"
            Dim expected = "Module Program
    Sub Main(x As Integer)
        Dim {|Rename:v|} As String = x.ToString()
        Dim f1 = New With {.SomeString = v}
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact>
        Public Async Function TestLocalFromMultipleExpressionsInAnonType() As Task
            Dim source = "Module Program
    Sub Main(x As Integer)
        Dim f1 = New With {.SomeString = [|x.ToString()|], .SomeOtherString = x.ToString()}
        Dim f2 = New With {.SomeString = x.ToString(), .SomeOtherString = x.ToString()}
        Dim str As String = x.ToString()
    End Sub
End Module"
            Dim expected = "Module Program
    Sub Main(x As Integer)
        Dim {|Rename:v|} As String = x.ToString()
        Dim f1 = New With {.SomeString = v, .SomeOtherString = v}
        Dim f2 = New With {.SomeString = v, .SomeOtherString = v}
        Dim str As String = v
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected, index:=1)
        End Function
 
        <Fact>
        Public Async Function TestLocalFromInferredFieldInitializer() As Task
            Dim source = "Imports System
Class C
    Sub M()
        Dim a As New With {[|Environment.TickCount|]}
    End Sub
End Class"
            Dim expected = "Imports System
Class C
    Sub M()
        Dim {|Rename:tickCount|} As Integer = Environment.TickCount
        Dim a As New With {tickCount}
    End Sub
End Class"
            Await TestInRegularAndScriptAsync(source, expected, index:=1)
        End Function
 
        <Fact>
        Public Async Function TestLocalFromYieldStatement() As Task
            Dim source = "Imports System
Class C
    Iterator Function F() As IEnumerable(Of Integer)
        Yield [|Environment.TickCount * 2|]
    End Function
End Class"
            Dim expected = "Imports System
Class C
    Iterator Function F() As IEnumerable(Of Integer)
        Dim {|Rename:v|} As Integer = Environment.TickCount * 2
        Yield v
    End Function
End Class"
            Await TestInRegularAndScriptAsync(source, expected, index:=1)
        End Function
 
        <Fact>
        Public Async Function TestLocalFromWhileStatement() As Task
            Dim source = "Class C
    Sub M()
        Dim x = 1
        While [|x = 1|]
        End While
    End Sub
End Class"
            Dim expected = "Class C
    Sub M()
        Dim x = 1
        Dim {|Rename:v|} As Boolean = x = 1
 
        While v
        End While
    End Sub
End Class"
            Await TestInRegularAndScriptAsync(source, expected, index:=1)
        End Function
 
        <Fact>
        Public Async Function TestLocalFromSingleExpressionInObjectInitializer() As Task
            Dim source = "Module Program
    Structure GooStruct
        Dim GooMember1 As String
    End Structure
    Sub Main(x As Integer)
        Dim f1 = New GooStruct With {.GooMember1 = [|""t"" + ""test""|]}
    End Sub
End Module"
            Dim expected = "Module Program
    Structure GooStruct
        Dim GooMember1 As String
    End Structure
    Sub Main(x As Integer)
        Const {|Rename:V|} As String = ""t"" + ""test""
        Dim f1 = New GooStruct With {.GooMember1 = V}
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected, index:=2)
        End Function
 
        <Fact>
        Public Async Function TestLocalFromMultipleExpressionsInObjectInitializer() As Task
            Dim code =
"
Module Program
    Structure GooStruct
        Dim GooMember1 As String
        Dim GooMember2 As String
    End Structure
    Sub Main(x As Integer)
        Dim f1 = New GooStruct With {.GooMember1 = [|""t"" + ""test""|], .GooMember2 = ""t"" + ""test""}
        Dim f2 = New GooStruct With {.GooMember1 = ""t"" + ""test"", .GooMember2 = ""t"" + ""test""}
        Dim str As String = ""t"" + ""test""
    End Sub
End Module
"
 
            Dim expected =
"
Module Program
    Structure GooStruct
        Dim GooMember1 As String
        Dim GooMember2 As String
    End Structure
    Sub Main(x As Integer)
        Const {|Rename:V|} As String = ""t"" + ""test""
        Dim f1 = New GooStruct With {.GooMember1 = V, .GooMember2 = V}
        Dim f2 = New GooStruct With {.GooMember1 = V, .GooMember2 = V}
        Dim str As String = V
    End Sub
End Module
"
            Await TestInRegularAndScriptAsync(code, expected, index:=3)
        End Function
 
        <Fact>
        Public Async Function TestFieldFromMultipleExpressionsInAnonType() As Task
            Dim source = "Class Program
    Dim q = New With {.str = [|""t"" + ""test""|]}
    Dim r = New With {.str = ""t"" + ""test""}
    Sub Goo()
        Dim x = ""t"" + ""test"" 
 End Sub
End Class"
            Dim expected = "Class Program
    Private Const {|Rename:V|} As String = ""t"" + ""test""
    Dim q = New With {.str = V}
    Dim r = New With {.str = V}
    Sub Goo()
        Dim x = V
    End Sub
End Class"
            Await TestInRegularAndScriptAsync(source, expected, index:=1)
        End Function
 
        <Fact>
        Public Async Function TestPrivateFieldFromExpressionInField() As Task
            Dim source = "Class Program
    Dim x = Goo([|2 + 2|])
End Class"
            Dim expected = "Class Program
    Private Const {|Rename:V|} As Integer = 2 + 2
    Dim x = Goo(V)
End Class"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact>
        Public Async Function TestNoLocalFromExpressionInField() As Task
            Dim source = "Class Program
    Dim x = Goo([|2 + 2|])
End Class"
            Await TestExactActionSetOfferedAsync(source, {String.Format(FeaturesResources.Introduce_constant_for_0, "2 + 2"), String.Format(FeaturesResources.Introduce_constant_for_all_occurrences_of_0, "2 + 2")})
        End Function
 
        <Fact>
        Public Async Function TestSharedModifierAbsentInGeneratedModuleFields() As Task
            Dim source = "Module Program
    Private ReadOnly y As Integer = 1
    Dim x = Goo([|2 + y|])
End Module"
            Dim expected = "Module Program
    Private ReadOnly y As Integer = 1
    Private ReadOnly {|Rename:v|} As Integer = 2 + y
    Dim x = Goo(v)
End Module"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact>
        Public Async Function TestSingleLocalInsertLocation() As Task
            Dim source = "Class Program
    Sub Method1()
        Dim v1 As String = ""TEST"" 
 Dim v2 As Integer = 2 + 2
        Goo([|2 + 2|])
    End Sub
End Class"
            Dim expected = "Class Program
    Sub Method1()
        Dim v1 As String = ""TEST"" 
 Dim v2 As Integer = 2 + 2
        Const {|Rename:V|} As Integer = 2 + 2
        Goo(V)
    End Sub
End Class"
            Await TestInRegularAndScriptAsync(source, expected, index:=2)
        End Function
 
#Region "Parameter context"
 
        <Fact>
        Public Async Function TestConstantFieldGenerationForParameterSingleOccurrence() As Task
            ' This is incorrect: the field type should be Integer, not Object
            Dim source = "Module Module1
    Sub Goo(Optional x As Integer = [|42|])
    End Sub
End Module"
            Dim expected = "Module Module1
    Private Const {|Rename:V|} As Integer = 42
 
    Sub Goo(Optional x As Integer = V)
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact>
        Public Async Function TestConstantFieldGenerationForParameterAllOccurrences() As Task
            ' This is incorrect: the field type should be Integer, not Object
            Dim source = "Module Module1
    Sub Bar(Optional x As Integer = 42)
    End Sub
    Sub Goo(Optional x As Integer = [|42|])
    End Sub
End Module"
            Dim expected = "Module Module1
    Private Const {|Rename:V|} As Integer = 42
 
    Sub Bar(Optional x As Integer = V)
    End Sub
    Sub Goo(Optional x As Integer = V)
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected, index:=1)
        End Function
 
#End Region
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540269")>
        Public Async Function TestReplaceDottedExpression() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Console.WriteLine([|Goo.someVariable|])
        Console.WriteLine(Goo.someVariable)
    End Sub
End Module
Friend Class Goo
    Shared Public someVariable As Integer
End Class",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Dim {|Rename:someVariable|} As Integer = Goo.someVariable
        Console.WriteLine(someVariable)
        Console.WriteLine(someVariable)
    End Sub
End Module
Friend Class Goo
    Shared Public someVariable As Integer
End Class",
index:=1)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540457")>
        Public Async Function TestReplaceSingleLineIfWithMultiLine1() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then Goo([|2 + 2|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then
            Const {|Rename:V|} As Integer = 2 + 2
            Goo(V)
        End If
    End Sub
End Module",
index:=2)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540457")>
        Public Async Function TestReplaceSingleLineIfWithMultiLine2() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then Goo([|1 + 1|]) Else Bar(1 + 1)
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then
            Const {|Rename:V|} As Integer = 1 + 1
            Goo(V)
        Else
            Bar(1 + 1)
        End If
    End Sub
End Module",
index:=2)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540457")>
        Public Async Function TestReplaceSingleLineIfWithMultiLine3() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then Goo([|1 + 1|]) Else Bar(1 + 1)
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Const {|Rename:V|} As Integer = 1 + 1
        If True Then Goo(V) Else Bar(V)
    End Sub
End Module",
index:=3)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540457")>
        Public Async Function TestReplaceSingleLineIfWithMultiLine4() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then Goo(1 + 1) Else Bar([|1 + 1|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then
            Goo(1 + 1)
        Else
            Const {|Rename:V|} As Integer = 1 + 1
            Bar(V)
        End If
    End Sub
End Module",
index:=2)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540468")>
        Public Async Function TestCantExtractMethodTypeParameterToFieldCount() As Task
            Await TestActionCountAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(Of T)(x As Integer)
        Goo([|CType(2.ToString(), T)|])
    End Sub
End Module",
count:=2)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540468")>
        Public Async Function TestCantExtractMethodTypeParameterToField() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(Of T)(x As Integer)
        Goo([|CType(2.ToString(), T)|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(Of T)(x As Integer)
        Dim {|Rename:t|} As T = CType(2.ToString(), T)
        Goo(t)
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540489")>
        Public Async Function TestOnlyFieldsInsideConstructorInitializer() As Task
            Await TestActionCountAsync(
"Class Goo
    Sub New()
        Me.New([|2 + 2|])
    End Sub
    Sub New(v As Integer)
    End Sub
End Class",
count:=2)
 
            Await TestInRegularAndScriptAsync(
"Class Goo
    Sub New()
        Me.New([|2 + 2|])
    End Sub
    Sub New(v As Integer)
    End Sub
End Class",
"Class Goo
    Private Const {|Rename:V|} As Integer = 2 + 2
 
    Sub New()
        Me.New(V)
    End Sub
    Sub New(v As Integer)
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540485")>
        Public Async Function TestIntroduceLocalForConstantExpression() As Task
            Await TestInRegularAndScriptAsync(
"Module Program
    Sub Main(args As String())
        Dim s As String() = New String([|10|]) {}
    End Sub
End Module",
"Module Program
    Sub Main(args As String())
        Const {|Rename:V|} As Integer = 10
        Dim s As String() = New String(V) {}
    End Sub
End Module",
index:=3)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1065689")>
        Public Async Function TestIntroduceLocalForConstantExpressionWithTrailingTrivia() As Task
            Await TestInRegularAndScriptAsync(
"
Class C
    Private Function GetX() As Object
        Return [|""c d
"" + ' comment 1
""a
b"" ' comment 2|]
    End Function
End Class
",
"
Class C
    Private Function GetX() As Object
        Const {|Rename:V|} As String = ""c d
"" + ' comment 1
""a
b""
        Return V ' comment 2
    End Function
End Class
",
index:=3)
        End Function
 
        <Fact>
        Public Async Function TestIntroduceFieldWithTrailingTrivia() As Task
            Await TestInRegularAndScriptAsync(
"
Class C
    Private Sub S()
        Dim x = 1 + [|2|] ' comment
    End Sub
End Class
",
"
Class C
    Private Const {|Rename:V|} As Integer = 2
 
    Private Sub S()
        Dim x = 1 + V ' comment
    End Sub
End Class
",
index:=1)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540487")>
        Public Async Function TestFormattingForPartialExpression() As Task
            Dim code =
"
Module Program
    Sub Main()
        Dim i = [|1 + 2|] + 3
    End Sub
End Module
"
 
            Dim expected =
"
Module Program
    Sub Main()
        Const {|Rename:V|} As Integer = 1 + 2
        Dim i = V + 3
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=2)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540491")>
        Public Async Function TestInAttribute1() As Task
            Await TestInRegularAndScriptAsync(
"<Attr([|2 + 2|])>
Class Goo
End Class
Friend Class AttrAttribute
    Inherits Attribute
End Class",
"<Attr(Goo.V)>
Class Goo
    Friend Const {|Rename:V|} As Integer = 2 + 2
End Class
Friend Class AttrAttribute
    Inherits Attribute
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540490")>
        Public Async Function TestInMyClassNew() As Task
            Await TestInRegularAndScriptAsync(
"Class Goo
    Sub New()
        MyClass.New([|42|])
    End Sub
    Sub New(x As Integer)
    End Sub
End Class",
"Class Goo
    Private Const {|Rename:X|} As Integer = 42
 
    Sub New()
        MyClass.New(X)
    End Sub
    Sub New(x As Integer)
    End Sub
End Class")
        End Function
 
        <Fact>
        Public Async Function TestSingleToMultiLineIf1() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then Goo([|2 + 2|]) Else Bar(2 + 2)
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then
            Const {|Rename:V|} As Integer = 2 + 2
            Goo(V)
        Else
            Bar(2 + 2)
        End If
    End Sub
End Module",
index:=2)
        End Function
 
        <Fact>
        Public Async Function TestSingleToMultiLineIf2() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then Goo([|2 + 2|]) Else Bar(2 + 2)
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Const {|Rename:V|} As Integer = 2 + 2
        If True Then Goo(V) Else Bar(V)
    End Sub
End Module",
index:=3)
        End Function
 
        <Fact>
        Public Async Function TestSingleToMultiLineIf3() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then Goo(2 + 2) Else Bar([|2 + 2|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then
            Goo(2 + 2)
        Else
            Const {|Rename:V|} As Integer = 2 + 2
            Bar(V)
        End If
    End Sub
End Module",
index:=2)
        End Function
 
        <Fact>
        Public Async Function TestSingleToMultiLineIf4() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If True Then Goo(2 + 2) Else Bar([|2 + 2|])
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Const {|Rename:V|} As Integer = 2 + 2
        If True Then Goo(V) Else Bar(V)
    End Sub
End Module",
index:=3)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541604")>
        Public Async Function TestAttribute() As Task
            Await TestInRegularAndScriptAsync(
"<Attr([|2 + 2|])>
Class Goo
End Class
Friend Class AttrAttribute
    Inherits System.Attribute
End Class",
"<Attr(Goo.V)>
Class Goo
    Friend Const {|Rename:V|} As Integer = 2 + 2
End Class
Friend Class AttrAttribute
    Inherits System.Attribute
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542092")>
        Public Async Function TestRangeArgumentLowerBound1() As Task
            Await TestMissingInRegularAndScriptAsync("Module M
    Sub Main()
        Dim x() As Integer
        ReDim x([|0|] To 5)
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542092")>
        Public Async Function TestRangeArgumentLowerBound2() As Task
            Dim code =
"
Module M
    Sub Main()
        Dim x() As Integer
        ReDim x(0 To 5)
        Dim a = [|0|] + 1
    End Sub
End Module
"
 
            Dim expected =
"
Module M
    Sub Main()
        Dim x() As Integer
        ReDim x(0 To 5)
        Const {|Rename:V|} As Integer = 0
        Dim a = V + 1
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=3)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543029"), WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542963"), WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542295")>
        Public Async Function TestUntypedExpression() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Dim q As Object
        If True Then q = [|Sub()
                         End Sub|]
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        Dim q As Object
 
        If True Then
            Dim {|Rename:value|} As Object = Sub()
                                  End Sub
 
            q = value
        End If
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542374")>
        Public Async Function TestFieldConstantInAttribute1() As Task
            Await TestInRegularAndScriptAsync(
"<Goo(2 + 3 + 4)>
Module Program
    Dim x = [|2 + 3|] + 4
End Module
Friend Class GooAttribute
    Inherits Attribute
    Sub New(x As Integer)
    End Sub
End Class",
"<Goo(2 + 3 + 4)>
Module Program
    Private Const {|Rename:V|} As Integer = 2 + 3
    Dim x = V + 4
End Module
Friend Class GooAttribute
    Inherits Attribute
    Sub New(x As Integer)
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542374")>
        Public Async Function TestFieldConstantInAttribute2() As Task
            Await TestAsync(
"<Goo(2 + 3 + 4)>
Module Program
    Dim x = [|2 + 3|] + 4
End Module
Friend Class GooAttribute
    Inherits Attribute
    Sub New(x As Integer)
    End Sub
End Class",
"<Goo(V + 4)>
Module Program
    Friend Const {|Rename:V|} As Integer = 2 + 3
    Dim x = V + 4
End Module
Friend Class GooAttribute
    Inherits Attribute
    Sub New(x As Integer)
    End Sub
End Class",
index:=1,
parseOptions:=Nothing)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542783")>
        Public Async Function TestMissingOnAttributeName() As Task
            Await TestMissingInRegularAndScriptAsync(
"<[|Obsolete|]>
Class C
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542811")>
        Public Async Function TestMissingOnFilterClause() As Task
            Await TestMissingInRegularAndScriptAsync(
"Module Program
    Sub Main()
        Try
        Catch ex As Exception When [|+|] 
 End Try
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542906")>
        Public Async Function TestNoIntroduceLocalInAttribute() As Task
            Dim input =
"Module Program \n <Obsolete([|""""|])> \n Sub Main(args As String()) \n End Sub \n End Module"
 
            Await TestActionCountAsync(
NewLines(input),
count:=2)
 
            Await TestInRegularAndScriptAsync(
NewLines(input),
"Module Program
    Private Const {|Rename:V|} As String = """"
 
    <Obsolete(V)> 
 Sub Main(args As String()) 
 End Sub 
 End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542947")>
        Public Async Function TestNotOnMyBase() As Task
            Await TestMissingInRegularAndScriptAsync(
"Class c1
    Public res As String
    Sub Goo()
        res = ""1"" 
 End Sub
End Class
Class c2
    Inherits c1
    Sub scen1()
        [|MyBase|].Goo()
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541966")>
        Public Async Function TestNestedMultiLineIf1() As Task
            Dim code =
"
Imports System
 
Module Program
    Sub Main()
        If True Then If True Then Console.WriteLine([|1|]) Else Console.WriteLine(2) Else Console.WriteLine(3)
    End Sub
End Module
"
 
            Dim expected =
"
Imports System
 
Module Program
    Sub Main()
        If True Then
            If True Then
                Const {|Rename:Value|} As Integer = 1
                Console.WriteLine(Value)
            Else
                Console.WriteLine(2)
            End If
        Else
            Console.WriteLine(3)
        End If
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=3)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541966")>
        Public Async Function TestNestedMultiLineIf2() As Task
            Dim code =
"
Imports System
 
Module Program
    Sub Main()
        If True Then If True Then Console.WriteLine(1) Else Console.WriteLine([|2|]) Else Console.WriteLine(3)
    End Sub
End Module
"
 
            Dim expected =
"
Imports System
 
Module Program
    Sub Main()
        If True Then
            If True Then
                Console.WriteLine(1)
            Else
                Const {|Rename:Value|} As Integer = 2
                Console.WriteLine(Value)
            End If
        Else
            Console.WriteLine(3)
        End If
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=3)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541966")>
        Public Async Function TestNestedMultiLineIf3() As Task
            Dim code =
"
Imports System
 
Module Program
    Sub Main()
        If True Then If True Then Console.WriteLine(1) Else Console.WriteLine(2) Else Console.WriteLine([|3|])
    End Sub
End Module
"
 
            Dim expected =
"
Imports System
 
Module Program
    Sub Main()
        If True Then
            If True Then Console.WriteLine(1) Else Console.WriteLine(2)
        Else
            Const {|Rename:Value|} As Integer = 3
            Console.WriteLine(Value)
        End If
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=3)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543273")>
        Public Async Function TestSingleLineLambda1() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Module Program
    Sub Main
        Dim a = Sub(x As Integer) Console.WriteLine([|x + 1|]) ' Introduce local 
    End Sub
End Module",
"Imports System
Module Program
    Sub Main
        Dim a = Sub(x As Integer) Dim {|Rename:value|} As Integer = x + 1
                    Console.WriteLine(value)
                End Sub ' Introduce local 
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543273")>
        Public Async Function TestSingleLineLambda2() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Module Program
    Sub Main
        Dim a = Sub(x As Integer) If True Then Console.WriteLine([|x + 1|]) Else Console.WriteLine()
    End Sub
End Module",
"Imports System
Module Program
    Sub Main
        Dim a = Sub(x As Integer)
                    If True Then
                        Dim {|Rename:value|} As Integer = x + 1
                        Console.WriteLine(value)
                    Else
                        Console.WriteLine()
                    End If
                End Sub
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543273")>
        Public Async Function TestSingleLineLambda3() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Module Program
    Sub Main
        Dim a = Sub(x As Integer) If True Then Console.WriteLine() Else Console.WriteLine([|x + 1|])
    End Sub
End Module",
"Imports System
Module Program
    Sub Main
        Dim a = Sub(x As Integer)
                    If True Then
                        Console.WriteLine()
                    Else
                        Dim {|Rename:value|} As Integer = x + 1
                        Console.WriteLine(value)
                    End If
                End Sub
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543273")>
        Public Async Function TestSingleLineLambda4() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Module Program
    Sub Main
        Dim a = Sub(x As Integer) If True Then Console.WriteLine([|x + 1|]) Else Console.WriteLine(x + 1)
    End Sub
End Module",
"Imports System
Module Program
    Sub Main
        Dim a = Sub(x As Integer)
                    Dim {|Rename:value|} As Integer = x + 1
                    If True Then Console.WriteLine(value) Else Console.WriteLine(value)
                End Sub
    End Sub
End Module",
index:=1)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543299")>
        Public Async Function TestSingleLineLambda5() As Task
            Await TestInRegularAndScriptAsync(
"Module Program
    Sub Main(args As String())
        Dim query = Sub(a) a = New With {Key .Key = Function(ByVal arg As Integer) As Integer
                                                        Return arg
                                                    End Function}.Key.Invoke([|a Or a|])
    End Sub
End Module",
"Module Program
    Sub Main(args As String())
        Dim query = Sub(a) Dim {|Rename:arg1|} As Object = a Or a
                        a = New With {Key .Key = Function(ByVal arg As Integer) As Integer
                                                     Return arg
                                                 End Function}.Key.Invoke(arg1)
                    End Sub
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542762")>
        Public Async Function TestNotInIntoClause() As Task
            Await TestMissingInRegularAndScriptAsync(
"Imports System.Linq
Module 
 Sub Main()
        Dim x = Aggregate y In New Integer() {1}
        Into [|Count()|]
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543289")>
        Public Async Function TestNotOnAttribute1() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Explicit Off
Module Program
    <Runtime.CompilerServices.[|Extension|]()> _
    Function Extension(ByVal x As Integer) As Integer
        Return x
    End Function
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543289")>
        Public Async Function TestNotOnAttribute1CommentsAfterLineContinuation() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Explicit Off
Module Program
    <Runtime.CompilerServices.[|Extension|]()> _ ' Test
    Function Extension(ByVal x As Integer) As Integer
        Return x
    End Function
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543289")>
        Public Async Function TestNotOnAttribute2() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Explicit Off
Module Program
    <Runtime.CompilerServices.[|Extension()|]> _
    Function Extension(ByVal x As Integer) As Integer
        Return x
    End Function
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543289")>
        Public Async Function TestNotOnAttribute2CommentsAfterLineContinuation() As Task
            Await TestMissingInRegularAndScriptAsync(
"Option Explicit Off
Module Program
    <Runtime.CompilerServices.[|Extension()|]> _ ' Test
    Function Extension(ByVal x As Integer) As Integer
        Return x
    End Function
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543461")>
        Public Async Function TestCollectionInitializer() As Task
            Await TestMissingInRegularAndScriptAsync(
"Module Program
    Sub Main(args As String())
        Dim i1 = New Integer() [|{4, 5}|]
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543573")>
        Public Async Function TestCaseInsensitiveNameConflict() As Task
            Await TestInRegularAndScriptAsync(
"Class M
    Public Function Goo()
        Return [|Me.Goo|] * 0
    End Function
End Class",
"Class M
    Public Function Goo()
        Dim {|Rename:goo1|} As Object = Me.Goo
        Return goo1 * 0
    End Function
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543590")>
        Public Async Function TestQuery1() As Task
            Await TestInRegularAndScriptAsync(
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Select [|Sample(s)|]
        Return 0
    End Function
End Class",
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Let {|Rename:v|} = Sample(s)
                      Select v
        Return 0
    End Function
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543590")>
        Public Async Function TestQueryCount1() As Task
            Await TestActionCountAsync(
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Select [|Sample(s)|]
        Return 0
    End Function
End Class",
count:=2)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543590")>
        Public Async Function TestQuery2() As Task
            Await TestInRegularAndScriptAsync(
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Where [|Sample(s)|] > 21
                      Select Sample(s)
        Return 0
    End Function
End Class",
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Let {|Rename:v|} = Sample(s) Where v > 21
                      Select Sample(s)
        Return 0
    End Function
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543590")>
        Public Async Function TestQuery3() As Task
            Await TestInRegularAndScriptAsync(
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Where [|Sample(s)|] > 21
                      Select Sample(s)
        Return 0
    End Function
End Class",
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Let {|Rename:v|} = Sample(s) Where v > 21
                      Select v
        Return 0
    End Function
End Class",
index:=1)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543590")>
        Public Async Function TestQuery4() As Task
            Await TestInRegularAndScriptAsync(
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Where Sample(s) > 21
                      Select [|Sample(s)|]
        Return 0
    End Function
End Class",
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Where Sample(s) > 21
                      Let {|Rename:v|} = Sample(s)
                      Select v
        Return 0
    End Function
End Class")
        End Function
 
        <Fact>
        Public Async Function TestQuery5() As Task
            Await TestInRegularAndScriptAsync(
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Where Sample(s) > 21
                      Select [|Sample(s)|]
        Return 0
    End Function
End Class",
"Imports System.Linq
Public Class Base
    Public Function Sample(ByVal arg As Integer) As Integer
        Dim results = From s In New Integer() {1}
                      Let {|Rename:v|} = Sample(s)
                      Where v > 21
                      Select v
        Return 0
    End Function
End Class",
index:=1)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543529")>
        <WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/909152")>
        Public Async Function TestInStatementlessConstructorParameter() As Task
            Await TestMissingInRegularAndScriptAsync("Class C1
    Sub New(Optional ByRef x As String = [|Nothing|])
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543650")>
        Public Async Function TestReferenceToAnonymousTypeProperty() As Task
            Await TestMissingInRegularAndScriptAsync(
"Class AM
    Sub M(args As String())
        Dim var1 As New AM
        Dim at1 As New With {var1, .friend = [|.var1|]}
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543698")>
        Public Async Function TestIntegerArrayExpression() As Task
            Await TestInRegularAndScriptAsync(
"Module Program
    Sub Main()
        Return [|New Integer() {}|]
    End Sub
End Module",
"Module Program
    Sub Main()
        Dim {|Rename:integers|} As Integer() = New Integer() {}
        Return integers
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544273")>
        Public Async Function TestAttributeNamedParameter() As Task
            Await TestMissingInRegularAndScriptAsync(
"Class TestAttribute
    Inherits Attribute
    Public Sub New(Optional a As Integer = 42)
    End Sub
End Class
<Test([|a|]:=5)>
Class Goo
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544265")>
        Public Async Function TestMissingOnWrittenToExpression() As Task
            Await TestMissingInRegularAndScriptAsync(
"Module Program
    Sub Main()
        Dim x = New Integer() {1, 2}
        [|x(1)|] = 2
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543824")>
        Public Async Function TestImplicitMemberAccess1() As Task
            Await TestMissingInRegularAndScriptAsync(
"Imports System
Public Class C1
    Public FieldInt As Long
    Public FieldStr As String
    Public Property PropInt As Integer
End Class
Public Class C2
    Public Shared Sub Main()
        Dim x = 1 + New C1() With {.FieldStr = [|.FieldInt|].ToString()}
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543824")>
        Public Async Function TestImplicitMemberAccess2() As Task
            Await TestMissingInRegularAndScriptAsync(
"Imports System
Public Class C1
    Public FieldInt As Long
    Public FieldStr As String
    Public Property PropInt As Integer
End Class
Public Class C2
    Public Shared Sub Main()
        Dim x = 1 + New C1() With {.FieldStr = [|.FieldInt.ToString|]()}
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543824")>
        Public Async Function TestImplicitMemberAccess3() As Task
            Await TestMissingInRegularAndScriptAsync(
"Imports System
Public Class C1
    Public FieldInt As Long
    Public FieldStr As String
    Public Property PropInt As Integer
End Class
Public Class C2
    Public Shared Sub Main()
        Dim x = 1 + New C1() With {.FieldStr = [|.FieldInt.ToString()|]}
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543824")>
        Public Async Function TestImplicitMemberAccess4() As Task
            Dim code =
"
Imports System
Public Class C1
    Public FieldInt As Long
    Public FieldStr As String
    Public Property PropInt As Integer
End Class
Public Class C2
    Public Shared Sub Main()
        Dim x = 1 + [|New C1() With {.FieldStr = .FieldInt.ToString()}|]
    End Sub
End Class
"
 
            Dim expected =
"
Imports System
Public Class C1
    Public FieldInt As Long
    Public FieldStr As String
    Public Property PropInt As Integer
End Class
Public Class C2
    Public Shared Sub Main()
        Dim {|Rename:c1|} As C1 = New C1() With {.FieldStr = .FieldInt.ToString()}
        Dim x = 1 + c1
    End Sub
End Class
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529510")>
        <Fact(Skip:="529510")>
        Public Async Function TestNoRefactoringOnAddressOfExpression() As Task
            Dim source = "Imports System
Module Module1
    Public Sub Goo(ByVal a1 As Exception)
    End Sub
    Public Sub goo(ByVal a1 As Action(Of ArgumentException))
    End Sub
    Sub Main()
        Goo(New Action(Of Exception)([|AddressOf Goo|]))
    End Sub
End Module"
            Await TestMissingInRegularAndScriptAsync(source)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529510")>
        Public Async Function TestMissingOnAddressOfInDelegate() As Task
            Await TestMissingInRegularAndScriptAsync(
"Module Module1
    Public Sub Goo(ByVal a1 As Exception)
    End Sub
    Public Sub goo(ByVal a1 As Action(Of ArgumentException))
    End Sub
    Sub Main()
        goo(New Action(Of Exception)([|AddressOf Goo|]))
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545168")>
        Public Async Function TestMissingOnXmlName() As Task
            Await TestMissingInRegularAndScriptAsync(
"Module M
    Sub Main()
        Dim x = <[|x|]/>
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545262")>
        <WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/909152")>
        Public Async Function TestInTernaryConditional() As Task
            Await TestMissingInRegularAndScriptAsync("Module Program
    Sub Main(args As String())
        Dim p As Object = Nothing
        Dim Obj1 = If(New With {.a = True}.a, p, [|Nothing|])
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545316")>
        Public Async Function TestInPropertyInitializer() As Task
            Await TestInRegularAndScriptAsync(
"Module Module1
    Property Prop As New List(Of String) From {[|""One""|], ""two""}
End Module",
"Module Module1
    Private Const {|Rename:V|} As String = ""One""
    Property Prop As New List(Of String) From {V, ""two""}
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545308")>
        Public Async Function TestDoNotMergeAmpersand() As Task
            Dim code =
"
Module Module1
    Public Sub goo(Optional ByVal arg = ([|""a""|]) & ""b"")
    End Sub
End Module
"
 
            Dim expected =
"
Module Module1
    Private Const {|Rename:V|} As String = ""a""
 
    Public Sub goo(Optional ByVal arg = V & ""b"")
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545258")>
        Public Async Function TestVenusGeneration1() As Task
            Dim code =
"
Class C
    Sub Goo()
#ExternalSource (""Goo"", 1)
        Console.WriteLine([|5|])
#End ExternalSource
   End Sub
End Class
"
 
            Dim expected =
"
Class C
    Sub Goo()
#ExternalSource (""Goo"", 1)
        Const {|Rename:V|} As Integer = 5
        Console.WriteLine(V)
#End ExternalSource
   End Sub
End Class
"
 
            Await TestExactActionSetOfferedAsync(code,
                {String.Format(FeaturesResources.Introduce_local_constant_for_0, "5"),
                String.Format(FeaturesResources.Introduce_local_constant_for_all_occurrences_of_0, "5")})
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545258")>
        Public Async Function TestVenusGeneration2() As Task
            Dim code =
"
Class C
#ExternalSource (""Goo"", 1)
    Sub Goo()
        If False Then
            Console.WriteLine([|5|])
        End If
    End Sub
#End ExternalSource
End Class
"
 
            Await TestExactActionSetOfferedAsync(code,
                                      {String.Format(FeaturesResources.Introduce_local_constant_for_0, "5"),
                                       String.Format(FeaturesResources.Introduce_local_constant_for_all_occurrences_of_0, "5")})
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545258")>
        Public Async Function TestVenusGeneration3() As Task
            Dim code =
"
Class C
    Sub Goo()
#ExternalSource (""Goo"", 1)
        If False Then
            Console.WriteLine([|5|])
        End If
#End ExternalSource
    End Sub
End Class
"
 
            Dim expected =
"
Class C
    Sub Goo()
#ExternalSource (""Goo"", 1)
        If False Then
            Const {|Rename:V|} As Integer = 5
            Console.WriteLine(V)
        End If
#End ExternalSource
    End Sub
End Class
"
 
            Await TestExactActionSetOfferedAsync(code,
                                      {String.Format(FeaturesResources.Introduce_local_constant_for_0, "5"),
                                       String.Format(FeaturesResources.Introduce_local_constant_for_all_occurrences_of_0, "5")})
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545525")>
        Public Async Function TestInvocation() As Task
            Await TestInRegularAndScriptAsync(
"Option Strict On
 
Class C
    Shared Sub Main()
        Dim x = [|New C().Goo()|](0)
    End Sub
    Function Goo() As Integer()
    End Function
End Class",
"Option Strict On
 
Class C
    Shared Sub Main()
        Dim {|Rename:integers|} As Integer() = New C().Goo()
        Dim x = integers(0)
    End Sub
    Function Goo() As Integer()
    End Function
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545829")>
        Public Async Function TestOnImplicitMemberAccess() As Task
            Await TestAsync(
"Module Program
    Sub Main()
        With """"
            Dim x = [|.GetHashCode|] Xor &H7F3E ' Introduce Local 
        End With
    End Sub
End Module",
"Module Program
    Sub Main()
        With """"
            Dim {|Rename:getHashCode|} As Integer = .GetHashCode
            Dim x = getHashCode Xor &H7F3E ' Introduce Local 
        End With
    End Sub
End Module",
parseOptions:=Nothing)
 
            Await TestAsync(
"Module Program
    Sub Main()
        With """"
            Dim x = [|.GetHashCode|] Xor &H7F3E ' Introduce Local 
        End With
    End Sub
End Module",
"Module Program
    Sub Main()
        With """"
            Dim {|Rename:getHashCode|} As Integer = .GetHashCode
            Dim x = getHashCode Xor &H7F3E ' Introduce Local 
        End With
    End Sub
End Module",
parseOptions:=GetScriptOptions())
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545702")>
        Public Async Function TestMissingInRefLocation() As Task
            Dim markup =
"
Module A
    Sub Main()
        Goo([|1|])
    End Sub
    Sub Goo(ByRef x As Long)
    End Sub
    Sub Goo(x As String)
    End Sub
End Module
"
 
            Await TestMissingInRegularAndScriptAsync(markup)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546139")>
        Public Async Function TestAcrossPartialTypes() As Task
            Await TestInRegularAndScriptAsync(
"Partial Class C
    Sub goo1(Optional x As String = [|""HELLO""|])
    End Sub
End Class
Partial Class C
    Sub goo3(Optional x As String = ""HELLO"")
    End Sub
End Class",
"Partial Class C
    Private Const {|Rename:V|} As String = ""HELLO""
 
    Sub goo1(Optional x As String = V)
    End Sub
End Class
Partial Class C
    Sub goo3(Optional x As String = V)
    End Sub
End Class",
index:=1)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544669")>
        Public Async Function TestFunctionBody1() As Task
            Await TestInRegularAndScriptAsync(
"Module Program
    Sub Main(args As String())
        Dim a1 = Function(ByVal x) [|x!goo|]
    End Sub
End Module",
"Module Program
    Sub Main(args As String())
        Dim a1 = Function(ByVal x)
                     Dim {|Rename:goo|} As Object = x!goo
                     Return goo
                 End Function
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1065689")>
        Public Async Function TestTrailingTrivia() As Task
            Dim code =
"
Module M
    Sub Main()
        Dim a = 1 +
        [|2|] ' comment
 
        End Sub
End Module
"
 
            Dim expected =
"
Module M
    Private Const {|Rename:V|} As Integer = 2
 
    Sub Main()
        Dim a = 1 +
        V ' comment
 
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546815")>
        Public Async Function TestInIfStatement() As Task
            Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main(args As String())
        If [|True|] Then
        End If
    End Sub
End Module",
"Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Private Const {|Rename:V|} As Boolean = True
 
    Sub Main(args As String())
        If V Then
        End If
    End Sub
End Module")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/830928")>
        Public Async Function TestIntroduceLocalRemovesUnnecessaryCast() As Task
            Await TestInRegularAndScriptAsync(
"Imports System.Collections.Generic
Class C
    Private Shared Sub Main(args As String())
        Dim hSet = New HashSet(Of String)()
        hSet.Add([|hSet.ToString()|])
    End Sub
End Class",
"Imports System.Collections.Generic
Class C
    Private Shared Sub Main(args As String())
        Dim hSet = New HashSet(Of String)()
        Dim {|Rename:item|} As String = hSet.ToString()
        hSet.Add(item)
    End Sub
End Class")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546691")>
        Public Async Function TestIntroLocalInSingleLineLambda() As Task
            Dim code =
"
Module Program
    Sub Main()
        Dim x = Function() [|Sub()
                           End Sub|]
    End Sub
End Module
"
 
            Dim expected =
"
Module Program
    Sub Main()
        Dim {|Rename:value|} = Sub()
                    End Sub
 
        Dim x = Function() value
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530720")>
        Public Async Function TestSingleToMultilineLambdaLineBreaks() As Task
            Dim code =
"
Module Program
    Sub Main()
        Dim a = Function(c) [|c!goo|]
    End Sub
End Module
"
 
            Dim expected =
"
Module Program
    Sub Main()
        Dim a = Function(c)
                    Dim {|Rename:goo|} As Object = c!goo
                    Return goo
                End Function
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531478")>
        Public Async Function TestEscapeKeywordsIfNeeded1() As Task
            Dim code =
"
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main()
        Take([|From x In """"|])
    End Sub
    Sub Take(x)
    End Sub
End Module
"
 
            Dim expected =
"
Imports System.Collections.Generic
Imports System.Linq
Module Program
    Sub Main()
        Dim {|Rename:x1|} As IEnumerable(Of Char) = From x In """"
        [Take](x1)
    End Sub
    Sub Take(x)
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/632327")>
        Public Async Function TestInsertAfterPreprocessor1() As Task
            Dim code =
"
Public Class Index_vbhtml
    Public Sub Execute()
#ExternalSource (""Home\Index.vbhtml"", 1)
        Dim i = [|1 + 2|] + 3
        If True Then
            Dim j = 1 + 2 + 3
        End If
#End ExternalSource
    End Sub
End Class
"
 
            Dim expected =
"
Public Class Index_vbhtml
    Public Sub Execute()
#ExternalSource (""Home\Index.vbhtml"", 1)
        Const {|Rename:V|} As Integer = 1 + 2
        Dim i = V + 3
        If True Then
            Dim j = 1 + 2 + 3
        End If
#End ExternalSource
    End Sub
End Class
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/632327")>
        Public Async Function TestInsertAfterPreprocessor2() As Task
            Dim code =
"
Public Class Index_vbhtml
    Public Sub Execute()
#ExternalSource (""Home\Index.vbhtml"", 1)
        Dim i = 1 + 2 + 3
        If True Then
            Dim j = [|1 + 2|] + 3
        End If
#End ExternalSource
    End Sub
End Class
"
 
            Dim expected =
"
Public Class Index_vbhtml
    Public Sub Execute()
#ExternalSource (""Home\Index.vbhtml"", 1)
        Dim i = 1 + 2 + 3
        If True Then
            Const {|Rename:V|} As Integer = 1 + 2
            Dim j = V + 3
        End If
#End ExternalSource
    End Sub
End Class
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/682683")>
        Public Async Function TestDoNotRemoveParenthesesIfOperatorPrecedenceWouldBeBroken() As Task
            Dim code =
"
Imports System
 
Module Program
    Sub Main()
        Console.WriteLine(5 - ([|1|] + 2))
    End Sub
End Module
"
 
            Dim expected =
"
Imports System
 
Module Program
    Sub Main()
        Const {|Rename:V|} As Integer = 1
        Console.WriteLine(5 - (V + 2))
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=2)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1022458")>
        Public Async Function TestDoNotSimplifyParentUnlessEntireInnerNodeIsSelected() As Task
            Dim code =
"
Imports System
 
Module Program
    Sub Main()
        Dim s = ""Text""
        Dim x = 42
        If ([|s.Length|].CompareTo(x) > 0 AndAlso
            s.Length.CompareTo(x) > 0) Then
        End If
    End Sub
End Module
"
 
            Dim expected =
"
Imports System
 
Module Program
    Sub Main()
        Dim s = ""Text""
        Dim x = 42
        Dim {|Rename:length|} As Integer = s.Length
 
        If (length.CompareTo(x) > 0 AndAlso
            length.CompareTo(x) > 0) Then
        End If
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=1)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/939259")>
        Public Async Function TestIntroduceLocalWithTriviaInMultiLineStatements() As Task
            Dim code =
"
Imports System
 
Module Program
    Sub Main()
        Dim x = If(True,
                   [|1|], ' TODO: Comment
                   2)
    End Sub
End Module
"
 
            Dim expected =
"
Imports System
 
Module Program
    Sub Main()
        Const {|Rename:V|} As Integer = 1
        Dim x = If(True,
                   V, ' TODO: Comment
                   2)
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=3)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/909152")>
        Public Async Function TestMissingOnNothingLiteral() As Task
            Await TestMissingInRegularAndScriptAsync(
"
Imports System
Module Program
    Sub Main(args As String())
        Main([|Nothing|])
        M(Nothing)
    End Sub
 
    Sub M(i As Integer)
    End Sub
End Module
")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1130990")>
        Public Async Function TestInParentConditionalAccessExpressions() As Task
            Dim code =
"
Imports System
Class C
    Function F(Of T)(x As T) As T
        Dim y = [|F(New C)|]?.F(New C)?.F(New C)
        Return x
    End Function
End Class
"
            Dim expected =
"
Imports System
Class C
    Function F(Of T)(x As T) As T
        Dim {|Rename:c|} As C = F(New C)
        Dim y = c?.F(New C)?.F(New C)
        Return x
    End Function
End Class
"
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1130990")>
        <WorkItem("https://github.com/dotnet/roslyn/issues/3110")>
        Public Async Function TestMissingAcrossMultipleParentConditionalAccessExpressions() As Task
            Await TestMissingInRegularAndScriptAsync(
"
Imports System
Class C
    Function F(Of T)(x As T) As T
        Dim y = [|F(New C)?.F(New C)|]?.F(New C)
        Return x
    End Function
End Class
")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1130990")>
        Public Async Function TestMissingOnInvocationExpressionInParentConditionalAccessExpressions() As Task
            Await TestMissingInRegularAndScriptAsync(
"
Imports System
Class C
    Function F(Of T)(x As T) As T
        Dim y = F(New C)?.[|F(New C)|]?.F(New C)
        Return x
    End Function
End Class
")
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1130990")>
        Public Async Function TestMissingOnMemberBindingExpressionInParentConditionalAccessExpressions() As Task
            Await TestMissingInRegularAndScriptAsync(
"
Imports System
Class C
    Sub F()
        Dim s as String = ""Text""
        Dim l = s?.[|Length|]
    End Sub
End Class
")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/2026")>
        Public Async Function TestReplaceAllFromInsideIfBlock() As Task
            Dim code =
"
Imports System
Module DataTipInfoGetterModule
    Friend Function GetInfoAsync() As DebugDataTipInfo
        Dim expression As ExpressionSyntax = Nothing
 
        Dim curr = DirectCast(expression.Parent, ExpressionSyntax)
        If curr Is expression.Parent Then
            Return New DebugDataTipInfo([|expression.Parent|].Span)
        End If
 
        Return Nothing
    End Function
End Module
 
Friend Class TextSpan
End Class
 
Friend Class ExpressionSyntax
    Public Property Parent As ExpressionSyntax
    Public Property Span As TextSpan
End Class
 
Friend Class DebugDataTipInfo
    Public Sub New(span As Object)
    End Sub
End Class
"
 
            Dim expected =
"
Imports System
Module DataTipInfoGetterModule
    Friend Function GetInfoAsync() As DebugDataTipInfo
        Dim expression As ExpressionSyntax = Nothing
        Dim {|Rename:parent|} As ExpressionSyntax = expression.Parent
 
        Dim curr = DirectCast(parent, ExpressionSyntax)
        If curr Is parent Then
            Return New DebugDataTipInfo(parent.Span)
        End If
 
        Return Nothing
    End Function
End Module
 
Friend Class TextSpan
End Class
 
Friend Class ExpressionSyntax
    Public Property Parent As ExpressionSyntax
    Public Property Span As TextSpan
End Class
 
Friend Class DebugDataTipInfo
    Public Sub New(span As Object)
    End Sub
End Class
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=1)
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1065661")>
        Public Async Function TestIntroduceVariableTextDoesntSpanLines1() As Task
            Dim code = "
Class C
    Sub M()
        Dim s = """" + [|""a
 
b
c""|]
    End Sub
End Class"
            Await TestSmartTagTextAsync(code, String.Format(FeaturesResources.Introduce_local_constant_for_0, """a b c"""), New TestParameters(index:=2))
        End Function
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1065661")>
        Public Async Function TestIntroduceVariableTextDoesntSpanLines2() As Task
            Dim code = "
Class C
    Sub M()
        Dim s = """" + [|$""a
 
b
c""|]
    End Sub
End Class"
            Await TestSmartTagTextAsync(code, String.Format(FeaturesResources.Introduce_local_for_0, "$""a b c"""))
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/976")>
        Public Async Function TestNoConstantForInterpolatedStrings1() As Task
            Dim code =
"
Module Program
    Sub Main()
        Dim args As String() = Nothing
        Console.WriteLine([|$""{DateTime.Now.ToString()}Text{args(0)}""|])
    End Sub
End Module
"
 
            Dim expected =
"
Module Program
    Sub Main()
        Dim args As String() = Nothing
        Dim {|Rename:v|} As String = $""{DateTime.Now.ToString()}Text{args(0)}""
        Console.WriteLine(v)
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/976")>
        Public Async Function TestNoConstantForInterpolatedStrings2() As Task
            Dim code =
"
Module Program
    Sub Main()
        Console.WriteLine([|$""Text{{s}}""|])
        Console.WriteLine($""Text{{s}}"")
    End Sub
End Module
"
 
            Dim expected =
"
Module Program
    Sub Main()
        Dim {|Rename:v|} As String = $""Text{{s}}""
        Console.WriteLine(v)
        Console.WriteLine(v)
    End Sub
End Module
"
 
            Await TestInRegularAndScriptAsync(code, expected, index:=1)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/3147")>
        Public Async Function TestHandleFormattableStringTargetTyping1() As Task
            Const code = "
Imports System
 
" & CodeSnippets.VBFormattableStringType & "
 
Namespace N
    Class C
        Public Sub M()
            Dim f = FormattableString.Invariant([|$""""|])
        End Sub
    End Class
End Namespace"
 
            Const expected = "
Imports System
 
" & CodeSnippets.VBFormattableStringType & "
 
Namespace N
    Class C
        Public Sub M()
            Dim {|Rename:formattable|} As FormattableString = $""""
            Dim f = FormattableString.Invariant(formattable)
        End Sub
    End Class
End Namespace"
 
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/936")>
        Public Async Function TestInAutoPropertyInitializerEqualsClause() As Task
            Dim code =
"
Imports System
Class C
    Property Name As String = [|""Roslyn""|]
End Class
"
            Dim expected =
"
Imports System
Class C
    Private Const {|Rename:V|} As String = ""Roslyn""
    Property Name As String = V
End Class
"
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/936")>
        Public Async Function TestInAutoPropertyWithCollectionInitializerAfterEqualsClause() As Task
            Dim code =
"
Imports System
Class C
    Property Grades As Integer() = [|{90, 73}|]
End Class
"
            Dim expected =
"
Imports System
Class C
    Private Shared ReadOnly {|Rename:value|} As Integer() = {90, 73}
    Property Grades As Integer() = value
End Class
"
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/936")>
        Public Async Function TestInAutoPropertyInitializerAsClause() As Task
            Dim code =
"
Imports System
Class C
        Public Property Items As New List(Of String) From {[|""M""|], ""T"", ""W""}
End Class
"
            Dim expected =
"
Imports System
Class C
    Private Const {|Rename:V|} As String = ""M""
    Public Property Items As New List(Of String) From {V, ""T"", ""W""}
End Class
"
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/936")>
        Public Async Function TestInAutoPropertyObjectCreationExpressionWithinAsClause() As Task
            Dim code =
"
Imports System
Class C
        Property Orders As New List(Of Object)([|500|])
End Class
"
            Dim expected =
"
Imports System
Class C
    Private Const {|Rename:V|} As Integer = 500
    Property Orders As New List(Of Object)(V)
End Class
"
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/11777")>
        Public Async Function TestGenerateLocalConflictingName1() As Task
            Await TestInRegularAndScriptAsync(
"class Program
    class MySpan
        public Start as integer
    end class
 
    sub Method(span as MySpan)
        dim pos as integer = span.Start
        while pos < [|span.Start|]
            dim start as integer = pos
        end while
    end sub
end class",
"class Program
    class MySpan
        public Start as integer
    end class
 
    sub Method(span as MySpan)
        dim pos as integer = span.Start
        Dim {|Rename:start1|} As Integer = span.Start
 
        while pos < start1
            dim start as integer = pos
        end while
    end sub
end class")
        End Function
 
        <Fact>
        Public Async Function TupleWithInferredName_LeaveExplicitName() As Task
            Dim code = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim t = (a, x:=[|C.y|])
    End Sub
End Class
"
            Dim expected = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim {|Rename:y1|} As Integer = C.y
        Dim t = (a, x:=y1)
    End Sub
End Class
"
            Await TestAsync(code, expected, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.Latest))
        End Function
 
        <Fact>
        Public Async Function TupleWithInferredName_InferredNameBecomesExplicit() As Task
            Dim code = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim t = (a, [|C.y|])
    End Sub
End Class
"
            Dim expected = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim {|Rename:y1|} As Integer = C.y
        Dim t = (a, y:=y1)
    End Sub
End Class
"
            Await TestAsync(code, expected, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.Latest))
        End Function
 
        <Fact>
        Public Async Function TupleWithInferredName_AllOccurrences() As Task
            Dim code = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim t = (a, [|C.y|])
        Dim t2 = (C.y, a)
    End Sub
End Class
"
            Dim expected = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim {|Rename:y1|} As Integer = C.y
        Dim t = (a, y:=y1)
        Dim t2 = (y:=y1, a)
    End Sub
End Class
"
            Await TestAsync(code, expected, index:=1,
                parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.Latest))
        End Function
 
        <Fact>
        Public Async Function TupleWithInferredName_NoDuplicateNames() As Task
            Dim code = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim t = (C.y, [|C.y|])
    End Sub
End Class
"
            Dim expected = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim {|Rename:y1|} As Integer = C.y
        Dim t = (y1, y1)
    End Sub
End Class
"
            Await TestInRegularAndScriptAsync(code, expected, index:=1)
        End Function
 
        <Fact>
        Public Async Function TupleWithInferredName_NoReservedNames() As Task
            Dim code = "
Class C
    Shared Dim rest As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim t = (a, [|C.rest|])
    End Sub
End Class
"
            Dim expected = "
Class C
    Shared Dim rest As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim {|Rename:rest1|} As Integer = C.rest
        Dim t = (a, rest1)
    End Sub
End Class
"
            Await TestAsync(code, expected, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.Latest))
        End Function
 
        <Fact>
        Public Async Function AnonymousTypeWithInferredName_LeaveExplicitName() As Task
            Dim code = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim t = New With {a, [|C.y|]}
    End Sub
End Class
"
            Dim expected = "
Class C
    Shared Dim y As Integer = 2
    Sub M()
        Dim a As Integer = 1
        Dim {|Rename:y1|} As Integer = C.y
        Dim t = New With {a, .y = y1}
    End Sub
End Class
"
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/2423")>
        Public Async Function TestPickNameBasedOnArgument1() As Task
            Await TestInRegularAndScriptAsync(
"class C
    public sub new(a as string, b as string)
        dim c = new TextSpan([|integer.Parse(a)|], integer.Parse(b))
    end sub
end class
 
structure TextSpan
    public sub new(start as integer, length as integer)
    end sub
end structure",
"class C
    public sub new(a as string, b as string)
        Dim {|Rename:start|} As Integer = integer.Parse(a)
        dim c = new TextSpan(start, integer.Parse(b))
    end sub
end class
 
structure TextSpan
    public sub new(start as integer, length as integer)
    end sub
end structure")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/2423")>
        Public Async Function TestPickNameBasedOnArgument2() As Task
            Await TestInRegularAndScriptAsync(
"class C
    public sub new(a as string, b as string)
        dim c = new TextSpan(integer.Parse(a), [|integer.Parse(b)|])
    end sub
end class
 
structure TextSpan
    public sub new(start as integer, length as integer)
    end sub
end structure",
"class C
    public sub new(a as string, b as string)
        Dim {|Rename:length|} As Integer = integer.Parse(b)
        dim c = new TextSpan(integer.Parse(a), length)
    end sub
end class
 
structure TextSpan
    public sub new(start as integer, length as integer)
    end sub
end structure")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/10123")>
        Public Async Function TestSimpleParameterName() As Task
            Dim source = "Module Program
    Sub Main(x As Integer)
        Goo([|x|])
    End Sub
End Module"
            Dim expected = "Module Program
    Sub Main(x As Integer)
        Dim {|Rename:x1|} As Integer = x
        Goo(x1)
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/10123")>
        Public Async Function TestSimpleParameterName_EmptySelection() As Task
            Dim source = "Module Program
    Sub Main(x As Integer)
        Goo([||]x)
    End Sub
End Module"
            Await TestMissingAsync(source)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/10123")>
        Public Async Function TestFieldName_QualifiedWithMe() As Task
            Dim source = "Module Program
    Dim x As Integer
    Sub Main()
        Goo([|x|])
    End Sub
End Module"
            Dim expected = "Module Program
    Dim x As Integer
    Sub Main()
        Dim {|Rename:x1|} As Integer = x
        Goo(x1)
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/10123")>
        Public Async Function TestFieldName_QualifiedWithType() As Task
            Dim source = "Module Program
    Shared Dim x As Integer
    Sub Main()
        Goo([|Program.x|])
    End Sub
End Module"
            Dim expected = "Module Program
    Shared Dim x As Integer
    Sub Main()
        Dim {|Rename:x1|} As Integer = Program.x
        Goo(x1)
    End Sub
End Module"
            Await TestInRegularAndScriptAsync(source, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/21373")>
        Public Async Function TestInAttribute() As Task
            Dim code = "
Class C
    Public Property Foo()
 
    <Example([|3 + 3|])>
    Public Property Bar()
End Class
"
            Dim expected = "
Class C
    Private Const {|Rename:V|} As Integer = 3 + 3
    Public Property Foo()
 
    <Example(V)>
    Public Property Bar()
End Class
"
            Await TestInRegularAndScriptAsync(code, expected)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28266")>
        Public Async Function TestCaretAtEndOfExpression1() As Task
            Await TestInRegularAndScriptAsync(
"class C
    sub Goo()
        Bar(1[||], 2)
    end sub
end class",
"class C
    Private Const {|Rename:V|} As Integer = 1
 
    sub Goo()
        Bar(V, 2)
    end sub
end class")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28266")>
        Public Async Function TestCaretAtEndOfExpression2() As Task
            Await TestInRegularAndScriptAsync(
"class C
    sub Goo()
        Bar(1, 2[||])
    end sub
end class",
"class C
    Private Const {|Rename:V|} As Integer = 2
 
    sub Goo()
        Bar(1, V)
    end sub
end class")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28266")>
        Public Async Function TestCaretAtEndOfExpression3() As Task
            Await TestInRegularAndScriptAsync(
"class C
    sub Goo()
        Bar(1, (2[||]))
    end sub
end class",
"class C
    Private Const {|Rename:V|} As Integer = (2)
 
    sub Goo()
        Bar(1, V)
    end sub
end class")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28266")>
        Public Async Function TestCaretAtEndOfExpression4() As Task
            Await TestInRegularAndScriptAsync(
"class C
    sub Goo()
        Bar(1, Bar(2[||]))
    end sub
end class",
"class C
    Private Const {|Rename:V|} As Integer = 2
 
    sub Goo()
        Bar(1, Bar(V))
    end sub
end class")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27949")>
        Public Async Function TestWhitespaceSpanInAssignment() As Task
            Await TestMissingAsync("
Class C
    Dim x As Integer = [| |] 0
End Class
")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28665")>
        Public Async Function TestWhitespaceSpanInAttribute() As Task
            Await TestMissingAsync("
Class C
    <Example( [| |] )>
    Public Function Foo()
    End Function
End Class
")
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/30207")>
        Public Async Function TestExplicitRecursiveInstanceMemberAccess_ForAllOccurrences() As Task
            Dim source = "
Class C
    Dim c As C
    Sub Foo()
        Dim y = [|c|].c.c
    End Sub
End Class
"
            Dim expected = "
Class C
    Dim c As C
    Sub Foo()
        Dim {|Rename:c1|} As C = c
        Dim y = c1.c.c
    End Sub
End Class
"
            Await TestInRegularAndScriptAsync(source, expected, index:=1)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/30207")>
        Public Async Function TestImplicitRecursiveInstanceMemberAccess_ForAllOccurrences() As Task
            Dim source = "
Class C
    Dim c As C
    Sub Foo()
        Dim y = [|Me.c|].c.c
    End Sub
End Class
"
            Dim expected = "
Class C
    Dim c As C
    Sub Foo()
        Dim {|Rename:c1|} As C = Me.c
        Dim y = c1.c.c
    End Sub
End Class
"
            Await TestInRegularAndScriptAsync(source, expected, index:=1)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/30207")>
        Public Async Function TestExpressionOfUndeclaredType() As Task
            Dim source = "
Class C
    Sub Test        
        Dim array As A() = [|A|].Bar()
    End Sub
End Class"
            Await TestMissingAsync(source)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/47772")>
        Public Async Function DoNotIntroduceConstantForConstant_Local() As Task
            Dim source = "
Class C
    Sub Test
        Const i As Integer = [|10|]
    End Sub
End Class
"
            Await TestMissingAsync(source)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/47772")>
        Public Async Function DoNotIntroduceConstantForConstant_Member() As Task
            Dim source = "
Class C
    Const i As Integer = [|10|]
End Class
"
            Await TestMissingAsync(source)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/47772")>
        Public Async Function DoNotIntroduceConstantForConstant_Parentheses() As Task
            Dim source = "
Class C
    Const i As Integer = ([|10|])
End Class
"
            Await TestMissingAsync(source)
        End Function
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/47772")>
        Public Async Function DoNotIntroduceConstantForConstant_NotForSubExpression() As Task
            Dim source = "
Class C
    Sub Test
        Const i As Integer = [|10|] + 10
    End Sub
End Class
"
            Dim expected = "
Class C
    Sub Test
        Const {|Rename:V|} As Integer = 10
        Const i As Integer = V + 10
    End Sub
End Class
"
            Await TestInRegularAndScriptAsync(source, expected, index:=2)
        End Function
    End Class
End Namespace