File: EditAndContinue\SyntaxUtilitiesTests.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 Microsoft.CodeAnalysis.EditAndContinue
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports SyntaxUtilities = Microsoft.CodeAnalysis.VisualBasic.EditAndContinue.SyntaxUtilities
 
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.EditAndContinue
 
    Public Class SyntaxUtilitiesTests
 
        Private Shared Sub VerifySyntaxMap(oldSource As String, newSource As String)
 
            Dim oldRoot = SyntaxFactory.ParseSyntaxTree(oldSource).GetRoot()
            Dim newRoot = SyntaxFactory.ParseSyntaxTree(newSource).GetRoot()
 
            For Each oldNode In oldRoot.DescendantNodes().Where(Function(n) n.FullSpan.Length > 0)
                Dim newNode = AbstractEditAndContinueAnalyzer.FindPartner(newRoot, oldRoot, oldNode)
                Assert.True(SyntaxFactory.AreEquivalent(oldNode, newNode), $"Node 'oldNodeEnd' not equivalent to 'newNodeEnd'.")
            Next
        End Sub
 
        <Fact>
        Public Sub FindPartner1()
            Dim source1 = "
Imports System
Class C
    Shared Sub Main(args As String())
    
 
        ' sdasd
        Dim b = true
        Do
            Console.WriteLine(""hi"")
        While b = True
    End Sub
End Class
"
 
            Dim source2 = "
Imports System
Class C
    Shared Sub Main(args As String())
        Dim b = true
        Do
            Console.WriteLine(""hi"")
        While b = True
    End Sub
End Class
"
            VerifySyntaxMap(source1, source2)
        End Sub
 
        <Fact>
        Public Sub FindLeafNodeAndPartner1()
            Dim leftRoot = SyntaxFactory.ParseSyntaxTree("
Imports System;
 
Class C
    Public Sub M()
        If 0 = 1 Then
            Console.WriteLine(0)
        End If
    End Sub
End Class
").GetRoot()
            Dim leftPosition = leftRoot.DescendantNodes().OfType(Of LiteralExpressionSyntax).ElementAt(2).SpanStart '0 within Console.WriteLine(0)
            Dim rightRoot = SyntaxFactory.ParseSyntaxTree("
Imports System;
 
Class C
    Public Sub M()
        If 0 = 1 Then
            If 2 = 3 Then
                Console.WriteLine(0)
            End If
        End If
    End Sub
End Class
").GetRoot()
 
            Dim leftNode As SyntaxNode = Nothing
            Dim rightNodeOpt As SyntaxNode = Nothing
            AbstractEditAndContinueAnalyzer.FindLeafNodeAndPartner(leftRoot, leftPosition, rightRoot, leftNode, rightNodeOpt)
            Assert.Equal("0", leftNode.ToString())
            Assert.Null(rightNodeOpt)
        End Sub
 
        <Fact>
        Public Sub FindLeafNodeAndPartner2()
            ' Check that the method does Not fail even if the index of the child (4) 
            ' is greater than the count of children on the corresponding (from the upper side) node (3).
            Dim leftRoot = SyntaxFactory.ParseSyntaxTree("
Imports System;
 
Class C
    Public Sub M()
        If 0 = 1 Then
            Console.WriteLine(0)
            Console.WriteLine(1)
            Console.WriteLine(2)
            Console.WriteLine(3)
        End If
    End Sub
End Class
").GetRoot()
 
            Dim leftPosition = leftRoot.DescendantNodes().OfType(Of LiteralExpressionSyntax).ElementAt(5).SpanStart '3 within Console.WriteLine(3)
            Dim rightRoot = SyntaxFactory.ParseSyntaxTree("
Imports System;
 
Class C
    Public Sub M()
        If 0 = 1 Then
            If 2 = 3 Then
                Console.WriteLine(0)
                Console.WriteLine(1)
                Console.WriteLine(2)
                Console.WriteLine(3)
            End If
        End If
    End Sub
End Class
").GetRoot()
 
            Dim leftNode As SyntaxNode = Nothing
            Dim rightNodeOpt As SyntaxNode = Nothing
            AbstractEditAndContinueAnalyzer.FindLeafNodeAndPartner(leftRoot, leftPosition, rightRoot, leftNode, rightNodeOpt)
            Assert.Equal("3", leftNode.ToString())
            Assert.Null(rightNodeOpt)
        End Sub
    End Class
End Namespace