' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports Microsoft.CodeAnalysis.EditAndContinue Namespace Microsoft.CodeAnalysis.VisualBasic.EditAndContinue.UnitTests Public Class ActiveStatementTests Inherits RudeEditTestBase Public Sub Update_Inner() Dim src1 = " Class C Shared Sub Main() Foo(1) End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Shared Sub Main() While True Foo(2) End While End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "Foo(2)")) End Sub Public Sub Update_Leaf() Dim src1 = " Class C Shared Sub Main() Foo(1) End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Shared Sub Main() While True Foo(1) End While End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a + 1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Update_Leaf_NewCommentAtEndOfActiveStatement() Dim src1 = " Class C Shared Sub Main() Foo(1) End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Shared Sub Main() Foo(1) End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a)'comment End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Update_Inner_NewCommentAtEndOfActiveStatement() Dim src1 = " Class C Shared Sub Main() Foo(1) End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Shared Sub Main() Foo(1)' comment End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Headers() Dim src1 = " Class C Property P(a As Integer) As Integer Get Me.value = a End Get Set(value As Integer) Me.value = a End Set End Property Custom Event E As Action AddHandler(value As Action) Me.value = a End AddHandler RemoveHandler(value As Action) Me.value = a End RemoveHandler RaiseEvent() Me.value = a End RaiseEvent End Event Shared Operator &(a As C, b As C) As C Me.value = a End Operator Sub New(a As C, b As C) Me.value = a End Sub Sub F(a As C, b As C) Me.value = a End Sub Function F(a As C, b As C) As Integer Me.value = a Return 0 End Function End Class " Dim src2 = " Class C Property P(a As Integer) As Integer Get Me.value = a*1 End Get Set(value As Integer) Me.value = a*2 End Set End Property Custom Event E As Action AddHandler(value As Action) Me.value = a*3 End AddHandler RemoveHandler(value As Action) Me.value = a*4 End RemoveHandler RaiseEvent() Me.value = a*5 End RaiseEvent End Event Shared Operator &(a As C, b As C) As C Me.value = a*6 End Operator Sub New(a As C, b As C) Me.value = a*7 End Sub Sub F(a As C, b As C) Me.value = a*8 End Sub Function F(a As C, b As C) As Integer Me.value = a*8 End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*6"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*7"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*8"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*8"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*2"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*3"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*4"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*5")) End Sub #Region "Delete" Public Sub Delete_Leaf_Method() Dim src1 = " Class C Shared Sub Main() Foo(1) End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Shared Sub Main() Foo(1) End Sub End Class " ' TODO (bug 755959): better deleted active statement span Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.Delete, "Class C", FeaturesResources.Method)) End Sub Public Sub Delete_All_SourceText() Dim src1 = " Class C Shared Sub Main() Foo(1) End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = "" Dim edits = GetTopEdits(src1, src2) edits.VerifyRudeDiagnostics( Diagnostic(RudeEditKind.Delete, Nothing, FeaturesResources.Class)) End Sub Public Sub Delete_Inner() Dim src1 = " Class C Shared Sub Main() Foo(1) End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Shared Sub Main() While True End While End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteActiveStatement, "Shared Sub Main()")) End Sub Public Sub Delete_Inner_MultipleParents() Dim src1 = " Class C Shared Sub Main() Do Foo(1) Loop If True Foo(2) Else Foo(3) End If Dim x As Integer = 1 Select Case x Case 1, 2 Foo(4) Case Else Foo(5) End Select While True Foo(4) End While Do Until True Foo(7) Loop If True Then Foo(8) Else Foo(9) For i = 0 To 10 : Foo(10) : Next For Each i in {1, 2} : Foo(11) : Next Using z = new C() : Foo(12) : End Using With expr .Bar = Foo(13) End With label: Console.WriteLine(1) SyncLock Nothing : Foo(15) : End SyncLock End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Shared Sub Main() Do Loop If True Else End If Dim x As Integer = 1 Select Case x Case 1, 2 Case Else End Select While True End While Do Until True Loop If True Then Else For i = 0 To 10 : Next For Each i In {1, 2} : Next Using z = New C() : End Using With expr End With Console.WriteLine(1) SyncLock Nothing : End SyncLock End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteActiveStatement, "Do"), Diagnostic(RudeEditKind.DeleteActiveStatement, "If True"), Diagnostic(RudeEditKind.DeleteActiveStatement, "Else"), Diagnostic(RudeEditKind.DeleteActiveStatement, "Case 1, 2"), Diagnostic(RudeEditKind.DeleteActiveStatement, "Case Else"), Diagnostic(RudeEditKind.DeleteActiveStatement, "While True"), Diagnostic(RudeEditKind.DeleteActiveStatement, "Do Until True"), Diagnostic(RudeEditKind.DeleteActiveStatement, "If True Then"), Diagnostic(RudeEditKind.DeleteActiveStatement, "Else"), Diagnostic(RudeEditKind.DeleteActiveStatement, "For i = 0 To 10"), Diagnostic(RudeEditKind.DeleteActiveStatement, "For Each i In {1, 2}"), Diagnostic(RudeEditKind.DeleteActiveStatement, "Using z = New C()"), Diagnostic(RudeEditKind.DeleteActiveStatement, "With expr"), Diagnostic(RudeEditKind.DeleteActiveStatement, "Shared Sub Main()"), Diagnostic(RudeEditKind.DeleteActiveStatement, "SyncLock Nothing")) End Sub Public Sub Delete_Inner_ElseIf1() Dim src1 = ElseIf c2 Then Console.WriteLine(2) ElseIf c3 Then Console.WriteLine(3) End If End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class ]]>.Value Dim src2 = ElseIf c3 Then Console.WriteLine(3) End If End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class ]]>.Value Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteActiveStatement, "If c1 Then")) End Sub Public Sub Delete_Inner_ElseIf2() Dim src1 = ElseIf c2 Then Console.WriteLine(2) End If End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class ]]>.Value Dim src2 = End If End Sub Shared Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class ]]>.Value Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteActiveStatement, "If c1 Then")) End Sub Public Sub Delete_Leaf() Dim src1 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Delete_Leaf_InTry() Dim src1 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) Try Console.WriteLine(a) Catch End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) Try Catch End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Delete_Leaf_InTry2() Dim src1 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) Try Try Console.WriteLine(a) Catch End Try Catch End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) Try Catch End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Delete_Inner_CommentActiveStatement() Dim src1 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Sub Main() 'Foo(1) End Sub Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteActiveStatement, "Sub Main()")) End Sub Public Sub Delete_Leaf_CommentActiveStatement() Dim src1 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) Console.WriteLine(a) End Sub End Class " Dim src2 = " Class C Sub Main() Foo(1) End Sub Sub Foo(a As Integer) 'Console.WriteLine(a) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub #End Region #Region "Constructors" Public Sub Updated_Inner_Constructor() Dim src1 = " Class Program Shared Sub Main() Dim f As Foo = New Foo(5) End Sub End Class Class Foo Dim value As Integer Sub New(a As Integer) Me.value = a End Sub End Class " Dim src2 = " Class Program Shared Sub Main() Dim f As Foo = New Foo(5*2) End Sub End Class Class Foo Dim value As Integer Sub New(a As Integer) Me.value = a End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "f As Foo = New Foo(5*2)")) End Sub Public Sub Updated_Leaf_Constructor() Dim src1 = " Class Program Shared Sub Main() Dim f As Foo = New Foo(5) End Sub End Class Class Foo Dim value As Integer Sub New(a As Integer) Me.value = a End Sub End Class " Dim src2 = " Class Program Shared Sub Main() Dim f As Foo = New Foo(5) End Sub End Class Class Foo Dim value As Integer Sub New(a As Integer) Me.value = a*2 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Updated_Leaf_Constructor_Parameter() Dim src1 = " Class Program Shared Sub Main() Dim f = new Foo(5) End Sub End Class Class Foo Dim value As Integer Public Sub New(Optional a As Integer = 1) Me.value = a End Sub End Class " Dim src2 = " Class Program Shared Sub Main() Dim f = new Foo(5) End Sub End Class Class Foo Dim value As Integer Public Sub New(Optional a As Integer = 2) Me.value = a End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InitializerUpdate, "Optional a As Integer = 2", FeaturesResources.Parameter)) End Sub Public Sub Updated_Leaf_Constructor_Parameter_DefaultValue() Dim src1 = " Class Foo Dim value As Integer Shared Sub Main() Dim f = new Foo(5) End Sub Sub New(Optional a As Integer = 5) Me.value = a End Sub End Class " Dim src2 = " Class Foo Dim value As Integer Shared Sub Main() Dim f = new Foo(5) End Sub Sub New(Optional a As Integer = 42) Me.value = a End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InitializerUpdate, "Optional a As Integer = 42", FeaturesResources.Parameter)) End Sub Public Sub Updated_Leaf_ConstructorChaining1() Dim src1 = " Class B Inherits A Sub Main Dim b = new B(2, 3) End Sub Sub New(x As Integer, y As Integer) MyBase.New(x + y, x - y) End Sub End Class " Dim src2 = " Class B Inherits A Sub Main Dim b = new B(2, 3) End Sub Sub New(x As Integer, y As Integer) MyBase.New(x + y, x - y + 5) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Updated_Leaf_ConstructorChaining2() Dim src1 = " Class Test Sub Main() Dim b = new B(2, 3) End Sub End Class Class B Inherits A Sub New(x As Integer, y As Integer) MyBase.New(x + y, x - y) End Sub End Class Class A Sub New(x As Integer, y As Integer) Me.New(x, y, 0) End Sub Sub New(x As Integer, y As Integer, z As Integer) : End Sub End Class " Dim src2 = " Class Test Sub Main() Dim b = new B(2, 3) End Sub End Class Class B Inherits A Sub New(x As Integer, y As Integer) MyBase.New(x + y, x - y) End Sub End Class Class A Sub New(x As Integer, y As Integer) Me.New(5 + x, y, 0) End Sub Sub New(x As Integer, y As Integer, z As Integer) : End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub InstanceConstructorWithoutInitializer() Dim src1 = " Class C Dim a As Integer = 5 Public Sub New(a As Integer) End Sub Sub Main() Dim c = new C(3) End Sub End Class " Dim src2 = " Class C Dim a As Integer = 42 Public Sub New(a As Integer) End Sub Sub Main() Dim c = new C(3) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub InstanceConstructorWithInitializer_Internal_Update1() Dim src1 = " Class C Sub New(a As Integer) MyClass.New(True) End Sub Sub New(b As Boolean) MyBase.New(F()) End Sub Shared Function F() As Integer Return 1 End Function Sub Main() Dim c As C = New C(3) End Sub End Class " Dim src2 = " Class C Sub New(a As Integer) MyClass.New(False) End Sub Sub New(b As Boolean) MyBase.New(F()) End Sub Shared Function F() As Integer Return 1 End Function Sub Main() Dim c As C = New C(3) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "MyClass.New(False)")) End Sub Public Sub InstanceConstructorWithInitializer_Leaf_Update1() Dim src1 = " Class C Public Sub New() MyBase.New(1) End Sub Sub Main Dim c = New C() End Sub End Class " Dim src2 = " Class C Public Sub New() MyBase.New(2) End Sub Sub Main Dim c = New C() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub InstanceConstructorWithInitializer_Leaf_DeleteBaseCall() Dim src1 = " Class C Sub New() MyBase.New(2) End Sub Sub Main Dim c = New C() End Sub End Class " Dim src2 = " Class C Sub New() End Sub Sub Main Dim c = New C() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub InstanceConstructorWithInitializer_Leaf_InsertBaseCall() Dim src1 = " Class C Public Sub New End Sub Sub Main Dim c = new C() End Sub End Class " Dim src2 = " Class C Public Sub New MyBase.New(2) End Sub Sub Main Dim c = new C() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub #End Region #Region "Initializers" Public Sub Initializer_Unedited_Init() Dim src1 = " Class C Dim a As Integer = 1 Sub Main Dim b = 0 End Sub End Class " Dim src2 = " Class C Dim a As Integer = 1 Sub Main Dim b = 0 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Unedited_AsNew() Dim src1 = " Class C Dim a As New Integer Sub Main Dim b = 0 End Sub End Class " Dim src2 = " Class C Dim a As New Integer Sub Main Dim b = 0 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Unedited_SharedAsNew() Dim src1 = " Class C Dim a, b, c As New Integer Sub Main Dim b = 0 End Sub End Class " Dim src2 = " Class C Dim a, b, c As New Integer Sub Main Dim b = 0 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Unedited_PropertyInitializer() Dim src1 = " Class C Property P As Integer = 1 Sub Main Dim b = 0 End Sub End Class " Dim src2 = " Class C Property P As Integer = 1 Sub Main Dim b = 0 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Unedited_PropertyInitializerUntyped() Dim src1 = " Class C Property P = 1 Sub Main Dim b = 0 End Sub End Class " Dim src2 = " Class C Property P = 1 Sub Main Dim b = 0 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Unedited_PropertyAsNewInitializer() Dim src1 = " Class C Property P As New C() Sub Main Dim b = 0 End Sub End Class " Dim src2 = " Class C Property P As New C() Sub Main Dim b = 0 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Unedited_ArrayInitializer_Untyped() Dim src1 = " Class C Dim A(10) Sub Main Dim A(10) End Sub End Class " Dim src2 = " Class C Dim A(10) Sub Main Dim A(10) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Unedited_ArrayInitializer_Typed() Dim src1 = " Class C Dim A(10), B(2) As Integer Sub Main Dim A(10), B(2) As Integer End Sub End Class " Dim src2 = " Class C Dim A(10), B(2) As Integer Sub Main Dim A(10), B(2) As Integer End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub InstancePropertyInitializer_Update() Dim src1 = " Class C Property P As Integer = 1 Sub Main Dim c = New C() End Sub End Class " Dim src2 = " Class C Property P As Integer = 2 Sub Main Dim c = New C() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub InstancePropertyAsNewInitializer_Update() Dim src1 = " Class C Property P As New C(1) Sub Main Dim c = New C() End Sub End Class " Dim src2 = " Class C Property P As New C(2) Sub Main Dim c = New C() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub InstancePropertyInitializer_Delete() Dim src1 = " Class C Property P As Integer = 1 Sub Main Dim c = New C() End Sub End Class " Dim src2 = " Class C Property P As Integer Sub Main Dim c = New C() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Update1() Dim src1 = " Class C Dim a = 1, b = 2 Sub Main Dim c = 1, d = 2 End Sub End Class " Dim src2 = " Class C Dim a = 2, b = 2 Sub Main Dim c = 2, d = 2 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "c = 2")) End Sub Public Sub Initializer_Update2() Dim src1 = " Class C Dim a = 1, b = 2 Sub Main Dim c = 1, d = 2 End Sub End Class " Dim src2 = " Class C Dim a = 1, b = 3 Sub Main Dim c = 1, d = 3 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "d = 3")) End Sub Public Sub FieldInitializer_AsNewToInit() Dim src1 = " Class C Dim a As New Integer Sub Main Dim b As New Integer End Sub End Class " Dim src2 = " Class C Dim a = 0 Sub Main Dim b = 0 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "b = 0")) End Sub Public Sub PropertyInitializer_AsNewToInit() Dim src1 = " Class C Property P As New Integer() End Class " Dim src2 = " Class C Property P As Integer = 0 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.Insert, "As Integer", VBFeaturesResources.AsClause)) End Sub Public Sub Initializer_InitToAsNew() Dim src1 = " Class C Dim a = 0 Sub Main Dim b = 0 End Sub End Class " Dim src2 = " Class C Dim a As New Integer Sub Main Dim b As New Integer End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "b As New Integer")) End Sub Public Sub Initializer_AsNewMulti_Update1() Dim src1 = " Class C Dim a, b As New D(1) Sub Main Dim c, d As New D(1) End Sub End Class " Dim src2 = " Class C Dim a, b As New D(2) Sub Main Dim c, d As New D(2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "c")) End Sub Public Sub Initializer_AsNewMulti_Update2() Dim src1 = " Class C Dim a, b As New D(1) Sub Main Dim c, d As New D(1) End Sub End Class " Dim src2 = " Class C Dim a, b As New D(2) Sub Main Dim c, d As New D(2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "d")) End Sub Public Sub Initializer_AsNewMulti_Update3() Dim src1 = " Class C Private a As New D(1) Private e As New D(1) Sub Main Dim c As New D(1) End Sub End Class " Dim src2 = " Class C Private a, b As New D(2) Private e, f As New D(2) Sub Main Dim c, d As New D(2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "c"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "e")) End Sub Public Sub Initializer_AsNewMulti_Update4() Dim src1 = " Class C Private a, b As New D(1) Private e, f As New D(1) Sub Main Dim c, d As New D(1) End Sub End Class " Dim src2 = " Class C Private a As New D(2) Private e As New D(2) Sub Main Dim c As New D(2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "c As New D(2)"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "e As New D(2)"), Diagnostic(RudeEditKind.Delete, "a As New D(2)", FeaturesResources.Field), Diagnostic(RudeEditKind.Delete, "e As New D(2)", FeaturesResources.Field)) End Sub Public Sub Initializer_AsNewMulti_WithLambda1() Dim src1 = " Class C Private a As New D(Function() 1) End Class " Dim src2 = " Class C Private a As New D(Function() 2) End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_AsNewMulti_WithLambda2() Dim src1 = " Class C Private a As New D(1, Sub() End Sub) End Class " Dim src2 = " Class C Private a As New D(2, Sub() End Sub) End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_AsNewMulti_WithLambda3() Dim src1 = " Class C Private a, b As New D(Function() 1) End Class " Dim src2 = " Class C Private a, b As New D(Function() 2) End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Array_Update1() Dim src1 = " Class C Dim a(1), b(1) As Integer Sub Main Dim c(1), d(1) As Integer End Sub End Class " Dim src2 = " Class C Dim a(2), b(1) As Integer Sub Main Dim c(2), d(1) As Integer End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "c(2)")) End Sub Public Sub Initializer_Array_Update2() Dim src1 = " Class C Dim a(1), b(1) As Integer Sub Main Dim c(1), d(1) As Integer End Sub End Class " Dim src2 = " Class C Dim a(1), b(2) As Integer Sub Main Dim c(1), d(2) As Integer End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "d(2)")) End Sub Public Sub Initializer_Array_Update3() Dim src1 = " Class C Private a(1) Private e(1) Private f(1) Sub Main Dim c(1) End Sub End Class " Dim src2 = " Class C Private a(1,2) Private e(1,2) Private f(1,2) Sub Main Dim c(1,2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "c(1,2)"), Diagnostic(RudeEditKind.TypeUpdate, "a(1,2)", FeaturesResources.Field), Diagnostic(RudeEditKind.ActiveStatementUpdate, "e(1,2)"), Diagnostic(RudeEditKind.TypeUpdate, "e(1,2)", FeaturesResources.Field), Diagnostic(RudeEditKind.TypeUpdate, "f(1,2)", FeaturesResources.Field)) End Sub Public Sub Initializer_Array_WithLambda1() Dim src1 = " Class C Private a(Function() 1, Function() 1) End Class " Dim src2 = " Class C Private a(Function() 2, Function() 3) End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "3")) End Sub Public Sub Initializer_Array_WithLambda2() Dim src1 = " Class C Private a(1, F(Sub() End Sub)) End Class " Dim src2 = " Class C Private a(2, F(Sub() End Sub)) End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Collection1() Dim src1 = " Class C Dim A() = {1, 2, 3} End Class " Dim src2 = " Class C Dim A() = {1, 2, 3, 4} End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Initializer_Collection2() Dim src1 = " Class C Sub F Dim A() = {1, 2, 3} End Sub End Class " Dim src2 = " Class C Sub F Dim A() = {1, 2, 3, 4} End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_InsertConst1() Dim src1 = " Class C Private a As Integer = 1 End Class " Dim src2 = " Class C Private Const a As Integer = 1 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ModifiersUpdate, "Private Const a As Integer = 1", FeaturesResources.ConstField)) End Sub Public Sub LocalInitializer_InsertConst1() Dim src1 = " Class C Sub Foo Private a As Integer = 1 End Sub End Class " Dim src2 = " Class C Sub Foo Private Const a As Integer = 1 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_InsertConst2() Dim src1 = " Class C Private a As Integer = 1, b As Integer = 2 End Class " Dim src2 = " Class C Private Const a As Integer = 1, b As Integer = 2 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ModifiersUpdate, "Private Const a As Integer = 1, b As Integer = 2", FeaturesResources.ConstField)) End Sub Public Sub LocalInitializer_InsertConst2() Dim src1 = " Class C Sub Foo Dim a As Integer = 1, b As Integer = 2 End Sub End Class " Dim src2 = " Class C Sub Foo Const a As Integer = 1, b As Integer = 2 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_Delete1() Dim src1 = " Class C Dim a As Integer = 1 Dim b As Integer = 2 Sub New End Sub End Class " Dim src2 = " Class C Dim a As Integer Dim b As Integer = 2 Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub LocalInitializer_Delete1() Dim src1 = " Class C Sub F Dim a As Integer = 1 Dim b As Integer = 2 End Sub End Class " Dim src2 = " Class C Sub F Dim a As Integer Dim b As Integer = 2 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_Delete2() Dim src1 = " Class C Dim b As Integer = 1 Dim c As Integer Dim a = 1 Sub New End Sub End Class " Dim src2 = " Class C Dim b As Integer = 1 Dim c As Integer Dim a Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_Delete3() Dim src1 = " Class C Dim b As Integer = 1 Dim c As Integer Dim a = 1 Sub New End Sub End Class " Dim src2 = " Class C Dim b As Integer = 1 Dim c As Integer Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.Delete, "Class C", FeaturesResources.Field)) End Sub Public Sub FieldInitializer_Delete_AsNew_Single() Dim src1 = " Class C Dim a As New D() Sub New End Sub End Class " Dim src2 = " Class C Dim a Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_Delete_AsNew_Multi1() Dim src1 = " Class C Dim a,b,c As New D() Sub New End Sub End Class " Dim src2 = " Class C Dim a,c As New D() Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.Delete, "a, c As New D()", FeaturesResources.Field)) End Sub Public Sub FieldInitializer_Delete_AsNew_Multi2() Dim src1 = " Class C Dim a,b,c As New D() Sub New End Sub End Class " Dim src2 = " Class C Dim a,b As New D() Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.Delete, "a, b As New D()", FeaturesResources.Field)) End Sub Public Sub FieldInitializer_Delete_AsNew_WithLambda() Dim src1 = " Class C Dim a As New D(Sub() End Sub) Sub New End Sub End Class " Dim src2 = " Class C Dim a Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_Delete_Array1() Dim src1 = " Class C Dim a,b,c(1) As Integer Sub New End Sub End Class " Dim src2 = " Class C Dim a,b As Integer Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.Delete, "a,b As Integer", FeaturesResources.Field)) End Sub Public Sub FieldInitializer_Delete_Array2() Dim src1 = " Class C Dim a,b(1),c(1) As Integer Sub New End Sub End Class " Dim src2 = " Class C Dim a,b(1),c As Integer Sub New End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.TypeUpdate, "c", FeaturesResources.Field)) End Sub Public Sub FieldInitializer_Delete_StaticInstanceMix1() Dim src1 = " Class C Dim a As Integer = 1 Shared b As Integer = 1 Dim c As Integer = 1 End Class " Dim src2 = " Class C Dim a As Integer Shared b As Integer = 1 Dim c As Integer = 1 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_Delete_StaticInstanceMix2() Dim src1 = " Class C Shared c As Integer = 1 Shared a As Integer = 1 Dim b As Integer = 1 End Class " Dim src2 = " Class C Shared c As Integer = 1 Shared a As Integer Dim b As Integer = 1 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_Delete_StaticInstanceMix3() Dim src1 = " Class C Shared a As Integer = 1 Dim b As Integer = 1 End Class " Dim src2 = " Class C Shared a As Integer Dim b As Integer = 1 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub FieldInitializer_Delete_ArrayInit() Dim src1 = " Class C Dim a As Integer = 1 Shared b As Integer = 1 Dim c(1) As Integer = 1 End Class " Dim src2 = " Class C Dim a As Integer Shared b As Integer = 1 Dim c(1) As Integer End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub PropertyInitializer_Delete_StaticInstanceMix() Dim src1 = " Class C Shared Property a As Integer = 1 Property b As Integer = 1 End Class " Dim src2 = " Class C Shared Property a As Integer Property b As Integer = 1 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub PropertyFieldInitializer1() Dim src1 = " Class C Property a As Integer = 1 Dim b As Integer = 1 Property c As Integer = 1 End Class " Dim src2 = " Class C Property a As Integer Dim b As Integer = 1 Property c As Integer = 1 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub PropertyFieldInitializer2() Dim src1 = " Class C Dim a As Integer = 1 Property b As Integer = 1 Property c As Integer = 1 End Class " Dim src2 = " Class C Dim a As Integer Property b As Integer Property c As Integer = 1 End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub #End Region #Region "SyncLock" Public Sub SyncLock_Insert_Leaf() Dim src1 = " Class Test Sub Main() System.Console.Write(5) End Sub End Class " Dim src2 = " Class Test Sub Main() SyncLock lockThis System.Console.Write(5) End SyncLock End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "SyncLock lockThis", VBFeaturesResources.SyncLockBlock)) End Sub Public Sub SyncLock_Insert_Leaf4() Dim src1 = " Class Test Sub Main() SyncLock a SyncLock b SyncLock c System.Console.Write() End SyncLock End SyncLock End SyncLock End Sub End Class " Dim src2 = " Class Test Sub Main() SyncLock b SyncLock d SyncLock a SyncLock e System.Console.Write() End SyncLock End SyncLock End SyncLock End SyncLock End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "SyncLock d", VBFeaturesResources.SyncLockBlock), Diagnostic(RudeEditKind.InsertAroundActiveStatement, "SyncLock e", VBFeaturesResources.SyncLockBlock)) End Sub Public Sub SyncLock_Insert_Leaf5() Dim src1 = " Class Test Sub Main() SyncLock a SyncLock c SyncLock b SyncLock e System.Console.Write() End SyncLock End SyncLock End SyncLock End SyncLock End Sub End Class " Dim src2 = " Class Test Sub Main() SyncLock b SyncLock d SyncLock a System.Console.Write() End SyncLock End SyncLock End SyncLock End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "SyncLock d", VBFeaturesResources.SyncLockStatement)) End Sub Public Sub SyncLock_Update_Leaf() Dim src1 = " Class Test Sub Main() SyncLock lockThis System.Console.Write(5) End SyncLock End Sub End Class " Dim src2 = " Class Test Sub Main() SyncLock ""test"" System.Console.Write(5) End SyncLock End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "SyncLock ""test""", VBFeaturesResources.SyncLockStatement)) End Sub Public Sub SyncLock_Update_Leaf2() Dim src1 = " Class Test Sub Main() SyncLock lockThis System.Console.Write(5) End SyncLock System.Console.Write(5) End Sub End Class " Dim src2 = " Class Test Sub Main() SyncLock ""test"" System.Console.Write(5) End SyncLock System.Console.Write(5) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub SyncLock_Delete_Leaf() Dim src1 = " Class Test Sub Main() SyncLock lockThis System.Console.Write(5) End SyncLock End Sub End Class " Dim src2 = " Class Test Sub Main() System.Console.Write(5) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub SyncLock_Update_Lambda1() Dim src1 = " Class Test Sub Main() SyncLock F(Function(a) a) System.Console.WriteLine(1) End SyncLock End Sub End Class " Dim src2 = " Class Test Sub Main() SyncLock F(Function(a) a + 1) System.Console.WriteLine(2) End SyncLock End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub SyncLock_Update_Lambda2() Dim src1 = " Class Test Sub Main() SyncLock F(Function(a) a) System.Console.WriteLine(1) End SyncLock End Sub End Class " Dim src2 = " Class Test Sub Main() SyncLock G(Function(a) a) System.Console.WriteLine(2) End SyncLock End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "SyncLock G(Function(a) a)", VBFeaturesResources.SyncLockStatement)) End Sub #End Region #Region "ForEach" Public Sub ForEach_Reorder_Leaf1() Dim src1 = " Class Test Sub Main() For Each a In e1 For Each b In e1 For Each c In e1 System.Console.Write() Next Next Next End Sub End Class " Dim src2 = " Class Test Sub Main() For Each b In e1 For Each c In e1 For Each a In e1 System.Console.Write() Next Next Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub ForEach_Update_Leaf1() Dim src1 = " Class Test Sub Main() For Each a In e1 For Each b In e1 For Each c In e1 System.Console.Write() Next Next Next End Sub End Class " Dim src2 = " Class Test Sub Main() For Each b In e1 For Each c In e1 For Each a In e1 System.Console.Write() Next Next Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub ForEach_Update_Leaf2() Dim src1 = " Class Test Sub Main() System.Console.Write() End Sub End Class " Dim src2 = " Class Test Sub Main() For Each b In e1 For Each c In e1 For Each a In e1 System.Console.Write() Next Next Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each b In e1", VBFeaturesResources.ForEachBlock), Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each c In e1", VBFeaturesResources.ForEachBlock), Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each a In e1", VBFeaturesResources.ForEachBlock)) End Sub Public Sub ForEach_Delete_Leaf1() Dim src1 = " Class Test Sub Main() For Each a In e1 For Each b In e1 For Each c In e1 System.Console.Write() Next Next Next End Sub End Class " Dim src2 = " Class Test Sub Main() For Each a In e1 For Each b In e1 System.Console.Write() Next Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub ForEach_Delete_Leaf2() Dim src1 = " Class Test Sub Main() For Each a In e1 For Each b In e1 For Each c In e1 System.Console.Write() Next Next Next End Sub End Class " Dim src2 = " Class Test Sub Main() For Each b In e1 For Each c In e1 System.Console.Write() Next Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub ForEach_Delete_Leaf3() Dim src1 = " Class Test Sub Main() For Each a In e1 For Each b In e1 For Each c In e1 System.Console.Write() Next Next Next End Sub End Class " Dim src2 = " Class Test Sub Main() For Each a In e1 For Each c In e1 System.Console.Write() Next Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub ForEach_Lambda1() Dim src1 = " Class Test Sub Main() Dim a = Sub() System.Console.Write() End Sub a() End Sub End Class " Dim src2 = " Class Test Sub Main() For Each b In e1 For Each c In e1 Dim a = Sub() For Each a In e1 System.Console.Write() Next End Sub Next a() Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each a In e1", VBFeaturesResources.ForEachBlock), Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each b In e1", VBFeaturesResources.ForEachBlock)) End Sub Public Sub ForEach_Update_Lambda1() Dim src1 = " Class Test Sub Main() For Each a In F(Function(a) a) System.Console.Write(1) Next End Sub End Class " Dim src2 = " Class Test Sub Main() For Each a In F(Function(a) a + 1) System.Console.Write(2) Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub ForEach_Update_Lambda2() Dim src1 = " Class Test Sub Main() For Each a In F(Function(a) a) System.Console.Write(1) Next End Sub End Class " Dim src2 = " Class Test Sub Main() For Each a In G(Function(a) a) System.Console.Write(2) Next End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "For Each a In G(Function(a) a)", VBFeaturesResources.ForEachStatement)) End Sub #End Region #Region "Using" Public Sub Using_Update_Leaf1() Dim src1 = " Class Test Sub Main() Using a Using b System.Console.Write() End Using End Using End sub End Class " Dim src2 = " Class Test Sub Main() Using a Using c Using b System.Console.Write() End Using End Using End Using End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Using c", VBFeaturesResources.UsingBlock)) End Sub Public Sub Using_Lambda1() Dim src1 = " Class Test Sub Main() Using a Dim z = Function() Using b Return 1 End Using End Function End Using a() End Sub End Class " Dim src2 = " Class Test Sub Main() Using d Dim z = Function() Using c Using b Return 1 End Using End Using End Function End Using a() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Using c", VBFeaturesResources.UsingBlock)) End Sub Public Sub Using_Update_Lambda1() Dim src1 = " Class Test Sub Main() Using F(Function(a) a) System.Console.Write(1) End Using End Sub End Class " Dim src2 = " Class Test Sub Main() Using F(Function(a) a + 1) System.Console.Write(2) End Using End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Using_Update_Lambda2() Dim src1 = " Class Test Sub Main() Using F(Function(a) a) System.Console.Write(1) End Using End Sub End Class " Dim src2 = " Class Test Sub Main() Using G(Function(a) a) System.Console.Write(2) End Using End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Using G(Function(a) a)", VBFeaturesResources.UsingStatement)) End Sub #End Region #Region "With" Public Sub With_Update_Leaf1() Dim src1 = " Class Test Sub Main() With a With b System.Console.Write() End With End With End sub End Class " Dim src2 = " Class Test Sub Main() With a With c With b System.Console.Write() End With End With End With End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "With c", VBFeaturesResources.WithBlock)) End Sub Public Sub With_Lambda1() Dim src1 = " Class Test Sub Main() With a Dim z = Function() With b Return 1 End With End Function End With a() End Sub End Class " Dim src2 = " Class Test Sub Main() With d Dim z = Function() With c With b Return 1 End With End With End Function End With a() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "With c", VBFeaturesResources.WithBlock)) End Sub Public Sub With_Update_Lambda1() Dim src1 = " Class Test Sub Main() With F(Function(a) a) System.Console.Write(1) End With End Sub End Class " Dim src2 = " Class Test Sub Main() With F(Function(a) a + 1) System.Console.Write(1) End With End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub With_Update_Lambda2() Dim src1 = " Class Test Sub Main() With F(Function(a) a) System.Console.Write(1) End With End Sub End Class " Dim src2 = " Class Test Sub Main() With G(Function(a) a) System.Console.Write(1) End With End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "With G(Function(a) a)", VBFeaturesResources.WithStatement)) End Sub #End Region #Region "Try, Catch, Finally" Public Sub Try_Add_Inner() Dim src1 = " Class C Shared Sub Bar() Foo() End Sub Shared Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Shared Sub Bar() Try Foo() Catch End Try End Sub Shared Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Try", VBFeaturesResources.TryBlock)) End Sub Public Sub Try_Add_Leaf() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Console.WriteLine(1) Catch End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Try_Delete_Inner() Dim src1 = " Class C Sub Main() Try Foo() Catch End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Foo()", VBFeaturesResources.TryBlock)) End Sub Public Sub Try_Delete_Leaf() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Console.WriteLine(1) Catch End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Try_Update_Inner() Dim src1 = " Class C Sub Main() Try Foo() Catch End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Try Foo() Catch e As IOException End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Try", VBFeaturesResources.TryBlock)) End Sub Public Sub Try_Update_Inner2() Dim src1 = " Class C Sub Main() Try Foo() Catch End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Try Foo() Catch End Try Console.WriteLine(2) End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub TryFinally_Update_Inner() Dim src1 = " Class C Sub Main() Try Foo() Finally End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Try Foo() Finally End Try Console.WriteLine(2) End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Try_Update_Leaf() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Console.WriteLine(1) Catch End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Console.WriteLine(1) Catch e As IOException End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Catch_Add_Inner() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Try Catch Foo() End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Catch", VBFeaturesResources.CatchClause)) End Sub Public Sub Catch_Add_Leaf() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch Console.WriteLine(1) End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Catch", VBFeaturesResources.CatchClause)) End Sub Public Sub Catch_Delete_Inner() Dim src1 = " Class C Sub Main() Try Catch Foo() End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Foo()", VBFeaturesResources.CatchClause)) End Sub Public Sub Catch_Delete_Leaf() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch Console.WriteLine(1) End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Console.WriteLine(1)", VBFeaturesResources.CatchClause)) End Sub Public Sub Catch_Update_Inner() Dim src1 = " Class C Sub Main() Try Catch Foo() End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Try Catch e As IOException Foo() End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.CatchClause)) End Sub Public Sub Catch_Update_Leaf() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch Console.WriteLine(1) End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch e As IOException Console.WriteLine(1) End try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.CatchClause)) End Sub Public Sub CatchFilter_Update_Inner() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch e As IOException When Foo(1) Console.WriteLine(1) End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch e As IOException When Foo(2) Console.WriteLine(1) End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "Catch e As IOException When Foo(2)"), Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.CatchClause)) End Sub Public Sub CatchFilter_Update_Leaf1() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch e As IOException When Foo(1) Console.WriteLine(1) End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch e As IOException When Foo(2) Console.WriteLine(1) End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.CatchClause)) End Sub Public Sub CatchFilter_Update_Leaf2() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch e As IOException When Foo(1) Console.WriteLine(1) End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Catch e As Exception When Foo(1) Console.WriteLine(1) End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.CatchClause)) End Sub Public Sub Finally_Add_Inner() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Try Finally Foo() End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Finally", VBFeaturesResources.FinallyClause)) End Sub Public Sub Finally_Add_Leaf() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Finally Console.WriteLine(1) End Try End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Finally", VBFeaturesResources.FinallyClause)) End Sub Public Sub Finally_Delete_Inner() Dim src1 = " Class C Sub Main() Try Finally Foo() End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Foo()", VBFeaturesResources.FinallyClause)) End Sub Public Sub Finally_Delete_Leaf() Dim src1 = " Class C Sub Main() Foo() End Sub Sub Foo() Try Finally Console.WriteLine(1) End Try End Sub End Class " Dim src2 = " Class C Sub Main() Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Console.WriteLine(1)", VBFeaturesResources.FinallyClause)) End Sub Public Sub TryCatchFinally() Dim src1 = " Class C Sub Main() Try Catch e As IOException Try Try Try Foo() Catch End Try Catch Exception End Try Finally End Try End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Try Catch e As Exception Try Try Finally Try Foo() Catch End Try End Try Catch e As Exception End Try End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.CatchClause), Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Try", VBFeaturesResources.TryBlock), Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Foo()", VBFeaturesResources.TryBlock), Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Finally", VBFeaturesResources.FinallyClause)) End Sub Public Sub TryCatchFinally_Regions() Dim src1 = " Class C Sub Main() Try Catch e As IOException Try Try Try Foo() Catch End Try Catch e As Exception End Try Finally End Try End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim src2 = " Class C Sub Main() Try Catch e As IOException Try : Try : Try : Foo() : Catch : End Try : Catch e As Exception : End Try : Finally : End Try End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Try_Lambda1() Dim src1 = " Class C Function Foo(x As Integer) As Integer Return 1 End Function Sub Main() Dim f As Func(Of Integer, Integer) = Nothing Try f = Function(x) 1 + Foo(x) Catch End Try Console.Write(f(2)) End Sub End Class " Dim src2 = " Class C Function Foo(x As Integer) As Integer Return 1 End Function Sub Main() Dim f As Func(Of Integer, Integer) = Nothing f = Function(x) 1 + Foo(x) Console.Write(f(2)) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Try_Lambda2() Dim src1 = " Class C Function Foo(x As Integer) As Integer Return 1 End Function Sub Main() Dim f = Function(x) Try Return 1 + Foo(x) Catch End Try End Function Console.Write(f(2)) End Sub End Class " Dim src2 = " Class C Function Foo(x As Integer) As Integer Return 1 End Function Sub Main() Dim f = Function(x) Return 1 + Foo(x) End Function Console.Write(f(2)) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Return 1 + Foo(x)", VBFeaturesResources.TryBlock)) End Sub Public Sub Try_Query_Join1() Dim src1 = " Class C Function Foo(x As Integer) As Integer Return 1 End Function Sub Main() Try q = From x In xs Join y In ys On F() Equals G() Select 1 Catch End Try q.ToArray() End Sub End Class " Dim src2 = " Class C Function Foo(x As Integer) As Integer Return 1 End Function Sub Main() q = From x In xs Join y In ys On F() Equals G() Select 1 q.ToArray() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.RUDE_EDIT_COMPLEX_QUERY_EXPRESSION, "Join", FeaturesResources.Method)) End Sub Public Sub Try_Query_Join2() Dim src1 = " Class C Function Foo(x As Integer) As Integer Return 1 End Function Sub Main() Dim f = Sub() Try Dim q = From x In xs Join y In ys On F() Equals G() Select 1 Catch End Try q.ToArray() End Sub End Sub End Class " Dim src2 = " Class C Function Foo(x As Integer) As Integer Return 1 End Function Sub Main() Dim f = Sub() Dim q = From x In xs Join y In ys On F() Equals G() Select 1 q.ToArray() End Sub End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.RUDE_EDIT_COMPLEX_QUERY_EXPRESSION, "Join", FeaturesResources.Method)) End Sub #End Region #Region "Lambdas" Public Sub Lambdas_SingleLineToMultiLine1() Dim src1 = " Class C Sub Main() Dim f = Function(a) 1 End Sub End Class " Dim src2 = " Class C Sub Main() Dim f = Function(a) Return 1 End Function End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Lambdas_SingleLineToMultiLine2() Dim src1 = " Class C Sub Main() Dim f = Function(a) 1 End Sub End Class " Dim src2 = " Class C Sub Main() Dim f = Function(a) Return 1 End Function End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Lambdas_MultiLineToSingleLine1() Dim src1 = " Class C Sub Main() Dim f = Function(a) Return 1 End Function End Sub End Class " Dim src2 = " Class C Sub Main() Dim f = Function(a) 1 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Lambdas_MultiLineToSingleLine2() Dim src1 = " Class C Sub Main() Dim f = Function(a) Return 1 End Function End Sub End Class " Dim src2 = " Class C Sub Main() Dim f = Function(a) 1 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Lambdas_MultiLineToSingleLine3() Dim src1 = " Class C Sub Main() Dim f = Function(a) Return 1 End Function End Sub End Class " Dim src2 = " Class C Sub Main() Dim f = Function(a) 1 End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Lambdas_ActiveStatementRemoved1() Dim src1 = " Class C Sub Main() Dim f = Function(a) Return Function(b) b End Function Dim z = f(1) z(2) End Sub End Class " Dim src2 = " Class C Sub Main() Dim f = Function(b) b Dim z = f z(2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Function(b)", VBFeaturesResources.LambdaExpression)) End Sub Public Sub Lambdas_ActiveStatementRemoved2() Dim src1 = " Class C Sub Main() Dim f = Function(a) Function(b) b Dim z = f(1) z(2) End Sub End Class " Dim src2 = " Class C Sub Main() Dim f = Function(b) b Dim z = f z(2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Function(b)", VBFeaturesResources.LambdaExpression)) End Sub Public Sub Lambdas_ActiveStatementRemoved3() Dim src1 = " Class C Sub Main() Dim f = Function(a) Dim z As Func(Of Integer, Integer) F(Function(b) Return b End Function, z) Return z End Function Dim z = f(1) z(2) End Sub End Class " Dim src2 = " Class C Sub Main() Dim f = Function(b) F(b) Return 1 End Function Dim z = f z(2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "F(b)", VBFeaturesResources.LambdaExpression)) End Sub Public Sub Lambdas_ActiveStatementRemoved4() Dim src1 = " Class C Shared Sub Main() Dim f = Function(a) z(2) return Function (b) Return b End Function End Function End Sub End Class" Dim src2 = " Class C Shared Sub Main() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Shared Sub Main()", VBFeaturesResources.LambdaExpression), Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Shared Sub Main()", VBFeaturesResources.LambdaExpression)) End Sub Public Sub Queries_ActiveStatementRemoved_WhereClause() Dim src1 = " Class C Sub Main() Dim s = From a In b Where b.foo Select b.bar s.ToArray() End Sub End Class " Dim src2 = " Class C Sub Main() Dim s = From a In b Select b.bar s.ToArray() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.WhereClause)) End Sub Public Sub Queries_ActiveStatementRemoved_LetClause() Dim src1 = " Class C Sub Main() Dim s = From a In b Let x = a.foo Select x s.ToArray() End Sub End Class " Dim src2 = " Class C Sub Main() Dim s = From a In b Select x s.ToArray() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.LetClause)) End Sub Public Sub Queries_ActiveStatementRemoved_JoinClauseLeft() Dim src1 = " Class C Sub Main() Dim s = From a In b Join c In d On a.foo Equals c.bar Select a.bar s.ToArray() End Sub End Class " Dim src2 = " Class C Sub Main() Dim s = From a In b Select a.bar s.ToArray() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.JoinCondition)) End Sub Public Sub Queries_ActiveStatementRemoved_OrderBy1() Dim src1 = " Class C Sub Main() Dim s = From a In b Order By a.x, a.y Descending, a.z Ascending Select a s.ToArray() End Sub End Class " Dim src2 = " Class C Sub Main() Dim s = From a In b Select a.bar s.ToArray() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.OrderingClause)) End Sub Public Sub Queries_ActiveStatementRemoved_OrderBy2() Dim src1 = " Class C Sub Main() Dim s = From a in b Order By a.x, a.y Descending, a.z Ascending Select a s.ToArray() End Sub End Class " Dim src2 = " Class C Sub Main() Dim s = From a In b Select a.bar s.ToArray() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.OrderingClause)) End Sub Public Sub Queries_ActiveStatementRemoved_OrderBy3() Dim src1 = " Class C Sub Main() Dim s = From a in b Order By a.x, a.y Descending, a.z Ascending Select a s.ToArray() End Sub End Class " Dim src2 = " Class C Sub Main() Dim s = From a In b Select a.bar s.ToArray() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.OrderingClause)) End Sub Public Sub MisplacedActiveStatement1() Dim src1 = " Class C Function F(a As Integer) As Integer Return a Return a End Function End Class " Dim src2 = " Class C Function F(a As Integer) As Integer return a return a End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Lambdas_LeafEdits_GeneralStatement() Dim src1 = " Class C Sub Main() F(Function(a) 1) End Sub End Class " Dim src2 = " Class C Sub Main() F(Function(a) 2) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub Lambdas_LeafEdits_NestedLambda() Dim src1 = " Class C Sub Main() F(Function(b) F(Function(a) 1)) End Sub End Class " Dim src2 = " Class C Sub Main() F(Function(b) G(Function(a) 1)) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.ActiveStatementUpdate, "G(Function(a) 1 )")) End Sub #End Region #Region "State Machines" Public Sub MethodToIteratorMethod_WithActiveStatement() Dim src1 = " Imports System Imports System.Collections.Generic Class C Function F() As IEnumerable(Of Integer) Console.WriteLine(1) Return {1, 1} End Function End Class " Dim src2 = " Imports System Imports System.Collections.Generic Class C Iterator Function F() As IEnumerable(Of Integer) Console.WriteLine(1) Yield 1 End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Yield 1", VBFeaturesResources.YieldStatement)) End Sub Public Sub MethodToIteratorMethod_WithActiveStatementInLambda() Dim src1 = " Imports System Imports System.Collections.Generic Class C Function F() As IEnumerable(Of Integer) Dim a = Sub() Console.WriteLine(1) a() Return {1, 1} End Function End Class " Dim src2 = " Imports System Imports System.Collections.Generic Class C Iterator Function F() As IEnumerable(Of Integer) Dim a = Sub() Console.WriteLine(1) a() Yield 1 End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub MethodToIteratorMethod_WithoutActiveStatement() Dim src1 = " Imports System Imports System.Collections.Generic Class C Function F() As IEnumerable(Of Integer) Console.WriteLine(1) Return {1, 1} End Function End Class " Dim src2 = " Imports System Imports System.Collections.Generic Class C Iterator Function F() As IEnumerable(Of Integer) Console.WriteLine(1) Yield 1 End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub MethodToAsyncMethod_WithActiveStatement1() Dim src1 = " Imports System Imports System.Threading.Tasks Class C Function F() As Task(Of Integer) Console.WriteLine(1) Return Task.FromResult(1) End Function End Class " Dim src2 = " Imports System Imports System.Threading.Tasks Class C Async Function F() As Task(Of Integer) Console.WriteLine(1) Return Await Task.FromResult(1) End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Await", VBFeaturesResources.AwaitExpression)) End Sub Public Sub MethodToAsyncMethod_WithActiveStatement2() Dim src1 = " Imports System Imports System.Threading.Tasks Class C Function F() As Task(Of Integer) Console.WriteLine(1) Return Task.FromResult(1) End Function End Class " Dim src2 = " Imports System Imports System.Threading.Tasks Class C Async Function F() As Task(Of Integer) Console.WriteLine(1) Return 1 End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function F()")) End Sub Public Sub MethodToAsyncMethod_WithActiveStatement3() Dim src1 = " Imports System Imports System.Threading.Tasks Class C Function F() As Task(Of Integer) Console.WriteLine(1) Return Task.FromResult(1) End Function End Class " Dim src2 = " Imports System Imports System.Threading.Tasks Class C Async Function F() As Task(Of Integer) Console.WriteLine(1) Return 1 End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function F()")) End Sub Public Sub MethodToAsyncMethod_WithActiveStatementInLambda1() Dim src1 = " Imports System Imports System.Threading.Tasks Class C Function F() As Task(Of Integer) Dim a = Sub() Console.WriteLine(1) Return Task.FromResult(1) End Function End Class " Dim src2 = " Imports System Imports System.Threading.Tasks Class C Async Function F() As Task(Of Integer) Dim a = Sub() Console.WriteLine(1) Return Await Task.FromResult(1) End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub MethodToAsyncMethod_WithActiveStatementInLambda2() Dim src1 = " Imports System Imports System.Threading.Tasks Class C Function F() As Task(Of Integer) Dim a = Sub() Console.WriteLine(1) a() Return Task.FromResult(1) End Function End Class " Dim src2 = " Imports System Imports System.Threading.Tasks Class C Async Function F() As Task(Of Integer) Dim a = Sub() Console.WriteLine(1) a() Return 1 End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function F()")) End Sub Public Sub MethodToAsyncMethod_WithActiveStatementInLambda3() Dim src1 = " Imports System Imports System.Threading.Tasks Class C Sub F() Dim a = Sub() Console.WriteLine(1) a() Return End Sub End Class " Dim src2 = " Imports System Imports System.Threading.Tasks Class C Async Sub F() Dim a = Sub() Console.WriteLine(1) a() Return End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Sub F()")) End Sub Public Sub MethodToAsyncMethod_WithoutActiveStatement1() Dim src1 = " Imports System Imports System.Threading.Tasks Class C Function F() As Task(Of Integer) Console.WriteLine(1) Return Task.FromResult(1) End Function End Class " Dim src2 = " Imports System Imports System.Threading.Tasks Class C Async Function F() As Task(Of Integer) Console.WriteLine(1) Return Await Task.FromResult(1) End Function End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub Public Sub MethodToAsyncMethod_WithoutActiveStatement2() Dim src1 = " Imports System Imports System.Threading.Tasks Class C Sub F() Console.WriteLine(1) Return End Sub End Class " Dim src2 = " Imports System Imports System.Threading.Tasks Class C Async Sub F() Console.WriteLine(1) Return End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active) End Sub #End Region #Region "On Error" Public Sub MethodUpdate_OnError1() Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "label : Console.Write(1) : On Error GoTo label : End Sub : End Class" Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "label : Console.Write(2) : On Error GoTo label : End Sub : End Class" Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "On Error GoTo label", VBFeaturesResources.OnErrorStatement)) End Sub Public Sub MethodUpdate_OnError2() Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : On Error GoTo 0 : End Sub : End Class" Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : On Error GoTo 0 : End Sub : End Class" Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "On Error GoTo 0", VBFeaturesResources.OnErrorStatement)) End Sub Public Sub MethodUpdate_OnError3() Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : On Error GoTo -1 : End Sub : End Class" Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : On Error GoTo -1 : End Sub : End Class" Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "On Error GoTo -1", VBFeaturesResources.OnErrorStatement)) End Sub Public Sub MethodUpdate_OnError4() Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : On Error Resume Next : End Sub : End Class" Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : On Error Resume Next : End Sub : End Class" Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "On Error Resume Next", VBFeaturesResources.OnErrorStatement)) End Sub Public Sub MethodUpdate_Resume1() Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : Resume : End Sub : End Class" Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : Resume : End Sub : End Class" Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Resume", VBFeaturesResources.ResumeStatement)) End Sub Public Sub MethodUpdate_Resume2() Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : Resume Next : End Sub : End Class" Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : Resume Next : End Sub : End Class" Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Resume Next", VBFeaturesResources.ResumeStatement)) End Sub Public Sub MethodUpdate_Resume3() Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "label : Console.Write(1) : Resume label : End Sub : End Class" Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "label : Console.Write(2) : Resume label : End Sub : End Class" Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Resume label", VBFeaturesResources.ResumeStatement)) End Sub #End Region #Region "Unmodified Documents" Public Sub UnmodifiedDocument1() Dim src1 = " Module C Sub Main(args As String()) Try Catch As IOException Foo() Foo() End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Module" Dim src2 = " Module C Sub Main(args As String()) Try Catch e As IOException Foo() Foo() End Try End Sub Sub Foo() Console.WriteLine(1) End Sub End Module" Dim active = GetActiveStatements(src1, src2) Extensions.VerifyUnchangedDocument(src2, active) End Sub Public Sub UnmodifiedDocument_BadSpans1() Dim src1 = " Module C Const a As Integer = 1 Sub Main(args As String()) Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Module " Dim src2 = " Module C Const a As Integer = 1 Sub Main(args As String()) Foo() End Sub Sub Foo() Console.WriteLine(1) End Sub End Module" Dim active = GetActiveStatements(src1, src2) Extensions.VerifyUnchangedDocument(src2, active) End Sub #End Region Public Sub PartiallyExecutedActiveStatement() Dim src1 As String = " Class C Sub F() Console.WriteLine(1) Console.WriteLine(2) Console.WriteLine(3) Console.WriteLine(4) End Sub End Class " Dim src2 As String = " Class C Sub F() Console.WriteLine(10) Console.WriteLine(20) Console.WriteLine(30) Console.WriteLine(40) End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) active.OldSpans(0) = New ActiveStatementSpan(ActiveStatementFlags.PartiallyExecuted Or ActiveStatementFlags.LeafFrame, active.OldSpans(0).Span) active.OldSpans(1) = New ActiveStatementSpan(ActiveStatementFlags.PartiallyExecuted, active.OldSpans(1).Span) active.OldSpans(2) = New ActiveStatementSpan(ActiveStatementFlags.LeafFrame, active.OldSpans(2).Span) active.OldSpans(3) = New ActiveStatementSpan(ActiveStatementFlags.None, active.OldSpans(3).Span) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.PartiallyExecutedActiveStatementUpdate, "Console.WriteLine(10)"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Console.WriteLine(20)"), Diagnostic(RudeEditKind.ActiveStatementUpdate, "Console.WriteLine(40)")) End Sub Public Sub PartiallyExecutedActiveStatement_Delete() Dim src1 As String = " Class C Sub F() Console.WriteLine(1) End Sub End Class " Dim src2 As String = " Class C Sub F() End Sub End Class " Dim edits = GetTopEdits(src1, src2) Dim active = GetActiveStatements(src1, src2) active.OldSpans(0) = New ActiveStatementSpan(ActiveStatementFlags.PartiallyExecuted Or ActiveStatementFlags.LeafFrame, active.OldSpans(0).Span) edits.VerifyRudeDiagnostics(active, Diagnostic(RudeEditKind.PartiallyExecutedActiveStatementDelete, "Sub F()")) End Sub End Class End Namespace